СТАБУР
Применение· 8 мин чтения

Три режима Modbus: RTU, TCP и RTU-over-TCP - когда какой и почему ломаются опросы

Фрейминг RTU и MBAP в TCP, RTU-over-TCP и шлюзы, латентность и буферы, диагностика Wireshark/tcpdump и пять типовых ошибок конфигурации на объекте

В одном проекте в драйвере стоит «Modbus TCP», а шлюз ждёт «сырой RTU внутри сокета». В другом - на RS-485 всё летает, а через конвертер в Ethernet «то 0x03, то тишина». Третий - Wireshark на TCP показывает красивые пакеты, а SCADA ругается на CRC, потому что оператор включил не тот режим разбора кадра.

Ниже - различие фрейминга, типичные шлюзы и конвертеры, ловушки задержки и буферов, высокоуровневая диагностика tcpdump/Wireshark и блок про пять типовых ошибок конфигурации и как их быстро распознать.


Короткий ответ

Modbus RTU - последовательная шина: кадр ограничен таймингом (пауза между кадрами), адрес, PDU, CRC16.

Modbus TCP - обмен запрос-ответ в TCP: перед PDU идёт заголовок MBAP (в т. ч. Transaction ID, Unit ID, длина), CRC Modbus в кадр не входит - целостность на уровне TCP/IP.

RTU-over-TCP (в документации часто «RTU over Ethernet/TCP», «serial framing over TCP») - в TCP уходит последовательность байт в стиле RTU, иногда с CRC, иногда по вендорским правилам; это не тот же разбор, что у чистого Modbus TCP, если только устройство явно не документирует обратное.

Опросы «ломаются», когда режим клиента, режим шлюза и фактический формат на проводе расходятся хотя бы в одной точке.


Modbus RTU: фрейминг и где ломается

На RS-485 (или RS-232) кадр RTU - это непрерывный блок байт с адресом, кодом функции, данными, CRC. Конец кадра для приёмника определяется паузой не меньше времени 3,5 символа при текущей скорости (на практике ещё и аппаратные буферы UART).

Типичные поломки:

•Слишком короткие таймауты между запросами - второй кадр «накладывается» на хвост первого.

•Неверные скорость/чётность/stop - «мусор» и вечные CRC error.

•Терминирование и топология RS-485 - отражения и искажения длительности фронтов, что для некоторых приборов эквивалентно порче тайминга.

•Два мастера на одной шине без арбитража.

Modbus TCP: фрейминг и где ломается

Здесь нет «паузы 3,5 символа» как критерия кадра. Граница сообщения задаётся MBAP Length и логикой TCP-потока: приложение читает из сокета столько байт, сколько объявлено в заголовке.

Типичные поломки:

•Неверный Unit ID при маршрутизации через шлюз к RTU-адресам.

•Разные таймауты TCP и приложения Modbus (NAT, полусухая сессия) - см. отдельный разбор в материале про TCP для интегратора.

•Несколько клиентов на один слейв без поддержки.

RTU-over-TCP: что обычно имеют в виду

В инженерной речи под RTU-over-TCP чаще всего попадают три разных зверя - их стоит развести в паспорте объекта:

1.Формально Modbus TCP по спецификации, но в поле Unit ID шлюз подставляет адрес RTU - снаружи это TCP с MBAP, внутри шлюза - RTU. Это всё ещё «правильный» Modbus TCP для клиента, а RTU остаётся за шлюзом.

2.Поток байт RTU (иногда с CRC) внутри TCP без MBAP или с нестандартной обёрткой - реализация серийных серверов и части прозрачных туннелей. Клиент должен уметь именно так собирать кадры (иногда драйвер называет это «RTU over TCP»).

3.Modbus RTU через UDP или иной транспорт - редко, но встречается в старых утилитах; важно не смешивать с п. 2 при диагностике.

Если в Wireshark вы видите MBAP (длина, Protocol ID = 0) - вы на Modbus TCP. Если видите старт сразу с адреса RTU и CRC в конце в TCP payload - это уже территория RTU-over-TCP в смысле п. 2.

Шлюзы и конвертеры: что они делают с кадром

Прозрачный serial device server - перекидывает байты; ответственность за тайминг RTU и целостность кадра частично переезжает на прошивку шлюза (как он склеивает буфер из TCP в UART).

Полноценный Modbus TCP - RTU шлюз - принимает MBAP+PDU, сам опрашивает RS-485 по RTU, агрегирует ошибки. Здесь ищите очереди, таймауты RTU-стороны, лимит запросов в секунду.

Двухпортовый «мост» - может вводить задержку на рестарт шины после тяжёлого запроса.

Практическое правило: на схеме проекта у каждого такого узла должна быть строка «вход: режим A, выход: режим B, макс. N запрос/с».

Латентность и буферизация

