Считыватель Obd2 - Диагностика Автомобиля

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

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

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

Соответственно, цель статьи будет объяснить организацию диалога доступным языком, а также рассказать, с какими ошибками вы можете столкнуться на этом пути и как с ними бороться.



Выбор подключения

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

В связи с тем, что передача данных по протоколу RS232 происходит последовательно, возникает первая проблема — скорость передачи данных, которую мы попытаемся преодолеть в одном из следующих пунктов.

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



ELM327 1.5 против ELM327 2.1



Считыватель OBD2 - диагностика автомобиля

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

Фактически v2.1 не поддерживает протоколы J1850 PWM и J1850 VPW, а это значит, что вы не сможете подключаться к автомобилям, использующим эти протоколы.



Связь

Подключение к адаптеру происходит в несколько этапов:
  • Подключение к адаптеру (Bluetooth, WIFI)
  • Отправка команд инициализации (строка инициализации)
Если с организацией подключения все понятно.

Принцип работы такой же, как и у любого чата Bluetooth/WIFI. Итак, чтобы понять, как отправить строку инициализации, нужно изучить, какие команды существуют, а также какие функции они выполняют. АТЗ [сбросить все] Сбросьте адаптер к заводским настройкам.

АТ Л1-0 Включить/отключить символы новой строки.

АТ Е1-0 Эхо вкл.

-выкл.

АТ Н1-0 Заголовки вкл.

– выкл.

АТ АТ0-1-2 Адаптивное время выкл.

– адаптивное автоматическое время1 – адаптивное автоматическое время2 НА СТ ФФ Установите таймаут на максимум.

В Д [установить все по умолчанию] Сбрасывает настройки в исходное состояние, настроенное пользователем.

АТ ДП [Опишите текущий протокол] Сканер способен самостоятельно определять протокол автомобиля, к которому он подключен.

АТ ИБ10 [установите скорость передачи данных ISO на 10400 бод] Команда устанавливает скорость передачи данных для ISO 9141-2 и ИСО 14230-4 10400 АТ ИБ96 [установите скорость передачи данных ISO на 9600] Команда устанавливает скорость передачи данных для ISO 9141-2 и ISO 14230-4 9600 для протоколов 3,4,5. АТ СП ч [Установить протокол h] Команда выбора протокола h, где h: 0 – Автоматический; 1 — ШИМ SAE J1850 (41,6 Кбод); 2 – SAE J1850 VPW (10,4 Кбод); 3 - ISO 9141-2 (5 бод иниц.

, 10,4 Кбод); 4 - ISO 14230-4 KWP (5 бод иниц.

, 10,4 Кбод); 5 — ISO 14230-4 KWP (быстрая инициализация, 10,4 Кбод); 6 — CAN ISO 15765-4 (11 битный идентификатор, 500 Кбод); 7 — CAN ISO 15765-4 (29-битный идентификатор, 500 Кбод); 8 – CAN ISO 15765-4 (11 битный идентификатор, 250 Кбод); 9 - CAN ISO 15765-4 (ID 29 бит, 250 Кбод); АТ СП Ах [Установить протокол h с помощью Авто] Команда устанавливает протокол h по умолчанию; если соединение по протоколу h не удается, то адаптер начинает автоматический выбор протокола.

На основе описанных выше команд создаем строку инициализации.

  
   

initializeCommands = Arrays.asList("ATZ", "ATL0", "ATE1", "ATH1", "ATAT1", "ATSTFF", "ATDP", "ATSP0");

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

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

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

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



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

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

Основные ПИДы можно найти в Википедии, там есть полный набор основных команд, которые должны поддерживать все автомобили.

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

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

Если мы хотим получить сохраненные данные автомобиля, то в начале команды нам нужно указать 02 .

Например, команда для получения текущей скорости автомобиля: 010D , а для получения сохраненной скорости – 020D .

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

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

Соответственно, если запрашивать все команды, то есть большая вероятность, что обновление реальных данных будет происходить очень медленно.

Но и эту проблему можно решить, если использовать команды, которые будут отображать только те команды, которые есть в машине.

Например: 0100 – поддерживаются PID [01 – 20] 0120 – поддерживаются PID [21 – 40] 0140 – поддерживаются PID [41 – 60] 0160 – поддерживаются PID [61 – 80] 0180 – поддерживаются PID [81 – A0] 01A0 – поддерживаются PID [A1 – C0] Я продемонстрирую, как определить, какие датчики присутствуют в автомобиле, с помощью одного из ФИДов.

Например:

  • 0100\запрос
  • BB1E3211\ответ от машины
Преобразование ответа от автомобиля в двоичную систему счисления

BB1E3211(16) > 10111011000111100011001000010001(2)

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

Считыватель OBD2 - диагностика автомобиля

На основе полученных данных мы можем определить, что наш автомобиль поддерживает следующие PID: Теги: #разработка Android #java #ИТ-стандарты #разработка Android #Автомобильные гаджеты #автомобиль #OBD2 #автомобильные технологии
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.