Bitweise Arbitierung
Gary
- sonstiges
0 Der Martin
0 Gary0 Der Martin
0 Gary
Hallo zusammen,
Falls Bus oder Netztechniker in der Gegend sind *g*:
Es geht um ds Verständnis eines linearen Bus-Systems (hier jetzt der CAN-Bus, wie er Beispielsweise an BMW-Motorräder verbaut wird).
Grob erklärt:
Es gibt ein Leitungspaar, das Anfangs und Endseitig mit einem Widerstand (120 Ohm) verbunden ist. Eine Leitung ist quasi CAN_High und die andere CAN_Low). Parallel dazu sind einzelne Geräte angeschlossen. Nennen wir sie A, B und C. Jedes dieser Geräte kann Nachrichten auf dieses zweiadrige Bussystem senden und auch empfangen. Bis dahin hab ich das verstanden.
Um Störungen und Fehler zu vermeiden, wird jetzt eine sog. bitweise Arbitierung verwendet. Ebenfalls grob erklärt: Jede abgesetzte Nachricht enthält einen Objekt-Identifier. Sollten nun zwei Geräte gleichzeitig senden, wird am Objekt-Identifier festgelegt , welche Nachricht eine höhere Priorität besitzt, und die Nachricht mit der niedrigeren Priorität überschrieben. Das nennt man dominat/rezessiv Management. Also das Gerät mit der unwichtigeren Nachricht unterbricht sofort die Übertragung, wenn eine höhere Nachricht im Netz anliegt.
Jetzt zum Problem:
Wenn also die Nachrichten verschieden wichtig eingestuft sind, so muss doch eine Prioritätenliste vorliegen, über die _jedes_ angeschlossene Gerät verfügt. Und wie kann man überhaupt von bitweiser Arbitierung sprechen, wenn ein Bit als kleinste Informationseinheit nur die Werte "Null" und "Eins" annehmen kann. Anhand von nur einer Zahl, kann ich doch keine Priorität festlegen. Ich brauche doch mindestens noch eine weitere oder mehrere Nummern um den Prioritätsstatus zu beschreiben (001 vor 002 usw...).
Auch stelle ich mir vor, dass bei vielen gleichzeitigen Übertragungsversuche auf den Bus die dominante Nachricht arg zerstückelt wird, auch wenn andere Sender gleich stoppen. Das bedeutet das eine Nachricht aus Sicherheitsgründen nicht nur einmal sondern gleich mehrmals übertragen werden sollte, um sicherzustellen, dass sie durch kommt.
Gruss Gary
PS.: Es ist verrückt, was manche Hersteller für einen Aufwand betreiben, nur um ein paar Meter Kupferleitung zu sparen. Deshalb frage ich mich auch: Ist es wirklich nötig, das an modernen Motorräder die Lichtmaschine mit dem otorsteuergerät und der Motor mit dem Drehzahlmesser unbedingt über ein Bussystem miteinander kommunizieren müssen?
Hallo,
Es geht um ds Verständnis eines linearen Bus-Systems (hier jetzt der CAN-Bus, wie er Beispielsweise an BMW-Motorräder verbaut wird).
inzwischen wird CAN aber nicht nur im Automobil, sondern auch in der Industrieelektronik vielfach verwendet; in leichten Abwandlungen (LON) auch in der Gebäudeleittechnik. Kurz: Die Idee des CAN stammt aus der Automobilbranche, die Anwendungen gehen weit darüber hinaus.
Grob erklärt:
Geschenkt, das Prinzip ist bekannt.
Um Störungen und Fehler zu vermeiden, wird jetzt eine sog. bitweise Arbitierung verwendet.
Das ist nur ein Mechanismus, der sicherstellen soll, dass höher priorisierte Telegramme nicht von niedriger priorisierten blockiert, unterbrochen oder behindert werden.
Wenn also die Nachrichten verschieden wichtig eingestuft sind, so muss doch eine Prioritätenliste vorliegen, über die _jedes_ angeschlossene Gerät verfügt.
Viel zu kompliziert: Die PDO-Nummer (Process Data Object) selbst, auch Object ID oder Message ID genannt, *ist* gleichzeitig die Priorität der Nachricht. Je kleiner die Nummer, desto höher die Priorität der Nachricht.
Und wie kann man überhaupt von bitweiser Arbitierung sprechen, wenn ein Bit als kleinste Informationseinheit nur die Werte "Null" und "Eins" annehmen kann.
Du verwechselst Arbitrierung mit Priorität. Bitweise Arbitrierung bedeutet nur, dass bei jedem Bit aufs Neue geprüft wird, ob nicht jemand anders schon angefangen hat zu senden. Jeder CAN-Teilnehmer horcht beim Senden gleichzeitig den Bus ab. Sobald er "sieht", dass der logische Zustand der Busleitung nicht identisch mit dem Bit ist, das er selbst gerade senden will, nimmt er wieder die Finger vom Bus und bricht seine Übertragung ab.
Auch stelle ich mir vor, dass bei vielen gleichzeitigen Übertragungsversuche auf den Bus die dominante Nachricht arg zerstückelt wird, ...
Eben nicht. Das ist ja der Trick dabei. Dominante Bits (also logisch 0) werden von rezessiven Bits (logisch 1) nicht beeinträchtigt.
Das bedeutet das eine Nachricht aus Sicherheitsgründen nicht nur einmal sondern gleich mehrmals übertragen werden sollte, um sicherzustellen, dass sie durch kommt.
Deswegen werden sicherheits- oder funktionskritische Nachrichten normalerweise in kurzen Abständen wiederholt. Nicht nur, um Störungen bei der Übertragung auszubügeln, sondern auch um anzuzeigen: "Ich bin noch da, hier ist alles okay".
PS.: Es ist verrückt, was manche Hersteller für einen Aufwand betreiben, nur um ein paar Meter Kupferleitung zu sparen. Deshalb frage ich mich auch: Ist es wirklich nötig, das an modernen Motorräder die Lichtmaschine mit dem otorsteuergerät und der Motor mit dem Drehzahlmesser unbedingt über ein Bussystem miteinander kommunizieren müssen?
Das ist sicher ein Grenzfall. Aber im Automotive-Bereich werden die Anforderungen immer komplexer; in einem PKW der Mittel- oder Oberklasse quasseln manchmal bereits über 100 Steuergeräte in der Gegend rum. Einige sind sicherheitsrelevant (z.B. ABS), zum Teil nur Mitläufer (Fensterheber).
Ob das alles auch bei einem Motorrad schon nötig oder sinnvoll ist ... naja, Ansichtssache.
So long,
Martin
Hallo Martin
Viel zu kompliziert: Die PDO-Nummer (Process Data Object) selbst, auch Object ID oder Message ID genannt, *ist* gleichzeitig die Priorität der Nachricht. Je kleiner die Nummer, desto höher die Priorität der Nachricht.
OK, das leuchtet ein und ist schön simpel gehalten
Du verwechselst Arbitrierung mit Priorität. Bitweise Arbitrierung bedeutet nur, dass bei jedem Bit aufs Neue geprüft wird, ob nicht jemand anders schon angefangen hat zu senden. Jeder CAN-Teilnehmer horcht beim Senden gleichzeitig den Bus ab. Sobald er "sieht", dass der logische Zustand der Busleitung nicht identisch mit dem Bit ist, das er selbst gerade senden will, nimmt er wieder die Finger vom Bus und bricht seine Übertragung ab.
Trotzdem kann es passieren, das beim "Abhorchen" alles frei war, und just im Augenblick des "Sendens" eine Nachricht mit hoher Priorität ebenfalls gesendet wird. Das muss doch zu Signalbeeinträchtigungen führen. Und die niedrigere Nachricht? Automatische Wahlwiederholung? Puffer?
Eben nicht. Das ist ja der Trick dabei. Dominante Bits (also logisch 0) werden von rezessiven Bits (logisch 1) nicht beeinträchtigt.
Genau diesen Teil verstehe ich nicht. (Sind eigentlich auch drei Leitungen: CAN_High/CAN_LOW/CAN_Ground). Hat das etwas mit diesem Satz zu tun: "CAN_Low enthält den komplementären Pegel zu CAN_High gegen Masse" ?
Was heisst das genau (z.B. in Volt)
Das ist sicher ein Grenzfall. Aber im Automotive-Bereich werden die Anforderungen immer komplexer; in einem PKW der Mittel- oder Oberklasse quasseln manchmal bereits über 100 Steuergeräte in der Gegend rum. Einige sind sicherheitsrelevant (z.B. ABS), zum Teil nur Mitläufer (Fensterheber).
Ob das alles auch bei einem Motorrad schon nötig oder sinnvoll ist ... naja, Ansichtssache.
Ja, oder Geldmacherei, wenn man bedenkt was ein kommunikationsfähiges Gerät kostet, wenn es kaputt geht. Da wäre die Kupferleitung billiger gekommen.
Mir tun nur die Blauweisen Motorradfahrer leid, wenn sie beispielsweise die Motorradbatterie über die kleine KFZ-Steckdose aufladen wollen. Haben sie kein Spezialladegerät mit Codesender, bleibt nur der Ausbau der Batterie, da der CAN_Bus bei abgezogenem Zündschlüssel die Dose nach ca. 15 Min. abschaltet.
Viele Grüsse Gary
Moin!
Bitweise Arbitrierung bedeutet nur, dass bei jedem Bit aufs Neue geprüft wird, ...
Trotzdem kann es passieren, das beim "Abhorchen" alles frei war, und just im Augenblick des "Sendens" eine Nachricht mit hoher Priorität ebenfalls gesendet wird. Das muss doch zu Signalbeeinträchtigungen führen.
ja, aber nur für den Bruchteil der Zeit, die ein Bit "dauert". Mit einem Oszilloskop könnte man solche Effekte als sehr kurze Störungen sehen. Das stört die Übertragung aber nicht wirklich, weil der Empfänger den Leitungsstatus mehrmals während einer Bit-Zeit abtastet.
Und die niedrigere Nachricht? Automatische Wahlwiederholung? Puffer?
Das hängt von der Programmierung des jeweiligen Controllers ab. Üblich ist, die Nachricht entweder zu verwerfen, wenn es um ein Telegramm geht, das sowieso zyklisch immer wieder gesendet wird; oder man wartet eine gewisse Zeit und macht dann einen neuen Sendeversuch.
Eben nicht. Das ist ja der Trick dabei. Dominante Bits (also logisch 0) werden von rezessiven Bits (logisch 1) nicht beeinträchtigt.
Genau diesen Teil verstehe ich nicht.
Stell's dir wie die Klingelstrippe in alten Bussen vor: Da geht vom Fahrer durch die ganze Länge des Fahrgastraums eine Art Seil bis nach hinten durch, meist direkt neben dem Handlauf unterm Dach zum Festhalten. Wenn ein Passagier daran zieht (dominantes Bit), klingelt's beim Fahrer: Bitte Anhalten. Wenn gleichzeitig ein zweiter zieht, macht's keinen Unterschied.
Nur wenn einer will, dass beim Fahrer nichts klingelt (rezessiv), dann kann er das nicht erreichen, solange irgendwo anders jemand zieht.
(Sind eigentlich auch drei Leitungen: CAN_High/CAN_LOW/CAN_Ground). Hat das etwas mit diesem Satz zu tun: "CAN_Low enthält den komplementären Pegel zu CAN_High gegen Masse" ?
Nein. Das ist nur die physikalische Darstellung der Signalpegel (differentielles Signal). Man überträgt das Signal nicht auf *einer* Leitung gegen Masse, sondern auf zwei Leitungen, die immer im Gegentakt zueinander arbeiten. Theoretisch könnte man dabei sogar auf die Masseleitung verzichten, weil man nur auf die Spannung *zwischen* diesen beiden Leitungen achten muss. Das ist erheblich robuster gegen elektrische Störungen. Das gleiche Prinzip wird übrigens bei RS485 verwendet, oder bei LVDS, oder beim USB, oder sogar beim Ethernet.
Mir tun nur die Blauweisen Motorradfahrer leid, wenn sie beispielsweise die Motorradbatterie über die kleine KFZ-Steckdose aufladen wollen. Haben sie kein Spezialladegerät mit Codesender, bleibt nur der Ausbau der Batterie, da der CAN_Bus bei abgezogenem Zündschlüssel die Dose nach ca. 15 Min. abschaltet.
Hallo? Erstens gehört es sich nicht, die Batterie über die KFZ-Bordsteckdose aufzuladen (wusste gar nicht, dass Motorräder sowas auch haben), zweitens ist es selbstverständlich, dass diese Buchse nur bei eingeschalteter Zündung aufgeschaltet ist. Das ist ja bei PKWs auch so.
Ciao,
Martin
Morgen Martin,
Genau diesen Teil verstehe ich nicht.
Stell's dir wie die Klingelstrippe in alten Bussen vor: Da geht vom Fahrer durch die ganze Länge des Fahrgastraums eine Art Seil bis nach hinten durch, meist direkt neben dem Handlauf unterm Dach zum Festhalten. Wenn ein Passagier daran zieht (dominantes Bit), klingelt's beim Fahrer: Bitte Anhalten. Wenn gleichzeitig ein zweiter zieht, macht's keinen Unterschied.
Nur wenn einer will, dass beim Fahrer nichts klingelt (rezessiv), dann kann er das nicht erreichen, solange irgendwo anders jemand zieht.
Gut - sehr plastisch. Ich denke so hab ich es kapiert :-)
Nein. Das ist nur die physikalische Darstellung der Signalpegel (differentielles Signal). Man überträgt das Signal nicht auf *einer* Leitung gegen Masse, sondern auf zwei Leitungen, die immer im Gegentakt zueinander arbeiten...
OK, also bspw. plus 5 V und minus 5 V? (Nur um ein praktisches Beispiel zu bekommen...)
Hallo? Erstens gehört es sich nicht, die Batterie über die KFZ-Bordsteckdose aufzuladen (wusste gar nicht, dass Motorräder sowas auch haben), [...]
Doch Motorräder haben das Serienmässig (BMW / Kleiner KFZ-Stecker), oder per
Eigeneinbauau (14.95 Euro die Standartdose für Zigarettenaunzündergrösse).
Da man eine Motorradbatterie niemals mit einem Autoladegerät laden sollte (zu hoher Ladestrom) macht das Laden mit einem Bikeladegerät (nur bis max 1,5 A - ideal 800mA) über den Bordstecker durchaus Sinn und ist obendrein noch sehr bequem - Stecker rein und fertig...
zweitens ist es selbstverständlich, dass diese Buchse nur bei eingeschalteter Zündung aufgeschaltet ist. Das ist ja bei PKWs auch so.
Um Batterieendladung zu vermeinden sicherlich eine Gute Sache. Wenn ich aber bei ausgeschalteter Zündung eine 12 V Autostableuchte betreiben möchte oder vielleicht mein Navi laden will, und in der Zwischenzeit einkaufen gehen möchte ist das nicht so toll. Es gib ja auch Standheizungen, deren Zeitschaltuhr über den Zigarettenanzünder geschaltet ist. Da wäre dann sogar die Startzeit weg, wenn die Zündung aus ist.
Hat alles Vor und Nachteile...
Vielen Dank für deine Erklärungen - hast mir sehr geholfen
Gruss Gary
Hallo,
endlich Feierabend ... :-)
Das ist nur die physikalische Darstellung der Signalpegel (differentielles Signal). Man überträgt das Signal nicht auf *einer* Leitung gegen Masse, sondern auf zwei Leitungen, die immer im Gegentakt zueinander arbeiten...
OK, also bspw. plus 5 V und minus 5 V? (Nur um ein praktisches Beispiel zu bekommen...)
Eher untypisch, weil man für die negativen Pegel immer auch eine negative Spannungsversorgung braucht. Viel Aufwand. Stattdessen würde man die Signalpegel wohl mit 0V und +5V definieren[*]. Und immer, wenn CANH auf 0V steht, hat CANL +5V und umgekehrt. Die ändern sich also immer im Gegentakt zueinander. Wenn man aber die Differenzspannung *zwischen* CANL und CANH misst, hat man dort +5V und -5V.
Vorteil: Erstens doppelter Spannungshub, somit etwas weniger empfindlich gegen Störsignale ganz allgemein (wenn man lauter redet, macht Kneipenlärm weniger aus). Zweitens stört es nicht, wenn auf beiden Leitungen eine Gleichtaktstörung liegt, da sie die Differenz nicht ändert. Drittens kann der Empfänger erkennen, wenn die Leitung unterbrochen oder der Sender abgeschaltet ist - dann nämlich, wenn die Differenzspannung plötzlich etwa 0V ist.
Da man eine Motorradbatterie niemals mit einem Autoladegerät laden sollte (zu hoher Ladestrom) macht das Laden mit einem Bikeladegerät (nur bis max 1,5 A - ideal 800mA) über den Bordstecker durchaus Sinn und ist obendrein noch sehr bequem - Stecker rein und fertig...
Ja, mag sein, dass es bequem ist. Ich würde ein Ladegerät dennoch direkt an der Batterie anklemmen.
zweitens ist es selbstverständlich, dass diese Buchse nur bei eingeschalteter Zündung aufgeschaltet ist. Das ist ja bei PKWs auch so.
Um Batterieendladung zu vermeinden sicherlich eine Gute Sache. Wenn ich aber bei ausgeschalteter Zündung eine 12 V Autostableuchte betreiben möchte
Wenn ich das brauche, schalte ich halt eben die Zündung ein. Das mache ich dann aber bewusst.
oder vielleicht mein Navi laden will, und in der Zwischenzeit einkaufen gehen möchte
Das würde ich ganz bestimmt nicht wollen, wenn ich das Auto abgestellt habe, sondern erst wieder, wenn die Kiste läuft.
Es gib ja auch Standheizungen, deren Zeitschaltuhr über den Zigarettenanzünder geschaltet ist. Da wäre dann sogar die Startzeit weg, wenn die Zündung aus ist.
Schlechtes Konzept. ;-)
Naja, es gibt wohl Autos, bei denen die KFZ-Bordsteckdose dauerhaft "Feuer" hat. Das ist aber eher die Ausnahme. Für mich wär's ein Grund, diesen Designfehler in der Fachwerkstatt korrigieren zu lassen (oder das gleich selbst zu tun).
Hat alles Vor und Nachteile...
Zweifellos.
Vielen Dank für deine Erklärungen - hast mir sehr geholfen
Freut mich.
Schönen Abend noch,
Martin
[*] In der Realität wird man mit dem Pegel wohl nicht ganz runter auf 0V kommen, bzw. nicht ganz rauf bis 5V. Realistisch sind vielleicht Pegel von etwa +1V und +4V.
Gruss Gary