1/1/2026Чтение займет: 2 минуты

Modbus для чайников

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

modbus-rtu-tcp-02.jpg

Что такое 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 отвечает.

conversor-rs485-para-sensor-pt100-modbus-rtu.jpg

Пример реального запроса: как прочитать температуру с датчика

Рассмотрим типовую задачу — прочитать температуру из PLC или термодатчика.

Master отправляет кадр: 01 04 00 00 00 02 F1 CA

Где:

  • 01 - Адрес устройства 1
  • 04 - Функция "Чтение 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 стал основой современных технологий контроля и мониторинга данных.

Он поддерживает несколько версий, принят во многих странах, и по-прежнему является рабочим инструментом для инженеров, разработчиков и системных интеграторов.

Поделиться новостью:
Поделиться в TelegramПоделиться в ВКонтактеПоделиться в Одноклассники