pymodbus连接有时不响应?

时间:2019-03-28 14:48:23

标签: python modbus pymodbus

我正在使用“ pymodbus” lib连接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
> ...

我们可以看到有时结果是正常获得的,有时结果是不完整的,有时结果是不可用的。

要监视此设备,我该怎么办才能解决此问题。谢谢。

2 个答案:

答案 0 :(得分:0)

是的,我一直在pymodbus代码中看到这一点。我怀疑执行成功读取时实现有问题。我所做的很简单,是稍稍延迟后重试失败的读取。这通常会使它再次工作。或者,尝试关闭并重新连接客户端,然后重新尝试读取。也尝试增加睡眠时间。让我知道怎么回事!

答案 1 :(得分:0)

如果不是ReadHoldingRegisterResponse的实例,则可以尝试打印temp变量中的内容-可能会有帮助。

当设备尚未发送响应时,有时我会遇到的是:

Modbus Error: [Input/Output] No Response received from the remote unit