You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MinimalModbus调试响应存储为变量并获取原始响应数据?

问题:如何将MinimalModbus调试信息中的仪器响应数据正确存储到变量?

我的Python代码

import serial
import minimalmodbus
import time

instrument = minimalmodbus.Instrument('COM8', 127, debug=True)
instrument.serial.port
instrument.serial.baudrate = 19200
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.bytesize = 8
instrument.serial.stopbits = 1
instrument.mode = minimalmodbus.MODE_RTU
instrument.serial.timeout = 0.300

b = instrument._communicate(b'\x7F\x66\x01\x00\x02\x00\x00\x00\x01\x00', 64)

print(b)

instrument.serial.close()

终端输出

MinimalModbus debug mode. Create serial port COM8
MinimalModbus debug mode. Will write to instrument (expecting 64 bytes back): 7F 66 01 00 02 00 00 00 01 00 (10 bytes)
MinimalModbus debug mode. Clearing serial buffers for port COM8
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1222683890.00 ms, minimum silent period: 2.01 ms.
MinimalModbus debug mode. Response from instrument: 7F 66 01 00 4C 00 00 00 44 54 01 00 20 00 44 54 CB 74 14 43 AD B2 15 43 00 00 FA 44 00 94 9E 41 88 6D 08 00 88 6D 08 00 00 00 00 00 1A AB C3 40 45 A5 70 42 54 60 99 45 CF C4 03 00 00 00 00 00 (64 bytes), roundtrip time: 0.0 ms. Timeout for 
reading: 300.0 ms.

b'\x7ff\x01\x00L\x00\x00\x00DT\x01\x00 \x00DT\xcbt\x14C\xad\xb2\x15C\x00\x00\xfaD\x00\x94\x9eA\x88m\x08\x00\x88m\x08\x00\x00\x00\x00\x00\x1a\xab\xc3@E\xa5pBT`\x99E\xcf\xc4\x03\x00\x00\x00\x00\x00'

解答

首先明确:调试信息里的响应和变量b的内容完全一致,只是显示格式不同。调试日志用十六进制字节展示,而print(b)会把ASCII可打印字符直接输出(比如0x66显示为'f'、0x4C显示为'L'),非可打印字节用转义序列表示(比如0xCB显示为'\xcb')。

如果需要把b转换成和调试日志一致的格式存储或验证,可参考以下方法:

1. 转换为十六进制字符串格式(与调试日志匹配)

用列表推导式遍历字节串,将每个字节格式化为两位大写十六进制字符,再用空格拼接:

# 将字节串b转换为调试日志风格的十六进制字符串
hex_response = ' '.join(f'{byte:02X}' for byte in b)
print(hex_response)
# 可以将hex_response存入变量长期保存

执行后输出的就是和调试日志里完全相同的7F 66 01 00 4C ...格式内容。

2. 直接验证字节内容一致性

如果要确认单个字节是否和调试日志一致,可直接通过索引访问:

# 调试日志第一个字节是0x7F,对应b[0]
print(hex(b[0]))  # 输出0x7f
# 调试日志第二个字节是0x66,对应b[1]
print(hex(b[1]))  # 输出0x66

逐个对比即可确认数据是否一致,排除干扰疑虑。

3. 若确实怀疑数据干扰

如果转换后的十六进制字符串和调试日志不一致,再排查串口通信问题:

  • 检查线缆连接是否牢固、有无电磁干扰
  • 确认串口参数(波特率、奇偶校验、停止位等)与仪器完全匹配
  • 尝试调整串口超时时间或增加通信前的延迟

内容的提问来源于stack exchange,提问作者Isaac Zaiek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:46:18