我正在尝试通过 Modbus 协议与空气冷水机的 uC2 SE 控制器进行通信。串行 RS485 到 USB 端口 COM 与控制器连接,我能够读取寄存器,但无法使用 write_register 函数更改它们的值。我也试过用测试仪。exe和Modscan64软件,结果是一样的,只能读不能写。我在这里介绍了这段代码正在运行并且可以检查调试响应。提前谢谢你的帮助!
更改温度设定值
COOLING_SETPOINT_REG = 41
尝试: print(instrument.read_register(COOLING_SETPOINT_REG,1)) 除了 IOError: print('Failed to read from instrument')
NEW_TEMPERATURE = 20.1
return_flag = instrument.write_register(COOLING_SETPOINT_REG, NEW_TEMPERATURE,1,functioncode = 6, signed = True) # 寄存器编号、值、存储的小数位数 output_flag = 'SUCCESS' if return_flag else 'FAILURE' print('writing single register status ' + output_flag + '\n' )
尝试: print(instrument.read_register(COOLING_SETPOINT_REG,1)) 除了 IOError: print('Failed to read from instrument')
Respuesta调试:
MinimalModbus 调试模式。将写入仪器(预期返回 7 个字节):'\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) 最小 Modbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:334030.00 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2)(7 字节),往返时间:62.0 ms。读取超时:1000.0 毫秒。
20.0 MinimalModbus 调试模式。将写入仪器(预期返回 8 个字节):'\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54) MinimalModbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:47.00 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x06\x00)\x00É\x98T' (01 06 00 29 00 C9 98 54)(8 字节),往返时间:47.0 ms。读取超时:1000.0 毫秒。
写入单个寄存器状态失败
MinimalModbus 调试模式。将写入仪器(预期返回 7 个字节):'\x01\x03\x00)\x00\x01UÂ' (01 03 00 29 00 01 55 C2) 最小 Modbus 调试模式。打开端口 COM8 MinimalModbus 调试模式。清除端口 COM8 MinimalModbus 调试模式的串行缓冲区。写之前不需要睡觉。自上次读取以来的时间:46.00 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2)(7 字节),往返时间:47.0 ms。读取超时:1000.0 毫秒。