CoderTools

Парсер протокола Modbus

Анализ, преобразование и отладка коммуникаций Modbus RTU/ASCII/TCP

Пожалуйста, введите данные

Справочник по протоколу Modbus

Modbus — наиболее широко используемый промышленный протокол связи, разработанный компанией Modicon в 1979 году. Он обеспечивает связь между электронными устройствами через последовательные линии (RTU) или Ethernet (TCP/IP). Этот инструмент помогает инженерам отлаживать и анализировать коммуникации Modbus без специализированного оборудования или программного обеспечения.

Структура кадра Modbus RTU

Modbus RTU (Remote Terminal Unit) передаёт данные в двоичном формате через последовательные соединения, такие как RS-232 или RS-485. Каждый кадр включает адрес ведомого, код функции, данные и 16-битную контрольную сумму CRC для обнаружения ошибок. Компактный двоичный формат делает RTU эффективным для сред с ограниченной пропускной способностью.

Slave ID
1 byte
Function
1 byte
Data
N bytes
CRC-16
2 bytes

Modbus RTU Frame Structure

Структура кадра Modbus TCP

Modbus TCP инкапсулирует кадры RTU в пакеты TCP/IP, используя 7-байтовый заголовок MBAP (Modbus Application Protocol). Этот заголовок содержит ID транзакции для сопоставления запрос-ответ, идентификатор протокола (всегда 0 для Modbus), длину сообщения и ID устройства. TCP-связь по умолчанию использует порт 502.

Trans ID
2 bytes
Proto ID
2 bytes
Length
2 bytes
Unit ID
1 byte
Function
1 byte
Data
N bytes

Modbus TCP Frame Structure (MBAP Header + PDU)

Распространённые коды функций

Коды функций определяют тип операции в запросе Modbus. Операции чтения (01-04) получают состояния катушек или значения регистров, а операции записи (05, 06, 0F, 10) изменяют данные устройства. Каждый код функции имеет определённые требования к формату данных.

Код Функция Тип
0x01Чтение CoilsЧтение
0x02Чтение дискретных входовЧтение
0x03Чтение регистров храненияЧтение
0x04Чтение регистров вводаЧтение
0x05Запись одного выходаЗапись
0x06Запись одного регистраЗапись
0x0FЗапись нескольких выходовЗапись
0x10Запись нескольких регистровЗапись

Порядок байтов в Modbus

Разные производители ПЛК используют различные порядки байтов для 32-битных и 64-битных значений. Четыре распространённых варианта: Big Endian (ABCD) — стандартный сетевой порядок; Little Endian (DCBA); Mid-Big Endian (BADC); и Mid-Little Endian (CDAB). При чтении неверных значений попробуйте разные порядки байтов, чтобы найти правильную интерпретацию.

Big Endian (ABCD)
A B C D
Little Endian (DCBA)
D C B A
Mid-Big Endian (BADC)
B A D C
Mid-Little Endian (CDAB)
C D A B

Алгоритм CRC-16/Modbus

Modbus RTU использует CRC-16 с полиномом 0x8005 и начальным значением 0xFFFF для обнаружения ошибок. CRC рассчитывается по адресу ведомого, коду функции и байтам данных, затем добавляется младшим байтом вперёд. Кадр с неверным CRC должен быть отброшен получателем.

Полином: 0x8005
Начальное значение: 0xFFFF
Отражение входа: Да
Отражение выхода: Да

Практические применения

  • Устранение ошибок связи между ПЛК и системами SCADA путём анализа необработанных данных пакетов
  • Проверка значений регистров при вводе в эксплуатацию путём преобразования hex-данных в инженерные единицы
  • Генерация тестовых команд для валидации устройств без специализированного программного обеспечения Modbus
  • Отладка проблем с порядком байтов при интеграции устройств разных производителей

Связанные инструменты

Быстрое меню

Нет недавних инструментов