PyModbus写入Modbus寄存器初始化日志读取无效果问题排查
问题排查与修复方案
核心问题分析
对比设备文档的Modbus请求帧和你的代码,发现两个关键不匹配:
- 功能码错误:文档示例使用的是写多个寄存器(功能码0x10),而你用的
write_register是写单个寄存器(功能码0x06),设备仅响应0x10的请求来触发日志读取。 - 寄存器地址错误:文档帧里的起始寄存器地址是十六进制
7E F4(十进制32496),你代码里写的address=100是文档标注的寄存器内部编号,并非Modbus协议层面的实际地址。
正确代码实现
from pymodbus.client.sync import ModbusSerialClient as ModbusClient # 串口参数保持和设备一致 client = ModbusClient( method='rtu', port='COM10', # 替换成你的实际串口端口 stopbits=2, bytesize=8, parity='N', baudrate=19200, timeout=3 # 添加超时,避免无限等待 ) try: client.connect() # 使用写多个寄存器功能(对应功能码0x10),写入地址32496,值为1 response = client.write_registers(address=32496, values=[1], unit=1) if not response.isError(): print("日志读取初始化请求发送成功") else: print(f"请求错误: {response}") finally: client.close()
额外说明
- 代码添加了
timeout参数,避免因无响应导致程序挂起;用try-finally确保串口连接正常关闭。 - 发送成功后,需根据设备文档要求,继续使用读寄存器功能拉取日志内容。
内容的提问来源于stack exchange,提问作者Etozeigor
相关产品推荐
相关产品推荐

