Adressierungsfehler bei CAN Bus ausschließen

Gast #5571189
Lesenswert?

Hallo!

Mir ist bekannt, wie ein CAN Telegramm aufgebaut ist. Mir ist auch 
bekannt, dass die Nutzdaten durch eine CRC-Checksumme verifiziert 
werden. Was ich mich allerdings frage: wie wird sichergestellt, dass die 
Adresse einer CAN-Nachricht nicht fehlerhaft ist. Dann würde die 
Nachricht von einer falschen Mailbox empfangen werden und könnte so für 
erhebliche Störungen sorgen. Offensichtlich kommt dies aber so gut wie 
nie vor, darum frage ich mich, wie dieser Sicherungsmechanismus 
funktioniert.

Danke!
Gast #5571202
Lesenswert?

Ohjeeminee schrieb:
> Was ich mich allerdings frage: wie wird sichergestellt, dass die
> Adresse einer CAN-Nachricht nicht fehlerhaft ist.

So eine CAN-Nachricht hat nur einen Absender.

Zusammen mit der Datensicherung über die CRC ergibt sich ein 
Hamming-Abstand von 6. Das hilft deutlich gegen zufällig falsche 
"richtige" Nachrichten.
Gast #5572092
Lesenswert?

Die Sache mit dem Hamming-Abstand habe ich mir gestern Abend mal 
angesehen. War mir neu und ich bin noch nicht ganz durchgestiegen. Ist 
vielleicht auch nur was für Mathematiker. Dass eine Fehlererkennung und 
-korrektur damit funktioniert, ist mir allerdings halbwegs klar 
geworden. Ist denn diese Fehlererkennung bereits im CAN-Protokoll 
implementiert oder muss man sich selber darum kümmern?
Gast #5572140
Lesenswert?

Ohjeeminee schrieb:
> Die Sache mit dem Hamming-Abstand habe ich mir gestern Abend mal
> angesehen. War mir neu und ich bin noch nicht ganz durchgestiegen.

Ein Hamming-Abstand von 6 bedeutet, dass sich zwei Nachrichten in 
mindestens 6 Bit unterscheiden, d.h. selbst wenn 3 Bit falsch übertragen 
werden, kann das immer noch im Empfänger korrigiert werden.
Gast #5572155
Lesenswert?

Ja, so weit, so gut. Nur, werden die fehlerhaften Bits dann beim 
CAN-Empfänger automatisch korrigiert, d.h. ist diese Fehlerkorrektur 
Bestandteil der CAN-Spezifikation, oder ist dafür eine Library bzw. eine 
gesonderte Funktion vonnöten?
#5572206
Lesenswert?

Sagt mal, ist das mit der Fehlerkorrektur nicht rein theoretischer 
Natur?

Wenn nur ein Teilnehmer die CRC falsch liest, dann er schon während der 
Übertragung im ACK Delimiter das Fehler Bit setzen. Damit ist das Frame 
ungültig und wird ggf. vom Sender neu übertragen.

Darüber kenne ich keinen integrierten CAN Transceiver Block, der 
fehlerhafte Frames auch nur in den RX FIFO schiebt.
#5572486
Lesenswert?

Nils P. schrieb:
> Sagt mal, ist das mit der Fehlerkorrektur nicht rein theoretischer
> Natur?

Naja, stell Dir mal vor, ein Teilnehmer sendet Botschaften auf der 
falsche ID. Die sind zwar gültig, aber trotzdem nur Müll.
Bestenfalls weicht die Länge ab und man kann darüber feststellen, dass 
die Botschaft Müll ist, wenn nicht hat der Empfänger ein Problem.
Für so einen Fall macht man bei kritischen Botschaften dann eben noch 
eine zusätzliche Absicherung über eine CRC-8 in den Daten.
#5572515
Lesenswert?

Wolfgang schrieb:
> Ohjeeminee schrieb:
>> Was ich mich allerdings frage: wie wird sichergestellt, dass die
>> Adresse einer CAN-Nachricht nicht fehlerhaft ist.
>
> So eine CAN-Nachricht hat nur einen Absender.

Nein, sie hat eine ID. Die beschreibt den Inhalt, nicht den Absender. 
Adressen gibt es beim CAN nicht.

Ohjeeminee schrieb:
> Ja, so weit, so gut. Nur, werden die fehlerhaften Bits dann beim
> CAN-Empfänger automatisch korrigiert, d.h. ist diese Fehlerkorrektur
> Bestandteil der CAN-Spezifikation, oder ist dafür eine Library bzw. eine
> gesonderte Funktion vonnöten?

Keins von beiden. CAN hat keine FEC. Fehler werden nur erkannt, nicht 
korrigiert.

