Modbus TCP
Modbus TCP — это открытый коммуникационный протокол, основанный на архитектуре «клиент-сервер», предназначенный для обмена данными между электронными устройствами в промышленных сетях автоматизации. Является одной из реализаций стандарта Modbus, адаптированной для передачи данных по сетям Ethernet, использующим стек протоколов TCP/IP. Протокол определён в спецификации Modbus Messaging on TCP/IP Implementation Guide (V1.0b) и опубликован организацией Modbus Organization (ранее Modbus-IDA).
История
Протокол Modbus был разработан компанией Modicon (ныне Schneider Electric) в 1979 году для программируемых логических контроллеров (ПЛК). Изначально он работал через последовательные интерфейсы (RS-232, RS-485) и использовал формат RTU (Remote Terminal Unit) или ASCII. С развитием промышленного Ethernet в конце 1990-х годов возникла потребность в унификации доступа к устройствам через IP-сети. В 1999 году компания Schneider Electric совместно с рядом других производителей (включая Omron, Rockwell Automation) предложила спецификацию Modbus TCP, которая была опубликована в 2002 году. В 2004 году протокол был стандартизирован как рекомендация IEC 61158 (полевые шины). В 2007 году Modbus TCP стал частью международного стандарта IEC 61784-2 (профили промышленных сетей).
Архитектура и принцип работы
Modbus TCP использует модель OSI, работая на прикладном уровне (уровень 7). Передача данных осуществляется поверх транспортного протокола TCP (порт 502), что обеспечивает надёжную доставку с подтверждением получения. В отличие от последовательного Modbus, где используется полудуплексная связь (ведущий-ведомый), Modbus TCP поддерживает полнодуплексную связь и множественные одновременные соединения.
Клиент-серверная модель
В Modbus TCP устройство, инициирующее запрос, называется клиентом (ранее — ведущий, master), а устройство, обрабатывающее запрос и отправляющее ответ, — сервером (ранее — ведомый, slave). Один клиент может одновременно обслуживать несколько серверов, а один сервер может обрабатывать запросы от нескольких клиентов. Каждое устройство в сети идентифицируется по IP-адресу и, опционально, по номеру порта (по умолчанию 502).
Формат кадра (PDU)
Протокольный блок данных (PDU) Modbus TCP состоит из трёх частей:
- Заголовок (MBAP — Modbus Application Protocol Header) — 7 байт:
- Идентификатор транзакции (2 байта) — для сопоставления запроса и ответа.
- Идентификатор протокола (2 байта) — всегда 0x0000 для Modbus.
- Длина (2 байта) — количество байт после заголовка.
- Идентификатор устройства (1 байт) — адрес сервера (аналог slave ID в последовательном Modbus).
- Код функции (1 байт) — определяет тип операции (чтение, запись, диагностика).
- Данные (переменная длина) — параметры запроса или ответа (например, адрес регистра, количество регистров, значения).
Максимальный размер PDU — 260 байт (253 байта данных + 7 байт заголовка). Реальный размер кадра Ethernet может быть больше из-за заголовков TCP/IP и Ethernet (до 1518 байт).
Классификация кодов функций
Коды функций Modbus TCP делятся на три категории:
Стандартные (общедоступные)
Определены в спецификации и поддерживаются большинством устройств:
- 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 (запись нескольких регистров).
- 23 (0x17) — Read/Write Multiple Registers (чтение и запись за один запрос).
Пользовательские (определяемые производителем)
Диапазон 65–72 (0x41–0x48) и 100–110 (0x64–0x6E). Используются для расширения функциональности (например, диагностика, чтение истории).
Зарезервированные
Коды 0x09–0x0F, 0x11–0x14, 0x17–0x1F и другие — не используются в стандартной реализации.
Типы данных
Modbus TCP оперирует четырьмя основными типами данных, адресуемых через номера регистров (от 0 до 65535):
- Coils (дискретные выходы) — 1 бит, чтение и запись.
- Discrete Inputs (дискретные входы) — 1 бит, только чтение.
- Input Registers (входные регистры) — 16 бит, только чтение (обычно данные от датчиков).
- Holding Registers (регистры хранения) — 16 бит, чтение и запись (настройки, управляющие значения).
Данные могут объединяться: два 16-битных регистра образуют 32-битное значение (float, integer, unsigned long). Порядок байт (endianness) может различаться: стандартный Modbus использует big-endian (старший байт первым), но некоторые производители применяют little-endian.
Применение
Modbus TCP широко используется в промышленной автоматизации, системах управления зданиями (BMS), энергетике, водоснабжении и транспорте. Основные области:
- Программируемые логические контроллеры (ПЛК) — обмен данными между контроллерами и SCADA-системами.
- Частотные преобразователи — управление скоростью двигателей и чтение параметров (ток, частота).
- Датчики и исполнительные механизмы — считывание показаний (температура, давление, уровень) и управление клапанами, задвижками.
- Системы учёта энергоресурсов — сбор данных с электросчётчиков, теплосчётчиков, газовых счётчиков.
- Робототехника — взаимодействие контроллеров роботов с верхним уровнем управления.
Преимущества и недостатки
Преимущества
- Открытость — спецификация бесплатна и не требует лицензирования.
- Простота — минимальная вычислительная нагрузка на устройства, легко реализуется на микроконтроллерах.
- Совместимость — поддерживается тысячами производителей оборудования.
- Скорость — передача по Ethernet (100 Мбит/с, 1 Гбит/с) значительно быстрее последовательного Modbus (до 115,2 кбит/с).
- Масштабируемость — возможность подключения до 255 устройств (по идентификатору) в одной подсети.
Недостатки
- Отсутствие безопасности — протокол не предусматривает шифрования, аутентификации или контроля целостности. Уязвим для атак (перехват, подмена, DoS). Для защиты требуется использование VPN, TLS или сегментация сети.
- Зависимость от TCP/IP — требует стабильной сети Ethernet; задержки и потеря пакетов могут нарушить работу.
- Ограниченный размер данных — максимум 253 байта данных на один запрос, что может быть недостаточно для больших массивов.
- Отсутствие механизма обнаружения устройств — требуется ручная настройка IP-адресов и идентификаторов.
Отличия от последовательного Modbus
| Параметр | Modbus RTU/ASCII | Modbus TCP |
|---|---|---|
| Физическая среда | RS-232, RS-485 | Ethernet (витая пара, оптоволокно) |
| Топология | Шина (линия) | Звезда, дерево, кольцо |
| Скорость | До 115,2 кбит/с | 10/100/1000 Мбит/с |
| Макс. устройств | 32 (RS-485) | 255 (по ID) |
| Контроль ошибок | CRC (RTU) или LRC (ASCII) | Контроль TCP (checksum) |
| Адресация | Slave ID (1 байт) | IP-адрес + Slave ID |
| Тип связи | Полудуплекс | Полнодуплекс |
Реализации и программное обеспечение
Для работы с Modbus TCP существует множество библиотек и инструментов:
- libmodbus — открытая библиотека на C (Linux, Windows, macOS), поддерживает TCP и RTU.
- pymodbus — библиотека на Python для клиент-серверной реализации.
- ModbusPal — симулятор Modbus TCP (Java).
- CAS Modbus Scanner — инструмент для диагностики и тестирования.
- SCADA-системы — WinCC, Citect, MasterSCADA, OpenSCADA — встроенная поддержка Modbus TCP.
Безопасность
В связи с отсутствием встроенных механизмов защиты, Modbus TCP часто критикуется за уязвимости. В 2019 году исследователи из компании Claroty выявили несколько критических уязвимостей в реализациях протокола от разных производителей (CVE-2019-13991 и др.). Для повышения безопасности рекомендуется:
- Использовать изолированные промышленные сети (VLAN).
- Применять межсетевые экраны (firewalls) с ограничением доступа к порту 502.
- Внедрять шифрование на уровне транспорта (Modbus/TCP Security — спецификация Modbus Security, опубликованная в 2018 году, основана на TLS).
- Регулярно обновлять прошивки устройств.
Источники
- Modbus Organization. Modbus Messaging on TCP/IP Implementation Guide V1.0b. 2006.
- IEC 61158-5-10:2010. Industrial communication networks — Fieldbus specifications — Part 5-10: Application layer service definition — Type 10 elements.
- IEC 61784-2:2014. Industrial communication networks — Profiles — Part 2: Additional fieldbus profiles for real-time networks based on ISO/IEC 8802-3.
- Schneider Electric. Modbus Protocol Reference Guide. 2004.
- Claroty Research. Modbus TCP Vulnerabilities in Industrial Control Systems. 2019.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →