Modbus RTU и Modbus TCP: справочник разработчика
Modbus — самый распространённый промышленный протокол опроса: ему больше сорока лет, он предельно прост и поддерживается практически любым контроллером, датчиком, счётчиком или частотным приводом. Простота — и его сила, и источник большинства ошибок при интеграции: в протоколе нет самоописания, и смысл каждого регистра задаёт документация конкретного устройства.
Этот раздел — практическое руководство с разбором реальных кадров: из чего состоит запрос, как читается ответ, чем отличаются RTU и TCP, где чаще всего ошибаются.
Две разновидности одного протокола
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Среда | Последовательная линия: RS-485, RS-422, RS-232 | Сеть Ethernet, TCP-порт 502 |
| Обрамление кадра | Адрес устройства + PDU + контрольная сумма CRC16 | Заголовок MBAP + PDU, контрольной суммы нет — её роль выполняет TCP |
| Разделение кадров | Паузой в линии: не менее 3,5 символов между кадрами | Границы задаёт поле длины в заголовке |
| Адресация устройств | Адрес 1…247 в первом байте кадра | IP-адрес плюс идентификатор устройства (unit id) |
| Одновременные запросы | Строго по очереди: один мастер, один запрос | Несколько запросов параллельно, ответы сопоставляются по номеру транзакции |
Внутренняя часть — PDU с номером функции и данными — у обеих разновидностей одинакова. Поэтому, разобравшись с RTU, вы автоматически понимаете и TCP: меняется только обёртка.
Разделы справочника
- Кадр Modbus: из чего состоит запрос — побайтный разбор RTU и TCP, расчёт CRC, тайминги линии.
- Функции чтения — 0x01, 0x02, 0x03, 0x04 с полными примерами запроса и ответа.
- Функции записи — 0x05, 0x06, 0x0F, 0x10 и как читать подтверждения.
- Адресация и типы данных — регистры и биты, смещение адресов, порядок байт и слов, float и 32-битные числа.
- Ошибки, исключения и тайм-ауты — коды исключений, тайминги, чек-лист поиска причины.
- Modbus в оборудовании и ПО «Прорыв» — контроллеры как мастер, модули расширения как ведомые устройства, скрипты и драйверы.
Мастер и ведомые
В Modbus всегда есть ведущее устройство (мастер) и ведомые. Мастер один, инициатива всегда за ним: ведомое устройство отвечает только на адресованный ему запрос и само в линию не пишет. Ведомых в одном сегменте RS-485 может быть до 247, а практический предел задаёт нагрузка линии — обычно не больше 32 устройств без повторителя.
В наших контроллерах ТК16L и E-422 роль мастера выполняет сам контроллер: он опрашивает счётчики, датчики, станции управления и модули расширения, а собранные данные передаёт на верхний уровень. Подробнее — в разделе о применении Modbus в нашем оборудовании.
С чего начать
Если вы только подключаетесь к незнакомому устройству, порядок такой: узнать параметры линии (скорость, чётность, стоп-биты), узнать адрес устройства, найти в документации карту регистров, прочитать один регистр функцией 0x03 и сверить значение с показанием на дисплее прибора. Дальше — дело техники.