TCP добавляет джиттер: буферы сетевых стеков, Nagle (реже мешает Modbus), очереди в ОС. Для RTU это было бы недопустимо как «транспорт кадра», но для Modbus TCP это нормальный мир - там кадр определяется длиной, а не паузой.

Для RTU-over-TCP снова всплывает чувствительность к склейке и разрезанию TCP: шлюз или клиент может получить половину RTU-кадра в одном read и вторую - в следующем; парсер обязан ждать полный кадр по CRC/длине, а не «обрабатывать сразу».

Симптом: на низкой нагрузке всё ок, под нагрузкой поползли таймауты - смотрите размер очереди и агрессивность опроса.

Диагностика: Wireshark и tcpdump (высокий уровень)

Modbus TCP

•Фильтр: tcp.port == 502 (или фактический порт).

•В Wireshark включите дизассемблер Modbus TCP - видны функции, стартовые адреса, исключения.

•Сверяйте Transaction ID и длину; ищите RST, повторные SYN, длинные интервалы между запросом и ответом.

RTU-over-TCP

•В том же TCP payload смотрите, есть ли MBAP. Если нет - ваш «TCP» в драйвере должен быть в режиме RTU-over-TCP (или аналогичном названии вендора).

•Полезно сравнить два захвата: на Ethernet у клиента и (если возможно) на RS-485 у шлюза - расходится ли количество кадров и их порядок.

Modbus RTU (последовательный порт)

•На ПК - COM-захват или лог адаптера; на объекте - осциллограф/логический анализатор только если есть навык; чаще достаточно USB-RS485 с мониторингом в утилите производителя.

Пять типовых ошибок конфигурации и как их распознать

1. В драйвере выбран «Modbus TCP», а устройство отдаёт RTU в TCP

Признаки: в Wireshark нет MBAP, виден CRC в хвосте, SCADA или библиотека ругается на «неверный заголовок» или CRC на уровне приложения.

Что сделать: переключить драйвер в RTU-over-TCP (или как у вас назван режим), либо поставить нормализующий шлюз, который снаружи говорит чистым Modbus TCP.

2. Шлюз Modbus TCP - RTU, а Unit ID не совпадает с адресом RTU

Признаки: TCP-сессия живая, в Modbus TCP видны корректные запросы, но исключение «нет такого устройства» или ответы «с другого адреса».

Что сделать: выровнять Unit ID в MBAP с адресом на шине согласно мануалу шлюза (или наоборот - фиксировать адрес на шлюзе и не трогать поле).

3. На RS-485 «всё верно», но через конвертер «плавает» CRC

Признаки: ошибки растут с частотой опроса; на прямом коротком шлейфе без конвертера лучше.

Что сделать: проверить терминаторы, GND/экран, скорость, задержку inter-frame в мастере; в настройках сервера последовательного порта - UART latency, буферизация, FIFO.

4. Дублирование мастеров: RTU и TCP одновременно в один слейв

Признаки: случайные таймауты, «ломающиеся» длинные ответы, растущие счётчики ошибок при подключении второй системы.

Что сделать: оставить одного мастера на линию или ввести мультиплексор/арбитраж осознанно.

5. Слишком агрессивный опрос через шлюз без учёта его очереди

Признаки: рост задержки ответа Modbus TCP линейно от числа тегов; на стороне RS-485 шлюза переполнение или дроп кадров.

Что сделать: группировать регистры, снизить частоту, включить приоритеты в SCADA, разнести тяжёлые устройства по разным портам шлюза.

Где уместен СТАБУР

В проектах на базе СТАБУР разумно зафиксировать глоссарий транспорта Modbus в исполнительной документации: где чистый TCP с MBAP, где RTU на меди, где туннель, какие таймауты и лимиты RPS на шлюзах. Это снижает количество «магических» переключений галочек в драйверах при сдаче объекта.


FAQ

Можно ли считать RTU-over-TCP «устаревшим»?

Нет как категории: это реальность серийных серверов. Важно не название, а совпадение формата с драйвером.

Почему на Wireshark «всё зелёное», а в SCADA ошибка?

Потому что зелёное - про TCP, а ошибка может быть в семантике Modbus, Unit ID или в режиме разбора PDU.

Нужен ли отдельный VLAN только под Modbus TCP?

Иногда да, если смешение с шумным трафиком даёт джиттер; базовая гигиена сети описана в материале про VLAN в OT.

Один порт 502 - всегда стандарт?

Часто да, но встречаются нестандартные порты - фиксируйте в проекте.

Стоит ли гнать Modbus TCP через VPN без ограничений?

Только с пониманием задержки и MTU: фрагментация и потери усиливают влияние на таймауты опроса.


Внутренняя перелинковка

•Modbus TCP для интегратора: Unit ID, транзакции, таймауты и диагностика;

•Modbus RTU vs Modbus TCP: таймауты и стабильная связь;

•PROFINET vs EtherNet/IP vs Modbus TCP: как выбрать в 2026.