1

我正在尝试通过 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.0​​0 毫秒,最小静默期:4.01 毫秒。MinimalModbus 调试模式。关闭端口 COM8 MinimalModbus 调试模式。仪器响应:'\x01\x03\x02\x00ȹÒ' (01 03 02 00 C8 B9 D2)(7 字节),往返时间:47.0 ms。读取超时:1000.0 毫秒。

4

2 回答 2

0

写作成功。

来自 minimummodbus 的 write_register 具有“无”返回值。

因此检查 return_flag 会导致失败。

于 2021-03-22T15:06:40.383 回答
0

不允许通过 Modbus 协议在 Carel 控制器 uC Compact 和 uC2 SE Process 中写入参数,因为它们没有被配置。为此,只能使用 Carel 协议。

于 2021-05-12T07:44:55.350 回答