Протокол 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–247). Адрес 0 зарезервирован для широковещательных запросов.
- Код функции (1 байт) — определяет тип операции (чтение, запись, диагностика).
- Поле данных (переменная длина) — содержит адреса регистров, количество данных и сами данные.
- Контрольная сумма (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 и аутентификацию на уровне протокола.
Источники
- Modbus Application Protocol Specification V1.1b3 (Modbus Organization, 2012).
- Modbus Serial Line Protocol and Implementation Guide V1.02 (Modbus Organization, 2006).
- «Modbus: The Everyman's Guide to Industrial Automation» — статья на сайте Control.com.
- «Industrial Communication Protocols» — учебное пособие, Schneider Electric.
- «Modbus TCP/IP: A Practical Guide» — техническая документация, Schneider Electric.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →