Skip to content

Фильтры Tracer ​

Фильтр оставляет строки, удовлетворяющие условию по полям сообщения. Он действует на выбранное представление Tracer; сбор трассы, сохранение и Monitor от него не зависят. Выражение фильтра — строка условия, которую вы вводите в Filter expression.

Шпаргалка ​

В таблице field, flag, text и data — условные имена, а не поля приложения. Замените их полями из каталога своего уровня.

КонструкцияКороткий примерНазначение
==, !=field == 7, field != 7Равенство и неравенство совместимых типов
<, <=, >, >=field < 10, field <= 10, field > 0, field >= 1Сравнение целых чисел
and, or, notfield == 7 and flag == true, field == 7 or field == 8, not (flag == true)Логические условия
in (...)field in (1, 2, 3)Одно из перечисленных значений
containstext contains "метка", data contains [0x22, 0xF1]Подстрока или непрерывная последовательность байтов
exists(...)exists(field)Наличие поля у сообщения
[индекс]data[0] == 0x22Отдельный байт; отсчёт с нуля
( ... )flag == true and (field == 1 or field == 2)Группировка условий

Приоритет и совместимые формы записи — в разделе «Операции». Если поле есть не у всех сообщений, проверьте правила отсутствующих значений.

Выберите нужный каталог ​

Профиль и уровеньДоступные поляСправочник
CANopen / VAG, Physicaltrace.*, can.*CAN
Modbus RTUmodbus.*Modbus RTU
CANopen, Protocolprotocol.type, canopen.*CANopen
VAG, Transportprotocol.type, isotp.*, tp20.*Automotive VAG
VAG, Protocolprotocol.type, uds.*, kwp.*Automotive VAG

Звёздочка здесь обозначает группу полей в справке. Это не синтаксис выражения. Общие по названию поля trace.* сейчас доступны только на исходном уровне CAN.

Одно выражение не объединяет разные уровни. Например, can.id нельзя использовать на уровне Protocol вместе с uds.service. На уровне Protocol VAG можно объединять uds.* и kwp.*, поскольку они входят в каталог одного уровня. Поля другого протокола у конкретной строки при этом отсутствуют.

Ввод ​

Введите выражение фильтра в Filter expression. Корректное выражение применяется после небольшой паузы при вводе; Enter запускает применение сразу.

  • Ctrl+Space — открыть подсказки.
  • Стрелки вверх и вниз — выбрать подсказку.
  • Enter или Tab при открытом списке — принять подсказку.
  • Esc — закрыть список подсказок.
  • Пустая строка — снять выражение фильтра.

После ==, != и внутри набора in (...) предлагаются известные значения выбранного поля. Для числовых полей подсказки также работают после <, <=, > и >=, для строковых — после contains. Список сужается по введённому префиксу: например, после protocol.type == u нажмите Tab, чтобы принять uds.

Подстановка работает и внутри кавычек: после can.frameType == "e предлагается "ext". Подсказки также используют кавычки для строк, совпадающих с ключевыми словами: например, направление "in".

Известные значенияПримеры полейВарианты
Логические признакиcan.fd, uds.positiveResponse, modbus.exceptiontrue, false
Строковые вариантыcan.frameType, isotp.frameType, canopen.typeТипы кадров и сообщений из каталога поля
Коды сервисов и ошибокuds.service, kwp.service, modbus.function, modbus.exceptionCodeИзвестные шестнадцатеричные коды
Сессии и командыuds.session, canopen.nmtCommandИзвестные коды сессий и команд

Для адресов, меток и других полей со свободными значениями используется ручной ввод. Числовые подсказки не запрещают другие коды: значение, отсутствующее в списке, можно ввести вручную.

Подсказки типа протокола ​

Поле protocol.type обозначает протокол сообщения выбранного уровня, а не физический адаптер. Допустимые значения приведены в справочниках VAG и CANopen.

Список значений определяется текущей трассой и выбранным уровнем: если на уровне Transport есть только ISO-TP, подсказка protocol.type предлагает isotp, без tp20. При переходе на уровень Protocol предлагаются прикладные протоколы. Новые типы появляются по мере поступления сообщений; после Clear очищенный участок не учитывается. Применённый фильтр и скрытие TesterPresent не сужают этот список. В пустой трассе поле доступно, но подсказок его значений нет.

