我使用"pymodbus“库来连接PLC设备。该设备采用Modbus RTU over TCP,该设备将返回环境的温度和湿度。
映射地址列表
我执行了一次,以获得价值,它可以成功。但我使用的while循环有时会出错。我也不知道原因。
代码:
from time import sleep
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.framer.rtu_framer import ModbusRtuFramer
from pymodbus.register_read_message import ReadHoldingRegistersResponse
client = ModbusTcpClient(host='192.168.1.1', port=5000, framer=ModbusRtuFramer)
client.connect()
while True:
rr = client.read_holding_registers(0, 2, unit=1)
if isinstance(rr, ReadHoldingRegistersResponse):
temp = rr.registers
print(temp)
else:
print('error')
sleep(1)
client.close()
输出:
> ...
> [189, 444]
> [189, 443]
> [189]
> error
> error
> ...
我们可以看到,有时结果是正常得到的,有时结果是不完整的,有时结果是不可用的。
我应该怎么做才能解决这个问题,我想监控这个设备。谢谢。
发布于 2019-03-29 07:20:40
是的,我一直在我的pymodbus代码中看到这一点。我怀疑在执行成功的读取时,实现可能有问题。我所做的很简单,就是在稍微延迟后重试失败的读取。而这通常会让它再次工作。或者,尝试关闭并重新连接客户端,然后重新尝试读取。也试着增加睡眠时间。让我知道它进行得怎么样!
发布于 2019-04-01 21:44:20
您可以尝试打印temp变量中的内容,以防它不是ReadHoldingRegisterResponse的实例-它可能会有所帮助。
当设备还没有发送响应时,我有时使用的是:
Modbus Error: [Input/Output] No Response received from the remote unit
https://stackoverflow.com/questions/55400524
复制相似问题