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

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/ASCIIModbus TCP
Физическая средаRS-232, RS-485Ethernet (витая пара, оптоволокно)
ТопологияШина (линия)Звезда, дерево, кольцо
СкоростьДо 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).
  • Регулярно обновлять прошивки устройств.

Источники

  1. Modbus Organization. Modbus Messaging on TCP/IP Implementation Guide V1.0b. 2006.
  2. IEC 61158-5-10:2010. Industrial communication networks — Fieldbus specifications — Part 5-10: Application layer service definition — Type 10 elements.
  3. IEC 61784-2:2014. Industrial communication networks — Profiles — Part 2: Additional fieldbus profiles for real-time networks based on ISO/IEC 8802-3.
  4. Schneider Electric. Modbus Protocol Reference Guide. 2004.
  5. Claroty Research. Modbus TCP Vulnerabilities in Industrial Control Systems. 2019.

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

На главную BFOmetr →