Skip to content

Фильтры Tracer ​

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

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

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

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

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

Ввод ​

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

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

При ошибке выводится диагностика. Ранее применённый корректный фильтр остаётся действовать: проверяйте состояние 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.

Операции ​

ОперацияНазначениеПример
==, !=Равенство и неравенство совместимых типовmodbus.unitId == 7
<, <=, >, >=Сравнение целых чиселmodbus.quantity >= 10
and, or, notЛогические условияcan.fd == true and can.brs == true
in (...)Одно из перечисленных значенийmodbus.function in (0x03, 0x04)
containsПодстрока или непрерывная последовательность байтовcan.data contains [0xF1, 0x90]
exists(...)Наличие поля у этой записиexists(canopen.abortCode)
[индекс]Отдельный байт; отсчёт с нуляcan.data[0] == 0x22
( ... )Группировка условияcan.id == 0x185 and (can.data[0] == 1 or can.data[0] == 2)

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

text
modbus.unitId == 7 and modbus.function in (0x03, 0x04)
text
can.frameType == std and can.id in (0x181, 0x185)
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-сервисы, добавьте exists(uds.service):

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

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

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

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

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

Перейти к задачам: Modbus RTU, CANopen, VAG.