Nils P. schrieb:
> Darüber kenne ich keinen integrierten CAN Transceiver Block, der
> fehlerhafte Frames auch nur in den RX FIFO schiebt.

Wenn, dann würde das der CAN-Controller machen, nicht der Transceiver.
#5572783
Lesenswert?

Klar kann man indirekt auf den Absender schließen. Trotzdem gibt die ID 
primär den Inhalt an, nicht den Absender. Der Empfänger liest die Werte 
die ihn interessieren, und dabei ist ihm eigentlich egal, wer der 
Absender ist. Und ein Absender kann auch (und wird oft auch) mehrere 
verschiedene IDs senden.
#5572959
Lesenswert?

Ohjeeminee schrieb:
> Ja, so weit, so gut. Nur, werden die fehlerhaften Bits dann beim
> CAN-Empfänger automatisch korrigiert, d.h. ist diese Fehlerkorrektur
> Bestandteil der CAN-Spezifikation, oder ist dafür eine Library bzw. eine
> gesonderte Funktion vonnöten?

Fehlerkorrektur ist der falsche Begriff. Es wird nichts korrigiert, 
sondern als fehlerhaft erkannte Pakete werden verworfen und die 
Übertragung wird vom Absender automatisch wiederholt.
Gast #5572964
Lesenswert?

Man verwendet ungerne Ientifier die sich nur in einem Bit unterscheiden, 
außerdem macht man auf Applikationsebene gerne weitere CRC und 
Botschaftszähler. Wenn die nicht passen verwirft der Empfänger in der 
Applikation die Daten.
Persönliche Seite #5572965
Lesenswert?

Wolfgang schrieb:
> Rolf M. schrieb:
>> Klar kann man indirekt auf den Absender schließen. Trotzdem gibt die ID
>> primär den Inhalt an, nicht den Absender.
>
> Natürlich gibt die ID den Absender der Daten an, z.B. den Drehzahlsensor
> oder einen bestimmten Temperatursensor.

Das kann sich z.B. bei einem Redesign ändern, ohne dass die Empfänger 
etwas davon merken.
Gast #5572983
Lesenswert?

npn schrieb:
>> Das kann sich z.B. bei einem Redesign ändern, ohne dass die Empfänger
>> etwas davon merken.
>
> Warum merken die Empfänger nichts davon, wenn z.B. die Drehzahl durch
> ein Redesign jetzt mit einer anderen ID gesendet wird?
> Klingt irgendwie unlogisch...

Weil die ID gleich bleibt nur das Steuergerät dass die Botschaft jetzt 
sendet ein anderes ist; höhere Integration oder Vereinfachung oder 
Änderung die den Rest nicht beeinflussen soll. Gerade bei automotive 
Tagesgeschäft....
Gast #5573037
Lesenswert?

rcc schrieb:
>> Warum merken die Empfänger nichts davon, wenn z.B. die Drehzahl durch
>> ein Redesign jetzt mit einer anderen ID gesendet wird?
>> Klingt irgendwie unlogisch...
>
> Weil die ID gleich bleibt

Du bist aber witzig!

Jürgen S. schrieb:
>> Natürlich gibt die ID den Absender der Daten an, ...
>
> Das kann sich z.B. bei einem Redesign ändern, ohne dass die Empfänger
> etwas davon merken.
Gast #5573044
Lesenswert?

npn schrieb:
> Warum merken die Empfänger nichts davon, wenn z.B. die Drehzahl durch
> ein Redesign jetzt mit einer anderen ID gesendet wird?
> Klingt irgendwie unlogisch...

Ne, ist heute Gang und Gäbe. Bei einem PKW wird z.B. die Raddrehzahl mit 
der ID 0x100 übertragen. Der Empfänger weis, das die Information in der 
ID 0x100 steck. Ob die Daten von einem ESP oder ABS kommen, je nach 
Ausstattung, ist dabei nicht erkennbar und auch nicht wichtig. Das gibt 
es bei verschieden Antriebsarten, Audiosystem, usw.

Dadurch kann man verschieden Kombinationen in einem Netzwerklaufen 
lassen, ohne jeweils einen eigene Architektur aufzubauen.
Gast #5573058
Lesenswert?

Besucher schrieb:
> Ob die Daten von einem ESP oder ABS kommen, je nach
> Ausstattung, ist dabei nicht erkennbar und auch nicht wichtig.

Die Drehzahl wird (in deinem Beispiel) trotzdem mit der ID 100 gesendet. 
Und die ID ändert sich auch bei einem Redesign nicht. So meinte ich das.
Insofern fand ich den Beitrag von Jürgen S. etwas mißverständlich...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren