Диагностика автомобиля разъем obd2

Что такое OBD2 разъем и как пользоваться адаптером системы диагностики автомобилей

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

2021 09 30 12 39 03

Однако на законодательном уровне всё же удалось создать нечто стандартное, удобное для проверяющих организаций и частных предприятий по диагностике и ремонту. Это интерфейсный диагностический разъём OBD II, которым сейчас снабжены практически все автомобили.

История диагностики с OBD II

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

2021 09 30 12 41 45

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

К середине 90х годов описание разъёма окончательно сформировалось в виде OBD II, то есть второго финального варианта исполнения. On-Board Diagnostics II стал обязателен к применению на всех автомобилях в США после 1996 года.

Что такое EOBD

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

Это может быть сокращение от European, намёк на дополнительные способности Enhanced или просто бессмысленная приставка Electronic (других просто не существует).

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

20190418 172024 1

В результате параллельно с американскими стандартами на диагностический интерфейс SAE образовались и общемировые ISO.

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

Основная функция диагностического разъема

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

2021 09 30 12 41 45

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

Где находится

Расположение разъёма также стандартизировано, расстояние от руля не должно превышать 16 дюймов, более того, указаны совершенно точные места в нескольких вариантах для монтажа разъёма.

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

2021 09 30 12 45 58

Распиновка разъема ОБД 2

Очевидно, что назначение всех контактов в подобной системе должно быть чётко прописано. Использован стандартный 16-контактный разъём. а наиболее важные соединения однозначно привязаны к номерам контактов (пинам):

2021 09 30 12 39 42

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

Классификация протоколов

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

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

Протоколы класса A самые низкоскоростные, но одновременно и простые, базируются на традиционных компьютерных последовательных интерфейсах, то есть не требуют значительных мощностей в виде преобразующих микроконтроллеров. Скорость до 10 кбит в секунду. Это то, что называют K-line.

Чуть более быстрые и сложные интерфейсные последовательные протоколы, лучше защищены от помех, используют различные виды модуляции цифрового сигнала. Скорость примерно в 5-10 раз выше.

Пока самые современные протоколы, к ним относится CAN-шина, то есть скорость порядка 500 кбит/c, увеличена разрядность кодовых посылок и усложнены прочие алгоритмы. Хорошая помехозащищённость дифференциального сигнала с витой пары.

Протокол ISO9141

Содержит два провода K и L, хотя обмен вполне возможен и по двунаправленной K-линии, без контроля по L. Раньше широко использовались «шнурки» — универсальные K-line адаптеры. Работает вполне надёжно, но очень медленно.

J1850 VPW

Относится к группе протоколов американского стандарта J1850. Применяется на машинах GM. Работает впятеро медленнее, чем полностью аналогичный по логике J1850 PWM, используемый Ford.

2021 09 30 12 46 34

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

Расшифровка ошибок по системе OBD2

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

2021 09 30 12 48 05

Первый знак

Им может быть одна из четырёх букв:

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

Второй знак

Второй знак примерно относит кодировку к стандартной на уровне ISO или используемой производителем. Здесь пока единства нет. «0» — это кодовая страница ISO или SAE.

Третий знак

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

Четвертый и пятый символы

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

OBD2 и ELM327

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

Небольшой приборчик, содержащий в типовом случае программируемый контроллер, микросхемы питания, электрически перезаписываемой памяти и связи по типовым интерфейсам (трансмиттеры), по габаритам ненамного крупнее разъёма.

Он устанавливается в розетку OBD2 и выдаёт сигнал стандартного последовательного интерфейса UART, известного ещё с первых персональных компьютеров. Физически его можно передавать в ноутбук, компьютер или планшет через распространённые интерфейсы USB, Bluetooth или Wi-Fi.

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

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

Источник

OBD2 читаем и запоминаем.

b93d16s 100

m.habr.com/ru/post/444726/
Статья не моя, но коротко и ясно дана почти вся информация по обд. Советую к прочтению и сохраню для истории.

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

Изначально необходимо пояснить что для подключения к авто будет использоваться 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, что говорит о том, что у вас не получится подключиться к автомобилям, которые используют эти протоколы.

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

Подключение к адаптеру (Bluetooth, WIFI)
Отправка инициализационных команд (инициализационной строки)

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

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 не удалось, тогда адаптер начинает автоматический подбор протокола.

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

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

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

Так же желательно обратить внимание на команду 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]

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

0100 \\ запрос
BB1E3211 \\ ответ от авто

Переводим ответ от автомобиля в двоичную систему счисления

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

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

01, 03, 04, 05, 07, 08, 0C, 0D, 0E, 0F, 13, 14, 17, 1C, 20

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

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

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

03 – Для отображения сохраненных кодов ошибок
0A – Для отображения постоянных кодов ошибок.

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

private final static char[] dtcLetters = <'P', 'C', 'B', 'U'>;
private final static char[] hexArray = «0123456789ABCDEF».toCharArray();

