回答:
CAN仕様のセクション6.1 :
ビットエラー:バスでビットを送信しているユニットもバスを監視します。監視されているビット値が送信されたビット値と異なる場合、そのビット時間にビットエラーを検出する必要があります。例外は、ARBITRATION FIELDのスタッフィングビットストリーム中またはACK SLOT中の「リセッシブ」ビットの送信です。
したがって、他のノードが「0」を送信しているときに「1」を最初に送信するノードは、正式に説明されているように、エラーフラグ(セクション3.1.3を参照)を送信することにより、ビットエラーを記録し、通常どおりエラーを通知しますセクション6.2で。
非公式に、そのノードがエラーアクティブである場合(通常の場合)、他のすべてのノードも(スタッフエラーとして)検出する6支配ビットのエラーフラグを送信します。これには、そのメッセージを完全に破棄する効果があります。
その後、各送信機は再送信を試みます-再送信の正確なタイミングに応じて、一方がバスのゲイン制御を他方よりも十分に早く開始する場合があります。そうしないと、同じシーケンスが再び発生する可能性があります。(または、別のより優先度の高いメッセージにより、両方がしばらく先送りになる場合があります!)
以下の@clabbacchioの回答に触発された拡張回答。
あなたは「厄介なノード」に言及し、clabbacchioは、2つのノードが異なる時間に送信する場合、各受信者がその複数の受信をどうするかを決定する必要があるという有効なポイントを作ります。
これは昨年ハックによって実証されました。このペーパーでは、「PSCMの詳細」セクションで、攻撃者がバス上の通常のメッセージと同期し、「良い」ECUが送信しようとしているメッセージの直前に悪意のあるメッセージを再生する方法について説明します。受信ECUは、以前のメッセージを受け入れ、メッセージカウンターを更新し、メッセージカウンターが増加していないため、「良い」メッセージをエラーとして破棄します。
あなたの質問では、この仮説を立てます:
支配的なビットを持っている人だけが送信されます。
これは、2つのメッセージがまったく同時に送信されることを前提としています。これは、より一般的な問題の特定のケースです。Martinの有効な答えはこの特定の問題をカバーしていますが、2つのノードが異なる時間に送信する(より一般的な)ケースを無視します。
その場合、同じIDを持つ2つのメッセージが存在しますが、ペイロードはバス上を循環します。2つのメッセージを区別し、受信する必要があるコンテンツであるかどうかを判断するのは受信者のロジック次第です。2つのメッセージを区別できない場合、データを誤って解釈し、単なるエラーフレームよりも深刻な問題を引き起こす可能性があります。
たとえば、1つのメッセージには温度センサーの読み取り値が含まれ、もう1つのメッセージには同じバイト上のアクチュエーターの目標位置が含まれている(実際には絶対に発生しないでください)と言います。