Понимание данных из протокола OBDII

В настоящее время я разрабатываю приложение для Android, которое подключается к устройству OBD (используя ELM 327 Mini) и считывает его данные.

Я относительно новичок в протоколе OBDII, я только начал работать с ним около месяца назад, но используя официальную документацию, поиск в Интернете и использование pires api, который создает хорошую базу для разработки того, что мне нужно (что вы можете найти здесь и здесь) Мне удалось доделать приложение и протестировать его на нескольких автомобилях. Результаты, по большей части, были отличными, пока я не протестировал приложение на Mercedes-Benz Class C w204.

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

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

АТ-команды:

AT Z
AT L0
AT SP 6 or AT SP 0

Прежде всего, после завершения инициализации я отправляю PID 00 (01 00), чтобы узнать, какие PID от 01 до 20 поддерживает машина. Вот моя первая проблема

Иногда я получаю

[Req] 01 00
[Ans] 01 00 41 00 98 18 00 01
[Ans] 1: 06 41 00 BF FF E8 93

И иногда

[Req] 01 00
[Ans] 01 00 41 00 95 00 20 13

Примечание. Я добавил [Req] и [Ans] вручную только для того, чтобы сделать его более понятным.

Что меня действительно беспокоит, так это тот факт, что ответ отличается. Иногда отвечает 41 00 95 00 20 13, а иногда 41 00 98 18 00 01, как это вообще возможно? Этот ответ PID должен быть всегда одинаковым для одной и той же машины, я не думаю, что машина может динамически меняться, какие PID поддерживает.

Другая причина заключается в том, что иногда на PID 00 отвечают 1 или 2 строки. В первом примере вы можете видеть, что первая строка является нормальным ответом на pid 00, но затем у нее есть второй ответ, который равен 1: 06 41 00 BF FF E8 93, и я действительно понятия не имею, что это значит.

У меня есть еще один пример с pid 01

[Req] 01 01
[Ans] 01 01 41 01 00 07 E9 00
[Ans] 1: 06 41 01 00 04 00 00

[Req] 01 01
[Ans] 01 01 41 01 00 04 00 00

Это потому, что он отвечает по разным протоколам одновременно? Это то, что означает 06?

Кроме того, при запросе скорости автомобиля иногда он возвращает НЕТ ДАННЫХ и в течение следующих 2 секунд возвращает правильное значение, 41 0D 00 (например), а следующие 2 секунды снова возвращает НЕТ ДАННЫХ. Это означает, что появление ошибки NO DATA происходит совершенно случайно. Проблема в том, что автомобиль фактически поддерживает PID, потому что время от времени он может возвращать правильные данные.

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

Большое спасибо!


person Mileni    schedule 16.12.2014    source источник


Ответы (1)


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

Я выяснил это, запросив несколько PID с включенными заголовками (AT H1). С помощью этой команды я смог увидеть, что данные ответа поступают с идентификаторов банок 7E8 (двигатель) и 7E9 (трансмиссия). Вот пример

[Req] 01 01
[Ans] 7E8 06 41 01 00 07 E9 00 
[Ans] 7E9 06 41 01 00 04 00 00

Чтобы исправить это, вы можете выполнить команду AT SH 7E0. Что делает эта команда, так это говорит OBD слушать только 7E8.

Источник: Эта страница, на которой я тоже задавал этот вопрос

person Mileni    schedule 19.12.2014