Открыть сервис

Протокол Modbus

Modbus — это открытый коммуникационный протокол, основанный на архитектуре «ведущий-ведомый» (master-slave), используемый для организации связи между электронными устройствами в промышленных сетях автоматизации. Протокол был разработан в 1979 году компанией Modicon (ныне подразделение Schneider Electric) для программируемых логических контроллеров (ПЛК) и впоследствии стал де-факто стандартом в области промышленной связи благодаря своей простоте, надежности и открытости.

История

Протокол Modbus был создан в 1979 году компанией Modicon (основана в 1968 году, с 1996 года входит в группу Schneider Electric) для обеспечения взаимодействия между ПЛК собственного производства. Первоначально протокол реализовывался через последовательный интерфейс RS-232 и предназначался для внутризаводского обмена данными. В 1990-х годах, с развитием локальных вычислительных сетей, появилась версия Modbus TCP/IP, работающая поверх стека протоколов TCP/IP, что позволило интегрировать устройства в Ethernet-сети.

В 2004 году спецификация протокола была передана в некоммерческую организацию Modbus Organization (ранее Modbus-IDA, Modbus Users Group), которая занимается его поддержкой, развитием и сертификацией устройств. С этого момента протокол стал полностью открытым и бесплатным для использования. На сегодняшний день Modbus является одним из наиболее распространенных промышленных протоколов в мире, особенно в системах диспетчерского управления и сбора данных (SCADA), а также в системах автоматизации зданий (BMS).

Архитектура и принцип работы

Modbus реализует модель взаимодействия «ведущий-ведомый» (master-slave) или, в терминологии протокола, «клиент-сервер». В сети Modbus может быть только одно ведущее устройство (master), которое инициирует обмен данными, и до 247 ведомых устройств (slave) на одной линии связи. Ведомые устройства не могут начать передачу самостоятельно — они только отвечают на запросы ведущего.

Модели передачи данных

Протокол определяет две основные модели передачи данных:

  • Modbus RTU (Remote Terminal Unit) — двоичный режим передачи, при котором данные кодируются в виде 8-битных байтов. Каждое сообщение содержит контрольную сумму CRC (Cyclic Redundancy Check) для обнаружения ошибок. Этот режим обеспечивает высокую скорость передачи (до 115200 бод) и используется в большинстве промышленных приложений.
  • Modbus ASCII — текстовый режим, при котором каждый байт данных передается в виде двух ASCII-символов (шестнадцатеричное представление). Используется реже, в основном в системах с низкой надежностью канала связи, так как менее чувствителен к ошибкам синхронизации, но требует в два раза больше времени на передачу.

Modbus TCP/IP

Версия протокола для работы поверх Ethernet. В этой модели ведущее устройство выступает в роли TCP-клиента, а ведомое — в роли TCP-сервера. Modbus TCP/IP использует стандартный порт 502. В отличие от последовательных версий, в TCP/IP-реализации отсутствует контрольная сумма на уровне протокола, так как её функцию выполняет стек TCP/IP. Адресация ведомых устройств заменяется IP-адресами.

Структура сообщения

Сообщение Modbus имеет фиксированную структуру, состоящую из следующих полей:

  1. Адрес устройства (1 байт) — идентификатор ведомого устройства (1–247). Адрес 0 зарезервирован для широковещательных запросов.
  2. Код функции (1 байт) — определяет тип операции (чтение, запись, диагностика).
  3. Поле данных (переменная длина) — содержит адреса регистров, количество данных и сами данные.
  4. Контрольная сумма (2 байта для RTU, 1 байт для ASCII) — для обнаружения ошибок передачи.

Для Modbus TCP/IP структура модифицируется: добавляется заголовок MBAP (Modbus Application Protocol), содержащий идентификатор транзакции, идентификатор протокола (всегда 0) и длину сообщения.

Классификация функций

Протокол определяет несколько категорий кодов функций, которые делятся на три группы:

Основные функции (публичные)

  • Чтение данных:
  • 01 (0x01) — Read Coils (чтение дискретных выходов)
  • 02 (0x02) — Read Discrete Inputs (чтение дискретных входов)
  • 03 (0x03) — Read Holding Registers (чтение регистров хранения)
  • 04 (0x04) — Read Input Registers (чтение входных регистров)
  • Запись данных:
  • 05 (0x05) — Write Single Coil (запись одного дискретного выхода)
  • 06 (0x06) — Write Single Register (запись одного регистра)
  • 15 (0x0F) — Write Multiple Coils (запись нескольких дискретных выходов)
  • 16 (0x10) — Write Multiple Registers (запись нескольких регистров)
  • Диагностика и управление:
  • 07 (0x07) — Read Exception Status (чтение статуса исключения)
  • 08 (0x08) — Diagnostics (диагностика)
  • 11 (0x0B) — Get Communication Event Counter (получение счетчика событий)

