Modbus RTU: адресация, параметры обмена и карта регистров
Modbus RTU — запрос-ответ по последовательной линии с одним ведущим. Связь появляется только тогда, когда совпали все четыре параметра порта и адрес ведомого, а данные читаются той функцией, которой соответствует их область.
Модель обмена
Modbus RTU — протокол типа «запрос — ответ» с одним ведущим (master) на линии. Ведомые (slave) никогда не начинают обмен сами: они только отвечают на адресованный им запрос. Это означает, что события «от прибора» в чистом Modbus не существует — ведущий обязан опрашивать.
Кадр RTU состоит из адреса ведомого, кода функции, данных и контрольной суммы CRC. Границы кадра определяются паузой в линии длительностью не менее 3,5 символов, поэтому произвольные задержки внутри посылки недопустимы — приёмник воспримет их как конец кадра.
Адресация
- 1–247 — адреса ведомых устройств.
- 0 — широковещательный запрос: его принимают все, но никто не отвечает.
- Адрес должен быть уникален в пределах линии. Два устройства с одинаковым адресом отвечают одновременно, сигналы накладываются, и ведущий видит либо ошибку CRC, либо «нет ответа» — при этом каждое устройство по отдельности исправно.
Четыре параметра, которые должны совпасть
Скорость, число битов данных, чётность и число стоп-битов должны быть одинаковыми у ведущего и у всех ведомых на линии. Несовпадение любого из них даёт одинаковый внешний симптом — «связи нет» — поэтому проверять их нужно все четыре, а не только скорость.
Области данных и функции чтения
Modbus разделяет данные на четыре области, и каждая читается своей функцией. Обращение правильным адресом, но не той функцией — частая причина ошибки «illegal data address»:
| Область | Тип | Доступ | Функция чтения |
|---|---|---|---|
| Discrete Inputs | бит | только чтение | 02 |
| Coils | бит | чтение/запись | 01 |
| Input Registers (IR) | 16 бит | только чтение | 04 |
| Holding Registers (HR) | 16 бит | чтение/запись | 03 |
Отдельная и очень распространённая путаница — нумерация. В документации регистры часто нумеруются с единицы и с префиксом области (например, 30001 для первого input register), а в кадре передаётся адрес, начинающийся с нуля. Смещение на единицу между «номером регистра в таблице» и «адресом в запросе» — самая частая причина того, что данные читаются, но не те.
Многобайтные величины
Регистр Modbus — 16 бит. Значения с плавающей точкой и 32-битные счётчики занимают два регистра, и стандарт не предписывает, в каком порядке следуют их слова. Поэтому при чтении расхода или накопленного количества всегда сверяйтесь с картой регистров конкретного прибора: перепутанный порядок слов даёт правдоподобное, но неверное число.
Со стороны вычислителя УВП-280
Датчики с Modbus-выходом подключаются к портам RS-232 или RS-485 вычислителя, а сам порт описывается в разделе Интерфейсы как «Датчики Modbus RTU» (FAQ СКБ). Конкретные параметры портов и допустимые режимы — в разделе 1.2.4 РЭ УВП-280. Карты регистров контроллеров приведены в приложениях к их собственным РЭ.
Типичные ошибки
- Совпадающие адреса у двух ведомых на одной линии.
- Совпала скорость, но не совпала чётность.
- Чтение input register функцией 03 вместо 04 (и наоборот).
- Смещение на 1 из-за нумерации регистров с единицы.
- Перепутанный порядок слов в 32-битных значениях.
- Два ведущих на одной линии — Modbus RTU этого не допускает.
Нормативный источник
Точные требования — в руководстве по эксплуатации. Справочник объясняет принцип, РЭ определяет, что допустимо для конкретного прибора.
Приборы СКБ «Промавтоматика»
Связанные вопросы
Смежные статьи
Источники
- Modbus Organization, Modbus Application Protocol Specification V1.1b3, модель данных, коды функций KSRC-MODBUS-APP
- Modbus Organization, Modbus over Serial Line Specification and Implementation Guide, кадр RTU, адресация KSRC-MODBUS-SERIAL
- FAQ СКБ «Промавтоматика», вопрос «Как подключить датчики с Modbus-протоколом?» KSRC-SKB-FAQ

