После чтения регистров хранения с Pymodbus соединение прерывается в Raspberry Pi

import pymodbus     
from pymodbus.client.sync import ModbusTcpClient   
from time import sleep
connection = False
data = {}
while True:
        if not connection:
            client = ModbusTcpClient(host="176.219.185.16", port="502")
            connection = client.connect()
            if connection:
                print("connected")
        if connection == True:
            if not client.is_socket_open():
                print("connection is broken")    
                connection = False
        data = client.read_holding_registers(address=150,count=10,unit=1).registers
        sleep(2)
        print(data)

Этот код работает в Windows. Но я запускаю его в клиенте raspberry pi. Is_socket_open возвращает false после чтения регистров хранения. Как я могу это решить? Или в чем проблема? Я не заставляю клиента закрываться.


person Adem Berk Aksoy    schedule 08.03.2021    source источник
comment
Самый простой обходной путь - ввести небольшой интервал ожидания между транзакциями (скажем, 50–100 мс), и это должно решить проблему с pymodbus 2.5.0. См. Комментарий github.com/riptideio/pymodbus/issues/612#issuecomment-796758646.   -  person Sanju    schedule 11.03.2021


Ответы (1)


После нескольких тестов я могу воспроизвести проблему на машине с Windows, и это связано с версией pymodbus. Соединение закрывается с pymodbus версии 2.5.0, поэтому просто переходите на версию 2.4.0, пока проблема не будет решена.

Чтобы решить вашу проблему, проверьте версию на обеих машинах с pip3 show pymodbus

Удалите pymodbus с малины с помощью pip3 uninstall pymodbus

Установите старую версию с pip3 install pymodbus==2.4.0


Я обнаружил, что на github существует проблема с сообщением об этой ошибке


Создатель выпустил исправление для этого

Установите обновленную версию 2.5.1rc1

pip3 install --upgrade pymodbus
person Carlo Zanocco    schedule 11.03.2021
comment
Самый простой обходной путь - ввести небольшой интервал ожидания между транзакциями (скажем, 50–100 мс), и это должно решить проблему с pymodbus 2.5.0. См. Комментарий github.com/riptideio/pymodbus/issues/612#issuecomment-796758646 < / а>. - person Sanju; 11.03.2021
comment
используйте pymodbus==2.5.1rc1 и посмотрите, решит ли это проблему. - person Sanju; 11.03.2021