private void performCalculations(String fault) <
final String result = fault;
String workingData = «»;
int startIndex = 0;
troubleCodesArray.clear();

try <
if (result.contains(«43»)) <
workingData = result.replaceAll(«^43|[\r\n]43|[\r\n]», «»);
> else if (result.contains(«47»)) <
workingData = result.replaceAll(«^47|[\r\n]47|[\r\n]», «»);
>
for(int begin=startIndex; begin > 6);
int ch2 = ((b1 & 0x30) >> 4);
dtc += dtcLetters[ch1];
dtc += hexArray[ch2];
dtc += workingData.substring(begin + 1, begin + 4);

if (dtc.equals(«P0000»)) <
continue;
>
troubleCodesArray.add(dtc);
>
> catch (Exception e) <
Log.e(TAG, «Error: » + e.getMessage());
>
>

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

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

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

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

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

Источник

Самостоятельная Диагностика OBD II — ВСТУПЛЕНИЕ* (неудача)

550ae14s 100

Всем привет!
Вообщем решил приобрести себе OBD II кабель для диагностики.
Долго выбирал…прикидывал… правда не дочитал немного и ошибся.
Да бы не совершать Вам таких ошибок при выборе и покупке обращайте внимание на:

Основное правило — убедитесь, что в Вашем автомобиле есть разъём OBDII

Он установлен почти на всех автомобилях из Европы и США с годом выпуска от 1996 г., и большинством автомобилей из Японии с годом выпуска от 2003 г. Также адаптер совместим с автомобилями из Китая, оснащёнными разъёмом OBDI, но бывают и редкие исключения. Если Вы не знаете как выглядит разъём OBDII, проверить его наличие достаточно просто: найдите под капотом автомобиля или в дверном проёме идентификационную наклейку или металлическую пластину. На ней должно быть обозначение «OBD II» или «OBD2».

Если же колодка и распиновка не подходит то возможно вам подойдет K-line адаптер
Сегодня на рынке очень много моделей, марок и фирм разных адаптеров, поэтому выбор только за вами.

bc85174s 960

Так как тема шла о ВАЗ 21099, то говорить мы будем только о ЭБУ ЛАДА и ВАЗ семейства 2108-2115.

Что такое ЭБУ (ЭСУД)?
Электронный блок управления двигателем (ЭБУ) – «компьютер», управляющий всей системой автомобиля. ЭБУ влияет как на работу отдельного датчика, так и на весь автомобиль. Поэтому, электронный блок управления двигателем очень важен в современном автомобиле.
ЭБУ чаще всего заменяется следующими терминами: Электронная система управления двигателем(ЭСУД), контролёр, мозги, прошивка. Поэтому, если вы услышите один из этих терминов, то знайте, что речь идёт о «мозгах», о главном процессоре вашего автомобиля. Иными словами, ЭСУД, ЭБУ, КОНТРОЛЁР – это одно и то же.

dea5174s 960

Поэтому важна сама распиновка (с чем я и ошибся вообщем при покупке)

По основным принципам разными являются Распиновки ЭБУ следующих моделей:
Январь 4 и GM
Bosch MP7.0 / M1.5.4
Январь 5.1 / VS5.1
Январь 7.2/M7.9.7
Bosch M17.9.7 (ВАЗ)
M74

Стандарт OBD-II: Диагностический коннектор

a8b5174s 960

1eb5174s 960

ff35174s 960

Внешний вид коннектора и колодки диагностики.

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

2) Мы выбрали адаптер, купили, чешим руки диагностировать во всю.
Но прежде нам понадобятся программы для удобной и бесперебойной работы с этими адаптерами и «мозгами» нашего авто.
Их так же большое количество и различаются они по своему.
НЕБОЛЬШОЙ СПИСОК ЭТИХ ПРОГРАММ:

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

Остальное оборудование носит в основном вспомогательный характер, хотя его наличие более чем желательно. Это:

Топливный манометр. О нем почитайте здесь.
Установка для очистки форсунок. Ультразвуковая с проливочным стендом (очень полезная вещь) или жидкостная.
Стенды для проверки свечей зажигания, модулей зажигания.
Качественный ампервольтомметр (мультиметр), желательно некитайского производства.
Хороший набор инструмента. Желательно фирменный.
Всевозможные пробники, хитрые приспособления, изготавливаемые мастером «под себя» и самостоятельно.

Дальше только дело рук и главное не торопитесь. читайте больше информации по вашему ЭБУ и руководства к нему и адаптеру.

ВСЕМ УДАЧИ! ПОДПИСЫВАЙТЕСЬ БУДЕМ ОБЩАТЬСЯ И ДЕЛИТЬСЯ ОПЫТОМ!

Источник

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:

3ipo8j8p5

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

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

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

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

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

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

9mcfvylfn4rve9gnwyud3lgncqi

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

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

3 w8d99ffh2uotdv9kaujlbcnee

Эпилог

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

Источник

Оцените статью
Avtoshod.ru - все самое важное о вашем авто