OBD2 reader — диагностика автомобиля

Изначально необходимо пояснить что для подключения к авто будет использоваться ELM327 адаптер. ELM327 – это микросхема, которая позволяет преобразовать протоколы, используемые в диагностических шинах автомобилей в протокол RS232, которым мы и будем передавать данные. За счет того что передача данных по протоколу RS232 происходит последовательно возникает первая проблема – скорости передачи данных, которую мы постараемся обойти в одном из следующих пунктов.

Существует несколько вариаций адаптера ELM327, которые классифицируются по способу передачи данных – Bluetooth, WIFI, USB. Исходя из того что целью разработки является мобильное устройство под операционной системой Android можно подобрать две наиболее подходящие версии ELM327, такие как Bluetooth и WIFI. Так как способ получения и обработки данных один, а отличаются они всего лишь вариантами подключения к адаптеру, то можно выбрать всего один, организовать при помощи него диалог, а после добавить остальные варианты подключения.

ELM327 1.5 vs ELM327 2.1

Одной из первых проблем, с которыми можно столкнуться стала проблема выбора непосредственно адаптера, в нашем случае Bluetooth. Оказывается если вам необходимо поддерживать все (по крайней мере большинство) автомобилей необходимо выбирать версию v1.5 вместо v2.1, что на самом то деле необходимо несколько раз уточнить при покупке адаптера, потому как продавцы пытаются выдать версию адаптера не за ту, которая есть на самом деле, т. к. они особо ничем не отличаются. На деле же в версии v2.1 отсутствует поддержка протоколов J1850 PWM и J1850 VPW, что говорит о том, что у вас не получится подключиться к автомобилям, которые используют эти протоколы.

Подключение

Подключение к адаптеру происходит в несколько этапов:

AT Z [reset all]
Сброс настроек адаптера до заводского состояния.
AT L1-0
Включить/Отключить символы перевода строки.
AT E1-0
Echo on – off
AT H1-0
Headers on – off
AT AT0-1-2
Adaptive Timing Off — adaptive Timing Auto1 — adaptive Timing Auto2
AT ST FF
Установить таймаут на максимум.
AT D [set all to Default]
Сброс настроек в исходное, настроенное пользователем состояние.
AT DP [Describe the current Protocol]
Сканер способен самостоятельно определять протокол автомобиля, к которому он подключен.
AT IB10 [set the ISO Baud rate to 10400]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 10400
AT IB96 [ set the ISO Baud rate to 9600]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 9600 для протоколов 3,4,5.
AT SP h [ Set Protocol h]
Команда выбора протокола h, где h:

0 – Automatic;
1 — SAE J1850 PWM (41.6 Kbaud);
2 — SAE J1850 VPW (10.4 Kbaud);
3 — ISO 9141-2 (5 baud init, 10.4 Kbaud);
4 — ISO 14230-4 KWP (5 baud init, 10.4 Kbaud);
5 — ISO 14230-4 KWP (fast init, 10.4 Kbaud);
6 — ISO 15765-4 CAN (11 bit ID, 500 Kbaud);
7 — ISO 15765-4 CAN (29 bit ID, 500 Kbaud);
8 — ISO 15765-4 CAN (11 bit ID, 250 Kbaud);
9 — ISO 15765-4 CAN (29 bit ID, 250 Kbaud);
AT SP Ah [Set Protocol h with Auto]

Команда устанавливает по умолчанию протокол h, если подключение по протоколу h не удалось, тогда адаптер начинает автоматический подбор протокола.

Исходя из описанных выше команд, формируем инициализационную строку.

Желательно давать возможность пользователю сменять инициализационные команды, потому как для того чтобы подобрать «ключ» к некоторым авто необходимо выбрать более подходящие настройки адаптера. В нашем же случае используются настройки, которые походят для большинства стандартных протоколов.

Так же желательно обратить внимание на команду APSP0, таким образом мы устанавливаем по умолчанию автоматический подбор протокола, это может занять некоторое время.

Соответственно если пользователь знает какой у его авто протокол, то используя возможность смены протокола подключения он может поменять 0 на номер его протокола.

Считывание диагностических данных

Для считывания диагностических данных используются специальные команды PID’s.
PID (Parameter id’s — Бортовые диагностические идентификаторы параметров) – коды, которые используются для запроса показателей определенных датчиков автомобиля.

