Modbus RTU через TCP (шлюз Modbus TCP)

Можно ли построить сетевой шлюз Modbus-RTU с помощью Linux или Arduino?

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

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

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

Моя цель - подключить компьютер (подключенный к сети с Linux Box) к этому PLC через Linux Box с помощью Modbus.


person ramiwi    schedule 30.05.2018    source источник


Ответы (3)


Да, вы можете использовать Linux-бокс с портом Ethernet.

Это не просто "NC".

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

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

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

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

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

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

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

person BBM    schedule 13.12.2018

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

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

С уважением

person JL272    schedule 31.01.2019

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

  1. Фактический блок данных протокола Modbus (PDU), содержащий только код функции и данные 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, в зависимости от того, насколько большой вы хотите, чтобы ваша очередь была.


Источники:

person Alexander Klauer    schedule 26.08.2018