Ist es richtig, dass pro Identifier nur ein Sender existieren darf? Aber es dürfen mehrere Empfänger pro Identifier exisitieren. Was wenn Regel 1 verletzt wird? Zwei Sender senden zur selben zeit den selben Identifier. Die Arbitrierung würde dann ja erst nach Ablauf der ID einsetzen. Oder wie? Wqas geschieht, wenn auch die Datenbytes gleich sind?
Jeder Knoten darf beliebige Identifier senden. Somit dürfen auch zwei unterschiedliche Knoten Nachrichten mit dem gleichen Identifier verschicken. Falls zwei Knoten identische Nachrichten zum gleichen Zeitpunkt versenden, wird die Nachrich ja nicht verfälscht. Es bestht also für keinen der beiden Busteilnehmer die Notwendigkeit, die Übertragung abzubrechen.
Sicher? Mir spukt im Kopf herum, dass er bei Datenabweichung jenseits des Arbitrationsfensters (also der ID) mosert.
" Ist es richtig, dass pro Identifier nur ein Sender existieren darf? Aber es dürfen mehrere Empfänger pro Identifier exisitieren. " richtig " Jeder Knoten darf beliebige Identifier senden. Somit dürfen auch zwei unterschiedliche Knoten Nachrichten mit dem gleichen Identifier verschicken. " falsch " Was wenn Regel 1 verletzt wird? Zwei Sender senden zur selben zeit den selben Identifier. Die Arbitrierung würde dann ja erst nach Ablauf der ID einsetzen. " Das ist ein Fall der eigentlich nicht eintreten soll. es würde ein Fehler bei den Daten auftreten, was eigentlich nicht passieren darf. " Oder wie? Wqas geschieht, wenn auch die Datenbytes gleich sind? " nichts, das wäre der Glücksfall, aber der ist wohl sehr unwahrscheinlich.
@willi >Jeder Knoten darf beliebige Identifier senden. Somit dürfen auch zwei >unterschiedliche Knoten Nachrichten mit dem gleichen Identifier >verschicken. > >falsch Warum soll diese Aussage falsch sein? Bei CAN werden die Nachrichten durch die ID addressiert, also die Daten, nicht die Hardware (der Empfänger) selbst. Deshalb ist es durchaus möglich, das zwei unterschiedliche Knoten (Hardware) Nachrichten mit der selben ID verschicken. Nicht zur selben Zeit versteht sich. Die Arbitrierung gilt in erster Linie nur für die ID und das RTR Bit. Sollten zwei Knoten eine wirklich identische Nachricht, mit selben Dateninhalt, zur exakt selben Zeit senden, wird garnichts basieren. Da es für beide Knoten keine Verletzung der Arbitrierung und der folgenden Daten gibt. Basiert das selbe, nur mit gleicher ID, aber unterschiedlichen Daten, gilt: Der "0" Pegel ist dominant auf dem Bus. Das bedeutet simple: Die Nachricht mit den meisten Nullen gewinnt. Eine gute Erläuterung zu CAN in deutscher Sprache. http://www.mictronics.de/download/can_interface/Can-Protokoll.pdf
" Warum soll diese Aussage falsch sein? " Weil es so meines Wissens so spezifiziert ist. Falls ich mich da irre, dann weil es keinen Sinn macht. Der Link geht bei mir nicht.
> Basiert das selbe, nur mit gleicher ID, aber unterschiedlichen > Daten, gilt: Der "0" Pegel ist dominant auf dem Bus. Das > bedeutet simple: Die Nachricht mit den meisten Nullen gewinnt. Stimmt. Aber der andere Controller landet auf einen Bit Error und schiesst den Rest vom Frame mit einem sehr dominanten Error Frame ab. Ergebnis: Beide haben verloren.
Generell sollte man dafür sorgen, dass nur ein Knoten eine bestimmte ID verwendet (es gibt bestimmt sinnvolle Ausnahmen). Und gerade ein Anfänger sollte das einhalten. Just my opinion...
es gibt für mich keinen einzigen ersichtlichen Grund, dass mehrere Sender die gleiche ID verwenden. Das soll heissen: kein Vorteil, vorprogrammierte Nachteile.
>> Basiert das selbe, nur mit gleicher ID, aber unterschiedlichen >> Daten, gilt: Der "0" Pegel ist dominant auf dem Bus. Das >> bedeutet simple: Die Nachricht mit den meisten Nullen gewinnt. > > Stimmt. Eigentlich nicht. Da wo der eine 1 hat, kann der andere ja trotzdem eine 0 haben. > Aber der andere Controller landet auf einen Bit Error und > schiesst den Rest vom Frame mit einem sehr dominanten Error Frame ab. > Ergebnis: Beide haben verloren. Das kommt noch dazu.
Nun, es ist grundsätzlich möglich mehrmals die gleiche ID zu vergeben, aber nicht empfehlenswert. Wenn der Fall eintritt, dass zwei identische Nachrichten zur exakt selben Zeit senden wollen, demzufolge die Arbitration nicht wirkt. Dann zählt der interne Fehlercounter der CANController hoch (oder runter?) Wird dieser Fehler ausgewerdet kann entsprechend gehandelt werden.
>>> Basiert das selbe, nur mit gleicher ID, aber unterschiedlichen >>> Daten, gilt: Der "0" Pegel ist dominant auf dem Bus. Das >>> bedeutet simple: Die Nachricht mit den meisten Nullen gewinnt. >> >> Stimmt. >> >Eigentlich nicht. Da wo der eine 1 hat, kann der andere ja trotzdem eine >0 haben. es nützt ihm ja nichts eine 1 zu haben. Auf dem Bus wird die 0 zu sehen sein. oder wie meinst du das?
Michaels Methode ist die einer 1-Bit Übertragung. Wenn in genau einem einzigen Bit ein Unterschied, dann setzt sich der mit 0 durch (vom Error Frame abgesehen). Pech nur, wenn es zwei Bits sind und sich beim zweiten der andere durchsetzt. Quintessenz: Wenn jemand es unbedingt probieren will - bitte. Da explodiert und qualmt nichts und es kommt auch nicht die CAN-Polizei. Aber wenn man mit CAN sinnvoll und zuverlässig arbeiten will, dann Finger weg davon.
Apropos CAN-Polizei: Wenn der Hintergrund dieser Frage ist, dass man mit solchen Tricks in der Auto-Elektronik rumspielen will, dann könnte es schon etwas rechtlichen und finanziellen Ärger geben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.