Skip to content

Поля фильтра Modbus RTU ​

Фильтр работает по разобранной записи Modbus. Имя поля начинается с modbus.. Синтаксис общий с другими профилями, но поля trace.* и can.* в этом каталоге недоступны.

Каталог ​

ПолеТипЗначение и применимость
modbus.transportСтрокаВ этом профиле rtu. Общий каталог также знает tcp, но TCP не входит в этот раздел
modbus.unitIdЦелоеАдрес RTU-устройства у корректной записи; 0 используется для широковещательного запроса
modbus.functionЦелоеКод функции без бита исключения. Ответ 0x83 относится к функции 0x03
modbus.transactionIdЦелоеПоле общего каталога для Modbus TCP. У RTU всегда отсутствует
modbus.requestЛогическоеЗапрос при определённой роли; широковещательный запрос тоже считается запросом
modbus.responseЛогическоеОтвет при определённой роли
modbus.broadcastЛогическоеКорректный широковещательный запрос RTU к адресу 0
modbus.exceptionЛогическоеКорректный ответ с исключением
modbus.exceptionCodeЦелоеКод исключения; отсутствует у обычного ответа и запроса
modbus.validЛогическоеЗапись прошла проверку структуры и CRC; false выделяет некорректные записи
modbus.startAddressЦелоеНачальный или целевой адрес с отсчётом от нуля, если он содержится в PDU
modbus.quantityЦелоеКоличество запрошенных или подтверждённых элементов, если содержится в PDU
modbus.byteCountЦелоеОбъявленное число байтов данных, если содержится в PDU
modbus.dataБайтыДанные функции без адреса устройства, кода функции, начального адреса, количества, счётчика байтов и CRC; см. таблицу ниже

Для неверной записи большинство разобранных полей отсутствует. Поэтому условие modbus.valid == false and modbus.unitId == 7 не подходит для поиска всех повреждённых сообщений предполагаемого устройства: адрес может быть недостоверен и не предоставляться фильтру.

Роль запроса или ответа не выводится только из RX/TX. В частности, одинаковые по форме сообщения записи одного элемента не всегда однозначно классифицируются при пассивном наблюдении.

Где находятся диапазон и данные ​

ФункцииЗапросОбычный ответ
01, 02, 03, 04 — чтениеstartAddress, quantity; поля data нетbyteCount, data; полей startAddress и quantity нет
05, 06 — запись одного элементаstartAddress, data из двух байтов значения; поля quantity нетТакие же поля
0F, 10 — запись нескольких элементовstartAddress, quantity, byteCount, datastartAddress, quantity; поля data нет
Ответ с исключением—exceptionCode; диапазона и данных обычного ответа нет

Значение modbus.data[0] — первый байт данных функции, а не первый байт RTU-кадра. Для ответа чтения регистров это старший байт первого регистра. Назначение и преобразование значения определяет описание устройства.

Примеры ​

Чтение регистров хранения у адреса 7, включая ответы с исключением:

text
modbus.unitId == 7 and modbus.function == 0x03

Запрос чтения десяти регистров начиная с адреса 100:

text
modbus.unitId == 7 and modbus.request == true and modbus.function == 0x03 and modbus.startAddress == 100 and modbus.quantity == 10

Это фильтр запросов. Ответ чтения не содержит адрес 100 и к нему автоматически не присоединяется.

Ответы с исключением:

text
modbus.exception == true

Ответы с кодом исключения 0x02:

text
modbus.exceptionCode == 0x02

Некорректные записи:

text
modbus.valid == false

Широковещательные запросы:

text
modbus.broadcast == true

Распознанные запросы записи:

text
modbus.request == true and modbus.function in (0x05, 0x06, 0x0F, 0x10)

Ответы чтения со значением 0x1234 в первом регистре:

text
modbus.function == 0x03 and modbus.response == true and modbus.data[0] == 0x12 and modbus.data[1] == 0x34

Начальный адрес в выражении — адрес протокола. Не подставляйте обозначения вида 40001 без перевода по правилам документации устройства.

Продолжить: практический разбор Modbus RTU.