Команды obd2 через elm327
Выбор подключения
Изначально необходимо пояснить что для подключения к авто будет использоваться 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)
- Отправка инициализационных команд (инициализационной строки)
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]
Я продемонстрирую как определить какие датчики присутствуют в автомобиле при помощи одного из пидов. Например:
- 0100 \\ запрос
- BB1E3211 \\ ответ от авто
Используя следующую табличку можем определить какие пиды поддерживаются нашим автомобилем, начиная от 01 до 20:
Исходя из получившихся данных можем определить, что наш автомобиль поддерживает следующие пиды:
Теперь вместо отправки всех 32 команд и ожидания ответа на них, несмотря на то, что некоторые могут отсутствовать, мы будем использовать всего 15 команд. Но и это не предел так называемой оптимизации. Для того чтобы данные обновлялись еще быстрее советую запрашивать только данные о тех датчиках, которые отображаются на экране. Хотя это ограничивает некоторый функционал приложения. Например, запись истории.
Считывание и расшифровка ошибок автомобиля
Ошибки автомобиля тоже могут быть различными и для них тоже существуют отдельные команды. Например:
- 03 – Для отображения сохраненных кодов ошибок
- 0A – Для отображения постоянных кодов ошибок.
А теперь пояснение.
3, 4, 5 символы формируются по этой таблице:
Исходя из этого можем попробовать разобрать следующий ответ 0001000000111110
Код ошибки: P103E
Эпилог
На данном этапе мы разобрались в том, каким образом организовать диалог с адаптером, посылать ему команды, получать и расшифровывать его ответы. Это большая часть работы, если считать то, сколько времени уходит на изучение материала, но в то же время довольно таки интересная. За пределами этой статьи осталось множество проблем связанных с визуальным интерфейсом, а также множество дополнительных функций, таких как добавление новых пидов из файла, стандартный и расширенный способ подключения к адаптеру и построения графиков.
Матвиенко Александр, Хоссейн Фахр.
P.S. Оригинальную английскую версию статьи можно найти здесь
Однако прежде чем приступить к эксплуатации устройства, необходимо уточнить совместимость сканера для диагностики с вашим автомобилем.
С какими автомобилями совместим сканер
Чтобы определить какой автосканер подходит для личного авто, достаточно определить протоколы обмена данными. Для этого необходимо взглянуть на колодку OBD-2 и уточнить, какие контакты на ней присутствуют:
Наличие контакта 7 (K-Line) говорит о том, что для диагностики используется протокол ISO 9141-2. Такие диагностические разъемы используются в автомобилях азиатского и европейского производства.
Выводы 4, 5, 7, 15 и 16 свидетельствуют о протоколе ISO14230-4KWP2000, который обычно используется на машинах Daewoo, KIA, Hyundai, Subaru STi и на некоторых моделях Mercedes.
Во всех описанных выше случаях можно смело пользоваться сканером ELM327. Кроме этого, он будет беспрепятственно работать с протоколами:
SAE J1850 PWM/VPW;
ISO 15765-4 CAN 29/11 bit 250/500 Kbaud;
SAE J1939.
Как правило, автосканер ELM327 без проблем устанавливается и подключается на любой автомобиль.
Как подключить на Android
Для подключения сканера ELM327 используется специальное гнездо, которое расположено под рулевой колодкой автомобиля (в салоне).
Полезно! Если сканер устанавливается на ВАЗ и прочие отечественные авто до 2006 года выпуска, то, скорее всего, потребуется воспользоваться переходником или адаптером.
Интерфейс программы
Если говорить про ELM 327 interface OBD 2, то он интуитивно понятен. После установки подключения необходимо дождаться, пока мигающая иконка с изображением автомобиля не перестанет моргать. Если все было правильно, то, устройство сразу начнет работать.
Разберемся, как пользоваться автосканером, а точнее, какие из иконок программы Torque нас будут больше всего интересовать:
Map View – отображает маршрут передвижения.
Во время движения автомобиля водитель может смотреть за показателями датчиков давления, скорости, расхода топлива и многого другого.
Если же вы хотите получать более развернутые данные о системах авто, то рекомендуется подключиться к сканеру ЭЛМ через ПК.
Как подключить на Windows
Чтобы разобраться, как подключить сканер к компьютеру необходимо скачать программу ScanMaster.
После этого необходимо:
Если вы являетесь ярым поклонником яблочной продукции, и вариант подключения к ПК или смартфону Android вас не устраивает, то стоит приобрести специальную модель ELM 327 Wi-Fi, которую можно подключить к любому iOS устройству.
Как подключить к iPhone или iPad
Чтобы заполучить свой собственный диагностический центр для проверки работы автотранспортного средства не обязательно подключаться к сканеру через блютуз. Более современные модели ЕЛМ оснащены Wi-Fi модулем, который позволяет использовать для получения данных практически любое портативное устройство.
Рассмотрим, как установить такое соединение:
На этом настройка заключена. Зная, как пользоваться сканером ELM 327, достаточно установить любое приложение для быстрой диагностики и прописать в ее настройках те же самые параметры IP и порта.
Однако стоит учитывать, что при настройке частных сканеров могут возникнуть трудности.
Наиболее частые ошибки при подключении
Проблемы, которые могут возникнуть при соединении:
Сканер не подключается к ЭБУ. Такое может случиться по нескольким причинам: прибор не подходит для марки/модели авто, неверно подобран переходник или программа. Иногда водитель забывает пройти инициализацию. Реже подключения не происходит из-за банальной механической поломки – вышел из строя предохранитель, который отвечает за работу разъема OBD II.
ELM327 не показывает данные в реальном времени (например, расход топлива). Дело в том, что данная функция доступна только во время движения автомобиля.
Автосканер не считывает или не сбрасывает ошибки. Часто для активации устройства нужен работающий двигатель, поэтому достаточно просто запустить мотор. Некоторые дешевые модели ELM327 не умеют обнулять ошибки ABS, это решаемо, но требуется модификация прибора.
В заключении
ELM327 – это компактный девайс, который позволит значительно сэкономить на диагностике автомобиля, он прост в использовании и позволяет выводить данные почти на любой ПК или телефон. Тем не менее, перед тем, как самостоятельно подключать автосканер, стоит изучить видео, в котором наглядно показан процесс использования ЕЛМ.
Главная Программы Разработка софта для elm327
Разработка софта для elm327
Ниже описывается, как использовать AT команды ELM327, чтобы получать информацию от Вашего автомобиля. Мы начинаем с обсуждения того как общаться с чипом при помощи компьютера, а затем объясним, как изменить параметры используя AT команды и, наконец, мы покажем, как использовать ELM327 для получения кодов ошибок (и сбросить их).
Использование ELM327 не такая сложная задача, как кажется на первый взгляд. Многим пользователям никогда не придется использовать 'AT' команды, настраивать тайм-ауты, или изменять заголовки. Для большинства, все, что требуется, это компьютер или смарт-устройство с терминальной программой (например HyperTerminal или ZTerm) и немного знаний о командах ОБД, которые мы предоставит в следующих разделах .
Взаимодействие с ELM327
ELM327 общаеться с компьютером через последовательный порт RS232. Хотя современные компьютеры как правило, не имеют последовательного порта, есть несколько способов создать виртуальный последовательный порт. Наиболее распространенными устройствами являются USB в RS232 адаптеры, но есть некоторые другие, такие как PC карты, сетевые устройства, или Bluetooth адаптеры.
Независимо от того, как вы подключитесь к ELM327, вам нужен способ отправлять и получать данные. Самый простой способ заключается в использовании одной из многих терминальных программ (HyperTerminal, ZTerm и т.д.), что позволяет вводить символы непосредственно с клавиатуры.
Для использования программы терминала, то вам нужно настроить несколько параметров. Во-первых, убедитесь, что ваше программное обеспечение использует правильный COM-порт и что Вы выбрали правильную скорость передачи данных - это будет либо 9600 бод (если контакт 6 = 0 В при запуске), или 38400 бод (если PP 0С не изменилась). Если вы выберете неправильный COM-порт, вы не сможете отправлять или получать данные. Если вы выберете неправильную скорость передачи данных, информация что вы отправляете и получаете будет искажена и нечитаема вами или ELM327. Не забудьте также установить соединение на 8 бит данных, без четности, 1 стоп-бит, и установить его на правильный режим "конец строки". Все ответы, полученные от ELM327 заканчиваются одним символом возврата каретки и, возможно, символом перевода строки (в зависимости от настроек).
В дополнение к определению версии чипа, эта строка является хорошим способом, чтобы подтвердить, что подключение к компьютеру и настройки программного обеспечения терминала правильны (впрочем, на данный момент нет связи с автомобилем, поэтому состояние этого соединения до сих пор неизвестно).
Символ '>' на второй строке это символ запроса в ELM327. Он означает, что устройство находится в состоянии ожидания, готово к приему символов на порт RS232. Если вы не видите строки идентификации, вы можете попробовать сбросить чип командой AT Z (сброс). Просто введите буквы A T и Z (Пробелы не являются обязательными), а затем нажмите клавиши ввода:
Это должно привести к тому, что светодиоды снова начнут мигать, и появится строка идентификации. Если вы видите странные символы, проверьте скорость - вы скорее всего установили ее неправильно.
При обработке OBD команд, ELM327 будет постоянно следить за любым активным входом RTS, или полученным символом RS232. Любой из них прервет чип, быстро возвращая управление пользователю, в то время как возможно прерывание любой инициации, и т.д., что было в процессе. После генерации сигнала для прерывания ELM327, программное обеспечение должно всегда ждать либо символа запроса ('>' или шестнадцатеричный 3E), или низкого уровня на выходе Busy перед началом отправки следующей команды.
Наконец, следует отметить, что ELM327 не учитывает регистр, поэтому "АТZ" "atz", и "АtZ" абсолютно одинаковые для ELM327. Все команды могут быть введены так, как вам удобнее. ELM327 также игнорирует символы пробелов и все управляющие символы (табуляция и т.д.), так что они могут быть вставлены в любом месте, если это улучшает читаемость.
Взаимодействие с Блоком управления автомобилем
Стандарт SAE J1979 в настоящее время определяет десять возможных диагностических режимов, среди которых:
01 - показывать текущие данные
Mode 1 PID Status & Live PID Information. Всего стандартом поддерживается около 20 параметров. Однако, каждый конкретный блок управления поддерживает ограниченное количество из них (например, в зависимости от установленных датчиков кислорода). С другой стороны, некоторые автопроизводители поддерживают расширенные наборы параметров - например, некоторые автомобили концерна GM поддерживают более 100 параметров. Через систему OBD-II диагностики можно считать (основные параметры):
- режим работы системы топливной коррекции (PID 03 Fuel system status). При значении "Closed Loop" система работает в режиме обратной связи (замкнутой петли), при этом данные с датчика кислорода используются для корректировки топливоподачи. При значении "Open Loop" данные с датчика кислорода не используются для корректировки топливоподачи;
- расчетная нагрузка на двигатель (PID 04 Calculated Load);
- температура охлаждающей жидкости (PID 05 Coolant temperature);
- краткосрочная коррекция подачи топлива по банку 1/2 (PID 06/08 Short Term Fuel Trim Bank 1/2);
- долгосрочная коррекция подачи топлива по банку 1/2 (PID 07/09 Long Term Fuel Trim Bank 1/2);
- давление топлива (PID 0A Fuel pressure);
- давление во впускном коллекторе (PID 0B Manifold pressure);
- обороты двигателя (PID 0C Engine speed - RPM);
- скорость автомобиля (PID 0D Vehicle speed);
- угол опережения зажигания (PID 0E Ignition Timing Advance);
- температура всасываемого воздуха (PID 0F Intake Ait Temperature);
- расход воздуха (PID 10 Air Flow);
- положение дроссельной заслонки (PID 11 Throttle position);
- режим работы системы подачи дополнительного воздуха (PID 12 Secondary Air Status);
- расположение датчиков кислорода (PID 12 Location of O2 sensors);
- данные с датчика кислорода №1/2/3/4 по банку 1/2 (PID 13-1B O2 Sensor 1/2/3/4 Bank 1/2 Volts).
Как правило, для анализа работы конкретной подсистемы системы управления двигателем, достаточно одновременно контролировать 2-3 параметра. Однако, иногда требуется одновременно просматривать и большее число. Число одновременно контролируемых параметров, а также формат их вывода (текстовый и/или графический) зависят как от возможностей конкретной программы-сканера, так и от скорости обмена информацией с блоком управления двигателем автомобиля (скорость зависит от поддерживаемого протокола). К сожалению, наиболее распространенный протокол ISO-9141 (см. ниже) является и самым медленным из всех - при работе с ним невозможно просматривать с приемлемой частотой дискретизации более 2-4 параметров.
02 - данные стоп-кадра
Получение сохраненной фотографии текущих параметров работы системы управления на момент возникновение кодов неисправностей (Mode 2 Freeze Frame)
03 - показать диагностические коды неисправностей
Mode 3 Read Diagnostic Trouble Codes (DTCs)
04 - очистить коды неисправностей и сохраненные значения
Mode 4 Reset DTC's and Freeze Frame data - стирание кодов неисправностей, фотографий текущий параметров, результатов тестов датчиков кислорода, результатов тестовых мониторов
05 - результаты испытаний кислородных датчиков
Mode 5 O2 Sensor Monitoring Test Result
06 - результаты испытаний датчиков, не контролируемых постоянно
Запрос последних результатов диагностики однократных тестовых мониторов (тестов, проводимых один раз в течение поездки) (Mode 6 Test results, non-continuosly monitored) - эти тесты контролируют работу катализатора, системы рециркуляции выхлопных газов (EGR), системы вентиляции топливного бака.
07 - показания "текущих" кодов неисправностей
Запрос результатов диагностики непрерывно действующих тестовых мониторов (тестов, выполняемых постоянно, пока выполняются условия для проведения теста) (Mode 7 Test results, continuosly monitored) - эти тесты контролируют состав топливно-воздушной смеси, пропуски зажигания (misfire), остальные компоненты, влияющие на выхлоп.
08 - специальный режим управления
Управление исполнительными механизмами
09 - запрос информации об автомобиле
Mode 9 Request vehicle information - запрос VIN-кода и калибровочных данных.
0A - запрос постоянных кодов неисправностей
Транспортные средства, не обязаны поддерживать все режимы, и в режимах, они не обязаны поддерживать все возможные PID (одни из первых OBDII-совместимые транспортные средства поддерживают только очень небольшое количество из них).
В каждом режиме ПИД-00 зарезервирован, чтобы показать, какие PID поддерживает этот режим. Режим 01, PID 00 должны поддерживать все транспортные средства, он доступен следующим образом.
Убедитесь, что ваш ELM327 интерфейс правильно связан с транспортным средством. Большинство транспортных средств не будет реагировать без ключа зажигания в позиции ON, поэтому включите зажигание, но не заводите двигатель. Если вы экспериментировали, состояние интерфейса могут быть неизвестны, поэтому сбросьте его отправив:
Вы увидите, что вспыхнет лампочка интерфейса, а затем чип должен ответить "ELM327 v1.4b". Теперь вы можете выбрать протокол, по которому ELM327 должен соединиться, но это, как правило, легче сделать просто выбрав протокол '0 ', который говорит чипу найти протокол самостоятельно:
Вот и все, что вам нужно сделать, чтобы подготовить ELM327 для общения с автомобилем. Введите команду режим 01 PID 00:
ELM327 должен ответить "Поиск . " затем он выдаст ряд чисел похожих на это:
41 00 ВЕ 1F B8 10
41 означает ответ на запрос Режим 01 (01 + 40 = 41), а второе число (00) повторяет запрошенный номер PID. Режим 02, ответ на запрос 42, режим 03 - 43, и т.д. Следующие четыре байта (BE, 1F, B8, и 10) представляют запрашиваемые данные, в данном случае набор битов показывает PID, которые поддерживаются этим режимом (1 = поддерживается, 0 = нет). Хотя эта информация не очень полезна для обычных пользователей, она доказывает, что соединение работает.
Другой пример запрашивает температуру охлаждающей жидкости двигателя (ECT). Температура охлаждающей жидкости это ПИД-05 в режиме 01, может быть запрошена вот так:
Ответ будет иметь вид:
41 05 показывает, что это является ответом на Режим 1 PID 05, в то время как 7B является искомым значением данных. Преобразуем шестнадцатеричное значение 7B в десятичную форму, получаем 7 х 16 + 11 = 123. Это текущая температура в градусах Цельсия, но с нулевым смещением для обеспечения отрицательных температур. Чтобы преобразовать ее в фактическую температуру охлаждающей жидкости, необходимо вычесть 40 из полученного значения. В этом случае температура охлаждающей жидкости составит 123 - 40 т.е. 83 ° C.
Последний пример показывает запрос оборотов двигателя в минуту. Это PID 0С режима 01, поэтому в командной строке введите:
Если двигатель работает, ответ может быть таким:
Возвращаемое значение (1А F8) на самом деле двухбайтовое шестнадцатеричное число, которое должно быть преобразовано в десятичное значение. Преобразовав это, мы получим значение 6904, которое высоковато для обычного двигателя.
Это потому, что количество оборотов в минуту отправляется с шагом в 1/4 оборота!
Чтобы преобразовать его в фактическое количество оборотов двигателя, мы должны разделить 6904 на 4. Значение 1726 оборотов в минуту выглядит значительно более разумным.
Обратите внимание, что эти примеры запрашивают информацию без учета используемого типа OBD протокола. Это происходит потому, что ELM327 обрабатывает форматирование и перевод данных. Если вы не собираетесь делать более продвинутые функции, на самом деле не нужно знать, что собой представляет протокол.
Пример взаимодействия с elm327-устройством:
ATZ - сброс устройства;
ATH1 - включает отображение заголовков, используемых в рамках диагностических протоколов;
ATI - отображение версии прошивки;
AT@1 - отображение описания устройства;
ATRV - прочитать текущий уровень напряжения на устройстве;
ATSP0 - включить автоматический выбор диагностического протокола;
ATDP - отобразить текущий диагностический протокол;
Результатом исполнения данной команды будет 'AUTO', таким образом, устройство находится в режиме автоматического определения диагностического протокола, но фактический протокол еще не определен. Далее мы исполняем команду 0100, то есть хотим определить какие PID'ы поддерживаются конкретным блоком управления двигателем (ЭБУ). Устройство отвечает строкой Searching. и после некоторого ожидания определяет диагностический протокол, возвращая ответ ЭБУ на исходный запрос PID'ов. После определения конкретного диагностического протокола запрос ATDP отображает его наименование.
0105 - отображает текущую температуру охлаждающей жидкости. Для того, чтобы получить реальное значение температуры, необходимо вычесть разность 'полученный результат - 40'.
ATH0 - отключает отображение заголовков диагностических протоколов, в этом случае результат команды 0105 отображает только полезную информацию в виде полученных значений.
Elm327Chat
версия: 1.17.7
Последнее обновление программы в шапке: 05.04.2021
Описание:
Программа для "авто-Сталкера" - лазим в машине
Программа для всех типов машин(автомобиль, мотоцикл, трактор и т.д.) где установлен ЭБУ
Программа простая, отправляете в ЭБУ машинный код(0105) получаете ответ из ЭБУ машинный код(41057B) - полученные данные анализируем(7B преобразуем в десятичную форму->123 - 40 = 83 ° C)
В программе можно создавать виджет (Бортовой Компьютер - смотреть за расходом топлива)
-Программа пишет log вот сюда: sdcard\ELM327Chat\elmLog-2019-10-26-15-20-05.log
Требуется Android: 3.1 и выше
Русский интерфейс: Да
00:FF F 01:FF F 02:FF F 03:32 F
04:01 F 05:FF F 06:F1 F 07:09 F
08:FF F 09:00 F 0A:0A F 0B:FF F
0C:68 F 0D:0D F 0E:9A F 0F5 F
10:0D F 11:00 F 12:FF F 13:55 F
14:50 F 15:0A F 16:FF F 17:6D F
18:31 F 19:31 F 1A:FF F 1B:FF F
1C:03 F 1D:0F F 1E:4A F 1F:FF F
20:FF F 21:FF F 22:FF F 23:FF F
24:00 F 25:00 F 26:00 F 27:FF F
28:FF F 29:FF F 2A:3C F 2B:02 F
2C:E0 F 2D:04 F 2E:80 F 2F:0A F
Запрос: “ 1A 90 ”
Ответ: “5A 90 56 41 5А 32 31 30 38 33 2D 30 30 30 30 30 31 30 2D 32 30 ”
5А –положительный ответ
90 – значение параметра
56 41 5А 32 31 30 38 33 2D 30 30 30 30 30 31 30 2D 32 30 VAZ21083-0000010-20
Запрос ----- Ответ.zip ( 11.86 КБ )
Мы продолжаем цикл статей о том, как подключиться к бортовой системе своего автомобиля (см. Часть 1 и Часть 2 ) и сегодня расскажем как считывать данные.
Предполагается, что к текущему моменту у нас есть машина с диагностическим разъемом, отвечающим OBD-II стандарту, любимое мобильное устройство (ноутбук, смартфон, планшет) и адаптер на базе ELM327, который позволит соединить машину и мобильное устройство.
Как уже говорилось в предыдущей части, независимо от типа связи между мобильным устройством и адаптером (Bluetooth, Wi-Fi, USB) на логическом уровне, — это последовательное соединение. На программном уровне необходимо открыть Socket соединение между компьютером и адаптером поверх имеющегося соединения нижнего уровня. Практическая программная реализация будет зависеть от операционной системы и типа соединения, примеров можно найти массу под все ваши любимые языки программирования. В качестве базового примера можно брать реализацию соединения на примерах чат-программ для Bluetooth или TCP\IP. В данной статье мы не будем останавливаться подробно на реализации такого соединения, для экспериментов нам хватит возможностей имеющихся программ а-ля Telnet, для экспериментов под Андроид и iOS мы встроили простую командную консоль в наше приложение OBD Car Doctor.
Итак, скачиваем и устанавливаем программу которая позволит установить последовательное соединение с адаптером и предоставить нам командную строку для общения с машиной.
- Для ноутбука с Windows (Linux) можно воспользоваться Putty ,
- для Андроид и iOS можно воспользоваться OBD Car Doctor Android, OBD Car Doctor iOS. Обратите внимание, что на момент публикации статьи на iTunes может еще быть старая версия 1.2, консоль будет доступна в версии 1.3.
После скачивания и установки программ пора брать компьютер (смартфон), адаптер и выдвигаться к машине. Распечатка этой статьи тоже не помешает.
Подробнее остановимся на связи с Bluetooth адаптером, как наиболее популярном и распространенном типе адаптеров.
Windows:
В разделе Устройства производим поиск новых устройств (на некоторых адаптерах нужно нажать кнопочку для того чтобы устройство обнаруживалось), после обнаружения устройства и ввода пин кода устройство появится в общем списке.
Смотрим на свойства, вкладка Оборудование
Теперь свойства Последовательного порта.
Видим и запоминаем, что Последовательное подключение Bluetooth мапится на порт COM3. Если есть необходимость, меняем на другой порт. Теперь запускаем Putty и настраиваем программу на работу с определенным на предыдущем шаге COM портом (в примере с COM3).
Итак, вводим имя COM порта, скорость 9600, тип Serial и кликаем Open для открытия терминального окна.
Android:
По завершению описанных действий вы готовы вводить команды и получать ответы от диагностической системы автомобиля. Естественно работать с консолью в движении не очень удобно и не безопасно даже для пассажира. Поэтому экспериментировать предлагаем на заведенной, но удобно припаркованной машине.
Выше мы упомянули, что команды подразделяются на 2 типа: команды управления адаптером и собственно OBD-II команды. Обычно команды управления начинаются с последовательности AT, в то время как OBD-II команды состоят только из шестнадцатеричных цифр.
Итак, наша первая команда:
• Следующей командой может быть команда установки протокола, вводим команду ATSP0, в ответ мы должны получить
ATSP0 OK >
Команда ATSP0 не устанавливает непосредственно протокол взаимодействия адаптера с автомобилем, это специальная команда, которая устанавливает автоматический режим определения протокола адаптером. Для непосредственного поиска и установления связи мы должны послать OBD-II команду.
• Отправляем команду 0100 (которая расшифровывается как MODE 01, PID 00), в случае успеха мы должны получить что-то вроде
0100 Searching…
41 00 XX XX XX XX >
Где X может быть любой шестнадцатеричной цифрой.
Здесь обратим внимание на несколько моментов:
• пробелы могут игнорироваться как в командах так и в ответах; наличие или отсутствие пробелов в ответе управляется отдельной командой ATS <0|1>
• в ответе может присутствовать или отсутствовать эхо (т.е. повтор команды, как в приведенном выше примере); наличие или отсутствие пробелов в ответе управляется отдельной командой ATE <0|1>
• сам ответ на команду содержит модифицированное значение команды, а именно (mode+0x40)(PID), т.е. положительный ответ на команду 0100, должен начинаться с 4100.
В случае неудачи ответы могут быть следующими:
0100 SEARCHING.
UNABLE TO CONNECT >
или
0100 SEARCHING.
NO DATA >
…
Подобные ответы означают, что адаптеру не удалось автоматически определить протокол связи с авто.
Вместо автоматического поиска протокола можно явно установить номер протокола, поддерживаются шестнадцатеричные номера от 1 до C.
1 - SAE J1850 PWM
2 - SAE J1850 VPW
3 - ISO 9142-2
4 - ISO 14230-4 KWP (5 baud init)
5 - ISO 14230-4 KWP (fast init)
6 - ISO 15765-4 CAN (11 bit, 500 Kbaud)
7 - ISO 15765-4 CAN (29 bit, 500 Kbaud)
8 - ISO 15765-4 CAN (11 bit, 250 Kbaud)
9 - ISO 15765-4 CAN (29 bit, 250 Kbaud)
A - SAE J1939 CAN (29 bit, 250 Kbaud)
B - USER1 CAN (11 bit, 125 Kbaud)
C - USER2 CAN (11 bit, 50 Kbaud)
Например, для явного установления связи по протоколу ISO 9142-2 набираем команду ATSP3, получаем в ответ ATSP3 OK >
И проверяем результативность командой 0100, опять же в случае успеха ожидаем увидеть
0100 Searching…
01 00 41 00 XX XX XX XX >
Если видим что-то другое, вроде
0100 BUS INIT:
…ERROR
Что значит — связь по данному протоколу не установлена.
Для тестирования и установления протокола связи может использоваться любая поддерживаемая автомобилем OBD-II команда, но рекомендуется использовать именно 0100, поскольку она должна поддерживаться производителем в соответствии со стандартом. Данная команда должна возвращать информацию о поддержке PID c 01 по 20 для MODE 01.
Напомним, что MODE 01 отвечает за чтение динамических параметров автомобиля (скорость, обороты, температуры и т.д.) в реальном времени. Соответственно, прочитав ответ на 0100, который содержит информацию о том, какие из PID c 01 по 20 (шестнадцатеричные) поддерживаются. Для расшифровки мы должны конвертировать шестнадцатеричное представление числа в бинарное, при этом позиция бита (от старшего к младшему) соответствует номеру PID (от 01 до 20).
Например, ответ содержащий 80 00 00 00 = 1000 0000 0000 0000 0000 0000.
Означает поддержку единственного PID, а именно 01.
Сейчас вы можете прочитать ответ вашего автомобиля на команду 0100 и узнать номера всех команд (PID) поддерживаемых в вашем автомобиле. Обратите внимание, что если поддерживается команда 0120, то отправив ее, можно прочитать номера поддерживаемых PID в диапазоне 21 – 40 и т.д., т.е. 0100, 0120, … 01D0, которые отвечают за определение номеров всех поддерживаемых команд в MODE 01.
Чтобы закрепить полученные знания, предлагаем выполнить еще одну простую команду и разобрать результат. Если вы расшифровали ответ команды 0100 и получили, что PID 0C поддерживается, отправим команду 010C (обороты двигателя), ответ должен быть в виде:
01 0C 41 0C 0B B8 >
Для получения значения в оборотах в минуту, необходимо полученный ответ (0B B8 = 3000) разделить на 4, т.е. получаем 750 об/мин.
Список поддерживаемых стандартом команд и формулы преобразования можно найти здесь.
Читайте также: