Соединение pymodbus иногда не отвечает? - PullRequest
2 голосов
/ 28 марта 2019

Я использую lib "pymodbus" для подключения устройств PLC. В устройстве используется Modbus RTU через TCP, что устройства будут возвращать температуру и влажность окружающей среды.

список адресов карт

  • 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 голосов
/ 01 апреля 2019

Вы можете попробовать напечатать то, что у вас есть в вашей временной переменной, если это не экземпляр ReadHoldingRegisterResponse - это может помочь.

То, что я иногда использую, когда устройство еще не отправило ответ,:

Modbus Error: [Input/Output] No Response received from the remote unit
0 голосов
/ 29 марта 2019

Да, я все время вижу это в своем коде pymodbus.Я подозреваю, что что-то не так с реализацией при выполнении последовательных операций чтения.То, что я делаю, довольно просто, чтобы повторить неудачное чтение после небольшой задержки.И это обычно заставляет его работать снова.Или попробуйте закрыть и заново подключить клиент и повторить попытку чтения.Также попробуйте увеличить время сна.Дайте мне знать, как это происходит!

...