複数のECUチップを搭載した車両からフレームを受信


10

私は一般に「車の人」ではないので、うまくいけば、これを十分に説明して、ここでいくつかの助けを得ることができます:

OBD-IIデバイスにメッセージを送信すると、テストしたほとんどの車で1つの応答を受け取ります。しかし、明らかに複数のECUチップが搭載されている車では、それぞれから応答が返ってきます。たとえば、3つのECUチップを搭載した車両に01 0C PIDコマンドを送信すると、3つの応答が返されますが、これらは一般的に非常によく似ていますが、まだ異なります。

01 00コマンドは、車両のサポートされているPIDを述べて4つのバイトを返すことになって、これも4各ECUのバイト戻り、 -他は唯一持っているように見えるが、いくつかの完全にフラグとオフと4バイト肉付けされているものをいくつかのフラグがオンになっています(これまでのところ、これらのフラグは常に「メイン」応答に含まれるフラグですが、常にそうであるかどうかはわかりません)。

例:

SENT: 01 00

RECEIVED:

00 BF BF AC D3 - This response has the most binary flags turned on
00 98 18 80 11 - 8 flags on here
00 98 18 80 13 - 9 flags on here

最後の2行は、最初の行内でもフラグが立てられているフラグで構成されていますが、3行目には2行目とは異なるフラグが1つあります。

コマンドを送信するときに聞く必要がある「プライマリ」チップとして適格な単一のECUがおそらくあるように思われ、CAN IDマスク/フィルターを使用して必要なものだけに注意してください。

問題は、私が注意しなければならない「プライマリECU」が本当にあるのか、それともこれらすべての応答が同様に重要なのかということです。ターゲットにする必要がある主要なものがある場合、「最も重要な」ものを決定するために送信できるコマンドはありますか?

テストされた車両:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]

1
これを試してみたメーカーとモデルを教えてください。私が知っていることは、3つのECUを備えた車には、2つの通常のECU(エンジンバンクごとに1つ)と、2つの通常のECUとの間の信号を管理する1つの「マスター」ECUが設定される傾向があるということです。「マスター」ECUは実際にはそれ以上のことは行いません。そのため、診断トラブルコードが設定されている場合、その原因は「マスター」ではなく通常のECUになります。ただし、DTCを取得するには、OBD-IIインターフェースを介してマスターをポーリングする必要がある場合があります。これ以上お役に立てれば幸いですが、今のところ以上です。
Zaid

1
私はソフトウェアエンジニアですが、OBDまたはCANを使用していませんが、このページはまったく役に立ちますか?メッセージをフィルタリングする方法があるはずです。
JPhi1618

@Zaid追加情報をありがとう。テストした車で質問を更新しましたが、これは、任意の数の車両で決定する必要があることです。サポートされていないPIDを送信するときに期待する正確な応答によっては、問題にならないかもしれませんが、すべてのベースをカバーしたかっただけです
Rein S

@ JPhi1618これは実際には私がこれを必要としたコンテキストとほとんど同じです。リンクをたくさんありがとう、私はそれをもう少し深く掘り下げます。
Rein S

1
「答え」に具体化できると思われる興味のあるものがあれば、戻って自分の質問に答えてください。それは完全に許可されています。
JPhi1618

回答:


5

車両が2008以降で、canプロトコルを使用している場合は、AT CRコマンドを使用して、どのECUから連絡を受け取りたいかを選択できます。
方法は次のとおりです。
送信

AT H1

これにより、ヘッダーがオンになり、ECUのアドレスが表示されます。
送る

0100

これは、1〜20のどのpidがサポートされているかを示すOBDコマンドです。
あなたの応答は次のようになります:

7E8064100BE3EA813
7E906410098188013
>

これは、2つのECU 7E8(エンジン)7E9(トランスミッション)があることを示しています。5
つのECUが返されたことを確認しました:7E8、7E9、7EA、7EB、7EC。
1つのECUからのみ聞くには、AT CRA xxxを発行します。xxxはECUアドレスです。
以下を送ってください

AT CRA 7E8

その後

0100

戻ります:

7E8064100BE3EA813

送る

AT H0

ヘッダーをオフにして送信するには:

0100

そしてあなたはちょうど戻ってきます

4100BE3EA813

車両が29ビットの場合、0100の応答は次のようになります。

18DAF11806410088180013
18DAF110064100BE5FA813
>

これは2つのECU 18DAF118(トランスミッション)と18DAF110(エンジン)を示しています。
送る

AT CRA 18DAF110

エンジンだけから聞く。


こんにちは !!車両診断システムのプロトタイプに取り組んでいます。私はあなたの答えを調べましたが、クエリはほとんどありません... 1)使用可能なECUの数を確認するATコマンドはありますか?2)ヘッダーがオフの場合、「4100BE3EA813」という文字列が1つだけ表示され、「410098188013」が両方とも表示されない理由
Dev

4

CANはあなたが思っているように動作しません。

CANはモジュールベースではなく、メッセージベースです。他のモジュールと直接通信するモジュールはありません。CANでは、モジュールはアドレスを持つメッセージを生成します。そのアドレスは、メッセージに含まれるデータを識別します。また、アドレスはメッセージの重要性を示します。アドレスが低いほど、優先度は高くなります。

たとえば、ABSは車速を送信します。データを必要とする他のすべてのモジュールがそれを読み取ります。

他のどのモジュールよりも重要なモジュールはありません。重要なのはメッセージの優先度です。


これをフォローアップするだけです。他よりも重要なモジュールがない場合、複数のECUからの応答を除外する理由はありますか?たとえば、BMW M5のRPMを要求すると、3つの応答が返されます(これらは一般的に似ていますが、まったく同じではありません)。最初の回答を正確な読みとして「信頼する」べきでしょうか?各リクエストの最初の応答だけで進めない理由はありますか?
Rein S

すべての応答が同じアドレスを持っている場合、最初のものを信頼します。それらが同じアドレスを持っていない場合は、最も優先度の高いアドレスを信頼します。最高の優先順位は、最低のアドレスを持っています。
vini_i
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.