2014-12-16 4 views
1

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

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

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

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

АТЫ команда:

AT Z 
AT L0 
AT SP 6 or AT SP 0 

Прежде всего, после того, как инициализация завершена, я отправить PID 00 (01 00), чтобы знать, какой ИДП от 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] и [Отв] вручную для единственной целью, чтобы сделать его более понятным.

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

У меня есть еще один пример с ИДП 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?

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

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

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

ответ

2

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

Я нашел его, запросив несколько PID с заголовками ON (AT H1). С помощью этой команды мне удалось увидеть, что данные ответа поступают из идентификаторов canes 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.

This page where I asked this question too

 Смежные вопросы

  • Нет связанных вопросов^_^