Вопрос

Доступ к диагностическим кодам неисправностей (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

10 Комментариев

  1. В разделе «Интерпретация кодов неисправностей» (стр. 26) руководства по эксплуатации ELM327 Data Sheet приведён пример получения кодов неисправностей. Сначала вы отправляете запрос в режиме 01 PID 01, чтобы определить количество кодов неисправностей (которые вам нужно будет расшифровать в следующем запросе). Затем вы отправляете запрос в режиме 03 (без PID), чтобы получить фактические коды. Я попытаюсь перефразировать пример для потомков:



    Это должно привести к сбросу настроек интерфейса и автоматическому поиску протокола:



    ATZ
    ATSP0


    Это должно привести к отправке запроса в режиме 01 PID 01:



    01 01


    Типичный ответ может выглядеть так (в шестнадцатеричном формате):



    41 01 81 07 65 04



    Два байта «41 01» указывают на ответ на запрос pid 01 в режиме 1. Байт «81» (10000001 в двоичном формате) — это состояние MIL и количество кодов неисправностей. Первый бит — это бит включения/выключения MIL (в данном случае 1 или ВКЛ), следующие 7 бит (0000001) — это количество кодов неисправностей. Значение оставшихся трёх байтов указано в спецификации SAE J1979.



    Это должно привести к отправке запроса в режиме 03 (без PID):



    03


    Типичным ответом может быть



    43 01 33 00 00 00 00


    Байт 43 указывает на ответ на запрос в режиме 3. Следующие три пары байтов — это коды ошибок. В этом примере, как мне кажется, присутствует только один код (остальные — нули). Если нужно сообщить о более чем трёх ошибках, я не знаю, будет ли ответ длиннее или его разделят на несколько строк. Хм, Википедия предлагает использовать несколько «фреймов», но я не уверен, как именно это будет реализовано в чипе Elm. В любом случае «01 33» расшифровывается как DTC P0133. Для получения дополнительной информации см. техническое описание и спецификацию SAE J1979 (спецификация платная, вы можете провести реверс-инжиниринг других проектов с открытым исходным кодом, поддерживающих чипы ELM327, если не хотите или не можете получить доступ к спецификации). Похоже, кто-то добавил массу полезной информации в соответствующие статьи в Википедии.



    Похоже, что ELM327 поддерживает более высокую скорость передачи данных, чем старые чипы ELM. Это удобно для устранения неполадок и настройки. Вы можете получать данные с большего количества датчиков одновременно или получать максимум данных с одного датчика, чтобы выявить характеристики, которые могут быть незаметны при более низкой скорости передачи данных. Однако для использования более высокой скорости передачи данных вам может понадобиться специальный кабель OBDII — RS232.


  1. Этот вопрос и ответ на StackOverflow помогут вам двигаться дальше.



    Существует ли руководство по программированию адаптера ELM327 / obdkey OBD2 на языке Objective-C?


  1. Здесь, после отправки запроса 0101 и получения данных, вы написали, что 81 (10001000 в двоичном формате) — это статус MIL. Я хочу знать, как вы это написали? В двоичном формате это должно быть 01010001, если только вы не ошиблись. Кроме того, оставшиеся 7 бит, которые указывают на количество, получены в двоичном или десятичном формате?
  1. @MarkJohnson Я использую UART для подключения к OBD-II (ELM327) и FTDI (RS232 к USB) с кабелем OBD-DB9, а в качестве контроллера использую RaspberryPi. Результаты отображаются в терминале Pi
  1. @RoryAlsop я хочу установить соединение и написать программу для Raspberry Pi таким образом, чтобы я мог отображать коды неисправностей, сохранённые в ЭБУ, на терминале.
  1. Значит, он у вас уже подключен, но вам нужно знать диагностические коды? Они доступны в виде таблицы в интернете.
  1. Я разработал его для доступа к основным функциям OBD-II, таким как RPM, SPEED< дроссель. Но теперь я хочу разработать его для ДИАГНОСТИЧЕСКИХ КОДОВ НЕИСПРАВНОСТЕЙ.
  1. Если вы хотите разработать его с нуля, то для начала можно изучить спецификацию OBD-II.
  1. да, инструменты доступны, но я разрабатываю один из них. поэтому мне нужна помощь
  1. Полагаю, вы знаете, что в магазине автозапчастей можно купить прибор, который делает именно это.
Вы уже ответили на этот вопрос