ヒント:私の数字はすべて16進数です。
OBD2プロトコルは、応答をバイト(8ビット)で送信します。応答はヘッダー(または呼び出されたID)とデータに細分されます。
IDはECUのアドレスであり、データはECUからの「応答データ」であり、常に8バイト(CANバスプロトコルでは?)です。
8バイトのデータは、PCI(1バイトまたは2バイト)と値に分割されます。 PCIは、あなたのフレームタイプ(単一、最初、連続またはフロー制御フレーム)と何バイトが入ってくるかを表示します。
あなたはこのようなメインECUにOBD要求を送信することがあります:
7DF 02 01 0C 00 00 00 00 00
7DF
の診断テスターデバイス用ECUのアドレスである、それが簡単に私は、単一のフレームのための例を作るようにする
。
02
は、データ・バイト
01
を送信数はモードです(あなたが面白いかもしれません!)01は、現在のデータであり、02はフリーズフレームで、など
0C
は、回転数のPIDです。
ECUからの応答が(単一フレーム)のようなものであろう:
7E8 04 41 0C 12 13 00 00 00
7E8
が応答することをECUです。
04
着信データバイト数。
41
データは01
PID
0C
このPIDに対応
12 13
に応答している0C
に応答して2バイトです。これら2バイトをOBD II ISOプロトコルでデコードする必要があることに注意してください。あなたはウィキペディアでいくつかのコンバージョン率を見つけることもできます。
他のバイトは無駄です。
簡潔にするには、ECUからの各応答を解析し、有用なバイトを可読な10進値に変換する必要があります。使用しているプログラミング言語によって異なります。私の意見では、C/C++のベストプラクティスはunsigned char
で、コンパイラによって8ビットであることが保証されており、JAVAではByte
になる可能性があります。さらに、ビット単位の演算子を使用して、あなたの人生を少し楽にしてください。
さらにお気軽にお問い合わせください。
ありがとうございました。私はこれをテストした後にあなたに戻ってきます。 – Eugene