Распаковка ➔ Вася диагност 16 обновляемый! Сканер диагностики VW, Skoda, Seat, Audi

Разработка софта для elm327

Разработка софта для elm327

Ниже описывается, как использовать AT команды ELM327, чтобы получать информацию от Вашего автомобиля. Мы начинаем с обсуждения того как общаться с чипом при помощи компьютера, а затем объясним, как изменить параметры используя AT команды и, наконец, мы покажем, как использовать ELM327 для получения кодов ошибок (и сбросить их).
Использование ELM327 не такая сложная задача, как кажется на первый взгляд. Многим пользователям никогда не придется использовать 'AT' команды, настраивать тайм-ауты, или изменять заголовки. Для большинства, все, что требуется, это компьютер или смарт-устройство с терминальной программой (например HyperTerminal или ZTerm) и немного знаний о командах ОБД, которые мы предоставит в следующих разделах…
Читать дальше →

Разработка софта для elm327 часть2

Взаимодействие с Блоком управления автомобилем

Стандарты требуют, чтобы каждая OBD команда или запрос, отправленный на транспортное средство должны придерживаться установленного формата. Первый отправленный байт (известный как «режим») описывает тип запрашиваемых данных, а второй байт (и, возможно, третий и далее) определяет актуальную информацию, которая требуется. Байты, которые следуют после байта режима известны как байты «Идентификации параметров» или байт PID. Режимы и PIDы подробно описаны в документах, таких как SAE J1979 или ISO 15031-5, а также могут быть определены производителем автомобилей.
Стандарт 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, поэтому включите зажигание, но не заводите двигатель. Если вы экспериментировали, состояние интерфейса могут быть неизвестны, поэтому сбросьте его отправив:
> АТ Z
Вы увидите, что вспыхнет лампочка интерфейса, а затем чип должен ответить «ELM327 v1.4b». Теперь вы можете выбрать протокол, по которому ELM327 должен соединиться, но это, как правило, легче сделать просто выбрав протокол '0 ', который говорит чипу найти протокол самостоятельно:
> AT SP 0
Вот и все, что вам нужно сделать, чтобы подготовить ELM327 для общения с автомобилем. Введите команду режим 01 PID 00:
> 01 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, может быть запрошена вот так:
> 01 05
Ответ будет иметь вид:
41 05 7B
41 05 показывает, что это является ответом на Режим 1 PID 05, в то время как 7B является искомым значением данных. Преобразуем шестнадцатеричное значение 7B в десятичную форму, получаем 7 х 16 + 11 = 123. Это текущая температура в градусах Цельсия, но с нулевым смещением для обеспечения отрицательных температур. Чтобы преобразовать ее в фактическую температуру охлаждающей жидкости, необходимо вычесть 40 из полученного значения. В этом случае температура охлаждающей жидкости составит 123 — 40 т.е. 83 ° C.
Последний пример показывает запрос оборотов двигателя в минуту. Это PID 0С режима 01, поэтому в командной строке введите:
> 01 0C
Если двигатель работает, ответ может быть таким:
41 0C F8 1A
Возвращаемое значение (1А F8) на самом деле двухбайтовое шестнадцатеричное число, которое должно быть преобразовано в десятичное значение. Преобразовав это, мы получим значение 6904, которое высоковато для обычного двигателя.
Это потому, что количество оборотов в минуту отправляется с шагом в 1/4 оборота!
Чтобы преобразовать его в фактическое количество оборотов двигателя, мы должны разделить 6904 на 4. Значение 1726 оборотов в минуту выглядит значительно более разумным.
Обратите внимание, что эти примеры запрашивают информацию без учета используемого типа OBD протокола. Это происходит потому, что ELM327 обрабатывает форматирование и перевод данных. Если вы не собираетесь делать более продвинутые функции, на самом деле не нужно знать, что собой представляет протокол.
Приведенные выше примеры показали только одну строку ответа для каждого запроса, но ответы часто состоят из нескольких отдельных сообщений. Чтобы быть готовым к переменному числу строк ответа, ELM327 обычно ждет, чтобы увидеть, если вдруг появляется еще одно сообщение. Если ответ не приходит в определенное время, предполагается, что соединение завершено. Этот же таймер используется также при ожидании первого ответа, и если он не приходит, отображает «No Data».

Пример взаимодействия с elm327-устройством:

Блог им. info: Разработка софта для elm327 часть2
Команды:
ATZ — сброс устройства;
ATH1 — включает отображение заголовков, используемых в рамках диагностических протоколов;
ATI — отображение версии прошивки;
AT@1 — отображение описания устройства;
ATRV — прочитать текущий уровень напряжения на устройстве;
ATSP0 — включить автоматический выбор диагностического протокола;
ATDP — отобразить текущий диагностический протокол;
Результатом исполнения данной команды будет 'AUTO', таким образом, устройство находится в режиме автоматического определения диагностического протокола, но фактический протокол еще не определен. Далее мы исполняем команду 0100, то есть хотим определить какие PID'ы поддерживаются конкретным блоком управления двигателем (ЭБУ). Устройство отвечает строкой Searching… и после некоторого ожидания определяет диагностический протокол, возвращая ответ ЭБУ на исходный запрос PID'ов. После определения конкретного диагностического протокола запрос ATDP отображает его наименование.
0105 — отображает текущую температуру охлаждающей жидкости. Для того, чтобы получить реальное значение температуры, необходимо вычесть разность 'полученный результат — 40'.
ATH0 — отключает отображение заголовков диагностических протоколов, в этом случае результат команды 0105 отображает только полезную информацию в виде полученных значений.
Подробности и описание всех команд доступно здесь (на английском)