Основные пиды можно найти в Википедии, там полный набор основных команд, которые должны поддерживать все автомобили. Так же есть наборы команд для определенных марок и типов автомобилей, эти наборы предоставляются за отдельную плату. В нашем случае приложение заточено на базовую диагностику автомобилей соответственно мы используем базовый набор команд.

Также есть возможность получать текущие данные от автомобиля при этом команда получения данных от авто будет иметь вначале 01, указывая на то что мы хотим получить real data. Если же мы хотим получить сохраненные данные автомобиля, то вначале команды необходимо указать 02. Например, команда для получения текущей скорости автомобиля – 010D, а для получения сохраненной скорости – 020D.

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

0100 – PIDs supported [01 — 20]
0120 – PIDs supported [21 — 40]
0140 – PIDs supported [41 — 60]
0160 – PIDs supported [61 — 80]
0180 – PIDs supported [81 – A0]
01A0 – PIDs supported [A1 — C0]

Я продемонстрирую как определить какие датчики присутствуют в автомобиле при помощи одного из пидов. Например:

Используя следующую табличку можем определить какие пиды поддерживаются нашим автомобилем, начиная от 01 до 20:

Исходя из получившихся данных можем определить, что наш автомобиль поддерживает следующие пиды:

Теперь вместо отправки всех 32 команд и ожидания ответа на них, несмотря на то, что некоторые могут отсутствовать, мы будем использовать всего 15 команд. Но и это не предел так называемой оптимизации. Для того чтобы данные обновлялись еще быстрее советую запрашивать только данные о тех датчиках, которые отображаются на экране. Хотя это ограничивает некоторый функционал приложения. Например, запись истории.

Считывание и расшифровка ошибок автомобиля

Ошибки автомобиля тоже могут быть различными и для них тоже существуют отдельные команды. Например:

А теперь пояснение.

Исходя из полученного ответа мы можем получить код ошибки, для этого декодируем полученное сообщение используя следующие таблички.

3, 4, 5 символы формируются по этой таблице:

Исходя из этого можем попробовать разобрать следующий ответ 0001000000111110

Эпилог

На данном этапе мы разобрались в том, каким образом организовать диалог с адаптером, посылать ему команды, получать и расшифровывать его ответы. Это большая часть работы, если считать то, сколько времени уходит на изучение материала, но в то же время довольно таки интересная. За пределами этой статьи осталось множество проблем связанных с визуальным интерфейсом, а также множество дополнительных функций, таких как добавление новых пидов из файла, стандартный и расширенный способ подключения к адаптеру и построения графиков.

Матвиенко Александр, Хоссейн Фахр.
P. S. Оригинальную английскую версию статьи можно найти здесь

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Анонс: общаемся об Android-разработке с Senior Android Developer Spotify Славой Савицким

Google запустила новый Android Developer Challenge

Краткое руководство как стать Google Certified Associate Android Developer

Курсы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 58

Сейчас как решил вопрос прямого общения с CAN шиной через elm327.
Obd2 это протокол который должны поддерживать все автомобили любой марки.
По Can ходит проприетарный протокол, у разных производителей свой набор команд.

Can управляет всему функциями авто. Obd2 для диагностики малого количества параметров.
Например через obd2 я не могу посмотреть открыта дверь или закрыта, по Can могу.

Я поправлю: CAN НЕ управляет всеми функциями авто.

CAN — это сеть из контроллеров которые сидят на одной шине и общаются между собой. Такие сети можно связать между собой только через Gateway.
Обычно же CAN’ом ошибочно называют два провода на корых сидят контроллеры.

ODB2 это протокол, по которому контроллеры могут общатся с внешним миром.

Все верно. И простейший вариант: подключиться к CAN-шине через OBD-разъем, воткнув в него «китайский свисток» на основке ELM327 (адаптер).

А в документации этого адаптера есть описание и протокола CAN-шины, и команды управления, например, тут.

В ответ на команду вы получите код, расшифровку которого можно посмотреть, например, здесь. Но это только общая часть, действительная для практически всех производителей. А далее надо копать для каждого отдельно: Peugeot, Scoda, Reno, Volvo и т. д.

OBD — это грубо говоря стандарт на порт диагностики. CAN — это протокол обмена. В разъеме OBD2 может быть как CAN, так и что-то другое.

