Modbus для чайников
Modbus — это промышленный протокол, предназначенный для обмена данными между разными устройствами автоматизации. Его создали в 1979 году в компании Modicon, и этот протокол стал одним из основных в мире промышленных коммуникаций.

Что такое Modbus и почему он до сих пор везде?
Главные факторы популярности:
- Простота
- Открытая спецификация
- Широкая поддержка устройствами разных производителей
Благодаря этому протокол Modbus остается актуальным даже в эпоху Ethernet-сетей, IoT и распределенных систем.
Совместимость реализуется через стандартные интерфейсы:
- RS-485
- RS-232
- RS-422
- Ethernet TCP/IP
Связь через эти порты позволяет передавать данные простыми кадрами, где каждое устройство имеет уникальный адрес.
Даже новейшие контроллеры с поддержкой Ethernet и веб‑интерфейсов часто включают в себя модули Modbus RTU — для совместимости со старой инфраструктурой и возможности обмена с периферийными устройствами, подключёнными по RS‑485.
Как это работает: принцип «Главный и Подчиненный» (Master/Slave)
Основной принцип работы прост. В сети Modbus всегда есть ведущее устройство (Master), которое передаёт команды, и несколько ведомых (Slave) — они принимают запрос и дают ответ.
Каждое устройство имеет уникальный адрес, по которому Master отправляет сообщение. Оно содержит:
- Код функции
- Начальный адрес регистра
- Количество ячеек
- При необходимости, строку данных для записи
После обработки ведомое устройство отправляет ответ в том же формате. Если запрос считан неверно или контрольная сумма не совпадает, протокол предусматривает возврат кода ошибки.
Топология проста: в RS-485 можно подключить до 32 устройств, при этом обмен идёт по одной паре проводников.
Кто дает команды, а кто отвечает?
- Ведущее устройство (Master) всегда инициирует действие. Оно формирует запрос, указывая адрес ведомого, номер функции (например, чтение регистров), и передает сообщение в линию.
- Slave-устройство принимает кадр, проверяет валидность по CRC, и отправляет обратно ответ с данными или со статусом.
- Если ответа нет в течение определенного времени, Master может повторить команду. Такой циклический алгоритм обеспечивает полный контроль над обменом данными и позволяет минимизировать ошибки.
При использовании Modbus TCP, роль ведущего обычно выполняет компьютер или SCADA-система, а ведомыми устройствами становятся промышленные контроллеры, модули ввода/вывода, счетчики, датчики.
Где Modbus хранит данные: разбираемся с регистрами
Все данные, с которыми работает протокол, находятся в четырех типах регистров. Каждый регион отвечает за свой тип информации: дискретные флаги, аналоговые величины, значения состояний и управляющие команды.
Coils (Флаги) и Discrete Inputs
- Coils (Выходные/управляемые дискретные регистры) — ячейки логического состояния, каждая из которых поддерживает двойное значение (1 или 0). Используются для управления выходами и активации действий. Доступ: Чтение/Запись.
- Discrete Inputs (Входные дискретные регистры) предназначены только для чтения: они отражают фактическое состояние входных сигналов, например от концевиков или датчиков.
Обе области тесно связаны — в программах мастеров их часто отображают в единой таблице, где каждый бит соответствует определённому устройству или каналу.
Holding Registers и Input Registers — в чём разница
Здесь хранятся аналоговые величины.
- Input Registers (Входные/только для чтения аналоговые регистры) служат только для чтения (обычно данные с датчиков).
- Holding Registers (Регистры хранения) используются для чтения и записи (настройки, уставки, вычисляемые значения).
Обычно каждый регистр — это два байта, где младший и старший байт представляют число или слово. Формат унифицирован во всех версиях протокола.
Пример распределения регистров:
Coils (Выходные дискретные)
- Адреса (обычные): 00001 - 09999
- Доступ: Чтение/Запись
- Назначение: Дискретный выход
- Код функции (пример): 01 (чтение), 05 (запись 1), 15 (запись N)
Discrete Inputs (Входные дискретные)
- Адреса: 10001 - 19999
- Доступ: Только чтение
- Назначение: Считывание входов
- Код функции: 02
Input Registers (Входные аналоговые)
- Адреса: 30001 - 39999
- Доступ: Только чтение
- Назначение: Аналоговый ввод
- Код функции: 04
Holding Registers (Регистры хранения)
- Адреса: 40001 - 49999
- Доступ: Чтение/Запись
- Назначение: Хранение и запись данных
- Код функции: 03 (чтение), 06 (запись 1), 16 (запись N)
Такое разделение обеспечивает логическую структуру данных и позволяет ведущему устройству работать универсально с разными системами ввода/вывода.
Разновидности протокола: Modbus RTU vs Modbus TCP
С развитием технологий Modbus адаптировался к разным физическим средам.
- Modbus RTU работает через последовательную связь (RS-485/232). Применяет двоичный формат, что минимизирует размер сообщений и ускоряет обмен.
- Modbus TCP работает через Ethernet/IP (TCP/IP). Использует тот же набор функций, что делает его подходящим для сетей с множеством устройств.
Обе версии подчиняются тем же функциям и правилам, но различаются организацией кадра и скоростью передачи данных.
Кадр RTU: из чего состоит пакет данных
В версии Modbus RTU каждый пакет передается в строго определённой структуре, где даже паузы между байтами имеют значение. Это позволяет различным устройствам обмениваться данными с высокой надёжностью при минимальных ресурсах.
Формат кадра RTU:
- Адрес (1 байт) — Уникальный номер устройства (Slave), к которому обращается Master.
- Код функции (1 байт) — Определяет тип операции: чтение, запись, диагностика и т.д.
- Поле данных (Data) (N байт) — Адрес регистра, количество ячеек, содержимое или параметры.
- CRC (2 байта) — Контрольная сумма, вычисляемая по алгоритму Modbus RTU CRC.
Перед передачей Master ждёт паузу не менее 3,5 символов. После отправки Slave обрабатывает запрос и формирует ответ в том же формате, добавляя свою контрольную сумму CRC. Если поле CRC не совпадает, сообщение считается ошибочным и игнорируется.
Возьмем пример Modbus RTU кадра:
01 03 00 01 00 01 84 0A
Здесь:
01— адрес устройства (№ 1)03— код функции (чтение Holding Registers)00 01— начальный адрес регистра00 01— количество читаемых ячеек (1 регистр)84 0A— контрольная сумма (CRC)
Такой пакет можно визуализировать в виде таблицы или байтовой схемы. Смысл остаётся тем же — Master управляет, Slave отвечает.