Подсказки типов не запрещают ручной ввод: protocol.type == kwp2000 допустим и до появления сообщений KWP2000. Остальные списки значений, например для isotp.frameType, берутся из каталога поля и не ограничиваются текущими сообщениями трассы.

Если выражение не применяется ​

При ошибке выводится диагностика. Ранее применённый корректный фильтр остаётся действовать: проверяйте состояние Previous filter active. В VAG отдельный переключатель скрытия TesterPresent продолжает работать и при пустой строке.

Типы и литералы ​

ТипЗаписьПример
Целое числоДесятичное или шестнадцатеричное с 0x7, 0x7E0, 0xF190
Логическое значениеtrue или falsemodbus.exception == true
СтрокаВ двойных кавычкахcan.frameType == "std"
Простое строковое значениеПосле сравнения или внутри множества допускается без кавычекcanopen.type == pdo
БайтыСписок чисел от 0 до 255[0x62, 0xF1, 0x90]

Число 10 — десятичное; шестнадцатеричное десять записывается 0x0A. Используйте точный регистр имён полей и значений из справочника. Ключевые слова пишутся строчными буквами. Сравнение строк и поиск подстроки учитывают регистр. Не заменяйте canopen.nodeId на canopen.node_id или NodeId.

Операции ​

Приоритет: сравнения и операции in / contains, затем not, затем and, затем or. Скобки делают смешанные условия понятнее.

Пример: адрес устройства и набор функций Modbus RTU.

text
modbus.unitId == 7 and modbus.function in (0x03, 0x04)

Пример: формат идентификатора и набор CAN ID на уровне Physical.

text
can.frameType == std and can.id in (0x181, 0x185)

Пример: последовательность байтов в сообщении UDS на уровне Protocol VAG.

text
uds.data contains [0x62, 0xF1, 0x90]

Совместимые формы записи: in {1, 2}, hex"62 F1 90" для байтов и поле exists для проверки наличия. В примерах справки используются круглые скобки, список байтов и exists(поле).

Поле может отсутствовать ​

Отсутствие поля отличается от нуля, пустой строки и false. Примеры: у положительного ответа UDS нет кода отрицательного ответа; у ответа чтения Modbus нет начального адреса; у сегмента SDO может не быть индекса объекта.

Сравнение с отсутствующим значением даёт неопределённый результат. В таблицу попадают только строки, для которых всё выражение истинно. Поэтому условие uds.negativeResponseCode != 0x78 не означает «все сообщения, кроме ожидания»: оно также отсеет сообщения без этого поля. Отрицание сравнения эту проблему не решает.

Чтобы оставить сообщения без кода отрицательного ответа и ответы с другим кодом, явно проверьте отсутствие:

text
not exists(uds.negativeResponseCode) or uds.negativeResponseCode != 0x78

В смешанном VAG-потоке этот пример оставит и строки KWP2000: у них нет поля uds.negativeResponseCode. Чтобы ограничить результат типом UDS, используйте protocol.type:

text
protocol.type == uds and (not exists(uds.negativeResponseCode) or uds.negativeResponseCode != 0x78)

Если нужны только распознанные UDS-сервисы, используйте exists(uds.service):

text
exists(uds.service) and (not exists(uds.negativeResponseCode) or uds.negativeResponseCode != 0x78)

Выход за границы данных, например обращение к can.data[7] у двухбайтного кадра, тоже даёт отсутствующее значение. Неизвестное имя поля — другая ситуация: это ошибка выражения, которую программа показывает до фильтрации.

Границы языка ​

Фильтр проверяет каждый кадр или сообщение выбранного уровня отдельно. Он не присоединяет автоматически соответствующий ответ к найденному запросу, не вычисляет среднее время и не ищет отсутствующий ответ как отдельное событие. Между разными сообщениями нет арифметики или условий вида «после предыдущего сообщения».

Регулярные выражения, арифметические и побитовые операции не поддерживаются. Числовые поля целочисленные; сравнений с дробными литералами нет. Синтаксис не заявлен как полностью совместимый с Wireshark.

Описание работы с обменом: Modbus RTU, CANopen, VAG.

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