2016-06-23 19 views
1

私はラズベリーパイとarduino CAN schieldを使用しています。これはMCP2515とSPIを使ってOBD II PIDを1つ要求しています。MCP2515 OBD IIマルチプルPID

OBDエミュレータ(Freematics)から単一のPIDをリクエストして受信することができます。私は、単一のクエリで複数のPID(最大6個のPID)を要求できることを知っています。

他の種類のメッセージを使用するたびに、最初のリクエストのみを受信します。誰も助けてくれるの?動作していない複数の要求に対する

msg.id = 0x7DF; //ID_QUERY 
msg.header.rtr = 0; 
msg.header.length = 0x08; 
msg.data[0] = 0x02; 
msg.data[1] = 0x01; 
msg.data[2] = PID; //Whatever PID I want! 

がMessage:私たちのFreematics OBD IIエミュレータは複数の応答の送信をサポートしていません

msg.id = 0x7DF; //ID_QUERY 
msg.header.rtr = 0; 
msg.header.length = 0x08; 
msg.data[0] = 0x07; //! Also it is not working with 0x08 
msg.data[1] = 0x01; 
msg.data[2] = PID0; 
msg.data[3] = PID1; 
msg.data[4] = PID2; 
msg.data[5] = PID3; 
msg.data[6] = PID4; 
msg.data[7] = PID5; 

答えて

0

:添付から撮影を参照してください。

まず、Freematics OBD Emulatorは複数のPID要求をサポートしていません。第2に、複数のPID要求はISO 15765形式で送信されるべきです。複数のリクエストを送信すると、ECUは1つの「First Frame」メッセージだけで応答し、送信者からの「Flow Control」メッセージを待機します。フロー制御を受信すると、ECUはフロー制御設定に基づいて応答を送信し続けます。 CANバスのメッセージや詳細については

「最初のフレーム」と「シングルフレーム」は、以下のリンクを読んでどのように機能するか: googleBooksISO_15765-2hackaday (dot) com

1

ここ

(C++)に取り組んでいる、単一のPIDのためのメッセージです。私たちのテスト車両の1つ、2010年のトヨタカローラはそうです。私たちの経験では、起動時にテストコマンドを送信して、通信しているデバイスが複数の応答をサポートしているかどうかを確認することをお勧めします。我々のアプリケーションのために、我々は二回、コマンド00を送って、

010000 

応答がそのより大きい25文字であれば、我々はそれが両方の00のコマ​​ンドに応答して、デバイスが複数のコマンドをサポートしています知っています。応答が25文字未満の場合、デバイスは最初の00コマンドだけに応答し、その結果、一度に1つのコマンドしかサポートしないことがわかります。受信した返答の数を確認することは複数の方法で行うことができましたが、長さはこれまでのところうまくいきました。

ユースケースに基づいて、単一のコマンドだけを送信するだけで十分です。しかし、実際に複数のコマンドのスピードを増やす必要がある場合は、起動時にデバイスが複数のコマンドに応答するかどうかを確認し、その結果に基づいてメッセージを作成してください。あなたのメッセージを予想された数の応答線で終わらせて、さらにスピードを上げるのを忘れないでください。 MCP2515を通じてCANBUSメッセージを送信すると、litle少しトリッキーですhttp://elmelectronics.com/DSheets/ELM327DS.pdf

enter image description here

+0

んFreematics OBD IIもないVINをサポートしていますか?つまり、私はFreematicsデバイスを通じてVINの最初の3文字を取得できますか?私は正しい? – Mogi

+0

私たちのFreematics OBD IIはvinをサポートしています。私たちはコマンド "0902"を送信することによってそれを取得します...あなたは 'vin'の最初の3文字を意味しますか?...あなたはどんなコマンドを送信していますか、どんな値を返していますか? –

+0

私はSPIとMCP2515を使ってC++コードでデータを送受信することを考慮しています。だから、私が送るものは7DFをヘッダーに、02 09 02を3バイトとしています。 (データバイト数、SIDおよびPID)。これは大丈夫です。私は8バイトの7E8ヘッダーと8バイトの10 14 49 02 01 57 50 4Fを受け取ります。問題は、私が7DFのフロー制御を送信するときです30 00 00 00 00 00 00 00他の14バイトのECUからの応答がなくなりました。 – Mogi

関連する問題