Введение в Modbus и анализ протокола

1. Введение в Modbus

Modbus — это коммуникационный протокол, общий язык, используемый в основном в электронных контроллерах. Modbus поддерживает различные электрические интерфейсы, такие как RS232, RS485, TCP/IP и т. д. Большинство устройств Modbus обмениваются данными через последовательные или TCP/IP-соединения.

Обычно Modbus представляет собой архитектуру ведущий-ведомый, то есть коммуникационный узел является ведущим, а другие узлы, которые используют протокол Modbus для участия в обмене данными, являются ведомыми узлами (до 247, диапазон адресов 1-247, и узел 0 — это широковещательный адрес). Каждое ведомое устройство имеет уникальный адрес. На шине может быть только один главный узел.

Режим передачи Modbus можно разделить на два режима: ASCII и RTU.Все устройства в одной сети должны быть унифицированы, режим ASCII или RTU, и они не могут сосуществовать. Условно говоря, эффективность передачи в режиме RTU выше.

В режиме ASCII сообщение начинается с символа двоеточия и заканчивается символом возврата каретки и перевода строки.

В режиме RTU в качестве знака используется интервал паузы не менее 3,5 символьных раз между отправкой и получением сообщения.

Введение в регистры Modbus

Все данные хранятся в регистрах, которые могут ссылаться на физические регистры или область памяти. В соответствии с типом данных и их соответствующими характеристиками чтения и записи Modbus делит регистры на 4 части, а именно:

Введение адреса Modbus, функционального кода и поля данных

Адрес кадра сообщения Modbus, который содержит 2 символа в режиме ASCII и 1 символ в режиме RTU. Фактический диапазон адресов одного устройства находится в пределах от 1 до 247 значений. 0 — широковещательный адрес, а 248–255 — зарезервированные адреса.

Код функции состоит из 1 байта, поэтому диапазон значений составляет 1-255. Обычно используемые функциональные коды следующие:

01: прочитать статус катушки

02: прочитать статус ввода

03: Чтение регистра хранения

04: Чтение входного регистра

05: Принудительная одиночная катушка

06: сборный единый регистр

15: Обязательная мультикатушка

17: Сообщить идентификатор ведомого устройства

22: Регистр записи маски

23: регистр чтения/записи

Содержимое данных тесно связано с кодом функции. В нем хранятся конкретные данные, необходимые для работы кода функции. Поле данных указывается в байтах, а его длина может быть переменной. Для некоторых кодов функций это поле может быть пустым.

2. Анализ протокола Modbus

ModbusTCP обычно использует порт 502 в качестве порта для приема пакетов.

ModbusTCP содержит заголовок приложения, который занимает 7 байт. Максимальная длина кадра данных протокола Modbus TCP/IP составляет 260 байт.

Идентификатор передачи: Идентификатор транзакции. Занимает 2 байта. Отметьте процесс передачи запроса/ответа Modbus, который может быть установлен на 0, а каждое сообщение +1; он генерируется клиентом (ведущим устройством), и значение копируется при ответе.

Идентификатор протокола: Идентификатор протокола. Занимает 2 байта. Протокол Modbus 0x00. Генерируется клиентом, скопируйте это значение при ответе.

Длина байта: Длина. Занимает 2 байта. Верхние 4 бита установлены на 0X00, поэтому последующие байты должны быть в пределах 256 байтов; четвертый бит записывает количество последующих байтов, генерируемых клиентом (ведущим устройством) и повторно генерируемых при ответе.

Идентификатор устройства: Идентификатор устройства. Занимает 1 байт. Используется для идентификации ведомых устройств. Генерируется клиентом, скопируйте это значение при ответе.

0x01 Чтение состояния выхода катушки

На рисунке ниже показано сообщение запроса запроса, а содержание передачи Modbus: «05 91 00 00 00 06 ff 01 00 00 00 0a».

