Pymodbus не удалось подключиться к ведомому устройству ПЛК и ведущему устройству Raspberry Pi

Я пытаюсь использовать Raspberry Pi 3 Model B для чтения значений из ПЛК Allen Bradly. Я использую протокол Pymodbus Modbus TCP для связи между ними.

Когда я запускаю тестовый клиент, я получаю следующую ошибку:

pi@raspberrypi:/var $ python test1.py
Got here 1
Traceback (most recent call last):
File "test1.py", line 12, in <module>
request = client.read_holding_registers(0,1)
File "build/bdist.linux-armv7l/egg/pymodbus/client/common.py", line 109, in read_holding_registers
File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 82, in execute
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[10.0.0.237:502]

Вот код для тестового клиента:

from pymodbus.client.sync import ModbusTcpClient

#modbus connection 
client = ModbusTcpClient(host='10.0.0.237')
connection = client.connect()

#test print
print "Got here 1"

#read register
request = client.read_holding_registers(0,1)

print request

client.close()

Я могу просто пропинговать IP-адрес Ethernet-карты ПЛК (10.0.0.237). (ПЛК включен и отображается в RSLinx и RSLogix5000.) Но когда я пытаюсь проверить порт 502 (который использует Modbus) с помощью команды:

telnet 10.0.0.237 502

Я получаю сообщение об ошибке:

Trying 10.0.0.237...
telnet: Unable to connect to remote host: Connection refused

Исследования, которые я провел, сказали мне проверить, открыт ли этот порт, но это для ПК, я не знаю, как вы проверяете / настраиваете порты на ПЛК.

Кроме того, мне интересно, не в том ли проблема, что я пытаюсь просто использовать Modbus для переключения между Raspbery Pi и PLC. Я нашел шлюзы прософт, которые делают интерфейс. Но я не мог найти никакой информации о том, были ли это просто еще одним вариантом или они были необходимы.

Я новичок в ПЛК и сетях, поэтому буду благодарен за любую помощь.


person LongCount    schedule 17.08.2016    source источник


Ответы (1)


Я сам не использовал Аллена Брэдли, но я использую множество других ПЛК, и все они работают более или менее одинаково.

Вы не открываете порт, как в маршрутизаторе, а активируете соединение Modbus в ПЛК. Чаще всего это настройка, но если Аллен Брэдли использует собственную проприетарную шинную систему (например, Saia S-Bus), вам иногда нужен определенный функциональный блок для включения Modbus.

Например, быстрый поиск в Google показал, что в micrologix 1400 есть флажок для включения Modbus tcp при некоторых настройках канала.

Проверьте в ПЛК, есть ли настройка для включения ведущего / клиента Modbus (ведущий = последовательный или RTU, клиент = TCP, но иногда производители не различают их).

Чтобы протестировать Raspberry Pi, вы можете загрузить симулятор сервера Modbus и опросить его.

Чтобы протестировать ПЛК с чем-то другим, кроме Pi, вы можете загрузить клиент / мастер Modbus. Я лично использую QmodMaster, который является бесплатным и хорошо работает в целях тестирования (поиск в Google).

Кроме того, убедитесь, что при опросе используется правильный код функции. Это может сбивать с толку, поскольку регистры временного хранения (с адресом 4xxxx) используют код функции 03. Регистры ввода (с адресом 3xxxx) используют код функции 04.

Шлюз Modbus используется для включения последовательной шины Modbus (RTU или ASCII) для связи через TCP.

Если оба устройства имеют протокол Modbus TCP, то в шлюзе нет необходимости. Если, например, у вас есть устройство, которое имеет только проводную шину Modbus (RS232 / 485/422), вы можете подключить его к шлюзу, а шлюз - к TCP.

person Gvs    schedule 26.08.2016