Вопрос
Доступ к диагностическим кодам неисправностей (DTC) в автомобиле
Я хочу узнать, как получить доступ к кодам неисправностей, написав код и проанализировав его. У меня есть RaspberryPi и сопутствующее оборудование для связи с OBD-II автомобиля. Я буду создавать неисправности вручную, а затем, после включения индикатора неисправности, хочу просмотреть сгенерированные коды неисправностей в удобочитаемом формате.
Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/8233/accessing-diagnostic-trouble-codes-dtcs-in-car
1
В разделе «Интерпретация кодов неисправностей» (стр. 26) руководства по эксплуатации ELM327 Data Sheet приведён пример получения кодов неисправностей. Сначала вы отправляете запрос в режиме 01 PID 01, чтобы определить количество кодов неисправностей (которые вам нужно будет расшифровать в следующем запросе). Затем вы отправляете запрос в режиме 03 (без PID), чтобы получить фактические коды. Я попытаюсь перефразировать пример для потомков:
Это должно привести к сбросу настроек интерфейса и автоматическому поиску протокола:
Это должно привести к отправке запроса в режиме 01 PID 01:
Типичный ответ может выглядеть так (в шестнадцатеричном формате):
41 01 81 07 65 04
Два байта «41 01» указывают на ответ на запрос pid 01 в режиме 1. Байт «81» (10000001 в двоичном формате) — это состояние MIL и количество кодов неисправностей. Первый бит — это бит включения/выключения MIL (в данном случае 1 или ВКЛ), следующие 7 бит (0000001) — это количество кодов неисправностей. Значение оставшихся трёх байтов указано в спецификации SAE J1979.
Это должно привести к отправке запроса в режиме 03 (без PID):
Типичным ответом может быть
Байт 43 указывает на ответ на запрос в режиме 3. Следующие три пары байтов — это коды ошибок. В этом примере, как мне кажется, присутствует только один код (остальные — нули). Если нужно сообщить о более чем трёх ошибках, я не знаю, будет ли ответ длиннее или его разделят на несколько строк. Хм, Википедия предлагает использовать несколько «фреймов», но я не уверен, как именно это будет реализовано в чипе Elm. В любом случае «01 33» расшифровывается как DTC P0133. Для получения дополнительной информации см. техническое описание и спецификацию SAE J1979 (спецификация платная, вы можете провести реверс-инжиниринг других проектов с открытым исходным кодом, поддерживающих чипы ELM327, если не хотите или не можете получить доступ к спецификации). Похоже, кто-то добавил массу полезной информации в соответствующие статьи в Википедии.
Похоже, что ELM327 поддерживает более высокую скорость передачи данных, чем старые чипы ELM. Это удобно для устранения неполадок и настройки. Вы можете получать данные с большего количества датчиков одновременно или получать максимум данных с одного датчика, чтобы выявить характеристики, которые могут быть незаметны при более низкой скорости передачи данных. Однако для использования более высокой скорости передачи данных вам может понадобиться специальный кабель OBDII — RS232.