Чем 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 TCP | 11 03 00 6B 00 03 76 87 | 8 байт |
| Modbus TCP | 00 01 00 00 00 06 11 03 00 6B 00 03 | 12 байт |
В строке RTU последние два байта — CRC-16 Modbus, младшим байтом вперёд; мы пересчитали её, совпадает. В строке TCP первые 7 байт — заголовок MBAP: транзакция 0001, протокол 0000, длина 0006, Unit ID 11. PDU 03 00 6B 00 03 в обоих кадрах одинаков. CRC для своего кадра посчитает калькулятор CRC.
Чем они различаются
| RTU over TCP | Modbus 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.
Источники
- 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
- Modbus Organization. MODBUS Application Protocol Specification V1.1b3, 2012 — разд. 4.1: общий PDU для всех транспортов; ADU на последовательной линии — адрес, PDU и CRC, до 256 байт; ADU Modbus TCP — MBAP и PDU, до 260 байт
Нашли ошибку?
Смотрите также
- Modbus TCP: кадрыЗаголовок MBAP, функции 01–06, 15, 16 и 23, разбор, сравнение с RTU
- Modbus RTU: кадрыЗапрос с CRC, разбор ответа, float, адреса 4xxxx
- Modbus RTUКадр, паузы 3,5 символа, функции, регистры, CRC-16, RS-485, отладка
- Калькулятор CRCCRC-8, CRC-16, CRC-32, Modbus, блок CRC STM32, код на C
- Как подключить прибор Modbus RTU к сети Ethernet?Шлюз Modbus TCP — RTU: IP шлюза, порт 502, Unit ID = адрес на линии RS-485