我正在尝试通过Modbus协议与空气-水冷水机组的uC2 SE控制器进行通信。控制器与串行RS485转USB口COM相连,我可以读取寄存器,但不能使用write_register函数更改它们的值。我也尝试过tester。exe和Modscan64软件,结果是一样的,只能读不能写。我已经在这里介绍了正在运行的代码,并且可以检查调试响应。提前感谢您的帮助!
更改温度设置点
COOLING_SETPOINT_REG = 41
尝试:除IOError: print之外的print(instrument.read_register(COOLING_SETPOINT_REG,1)) (‘无法从仪器读取’)
NEW_TEMPERATURE = 20.1
return_flag = instrument.write_register(COOLING_SETPOINT_REG,NEW_TEMPERATURE,1,return_flag = 6,signed = True) #寄存器编号,值,存储的十进制数output_flag =‘成功’,如果return_flag否则‘失败’打印(‘写入单个寄存器状态’+ output_flag + '\n‘)
尝试:除IOError: print之外的print(instrument.read_register(COOLING_SETPOINT_REG,1)) (‘无法从仪器读取’)
Respuesta debug:
MinimalModbus调试模式。将写入仪器(应返回7个字节):‘\x01\x03\x00)\x00\x01U’(01 03 00 29 00 01 55 C2) MinimalModbus调试模式。正在打开端口COM8 MinimalModbus调试模式。清除端口COM8 MinimalModbus调试模式的串行缓冲区。写入前不需要休眠。自上次读取以来的时间: 334030.00 ms,最小静默时间: 4.01 ms。MinimalModbus调试模式。正在关闭端口COM8 MinimalModbus调试模式。来自仪器的响应:‘\x01\x03\x02\x00’(01 03 02 00 C8 B9 D2) (7字节),往返时间: 62.0 ms。读取超时时间: 1000.0 ms。
20.0 MinimalModbus调试模式。将写入仪器(期望返回8个字节):‘\x01\x06\x00)\x00é\x98T’(01 06 00 29 00 C9 98 54) MinimalModbus调试模式。正在打开端口COM8 MinimalModbus调试模式。清除端口COM8 MinimalModbus调试模式的串行缓冲区。写入前不需要休眠。自上次读取以来的时间: 47.00 ms,最小静默时间: 4.01 ms。MinimalModbus调试模式。正在关闭端口COM8 MinimalModbus调试模式。仪器响应:‘\x01\x06\x00)\x00é\x98T’(01 06 00 29 00 C9 98 54) (8字节),往返时间: 47.0毫秒。读取超时时间: 1000.0 ms。
写入单个寄存器状态失败
MinimalModbus调试模式。将写入仪器(应返回7个字节):‘\x01\x03\x00)\x00\x01U’(01 03 00 29 00 01 55 C2) MinimalModbus调试模式。正在打开端口COM8 MinimalModbus调试模式。清除端口COM8 MinimalModbus调试模式的串行缓冲区。写入前不需要休眠。自上次读取以来的时间: 46.00 ms,最小静默时间: 4.01 ms。MinimalModbus调试模式。正在关闭端口COM8 MinimalModbus调试模式。来自仪器的响应:‘\x01\x03\x02\x00’(01 03 02 00 C8 B9 D2) (7字节),往返时间: 47.0 ms。读取超时时间: 1000.0 ms。
发布于 2021-05-12 15:44:55
不允许通过Modbus协议在Carel控制器uC压缩和uC2 SE过程中写入参数,因为它们没有针对该协议进行配置。为此,只能使用Carel协议。
发布于 2021-03-22 23:06:40
写作是成功的。
来自minimalmodbus的write_register具有"None“返回值。
因此,检查return_flag会导致失败。
https://stackoverflow.com/questions/66742777
复制相似问题