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

Чем Modbus RTU over TCP отличается от Modbus TCP?

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

У Modbus один и тот же PDU — код функции и данные — на любом транспорте, а различается обёртка (спецификация Modbus, разд. 4.1). Modbus TCP — стандартная обёртка для сети: заголовок MBAP вместо адреса и CRC. Режим RTU over TCP — это кадр Modbus RTU целиком, с адресом и контрольной суммой, переданный через соединение TCP без изменений; руководство Modbus по TCP/IP такой режим не описывает. Его используют «прозрачные» преобразователи Ethernet — RS-485, которые не разбирают протокол, а просто пересылают байты линии.

Один запрос в двух режимах

Наш пример: прочитать три регистра хранения с адреса 0x006B (регистры 40108–40110) у устройства 17 (0x11).

РежимБайтыДлина
Modbus RTU over TCP11 03 00 6B 00 03 76 878 байт
Modbus TCP00 01 00 00 00 06 11 03 00 6B 00 0312 байт

В строке RTU последние два байта — CRC-16 Modbus, младшим байтом вперёд; мы пересчитали её, совпадает. В строке TCP первые 7 байт — заголовок MBAP: транзакция 0001, протокол 0000, длина 0006, Unit ID 11. PDU 03 00 6B 00 03 в обоих кадрах одинаков. CRC для своего кадра посчитает калькулятор CRC.

Чем они различаются

RTU over TCPModbus TCP
Описан спецификацией Modbusнетда, порт 502
Адрес устройствапервый байт кадраUnit ID в заголовке
Контроль целостностиCRC-16 кадраEthernet и TCP
Граница кадрапо функции и CRCполе длины
Что делает преобразовательпересылает байтышлюз пересобирает кадр

Наш вывод: перепутанный режим проявляется как «ответ есть, но клиент пишет ошибку» — клиент Modbus TCP видит кадр без заголовка MBAP и отбрасывает его. Решение — выбрать в программе тот же режим, что в преобразователе, или перевести преобразователь в режим шлюза Modbus TCP. Как настроить шлюз — в ответе «Как подключить прибор Modbus RTU к сети Ethernet», разобрать любые байты — в калькуляторе Modbus TCP и калькуляторе Modbus RTU.

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

Как понять, какой режим у преобразователя?

По документации и по байтам. Кадр Modbus TCP начинается с номера транзакции и двух нулевых байтов идентификатора протокола, а в пятом-шестом байте — длина остатка. Кадр RTU начинается с адреса устройства и заканчивается двумя байтами CRC, которые сходятся при пересчёте. Калькулятор Modbus TCP распознаёт оба вида.

Что лучше выбрать?

Если программа и оборудование поддерживают Modbus TCP — его: формат описан спецификацией Modbus, и через шлюз можно опрашивать приборы с разными адресами по Unit ID. RTU over TCP удобен, когда программа умеет только RTU, а нужно лишь протянуть линию через сеть (наш вывод).

Нужна ли пауза 3,5 символа в RTU over TCP?

В сети пауз нет: TCP — поток байтов, и один кадр может прийти двумя частями. Клиенту RTU over TCP приходится находить конец кадра по длине, которую задаёт функция, и проверять CRC. В Modbus TCP эту задачу решает поле длины в заголовке MBAP.

Источники

  1. Modbus Organization. MODBUS Messaging on TCP/IP Implementation Guide V1.0b, 2006 — разд. 3.1.2: в ADU Modbus TCP адрес устройства заменён полем Unit Identifier заголовка MBAP, проверку целостности обеспечивают уровни TCP/IP, а границы кадра — поле длины; разд. 3.1.3: поля MBAP — транзакция, протокол 0, длина, Unit ID, 7 байт, порт 502
  2. Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 4.1: общий PDU для всех транспортов; ADU на последовательной линии — адрес, PDU и CRC, до 256 байт; ADU Modbus TCP — MBAP и PDU, до 260 байт

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