Skip to content

Практика: разобрать диагностику VAG ​

Задача: по записи выяснить, какой сервис вызвал диагностический прибор и как ответил ЭБУ. Рассматривается наблюдение обмена по CAN. Программирование, изменение настроек ЭБУ и захват K-Line не входят в сценарий.

Выберите Automotive → VAG. Загрузите подходящую .ptrc или наблюдайте уже выполняемую диагностику. Для TP2.0 желательно иметь начало установления канала; для исследования ответа — весь интересующий запрос и последующие сообщения.

Почему исходных CAN-кадров недостаточно ​

CAN-адаптер передаёт отдельные кадры, но диагностический ответ может занимать несколько кадров. Транспортный протокол объединяет их данные и обрабатывает служебную информацию; диагностический протокол определяет сервис, параметры и вид ответа.

Уровень TracerISO-TP / UDSTP2.0 / KWP2000
PhysicalОтдельные CAN-кадры с данными и служебными байтами ISO-TPОтдельные CAN-кадры открытия и работы канала
TransportСборка сообщения и управление потокомКонтекст канала, сборка сообщения и подтверждения
ProtocolЗапросы и ответы UDSЗапросы и ответы KWP2000

Например, положительный ответ на чтение VIN содержит SID, DID и 17 символов VIN — всего 20 байт. В классическом CAN при обычной адресации ISO-TP он передаётся тремя CAN-кадрами; принимающая сторона также отправляет управление потоком. Для просмотра всего диагностического ответа переходите на Protocol. Для проверки того, как он передавался, используйте нижние уровни.

1. Найдите сервис UDS ​

На Protocol:

text
uds.service == 0x22

Ожидаемый результат: распознанные запросы чтения по идентификатору, положительные ответы и отрицательные ответы на этот сервис. Проверьте адреса и время: в одном файле могут работать несколько блоков.

Если нужны только положительные ответы с фактическим SID 0x62:

text
uds.rawSid == 0x62

service объединяет смысл запроса и ответов; rawSid сравнивает конкретный байт.

2. Выделите DID ​

text
uds.service == 0x22 and uds.did == 0xF190

Ожидаемый результат: распознанные запросы и положительные ответы с DID VIN. Значение VIN относится к данным конкретного автомобиля; используйте для публичной демонстрации подготовленную запись.

Если ответ отрицательный, DID в нём нет. Для его поиска вернитесь к шагу 1 или используйте:

text
uds.service == 0x22 and uds.negativeResponse == true

Такое условие охватывает отрицательные ответы на все запросы этого сервиса, поэтому связь с конкретным DID устанавливайте по окружающему обмену.

3. Разделите ожидание и окончательный ответ ​

text
uds.negativeResponseCode == 0x78

Ожидаемый результат: сообщения ResponsePending. Вернитесь к фильтру по сервису и проверьте, пришёл ли затем положительный ответ или другой NRC. Отдельная строка 0x78 не означает, что операция закончилась неудачей.

Чтобы исследовать TesterPresent, разрешите его показ отдельным переключателем и используйте:

text
uds.service == 0x3E or kwp.service == 0x3E

При включённом скрытии TesterPresent такой фильтр не вернёт скрытые строки.

4. Посмотрите транспорт ​

Перейдите на Transport:

text
isotp.frameType == flowControl and isotp.flowStatus in (wait, overflow)

Ожидаемый результат: наблюдаемые сообщения управления потоком ISO-TP с ожиданием или переполнением. Если строк нет, это означает отсутствие совпадений среди разобранных записей, а не доказанную исправность всего обмена.

Для сравнения со служебными байтами перейдите на Physical и отберите фактические CAN ID своей записи. Набор полей uds.* на этом уровне недоступен.

5. Разберите TP2.0 / KWP2000 ​

На Transport найдите установление канала:

text
tp20.frameType in (channelSetup, channelAcknowledge, connectionSetup, connectionAcknowledge)

При необходимости отдельно найдите состояние неготовности получателя:

text
tp20.rnr == true

Затем на Protocol выберите интересующий сервис KWP2000. Например, чтение по локальному идентификатору:

text
kwp.service == 0x21

Ожидаемый результат: сообщения этого сервиса, если он встречается и распознан. kwp.localId позволяет сузить выборку по локальному идентификатору, но, как и в UDS, поле отсутствует в сообщениях, которые его не несут.

6. Зафиксируйте вывод ​

Отметьте запрос и ответ метками, сохраните .ptrc, укажите выбранный уровень и фильтр. Если запись начинается посреди обмена, отразите это в описании: неполный контекст может объяснять отсутствие расшифровки.

Справка: все поля Automotive VAG, Tracer, файлы трасс.