Поля фильтра Automotive VAG
В профиле VAG используются поля CAN на уровне Physical, поля ISO-TP / TP2.0 на уровне Transport и UDS / KWP2000 на уровне Protocol. В смешанной трассе разные протоколы одного уровня можно отбирать одним выражением через or.
Отбор по типу протокола
На обоих уровнях используется одно поле protocol.type. Его значение и подсказки зависят от выбранного уровня; поле относится к протоколу сообщения, а не к физическому адаптеру.
| Уровень | Поле | Тип | Значения |
|---|---|---|---|
Transport | protocol.type | Строка | isotp, tp20 |
Protocol | protocol.type | Строка | uds, kwp2000 |
Пример: сообщения ISO-TP на уровне Transport.
protocol.type == isotpПример: сообщения KWP2000 на уровне Protocol.
protocol.type == kwp2000Пример: тип протокола и сервис.
protocol.type == uds and uds.service == 0x22Пример: несколько типов протоколов.
protocol.type in (uds, kwp2000)Подсказки protocol.type предлагают протоколы текущей трассы; отсутствующий тип можно ввести вручную. Обновление списка и влияние фильтра описаны в правилах подсказок.
При диагностике по CAN TP2.0 относится к уровню Transport, а KWP2000 — к уровню Protocol.
Общая диагностическая адресация
Поля address.* одинаковы на уровнях Physical (CAN), Transport (ISO-TP) и Protocol (UDS). Значения берутся из выбранного диагностического профиля, с учётом 11-/29-битного формата CAN ID, а не из текста колонки или направления RX/TX. Для TP2.0, KWP2000 и CANopen эти поля не публикуются в каталоге; в смешанном источнике у таких записей значения отсутствуют.
| Поле | Тип | Значение |
|---|---|---|
address.type | Строка | physical, functional, unknown |
address.role | Строка | physicalRequest, physicalResponse, functionalRequest, unknown |
address.group | Строка | Идентификатор функциональной группы; отсутствует у физических каналов |
address.requestId | Целое | CAN ID физического запроса или функциональной группы |
address.responseId | Целое | CAN ID ответа физического канала; у группы отсутствует |
unknown означает, что адресацию не удалось определить: сведения отсутствуют или противоречат друг другу. В этом случае идентификаторы канала и группы отсутствуют. На уровне UDS проверяется также соответствие роли адреса содержимому сообщения: противоречие может быть обнаружено только после декодирования.
Функциональные запросы, включая пассивно принятые:
address.type == functionalЗапросы и ответы одного физического канала:
address.type == physical and address.requestId == 0x714 and address.responseId == 0x77EЗапросы группе координации VAG:
address.group == "vag.coordination"Неустановленные и противоречивые адреса:
address.type == unknownФильтр группы выбирает её запросы, а не ответы всех предполагаемых участников. Ответы остаются физическими; членство ЭБУ в группе автоматически не выводится. Идентификаторы 0x714/0x77E в примере — конкретная пара, а не универсальное правило VAG. Старое поле uds.addressing удалено: в сохранённых выражениях замените его на address.type.
UDS — Protocol
| Поле | Тип | Значение и применимость |
|---|---|---|
uds.service | Целое | Исходный нормализованный сервис: общий для распознанного запроса, положительного и отрицательного ответа |
uds.rawSid | Целое | Фактический байт SID сообщения |
uds.request | Логическое | Сообщение имеет определённую роль запроса |
uds.response | Логическое | Сообщение имеет определённую роль ответа |
uds.positiveResponse | Логическое | Положительный ответ; поле вида ответа неприменимо к запросу |
uds.negativeResponse | Логическое | Отрицательный ответ; поле вида ответа неприменимо к запросу |
uds.negativeResponseCode | Целое | NRC отрицательного ответа |
uds.did | Целое | DID в распознанных запросах и положительных ответах чтения/записи по идентификатору |
uds.rid | Целое | RID в распознанном запросе или положительном ответе RoutineControl |
uds.session | Целое | Сеанс из DiagnosticSessionControl или его положительного ответа; не «текущий сеанс всех сообщений» |
uds.src | Целое | Адрес источника из контекста диагностики, если известен |
uds.dst | Целое | Адрес назначения из контекста диагностики, если известен |
uds.data | Байты | Полное прикладное сообщение UDS, включая SID; без служебных байтов ISO-TP |
uds.src и uds.dst — адреса из диагностического контекста. Не подменяйте ими CAN ID без проверки адресации конкретного сообщения. Для CAN ID используйте can.id на уровне Physical или isotp.canId на уровне Transport.
Сервис и SID
uds.service == 0x22Условие охватывает распознанный запрос 22 …, положительный ответ 62 … и отрицательный ответ 7F 22 …. Для выбора именно положительного SID:
uds.rawSid == 0x62VIN по DID:
uds.service == 0x22 and uds.did == 0xF190Отрицательный ответ не содержит DID или RID исходного запроса. Фильтр по этим полям не добавляет ответ автоматически. Чтобы видеть и отрицательные ответы сервиса чтения, расширьте выражение фильтра:
uds.service == 0x22 and (uds.did == 0xF190 or uds.negativeResponse == true)В такой выборке отрицательный ответ может относиться и к другому DID того же сервиса. Уточняйте связь по последовательности и адресации.
Ожидание завершения обработки:
uds.negativeResponseCode == 0x780x78 — ResponsePending, а не окончательный отказ. Этот фильтр найдёт сообщение об ожидании, но скроет последующий положительный ответ; для изучения завершения вернитесь к фильтру по сервису.
KWP2000 — Protocol
В этом разделе рассматривается KWP2000 поверх TP2.0 по CAN; захват K-Line находится за его пределами.
| Поле | Тип | Значение и применимость |
|---|---|---|
kwp.service | Целое | Исходный нормализованный сервис |
kwp.rawSid | Целое | Фактический SID сообщения |
kwp.request | Логическое | Определённая роль запроса |
kwp.response | Логическое | Определённая роль ответа |
kwp.positiveResponse | Логическое | Положительный ответ; неприменимо к запросу |
kwp.negativeResponse | Логическое | Отрицательный ответ; неприменимо к запросу |
kwp.negativeResponseCode | Целое | NRC отрицательного ответа |
kwp.localId | Целое | Локальный идентификатор данных или процедуры, если он извлечён из сообщения |
kwp.commonId | Целое | Общий идентификатор данных, если он присутствует и распознан |
kwp.src | Целое | Известный логический адрес источника |
kwp.dst | Целое | Известный логический адрес назначения |
kwp.data | Байты | Полное прикладное сообщение KWP2000, включая SID |
Сервис чтения по локальному идентификатору:
kwp.service == 0x21Отрицательные ответы обоих протоколов в одной прикладной таблице:
uds.negativeResponse == true or kwp.negativeResponse == trueНе заменяйте or на and: одно сообщение не относится одновременно к UDS и KWP2000.
Отдельный переключатель TesterPresent скрывает соответствующие распознанные сообщения UDS/KWP2000 и действует совместно с выражением. Для исследования самого TesterPresent сначала разрешите его показ.
ISO-TP — Transport
| Поле | Тип | Значение и применимость |
|---|---|---|
isotp.canId | Целое | CAN-идентификатор транспортного сообщения |
isotp.frameType | Строка | Тип, из которого сформирована запись: single, first, consecutive, flowControl |
isotp.payloadLength | Целое | Длина полезной нагрузки ISO-TP без PCI |
isotp.flowStatus | Строка | Только Flow Control: continue, wait, overflow |
isotp.blockSize | Целое | Размер блока из Flow Control |
isotp.stMin | Целое | Сырой байт STmin из Flow Control; не универсальное число миллисекунд |
isotp.fd | Логическое | Согласованный признак CAN FD всех исходных кадров; при недостаточных или противоречивых данных отсутствует |
isotp.brs | Логическое | Согласованный признак BRS исходных кадров; при недостаточных или противоречивых данных отсутствует |
isotp.data | Байты | Полезная нагрузка ISO-TP без PCI |
Строка на уровне Transport — результат обработки исходных кадров. Число строк и полезная нагрузка здесь не обязаны совпадать с числом и содержимым отдельных CAN-кадров. Для проверки конкретных PCI-байтов переходите на уровень Physical.
Ожидание или переполнение получателя:
isotp.frameType == flowControl and isotp.flowStatus in (wait, overflow)Все Flow Control выбранного CAN ID:
isotp.canId == 0x7E8 and isotp.frameType == flowControl0x7E8 — пример, а не универсальный адрес VAG. Используйте идентификатор из своей трассы.
TP2.0 — Transport
| Поле | Тип | Значение и применимость |
|---|---|---|
tp20.channel | Целое | Номер наблюдаемого канала; до его установления может отсутствовать |
tp20.frameType | Строка | Тип сообщения открытия или работы канала; значения ниже |
tp20.sequence | Целое | Номер последовательности данных или подтверждения |
tp20.ack | Логическое | Признак запроса подтверждения в сообщении данных; не признак того, что эта строка сама является подтверждением |
tp20.rnr | Логическое | Receiver Not Ready в сообщении подтверждения |
tp20.applicationType | Целое | Тип приложения из установки или известного состояния канала |
tp20.data | Байты | Собранные прикладные данные TP2.0, когда они доступны |
Значения tp20.frameType:
| Группа | Значения |
|---|---|
| Широковещательный обмен | broadcastRequest, broadcastResponse |
| Открытие канала | channelSetup, channelAcknowledge |
| Отказ при открытии | channelApplicationTypeNotSupported, channelApplicationTypeTemporarilyNotSupported, channelNoResources |
| Данные и подтверждения | data, acknowledge |
| Параметры соединения | connectionSetup, connectionAcknowledge |
| Контроль и завершение | connectionTest, break, disconnect |
Получатель не готов:
tp20.rnr == trueОткрытие и закрытие канала:
tp20.frameType in (channelSetup, channelAcknowledge, disconnect)Подтверждения:
tp20.frameType == acknowledgeОтказ при открытии канала:
tp20.frameType in (channelApplicationTypeNotSupported, channelApplicationTypeTemporarilyNotSupported, channelNoResources)Для разбора динамического канала нужен контекст его установления — см. уровни Tracer в VAG.
Подробнее о сопоставлении сообщений: сервисы и ответы ЭБУ.