Вообще, рассматривайте CAN как ethernet для автомобиля. Как через обычный ethernet может ходить что угодно, начиная от голосовых звонков и заканчивая торрентами, так и на шине CAN может быть все что туда захочет запихнуть производитель авто.

Конечно. Вопрос, какие именно данные.
Я заказал пятидолларовый свисток из китая, а приложений в сторе валом.

Поворот руля и передачу оно не показывает — или я не нашел (да и не искал, если честно) или у меня машина старенькая или вообще нету. Не знаю. В остальном информации очень много: расход бензина, воздуха, обороты, темпратуры, сторость, а дальше какие-то сильно автомобильные показатели, которых я даже не понимаю, но их много.

Ээээ, правильнен сказать: «Самое дешёвое профессиональное CAN-устройство — от 100 у. е.» ;)

А аот верхней границы, увы, нет. :)))

Устройство — это просто адаптер. Вся соль в программе, которая будет подавать команды и разбирать затем ответ. А вот тут без знаний протоколов конкретных производителей НИКУДА не шагнешь. Поэтому и так дорого стоят.

Есть программа на python PyRen. Там многое очень доступно прямо из кода

Ну, не совсем — если вам будет нужен высокоточный и многоканальный CAN-сниффер & логгер для отладки программ — то там само по себе железо будет тоже не одну тысячу у. е. стоить. :)

В общем из известных мне профессиональных, но самых простых решений — где чисто на USB идёт поток данных, но там и оболочка есть простая и удобная, и API, и ещё пара мелочей — это вот:

Кажется, в «классических работах» Миллера и Валасека их тоже видел. :)

Эээ, тут я, увы, не знаю, что сказать — не видел, опыта нет. :)

Ну вот у меня как-то забарахлила приборка.
Ехать оставалось километров 200, а скорость 0. Да и обороты не особо верно кажет.
Подрубаем EML’ку и вуаля. Аналогичные истории с загоранием чека внезапным.

Пока у вас машина новая, это все не нужно — когда вы ездите на винтаже, то вот тут оно нужно и даже очень.

Если под словом OBD-2 Вы понимаете протокол, то нет, нельзя. Этот стандарт изначально предназначался для контроля за выбросами двигателя, и там есть только параметры, которые явно или косвенно на эти выбросы влияют.
Список параметров можно найти в википедии, «OBD-II PIDs». Также можно почитать стандарты, например ISO 14230 (платный, но можно найти в интернетах).

А если под словом OBD-2 подразумевать разъем, всё становится интереснее. В дорогих машинах он соединяется с остальной шиной через гейт, и кроме диагностики там ничего нет, а вот во всём, что попроще, прямо в разъеме видно весь обмен на шине. И вот там есть и скорость (сама приходит, ничего спрашивать не надо), и обороты, и угол руля (если есть ESP или усилитель достаточно умный). Текущей передачи, правда, не будет (если задний ход не считать :-) ), но её можно самому посчитать по отношению скорости и оборотов двигателя.

Конечно, если «чисто случайно» подключить OBD-разъем не к Diagnostic-CAN, а к скажем Body-CAN (а CAN распределитель не трудно найти), то там столько самого прийдет, что только успевай подставлять HDD :-)

По сути-то — что и где будет видно, это решение архитекторов конкретной модели.

И настройки гейтвеев (если они есть).

Как пример: когда я в самообразовательных и тестовых целях подключился на OBD-разъём моей сейчас семилетней Хюндай i30 — то там прекрасно было видно весь поток CAN-информации. С реакцией отдельных байтов и битов на открывание дверей, окон и пр.

Но если есть гейтвеи и строгая фильтрация — то мало что будет видно.

Все машины разные, гарантированного набора данных просто нет.
Вы можете примерно ориентироваться на то, что есть на приборной панели. Эти данные передаются через моторный CAN, но не факт что все. Например на моей Toyota Isis датчик уровня топлива подключен к приборке аналоговым проводом, и в моторном CAN отсутствует. Информация о номере передачи и вообще режимах автомата тоже отсутствует (лампочки на консоли подключены проводами напрямую к контроллеру автомата).
Для информации о кузове (управление замками, состояние концевиков дверей), надо подключаться к кузовному CAN. Опять же, для моей машины второго CAN просто нет, и такую информацию снять нельзя.

Чисто ради примера — вот там одна точка с моей машины в движении. Указаны все параметры, которые удалось снять из моторного CAN по стандартному протоколу:

Toyota Isis OBDII info:

mode 1: show current data; PID 0x01: MIL/DTC monitor; FUEL:GASOLINE; (0x00072100)
mode 1: show current data; PID 0x03: Fuel system status; Fuel corection 1: Open loop due to engine load OR fuel cut due to deceleration; (0x0400)
mode 1: show current data; PID 0x04: Calculated engine load value; 54% (0x8A)
mode 1: show current data; PID 0x05: Engine coolant temperature; 89°C (0x81)
mode 1: show current data; PID 0x06: Short term fuel % trim—Bank 1; (0x80)
mode 1: show current data; PID 0x07: Long term fuel % trim—Bank 1; (0x7D)
mode 1: show current data; PID 0x0B: Intake manifold absolute pressure; 53 kPa (0x35)
mode 1: show current data; PID 0x0C: Engine RPM; 1664 RPM (0x1A00)
mode 1: show current data; PID 0x0D: Vehicle speed; 85 km/h (0x55)
mode 1: show current data; PID 0x0E: Timing advance; 9° (0x92)
mode 1: show current data; PID 0x0F: Intake air temperature; 7°C (0x2F)
mode 1: show current data; PID 0x10: MAF air flow rate; 5 gramm/sec (0x0240)
mode 1: show current data; PID 0x11: Throttle position; 19% (0x32)
mode 1: show current data; PID 0x13: Oxygen sensors present; (0x03)
mode 1: show current data; PID 0x15: Bank 1, Sensor 2: Oxygen sensor voltage, Short term fuel trim; (0x03FF)
mode 1: show current data; PID 0x1C: OBD standards this vehicle conforms to; JOBD (Japan); (0x0A)
mode 1: show current data; PID 0x1F: Run time since engine start; 2889 sec (0x0B49)
mode 1: show current data; PID 0x21: Distance traveled with malfunction indicator lamp (MIL) on; 0 km (0x0000)
mode 1: show current data; PID 0x24: O2S1_WR_lambda(1): Equivalence Ratio Voltage; (0x9DCF9FFF)
mode 1: show current data; PID 0x2E: Commanded evaporative purge; 0% (0x00)
mode 1: show current data; PID 0x30: # of warm-ups since codes cleared; 255 (0xFF)
mode 1: show current data; PID 0x31: Distance traveled since codes cleared; 9531 km (0x253B)
mode 1: show current data; PID 0x33: Barometric pressure; 99 kPa = 742 mm Hg (Absolute) (0x63)
mode 1: show current data; PID 0x34: O2S1_WR_lambda(1): Equivalence Ratio; (0x9DCF829C)
mode 1: show current data; PID 0x3C: Catalyst Temperature Bank 1, Sensor 1; 731°C (0x1E1F)
mode 1: show current data; PID 0x3E: Catalyst Temperature Bank 1, Sensor 2; 575°C (0x180F)
mode 1: show current data; PID 0x42: Control module voltage; 13.867 V (0x362B)
mode 1: show current data; PID 0x43: Absolute load value; 18% (0x0030)
mode 1: show current data; PID 0x44: Command equivalence ratio; 0 (0x6D97)
mode 1: show current data; PID 0x45: Relative throttle position; 1% (0x04)
mode 1: show current data; PID 0x46: Ambient air temperature; 1°C (0x29)
mode 1: show current data; PID 0x47: Absolute throttle position B; 51% (0x84)
mode 1: show current data; PID 0x49: Accelerator pedal position D; 17% (0x2D)
mode 1: show current data; PID 0x4A: Accelerator pedal position E; 32% (0x52)
mode 1: show current data; PID 0x4C: Commanded throttle actuator; 19% (0x32)
mode 1: show current data; PID 0x4D: Time run with MIL on; 0 min (0x0000)
mode 1: show current data; PID 0x4E: Time since trouble codes cleared; 24406 min (0x5F56)
mode 3: show stored DTC; none
mode 7: show pending DTC (detected during current or last driving cycle); none

Код ошибки P0327 – низкий уровень сигнала цепи датчика детонации (Банк 1, Датчик 1)

Код ошибки P0327 звучит как «низкий уровень сигнала цепи датчика детонации (Банк 1, Датчик 1)». Часто, в программах, работающих со сканером OBD-2, название может иметь английское написание «Knock Sensor (KS) Circuit Low Input (Bank 1, Sensor 1)».

Техническое описание и расшифровка ошибки P0327

Этот диагностический код неисправности (DTC) является общим кодом трансмиссии. Ошибка P0327 считается общим кодом, поскольку применяется ко всем маркам и моделям транспортных средств. Хотя конкретные этапы ремонта могут несколько отличаться в зависимости от модели.

Код ошибки P0327 – низкий уровень сигнала цепи датчика детонации (Банк 1, Датчик 1)

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

Датчик детонации (KS), как правило имеет два провода. По одному подается 5 вольт к датчику, а по второму передаются параметры от датчика детонации к PCM, он является сигнальным.

Сигнальный провод датчика сообщает PCM, когда происходит детонация, а также какой силы. После этого, PCM замедляет синхронизацию зажигания, чтобы избежать преждевременной детонации. Большинство PCM способны определять тенденции искровой детонации в двигателе во время нормальной работы.

Код ошибки P0327 означает низкий уровень сигнала в цепи датчика детонации. То есть PCM обнаружил проблему с датчиком детонации или его цепью. Некоторые автомобили могут быть оборудованы несколькими датчиками детонации. Этот код относится к датчику 1 на банке 1, сторона двигателя с цилиндром №1.

Симптомы неисправности

Основным симптомом появления ошибки P0327 для водителя является подсветка MIL (индикатор неисправности). Также его называют Check engine или просто «горит чек».

Также они могут проявляться как:

Эта ошибка считается не очень серьезной. При ее появлении вряд ли возникнут серьезные проблемы с управляемостью автомобиля, однако возможно незначительное падение мощности двигателя.

Причины возникновения ошибки

Код P0327 может означать, что произошла одна или несколько следующих проблем:

Как устранить или сбросить код неисправности P0327

Некоторые предлагаемые шаги для устранения неполадок и исправления кода ошибки P0327:

Обратите внимание, что датчики детонации бывают двух типов, резонансные в виде бочонка и широкополосные в виде кольца-шайбы.

Диагностика и решение проблем

Начните диагностику с визуального осмотра всех связанных с системой жгутов проводов и разъемов. Осмотрите электрические цепи, датчики и разъемы, загрязненные моторным маслом, охлаждающей жидкостью или жидкостью для гидроусилителя руля.

Известно, что жидкости на нефтяной основе разъедают защитную изоляцию проводов и приводят к короткому замыканию или разрыву цепей. Это может стать причиной появления ошибки P0327.

Тест датчика

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

Для проверки датчика резонансного типа, точно так же подключаем цифровой мультиметр. Но вместо того, чтобы постучать по блоку двигателя. Необходимо снять реле топливного насоса, чтобы предотвратить запуск двигателя.

Проверните двигатель, включите передачу и держите ногу на тормозе. Как только автомобилю начинает не хватать топлива, он начнет постукивать и глохнуть. После чего вы должны увидеть выходное напряжение переменного тока. В противном случае датчик детонации неисправен и его необходимо заменить.

Проверка электрических цепей

Если датчик детонации работает нормально, но код P0327 все еще горит, вам необходимо проверить цепь датчика. Используя цифровой мультиметр, настроенный на сопротивление, подключите одну сторону измерителя к стороне жгута проводов разъема датчика. А другую к входному контакту датчика детонации на PCM. Так мы проверим целостность цепи между датчиком и PCM.

Теперь необходимо проверить заземление. Датчики детонации старого образца заземляются через сам датчик, а датчики нового типа обычно имеют отдельную цепь заземления. Подключите красный провод мультиметра к положительной клемме аккумулятора, а черный провод к массе. Вы должны увидеть значение около 12 вольт, указывающее на хорошее заземление. В противном случае необходимо искать неисправность цепи.

На каких автомобилях чаще встречается данная проблема

Проблема с кодом P0327 может встречаться на различных машинах, но всегда есть статистика, на каких марках эта ошибка присутствует чаще. Вот список некоторых из них:

С кодом неисправности Р0327 иногда можно встретить и другие ошибки. Наиболее часто встречаются следующие: P0135, P0171, P0174, P0325, P0326, P0328, P0329, P0330, P0331, P0332, P0333, P0334, P0420.

Источники:

https://habr. com/ru/post/444726/

https://autonevod. ru/obd2-codes/p0327

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: