私は現在、OBD デバイス (ELM 327 Mini を使用) に接続してそのデータを読み取る Android 用のアプリケーションを開発しています。
私は OBDII プロトコルに比較的慣れていません。1 か月ほど前に作業を開始したばかりですが、公式ドキュメントを使用し、インターネットを調べ、必要なものの開発のための優れた基盤を作成する pires API を使用しています (あなたはこことここで見つけることができます)私はアプリケーションを完成させ、いくつかの車でそれをテストすることができました. 結果は、ほとんどの場合、メルセデス ベンツ クラス C w204 でアプリケーションをテストするまでは素晴らしいものでした。
この車では、私のアプリケーションが OBD から読み取るデータは、私には理解できないものです。同様の例を探してみましたが、うまくいきませんでした。この問題の解決策を見つけることができず、完全に立ち往生していることに気づきました。
このデータの例をいくつか書きますが、最初に、アプリケーションが OBD に接続するたびに OBD を初期化する方法をお知らせしたいと思います。行方不明です。しかし、私が言ったように、私のアプリケーションは他の車でも完璧に動作します。
AT コマンド:
AT Z
AT L0
AT SP 6 or AT SP 0
まず、初期化が完了したら、PID 00 (01 00) を送信して、車が 01 から 20 までのどの PID をサポートしているかを確認します。これが私の最初の問題です
時々私は受け取ります
[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 がサポートする車が動的に変化するとは思いません。
もう 1 つの理由は、PID 00 が 1 行または 2 行で応答されることがある理由です。最初の例では、最初の行が pid 00 に対する通常の回答であることがわかりますが、2 番目の回答は 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ってそういうこと?
また、車両の速度を要求すると NO DATA が返され、次の 2 秒以内に正しい値 41 0D 00 (たとえば) が返され、次の 2 秒で NO DATA が返されることがあります。つまり、NO DATA エラーが発生するのは完全にランダムです。問題は、時々正しいデータを返すことができるため、車が実際に PID をサポートしていることです。
OBD の初期化に何か問題があると確信しています。タイムアウトを長くするか、さらにコマンドを含める必要があるかもしれませんが、OBD プロトコルの専門家ではないため、どのように処理すればよいかわかりません。 . 公式ドキュメントで見逃したことや、私が犯した可能性のあるばかげた間違いを指摘するだけで、どんな種類の助けも本当に感謝しています。ほとんどの場合、何が起こっているのかを理解したいので、データを適切に処理できます。
どうもありがとう!