Протокол Modbus: как он работает и чем отличаются Modbus RTU и Modbus TCP
В мире автоматизации есть несколько «универсальных языков», на которых разговаривают контроллеры, датчики и приводы. Один из самых старых и надёжных — Modbus. Его придумали ещё в 1979 году для обмена данными между ПЛК, но и сегодня он остается стандартом де-факто — от промышленных систем до современных умных домов. Почему? Всё дело в том, что Modbus прост, стабилен и понятен инженеру. Ни лицензий, ни сложных стеков, ни проприетарных зависимостей — только четкий формат данных, доступный в сотнях устройств.
Что такое Modbus и зачем он нужен
Modbus — это протокол прикладного уровня, который определяет, как передавать команды и данные между устройствами. Главное в нём то, что он не привязан к одному физическому носителю: тот же набор команд можно отправить по RS-485 (Modbus RTU) или через Ethernet (Modbus TCP).
Устройства обмениваются сообщениями в формате «запрос-ответ»:
-
ведущее устройство (master или server) посылает команду;
-
подчиненное (slave или client) отвечает, выполняя команду или запрос.
Благодаря этой модели Modbus легко масштабируется — вы можете подключить десятки и даже сотни приборов, независимо от их производителя.
Modbus RTU — классика по RS-485
Modbus RTU (Remote Terminal Unit) — это вариант протокола для последовательных линий связи (RS-232, RS-485, RS-422). Его можно встретить буквально на каждом втором промышленном объекте: от счётчиков тепла до преобразователей частоты и систем вентиляции.
RTU передаёт данные в виде кадров фиксированной структуры:
Адрес (1 байт) | Код функции (1 байт) | Данные (N байт) | CRC16 (2 байта)
Каждый кадр сопровождается паузами (около 3.5 символа между кадрами), которые служат для синхронизации. Контроль ошибок передачи выполняется по CRC16 — простая, но надёжная проверка, которая позволяет использовать Modbus RTU даже на линиях большой длины.
Преимущества Modbus RTU:
-
работает по простым и надежным линиям RS-485;
-
допускает установку до 247 устройств на одной шине;
-
не требует сложных настроек и специальных коммутаторов.
Недостатки Modbus RTU:
-
только один ведущий (master);
-
ограниченная скорость (до 115200 бод, но на практике чаще от 1200 до 19200 бод);
-
ведомое устройство не может само инициировать передачу данных
-
ведомое устройство не может обнаружить потерю связи с ведущим.
Схема кадра Modbus RTU:
Modbus TCP — тот же язык, но по Ethernet
С развитием сетей Ethernet появилась логичная идея: передавать команды Modbus по TCP/IP. Так родился Modbus TCP, где привычная логика запросов и регистров осталась прежней, но всё это теперь упаковано в обычный TCP-пакет для передачи по IP-сетям.
Здесь уже нет понятий «master» и «slave» — их заменили server и client. Серверов может быть несколько: SCADA-система, панель оператора, облачная база данных — все могут одновременно обращаться к одному устройству. Это делает Modbus TCP идеальным для больших сетей и интеграции в IT-инфраструктуру.
Каждое сообщение содержит MBAP-заголовок (Modbus Application Header):
Transaction ID (2 байта) | Protocol ID (2 байта) | Length (2 байта) | Unit ID (1 байт)
А дальше идет та же структура кадра (Function + Data), что и в случае Modbus RTU.
Контроль ошибок выполняется средствами TCP/IP, а передача идет через порт 502.
Преимущества Modbus TCP:
-
можно подключать несколько серверов;
-
высокая скорость и надёжность;
-
простое подключение через существующую сеть Ethernet.
Недостатки Modbus TCP:
-
требует настройки маршрутизации и безопасности;
-
не всегда подходит для удаленных или загруженных линий.
Схема кадра Modbus TCP:
RTU или TCP — что выбрать
Зависит от задачи:
|
Сценарий |
Рекомендуемый вариант |
|
Полевые устройства на RS-485 (датчики, счётчики) |
Modbus RTU |
|
Интеграция в SCADA, BMS или диспетчеризацию |
Modbus TCP |
|
Смешанные системы |
Использование шлюзов Modbus RTU ↔ TCP |
Шлюз позволяет «перевести» запросы из TCP в RTU и обратно, объединяя старые и новые устройства в единую систему.
Схема топологий RTU и TCP:
Как устроены данные в Modbus
Modbus работает с регистрами — областями памяти устройства. Всего их четыре типа:
|
Тип данных |
Диапазон адресов |
Пример кода функции |
|
Coils (0xxxx) — дискретные выходы |
чтение/запись битов |
FC 01, 05, 15 |
|
Discrete Inputs (1xxxx) — дискретные входы |
только чтение |
FC 02 |
|
Input Registers (3xxxx) — аналоговые входы |
только чтение |
FC 04 |
|
Holding Registers (4xxxx) — универсальные регистры |
чтение/запись |
FC 03, 06, 16 |
Практические советы по проектированию и настройке
Для Modbus RTU:
-
в случае использования RS-485 всегда ставьте оконечные резисторы (120 Ом) на концах линии;
-
используйте экранированный кабель и соединяйте экран только с одной стороны (как правило со стороны Master устройства или со стороны щита автоматики);
-
старайтесь избегать звездной топологии, используйте шину (шлейф).
Для Modbus TCP:
-
ограничивайте доступ к порту 502;
-
используйте VLAN и отдельную подсеть для устройств;
-
не открывайте слишком много соединений с одного сервера.
Почему Modbus до сих пор актуален
Главная сила Modbus — в его простоте и предсказуемости. Он не требует лицензий, не навязывает конкретного производителя и прекрасно документирован.
Для инженера это означает стабильность, лёгкую диагностику и возможность соединить в одну сеть устройства, выпущенные с разницей в 20 лет.
Как Modbus используется в системах «умного дома» и BMS
Сегодня Modbus остается самым распространенным «промышленным языком» взаимодействия среди устройств HVAC, энергетики и учёта.
Он встречается в:
-
счётчиках электроэнергии и тепла,
-
котлах, чиллерах, вентиляции,
-
источниках бесперебойного питания,
-
частотных преобразователях.
В случае использования в системах «умного дома» Modbus становится заложником своей простоты. Подход «ведущий-ведомый» хорошо работает при опросе множества устройств, но не позволяет построить децентрализованную систему, в которой команды могут быстро поступать со множества кнопок и панелей на множество реле, диммеров и других исполнителей. Проще говоря, Modbus не позволяет организовать быстрое взаимодействие всех устройств со всеми без посредников (master/server) и ощутимых задержек, особенно если этих устройств очень много. Поэтому для систем «умного дома» были созданы специализированные протоколы управления, например, KNX c децентрализованным принципом работы.
Еще одной особенностью KNX является широкий выбор оконечных устройств различного дизайна и назначения (выключатели, сенсорные панели, датчики движения/присутствия/освещенности, пользовательские интерфейсы визуализации), в отличие от Modbus, для которого выпускаются в основном устройства промышленного назначения. Но здесь важно понимать, что каждый протокол имеет свои сильные и слабые стороны, поэтому во многих проектах «умных домов» система строится с использованием нескольких протоколов. Связь между протоколами, при этом, обеспечивается специальными устройствами — шлюзами.
Во многих проектах «умных домов» KNX выступает в качестве основной системы и связывается с узкоспециализированным оборудованием по Modbus через шлюзы KNX↔Modbus — таким образом, инженер получает единое управление и сбор данных без необходимости подбора устройств с возможностью прямой интеграции в KNX, что бывает довольно редко. В этом случае шлюз KNX выступает в качестве master/server и опрашивает через шлюз, например, подключенную систему вентиляции как Modbus slave/client. В качестве примера можно привести устройство Modbus RTU Gateway 886.1 secure от компании Weinzierl.
Помимо этого, Modbus TCP часто используется для интеграции локальных инсталляций KNX в систему диспетчеризации всего здания, так называемую BMS. В таком случае система KNX, а точнее установленный в нее шлюз, выступает как client для вышестоящего сервера OPC/SCADA/BMS. Здесь примером будет устройство Modbus TCP Gateway 716 secure от того же производителя.
Также в качестве примера можно привести шлюз IN701KNX1000000 от компании Intesis. Устройство может выступать в качестве как Master, так и Slave для Modbus RTU, а также Client или Server для Modbus RTU, обеспечивая таким образом любые варианты взаимодействия протоколов Modbus и KNX, при этом ещё и предоставляя наладчикам системы возможность мониторинга данных на стороне Modbus.
