我正在使用“pymodbus”库来连接 PLC 设备。该设备使用基于 TCP 的 Modbus RTU,设备将返回环境的温度和湿度。
地图地址列表
- 0001:温度
- 0002:湿度
我执行一次以获得价值,它可以成功。但我使用 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
> ...
我们可以看到,有时结果正常,有时结果不完整,有时结果不可用。
我应该怎么做才能解决这个问题,我想监控这个设备。谢谢你。