Перейти к содержанию

Как подключить прибор Modbus RTU к сети Ethernet?

Обновлено Редакция GAW

Прибор с Modbus RTU общается по последовательной линии — обычно RS-485. В Ethernet его выводят через шлюз Modbus TCP — RTU: у шлюза один IP-адрес на всю линию, а приборы за ним различаются по полю Unit ID (руководство Modbus по TCP/IP, разд. 3.1.2).

Что настроить

ГдеПараметрЗначение
Шлюз, сторона сетиIP-адрес, маска, шлюз по умолчаниюиз подсети, где работает клиент
Шлюз, сторона RS-485скорость, чётность, стоп-битыкак у прибора
Шлюзтаймаут ответа линиибольше времени ответа прибора
Клиент (SCADA, ПЛК, программа)адрес и портIP шлюза, порт 502
КлиентUnit IDадрес прибора на линии, 1–247
Приборадрес и параметры портауникальный адрес, те же настройки линии

Адрес, маску и шлюз для устройства в сети подберёт калькулятор подсетей.

Как запрос проходит через шлюз

Наш пример: чтение 10 регистров хранения с адреса 0 у прибора с адресом 1.

  1. Клиент отправляет кадр Modbus TCP: 00 01 00 00 00 06 01 03 00 00 00 0A — заголовок MBAP с Unit ID 01 и PDU 03 00 00 00 0A.
  2. Шлюз снимает заголовок, ставит адрес 01 и добавляет CRC-16: на линию уходит 01 03 00 00 00 0A C5 CD (CRC — наш расчёт).
  3. Прибор отвечает кадром RTU, шлюз убирает CRC, добавляет заголовок с тем же номером транзакции и отправляет ответ клиенту.

PDU — код функции и данные — на обоих транспортах одинаков. Кадр TCP на 4 байта длиннее RTU: 7 байт заголовка вместо байта адреса и двух байт CRC. Собрать и разобрать такие кадры можно в калькуляторе Modbus TCP, а кадр RTU с CRC — в калькуляторе Modbus RTU.

Наш вывод: Unit ID 0 через шлюз не используйте — на линии это широковещательный адрес, ответа на него не будет. Как устроен сам протокол и почему адреса регистров считаются с нуля — в статье «Modbus RTU».

Похожие вопросы

Сколько приборов можно подключить к одному шлюзу?

Столько, сколько допускает линия RS-485 и адресное пространство Modbus: адреса ведомых на линии — от 1 до 247. По электрике ограничение — единичные нагрузки трансиверов: стандартный передатчик рассчитан на 32. Шлюз различает приборы по Unit ID, а IP-адрес у всей линии один.

Можно ли опрашивать прибор за шлюзом сразу из двух программ?

По TCP — да, но на линии RS-485 запросы всё равно идут по одному: руководство Modbus по TCP/IP возлагает согласование на шлюз. Чем больше клиентов и запросов, тем дольше каждый ждёт ответа, — закладывайте это в таймауты клиентов.

Чем шлюз отличается от «прозрачного» преобразователя Ethernet — RS-485?

Шлюз понимает Modbus: принимает кадр TCP с заголовком MBAP, отправляет на линию кадр RTU с адресом и CRC и возвращает ответ в формате TCP. Прозрачный преобразователь просто передаёт байты линии через сокет — по сети идёт кадр RTU с CRC, и клиент Modbus TCP его не поймёт. Такой режим работает только с программами, которые умеют отправлять RTU через TCP.

Источники

  1. Modbus Organization. MODBUS Messaging on TCP/IP Implementation Guide V1.0b, 2006 — разд. 3.1.2: адрес устройства заменён полем Unit Identifier в заголовке MBAP, через него работают мосты, маршрутизаторы и шлюзы с одним IP-адресом на несколько устройств; разд. 3.1.3: порт 502; разд. 4.4.1: по TCP можно отправить несколько запросов не дожидаясь ответа, совместимость с последовательной линией (один запрос за раз) обеспечивает шлюз; разд. 4.4.1.2: за шлюзом Unit Identifier несёт адрес ведомого на линии 1–247, адрес 0 — широковещательный; разд. 4.3.3.1: шлюз по умолчанию — в подсети устройства
  2. Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 4.1: PDU не длиннее 253 байт; ADU на RS-485 — 256 байт с адресом и CRC, ADU Modbus TCP — 260 байт с заголовком MBAP
  3. Texas Instruments. The RS-485 Design Guide (SLLA272D, rev. May 2021) — разд. 8: передатчик по стандарту должен работать на 32 единичные нагрузки

Нашли ошибку?