Appearance
Практика: разобрать диагностику VAG
Задача: по записи выяснить, какой сервис вызвал диагностический прибор и как ответил ЭБУ. Рассматривается наблюдение обмена по CAN. Программирование, изменение настроек ЭБУ и захват K-Line не входят в сценарий.
Выберите Automotive → VAG. Загрузите подходящую .ptrc или наблюдайте уже выполняемую диагностику. Для TP2.0 желательно иметь начало установления канала; для исследования ответа — весь интересующий запрос и последующие сообщения.
Почему исходных CAN-кадров недостаточно
CAN-адаптер передаёт отдельные кадры, но диагностический ответ может занимать несколько кадров. Транспортный протокол объединяет их данные и обрабатывает служебную информацию; диагностический протокол определяет сервис, параметры и вид ответа.
| Уровень Tracer | ISO-TP / UDS | TP2.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 == 0x62service объединяет смысл запроса и ответов; 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, файлы трасс.