Пользовательские функции

Диапазоны кодов функций 65–72 и 100–110 зарезервированы для реализации производителями устройств. Эти функции не стандартизированы и могут различаться в зависимости от вендора.

Зарезервированные функции

Коды функций 09, 10, 13, 14, 41, 42 и некоторые другие зарезервированы для будущих расширений протокола.

Типы данных

Modbus оперирует четырьмя основными типами данных, которые отображаются на адресное пространство устройства:

  • Coils (катушки) — дискретные выходы, доступные для чтения и записи (1 бит).
  • Discrete Inputs (дискретные входы) — дискретные входы, доступные только для чтения (1 бит).
  • Input Registers (входные регистры) — 16-битные регистры, доступные только для чтения.
  • Holding Registers (регистры хранения) — 16-битные регистры, доступные для чтения и записи.

Адресация регистров исторически ведется с нуля (0–65535), но в документации часто используется смещение на единицу (например, адрес 40001 соответствует регистру хранения с номером 0).

Применение

Modbus широко используется в различных отраслях промышленности и автоматизации:

  • Промышленная автоматизация: связь между ПЛК, частотными преобразователями, датчиками, исполнительными механизмами и контроллерами.
  • Системы SCADA: сбор данных с удаленных устройств и управление ими в реальном времени.
  • Автоматизация зданий (BMS): управление системами отопления, вентиляции, кондиционирования, освещения и доступа.
  • Энергетика: мониторинг и управление электростанциями, подстанциями, счетчиками электроэнергии.
  • Нефтегазовая отрасль: управление насосными станциями, компрессорами, системами безопасности.
  • Водоснабжение и водоотведение: управление насосами, задвижками, уровнемерами.

Преимущества и недостатки

Преимущества

  • Открытость и бесплатность: протокол не требует лицензирования, что способствует его широкому распространению.
  • Простота реализации: минимальные требования к вычислительным ресурсам устройств.
  • Надежность: встроенные механизмы контроля ошибок (CRC) и подтверждения получения.
  • Совместимость: большинство промышленных устройств поддерживают Modbus, что упрощает интеграцию оборудования разных производителей.
  • Масштабируемость: поддержка до 247 устройств на одной линии.

Недостатки

  • Низкая скорость передачи в последовательных версиях: ограничения интерфейсов RS-232/RS-485.
  • Отсутствие встроенной безопасности: протокол не предусматривает шифрования, аутентификации или контроля доступа, что делает его уязвимым для атак в открытых сетях.
  • Ограниченная адресация: максимальное количество ведомых устройств (247) может быть недостаточным для крупных распределенных систем.
  • Отсутствие поддержки временных меток и событий: протокол не передает информацию о времени возникновения данных.
  • Зависимость от ведущего устройства: при отказе master-устройства вся сеть теряет управление.

Интересные факты

  • Название «Modbus» является сокращением от «Modicon Bus».
  • Протокол поддерживает широковещательные сообщения (адрес 0), которые принимаются всеми ведомыми устройствами, но не подтверждаются.
  • В некоторых реализациях Modbus TCP/IP используется альтернативный порт 5020 или 5021 для обхода ограничений брандмауэров.
  • Существуют реализации Modbus поверх UDP (Modbus UDP), которые обеспечивают более высокую скорость, но не гарантируют доставку пакетов.
  • В 2019 году Modbus Organization выпустила спецификацию Modbus Security, которая добавляет шифрование TLS и аутентификацию на уровне протокола.

Источники

  1. Modbus Application Protocol Specification V1.1b3 (Modbus Organization, 2012).
  2. Modbus Serial Line Protocol and Implementation Guide V1.02 (Modbus Organization, 2006).
  3. «Modbus: The Everyman's Guide to Industrial Automation» — статья на сайте Control.com.
  4. «Industrial Communication Protocols» — учебное пособие, Schneider Electric.
  5. «Modbus TCP/IP: A Practical Guide» — техническая документация, Schneider Electric.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →