Написать пост

rybkau

Как подключить смартфон к авто или история создания OBD Car Doctor

Ранее я попыталась репрезентовать мобильное приложение, которое надеюсь кому-то все-таки помогло найти общий язык со своим автомобилем. Данный пост дублирует опубликованный на Хабрахабр пост и рассказывает краткую историю возникновения идеи создания приложения OBD Car Doctor.


История

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

Картина чуть поблекла, но считывать-то доступные параметры мы сможем, а если повезет, то может и центральный замок открыть/закрыть сможем (хотя такая перспектива сулит дыру с системе безопасности Винд… т.е. автомобиля :) ).

И так, пора приступать к практическому исследованию!

Исследование

Автомобиль был в наличии, и теперь оставалось разобраться в том, как к нему подключиться. Подключаться нужно к диагностическому разъему (DLC - Data Link Connector). Данный разъем служит для подключения диагностических сканеров (которые «компьютерная диагностика») к бортовой сети авто и опроса/съема данных различных подсистем автомобиля.

Посмотрев на разнообразие марок авто, сканеров, коннекторов возникла легкая паника, как разобраться со всем этим «зоопарком», или хотя бы как найти вариант для своей машины?! К счастью, благодаря одному из экологических ведомств США (а именно California Air Resources Board - CARB), которое стремилось к унифицированному контролю уровней выбросов автомобилей, стандартизация добралась и до этой сферы.

Актуальным на данный момент является свод стандартов OBD-II , который описывает механические (форма и размер разъема), электрические (питание, сигнальные протоколы) и логические (информационные протоколы) уровни совместимости.
Здесь следует обратить внимание, что соответствие одному из параметров еще не гарантирует соответствия остальным. Т.е. Наличие правильного механического разъема в автомобиле не гарантирует соответствия стандарту сигнальных и логических протоколов, то есть не обязательно обеспечивает соответствие OBD-II стандарту.

Теория

Рассмотрим вышеупомянутые уровни совместимости:
• Механически это трапециевидный разъем фиксированного размера с 16 контактами.
• На электрическом уровне поддерживаются 5 основных сигнальных протоколов:
- SAE J1850 PWM
- SAE J1850 VPW
- ISO 9141-2
- ISO 14230 KWP2000
- ISO 15765 CAN
(ага, вот ты где знакомые буквы C, A, N… копаем дальше).
• Логический уровень предполагает отсылку сообщений заданной структуры и соответственно получение структурированного ответа. Пакет состоит из заголовка, тела сообщения, контрольной суммы .

Рассмотрим структуру тела запроса:
Структура представляется как .
• (1 байт) определяет функциональную группу параметров, например 01 – параметры реального времени, 02 – «снимки» параметров на момент возникновения ошибки и т.д.
• (1 или 2 байта) — Parameter ID, идентификатор запрашиваемого параметра в контексте группы, например для mode 01 pid 0D отвечает за текущее значение скорости автомобиля.
Например, 68 6C F1 01 0D A6, где header = 68 6C F1, body = 01 0D, crc = A6.

Структура тела ответа содержит код возврата:
• для положительного ответа
• для информации об ошибке 7F
• затем собственно возвращаемое значение
.

Например, 48 6B 10 41 0D 00 11, где header = 48 6B 10, body = 41 0D 00, crc = 11, т.е. собственно возвращаемое значение 00

Ну вот, уже почти все готово, прямо «на блюдечке с золотой каемочкой» ! А где же наша волшебная команда «Сим-сим открой центральный замок»?!… Но, к нашему большому разочарованию, стандарт OBD-II такую команду не описывает . Здесь мы вспоминаем, что разрабатывался стандарт по запросу экологического ведомства и естественно им нет никакого дела до того закрыт или открыт у нас центральный замок. Ну что же, придется довольствоваться тем, что есть: список охваченных стандартом команд, например вот здесь , при этом каждая конкретная модель автомобиля обычно поддерживает только небольшую часть полного списка. Нужно также упомянуть, что OBD-II стандарт предусматривает наличие пользовательских команд, специфичных для определённых производителей и моделей, однако публичная информация по этим командам практически отсутствует.

Что же в сухом остатке:

• Есть список параметров, которые описаны стандартом и которые, при условии поддержки со стороны вашей машины, можно будет прочитать. Обычно это некоторые динамическим параметры, которые можно мониторить в реальном времени (скорость, обороты, температура, параметры с лямбда датчиков, параметры по которым можно вычислить расход топлива и т.п.); ошибки, приводящие к включению индикатора CheckEngine; некоторые результаты самодиагностики бортовых систем авто. Также может поддерживаться команда сброса информации об ошибках;
• Есть гипотетическая возможность добраться до пользовательских параметров вашего автомобиля, список которых теоретически на много больше стандартного;

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

Спасибо за внимание, до новых встреч!
1 комментарий 8нравится 7избранное
TauRus36
Tdr
bm9701
Olegovich
Boomburum
gurni
kulakowka
kapion
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста, или зарегистрируйтесь.