Modbus RTU через TCP (шлюз Modbus TCP) - PullRequest
0 голосов
/ 30 мая 2018

Можно ли построить Ethernet-шлюз Modbus-RTU, используя Linux-коробку или Arduino?

У меня есть slave-устройства plc, соединенные вместе с помощью Modbus RTU, и я хочу подключить одного из них по TCP с моим компьютером в качестве главного.

Интересно, могу ли я использовать linux box (rasbery pi/ raspbian) подключен к маршрутизатору, как преобразователь modbus-to-tcp, подключив порт usb к моему локальному ip на каком-то порту, так как один plc будет подключен в modbus rtu к usb-порту linux box.Команда piping будет выглядеть примерно так:

nc -l 5626 > /dev/ttyUSB0 < /dev/ttyUSB0

Моя цель - подключить компьютер (подключенный к сети с помощью linux) к этому plc через linux box с помощью modbus.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Да, вы можете использовать linux box с портом Ethernet.

Это не просто 'nc', не так ли.

Прежде всего, вам нужно знать, поддерживает ли ваш ПЛК ModbusTCP или Modbus RTU через TCP.

bcos оба формата не одинаковы, они не являются взаимозаменяемыми.

как только вы это выясните, вам нужно написать TCP-клиент для подключения к подчиненнымпоскольку они запускают серверы.

Если они еще не поддерживают протокол Modbus TCP, вам также необходимо написать серверы TCP.

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

Если это коммерческое устройство, вам нужно посмотреть на настройку, на которой оно будет работать.

Надеюсь, это поможет

0 голосов
/ 31 января 2019

Я не совсем уверен, каковы ваши требования, но вы можете взглянуть на следующую библиотеку.Это библиотека Modbus TCP-> RTU, которую я могу использовать.

https://github.com/3cky/mbusd

С наилучшими пожеланиями

0 голосов
/ 26 августа 2018

Хотя, безусловно, возможно построить шлюз Modbus TCP / RTU, вы не сможете сделать это с помощью простой команды nc по двум причинам:

  1. Фактический блок данных протокола (PDU) Modbus, просто содержащий функциональный код и данные Modbus, встроен в блок данных приложения (ADU), поэтому запрос достигает нужного устройства без ошибок связи. Этот ADU отличается для RTU и TCP. Обычно ADU выглядит следующим образом:

    ------------------------------------------
    | Additional address | PDU | Error check |
    ------------------------------------------
    

    Для RTU «Дополнительный адрес» - это один байт, идентифицирующий устройство / подчиненное устройствопоследовательная линия, а «Проверка ошибок» - это 16-битный CRC.

    Для TCP «Дополнительный адрес» - это 7-байтовый заголовок протокола приложения Modbus (MBAP), состоящий из идентификатора транзакции и протокола.идентификатор и поле длины (по 2 байта каждое), плюс один байт, идентифицирующий устройство / ведомое устройство (обычно 255, хотя для шлюза это будет идентификатор ведомого устройства RTU за ним).«Проверка ошибок» пуста (нулевые байты), поскольку об этом уже заботится TCP.

  2. Семантика связи различна для RTU и TCP.

    ДляRTU, вы пишете запрос в последовательную линию, ждете ответа и только потом пишете следующий запрос.Между кадрами должно быть 3½ символа молчания.

    Для TCP в принципе вы можете одновременно обслуживать несколько соединений.Если вы попытаетесь перенаправить два TCP-запроса на последовательную линию одновременно, возникнет хаос.

Тем не менее, вы можете создать рабочий шлюз с немного более сложной программой, чем nc:

  • Принимать подключения через порт TCP 5626 (обратите внимание, что фактически рекомендуемый номер порта для Modbus TCP - 502), преобразовать полученные TCP ADU в RTU ADU и поместить их в очередь вместе с обратным каналом.
  • Другая часть вашей программы извлекает один элемент за раз из этой очереди, отправляет ADU по последовательной линии и сообщает результат через обратный канал.Затем он переходит к следующему элементу и т. Д.
  • Результаты, поступающие по обратным каналам, преобразуются в TCP ADU и отправляются обратно по соответствующему соединению TCP.

Это, безусловно, будет работать на Raspberry Pi и, возможно, также на Arduino, в зависимости от того, насколько велика ваша очередь.


Источники:

...