Пример реального запроса: как прочитать температуру с датчика
Рассмотрим типовую задачу — прочитать температуру из PLC или термодатчика.
Master отправляет кадр:
01 04 00 00 00 02 F1 CA
Где:
01- Адрес устройства 104- Функция "Чтение Input Registers"00 00- Начальный адрес (регистр 40001 в таблице, но в кадре - смещение 0)00 02- Количество читаемых регистров (2)F1 CA- CRC
В ответ Slave пришлет что-то вроде:
01 04 04 00 FA 01 2C B9 9F
Где:
01- Адрес04- Функция04- Количество байт данных (4 байта = 2 регистра по 2 байта)00 FA- Данные первого регистра (0x00FA = 250 десятичное)01 2C- Данные второго регистра (0x012C = 300 десятичное)B9 9F- CRC
После разделения и пересчёта в десятичное можно получить 250 и 300, что может соответствовать, например, 25.0 °C и 30.0 °C по заданному масштабу (деление на 10).
Такое чтение позволяет ведущему контролировать множество датчиков и счетчиков в реальном времени, реализуя функции контроля, сбора информации и передачи в верхний уровень SCADA.
С чего начать практику: софт для симуляции Modbus
Для практического освоения пригодится специализированная программная среда.
Самые известные инструменты:
- Modbus Poll — тестирование соединений TCP/RTU, удобное логирование сообщений (Master)
- Modbus Slave — эмулятор ведомых устройств, позволяющий создавать виртуальные регистры данных (Slave)
- QModMaster — кроссплатформенный инструмент с функциями наблюдения и поддержкой ASCII/RTU (Master)
- Node-RED + Modbus node — для IoT и Ethernet, позволяет отлаживать логику в браузере
С их помощью можно смоделировать работу системы, увидеть, как передается HEX-кадр, обнаружить ошибки CRC и изучить, как протокол посылает и принимает сообщения.
Часто задаваемые вопросы новичков
Какое устройство отправляет команду?
- В модели «Master-Slave» Master всегда инициирует сессию, а Slave только отвечает.
Можно ли подключать два Master к одной линии RS-485?
- Нет, топология Modbus RTU подразумевает одного ведущего (Master), иначе сообщения будут конфликтовать.
Для чего нужен CRC?
- CRC (Cyclic Redundancy Check) — контрольная сумма, которая проверяет целостность пакета данных и позволяет исключить ошибки передачи.
Чем отличается ASCII от RTU?
- RTU использует компактный двоичный формат. ASCII — символьный (HEX-символы), читаемый человеком, но менее эффективный.
Почему Modbus до сих пор используется?
- Простота, надежность, открытость и огромная инсталляционная база. Он совместим с огромным числом устройств и "просто работает".
Более сорока лет Modbus остаётся одним из самых узнаваемых стандартов автоматизации. Он гибко масштабируется, поддерживает RS-485, TCP/IP, UART и Ethernet, что делает его универсальным для интеграции разных устройств.
Простая структура кадра, надёжные функции, понятные коды ошибок, множество реализаций в открытом ПО — всё это говорит о том, что протокол Modbus стал основой современных технологий контроля и мониторинга данных.
Он поддерживает несколько версий, принят во многих странах, и по-прежнему является рабочим инструментом для инженеров, разработчиков и системных интеграторов.