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 Аудит-анализ и блокировка исключений в журнале безопасности укрепляют возможности управления и контроля организации, а также возможность ретроспективного отслеживания, анализа и суждения после события.