05 91 (шестнадцатеричный) — идентификатор передачи, то есть 1425 (десятичный);

00 00 — идентификатор протокола;

00 06 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

01 — код функции, занимающий 1 байт;

00 — старший бит начального адреса Modbus;

00 — младший бит начального адреса Modbus;

00 — старший бит регистра;

0a — младший бит регистра.

На рисунке ниже показано ответное сообщение после запроса, а содержание передачи Modbus: «05 91 00 00 00 05 ff 01 02 01 00».

05 91 (шестнадцатеричный) — идентификатор передачи, то есть 1425 (десятичный);

00 00 — идентификатор протокола;

00 05 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

01 — код функции, занимающий 1 байт;

02 — количество байтов в поле данных;

01 00 — поле данных. В поле данных ответного сообщения каждая катушка занимает 1 бит, 01=0000 0001, 00=0000 0000. 1=ВКЛ, 0=ВЫКЛ. Если последний байт данных не может заполнить состояние 8 катушек (1 байт), он заполняется 0.

0x02 Чтение дискретного входного значения

На рисунке ниже показано сообщение запроса запроса, а содержание передачи Modbus: «05 92 00 00 00 06 ff 02 00 00 00 0b».

05 92 (шестнадцатеричный) — идентификатор передачи, то есть 1426 (десятичный);

00 00 — идентификатор протокола;

00 06 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

02 — код функции;

00 — старший бит начального адреса Modbus;

00 — младший бит начального адреса Modbus;

00 — старший бит регистра;

0b — младший бит регистра.

На рисунке ниже показано ответное сообщение после запроса, а содержание передачи Modbus — «05 92 00 00 00 05 ff 02 02 02 00».

05 92 (шестнадцатеричный) — идентификатор передачи, то есть 1426 (десятичный);

00 00 — идентификатор протокола;

00 06 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

02 — код функции;

02 - количество байтов в поле данных

02 00 — поле данных. В поле данных ответного сообщения каждая катушка занимает 1 бит, 02=0000 00010, 00=0000 0000. 1=ВКЛ, 0=ВЫКЛ. Если последний байт данных не может заполнить состояние 8 катушек (1 байт), он заполняется 0.

0x04 Чтение значения входного регистра

На рисунке ниже показано сообщение запроса запроса, а содержание передачи Modbus: «07 45 00 00 00 06 ff 04 01 8f 00 02». Общий смысл сообщения запроса на рисунке ниже: необходимо прочитать входной адрес регистра 30144-30145, всего содержимое 2 регистров. То есть прочитать содержимое адресов протокола Modbus с 143 по 144.

07 45 (шестнадцатеричное) — идентификатор передачи, то есть 1861 (десятичное);

00 00 — идентификатор протокола;

00 06 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

04 — код функции;

01 — старший бит начального адреса Modbus;

8f — младший бит начального адреса Modbus, начальный адрес — 143.

00 — старший бит регистра;

02 является младшим битом регистра, а количество прочитанного равно 2.

На рисунке ниже показано ответное сообщение после запроса, а содержание передачи Modbus: «07 45 00 00 00 07 ff 04 04 b6 00 47 7f».

07 45 (шестнадцатеричное) — идентификатор передачи, то есть 1861 (десятичное);

00 00 — идентификатор протокола;

00 07 — длина в байтах;

ff — идентификатор устройства, равный 255 (десятичное число);

04 — код функции;

04 — количество байтов в поле данных.

b6 00 47 7f — поле данных. В поле данных ответного сообщения каждая катушка занимает 1 бит, b6=1011 0110, 00=0000 0000, 47=1000 0111, 7f=1111111. 1=ВКЛ, 0=ВЫКЛ. Если последний байт данных не может заполнить состояние 8 катушек (1 байт), он заполняется 0.

3. Об аудите/защите данных Modbus

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

Guess you like

Origin blog.csdn.net/a59a59/article/details/106493965