树莓派通过Modbus RTU读取施耐德PM5100电能表数据报错求助
树莓派通过Modbus RTU读取施耐德PM5100电能表kWh数据报错求助
我的目标是在树莓派上运行Python脚本,通过Modbus RTU协议读取施耐德PM5100电能表的kWh数据。此前我用相同方案成功读取过SDM220 Modbus电表,但调试PM5100始终无法成功。
已确认配置信息
- PM5100参数:
- 从站地址:1
- 波特率:19200
- 校验位:无
- 接线情况:已确认正常,GND和屏蔽层未连接,D1、D0引脚通过RS485转USB连接器对接。
测试代码
#!/usr/bin/python3 import minimalmodbus mb = minimalmodbus.Instrument("/dev/ttyUSB0", 1) mb.serial.baudrate = 19200 mb.debug = True val = mb.read_float(3212,3,4) print(val)
报错日志
运行后抛出InvalidResponseError错误,日志如下:
MinimalModbus debug mode. Will write to instrument (expecting 13 bytes back): 01 03 0C 8C 00 04 86 B2 (8 bytes) MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0 MinimalModbus debug mode. No sleep required before write. Time since previous read: 439371243.54 ms, minimum silent period: 2.01 ms. MinimalModbus debug mode. Response from instrument: 7F 7E DE CE F7 F3 13 (7 bytes), roundtrip time: 0.1 ms. Timeout for reading: 50.0 ms. Traceback (most recent call last): File "1.py", line 9, in <module> val = mb.read_float(3212,3,4) File "/usr/local/lib/python3.7/dist-packages/minimalmodbus.py", line 717, in read_float payloadformat=_Payloadformat.FLOAT, File "/usr/local/lib/python3.7/dist-packages/minimalmodbus.py", line 1245, in _generic_command payload_from_slave = self._perform_command(functioncode, payload_to_slave) File "/usr/local/lib/python3.7/dist-packages/minimalmodbus.py", line 1330, in _perform_command response, self.address, self.mode, functioncode File "/usr/local/lib/python3.7/dist-packages/minimalmodbus.py", line 1867, in _extract_payload raise InvalidResponseError(text) minimalmodbus.InvalidResponseError: Checksum error in rtu mode: 'ó\x13' instead of '\\>' . The response is: '\x7f~ÞÎ÷ó\x13' (plain response: '\x7f~ÞÎ÷ó\x13')
已完成排查
- 不确定使用的寄存器地址是否正确,但更换其他寄存器地址也无法正常读取
- 排除库不兼容问题,minimalmodbus库此前读取SDM220电表完全正常
- 尝试改用
read_register方法、调整相关参数也没有效果
恳请有相关调试经验的朋友提供思路、建议或解决方案,非常感谢!
参考资料
内容的提问来源于stack exchange,提问作者Ewoud Adams
相关产品推荐
相关产品推荐

