Appearance
Фильтры Tracer
Фильтр оставляет строки, удовлетворяющие условию по полям сообщения. Он действует на выбранное представление Tracer; сбор данных, сохранение и Monitor от него не зависят.
Выберите нужный каталог
| Профиль и уровень | Доступные поля | Справочник |
|---|---|---|
CANopen / VAG, Physical | trace.*, can.* | CAN |
| Modbus RTU | modbus.* | Modbus RTU |
CANopen, Protocol | canopen.* | CANopen |
VAG, Transport | isotp.*, tp20.* | Automotive VAG |
VAG, Protocol | uds.*, 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 продолжает работать и при пустой строке.
Типы и литералы
| Тип | Запись | Пример |
|---|---|---|
| Целое число | Десятичное или шестнадцатеричное с 0x | 7, 0x7E0, 0xF190 |
| Логическое значение | true или false | modbus.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.