В настоящее время я разрабатываю приложение для 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, я действительно не знаю как я должен пройти. Я бы очень признателен за любую помощь, просто указав на то, что я пропустил в официальной документации или любую глупую ошибку, которую я мог бы сделать. В основном я хочу понять, что происходит, поэтому я могу обрабатывать данные поудобнее.
Большое спасибо!