Проблемы с подключением нескольких серверов через pymodbus Modbus TCP

У меня проблема, когда я пытаюсь прочитать регистры хранения с помощью pymodbus и raspberry pi. Кажется, я не могу подключить два сервера / подчиненных одновременно (один или другой будет работать, но вместе я не могу читать регистры с обоих устройств). Эти проблемы с подключением, кажется, вызывают сообщения об ошибках. Может, мне здесь чего-то простого не хватает?

from pymodbus.client.sync import ModbusTcpClient
import time

#modbus connection to 1st device

client1 = ModbusTcpClient('172.168.1.9', port=659)
connection1 = client1.connect()

#modbus connection to 2nd device

client2 = ModbusTcpClient('192.168.1.8', port=502)
connection2 = client2.connect()

#read registers of 1st device
request1 = client1.read_holding_registers(11,27) #covert to float
result1 = request1.registers
print (result1)
close = client1.close()

#read registers of 2nd device
request2 = client2.read_holding_registers(1,7) #covert to float
result2 = request2.registers
print (result2)
close = client2.close()

Вот сообщение об ошибке, которое я получаю:

[18, 57, 48, 984, 31, 1, 16, 1, 2, 78, 87, 4, 4, 0, 299, 65517, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Traceback (most recent call last):
  File "gpsonce", line 20, in <module>
    request2 = client2.read_holding_registers(1,7) #covert to float
  File "/usr/local/lib/python2.7/dist-packages/pymodbus-1.2.0-py2.7.egg/pymodbus/client/common.py", line 109, in read_holding_registers
    return self.execute(request)
  File "/usr/local/lib/python2.7/dist-packages/pymodbus-1.2.0-py2.7.egg/pymodbus/client/sync.py", line 82, in execute
    raise ConnectionException("Failed to connect[%s]" % (self.__str__()))
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[192.168.1.8:502]

Я знаю, что если я разбиваю их на разные сценарии и запускаю их одновременно, возникнет та же ошибка.

Независимо, как и при выполнении по одному, они выполняются правильно, без ошибок.

Мы очень ценим помощь каждого!


person Emerson    schedule 31.01.2016    source источник
comment
Если у вас установлена ​​программа telnet, вы можете проверить, работают ли вообще соединения с telnet 192.168.1.8 502   -  person J.J. Hakala    schedule 31.01.2016
comment
Спасибо за комментарий. Я убедился, что оба соединения работают независимо. Проблема, кажется, возникает, когда я пытаюсь подключиться к обоим одновременно.   -  person Emerson    schedule 31.01.2016
comment
Я пробовал ваш код с двумя серверами pymodbus на localhost (ПК с Windows 7). Один сервер прослушивает порт 5020, другой - 5021. Вы уверены, что правильно настроили порты? Потому что в примерах pymodbus настроенный порт по умолчанию на сервере - 5020, а на клиенте - 502.   -  person wewa    schedule 01.02.2016
comment
Я использую два ардуино в качестве рабов. Я изменил порты на значения по умолчанию, которые вы указали на серверах (arduinos) и в моем мастер-коде. Все еще не работает! Сводит меня с ума. Опять же, благодарю всех за вклад.   -  person Emerson    schedule 01.02.2016
comment
192.168.1.8 - это случайно IP вашего локального хоста? В таком случае попробуйте запустить свой код с повышенными привилегиями (например, sudo). 502 - это зарезервированный порт, и для доступа к нему требуются права администратора. en.wikipedia.org/wiki/, если не пытаться использовать порт ›1024 при запущенном сервере Modbus и посмотрите, поможет ли это.   -  person Sanju    schedule 04.02.2016
comment
192.168.1.3 - это IP-адрес локального хоста (Modbus TCP Master). Я был за пределами страны и попробую ваше предложение sudo, когда у меня будет возможность, и доложу. Спасибо, Санджу.   -  person Emerson    schedule 22.02.2016


Ответы (1)


Я попробовал здесь на ПК без проблем. У вас есть ненужные строки:

connection1 = client1.connect()
..
connection2 = client2.connect()

Может в этом проблема ...

person zappfinger    schedule 25.07.2017