pymodbus连接有时不响应?

问题描述 投票:2回答:2

我使用“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
> ...

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

我该怎么做才能解决这个问题,我想监控这个设备。谢谢。

python modbus pymodbus
2个回答
0
投票

是的,我在pymodbus代码中一直看到这个。我怀疑在执行连续读取时实现有问题。我做的很简单,是在稍微延迟后重试失败的读取。而这通常会让它再次运作。或者,尝试关闭并重新连接客户端并重新尝试读取。还要尝试增加睡眠时间。让我知道事情的后续!


0
投票

您可以尝试打印临时变量中的内容,以防它不是ReadHoldingRegisterResponse的实例 - 它可能有所帮助。

我有时在设备没有发送响应时使用的是:

Modbus Error: [Input/Output] No Response received from the remote unit
© www.soinside.com 2019 - 2024. All rights reserved.