Forum: Mikrocontroller und Digitale Elektronik CAN: Statusnachrichten vs. Ereignisnachrichten


von Se (Gast)


Lesenswert?

Da CAN kommplett ereignisgesteuert arbeitet, sind zwangsläufig alle 
Nachrichten Ereignisnachrichten.

Aber es gibt ja im Automobil auch Statusnachrichten, die regelmäßig über 
den Bus flitzen. WIe ist das bei denen mit der Dringlichkeit? Müssten 
diese dann nicht immer eine höhere Prio bekommen als die 
Ereignisnachrichten?

Welche Art Nachrichten sind wichtiger? Ein Status über den Tankinhalt 
kann ja auch nicht einfach so den Vorrang gegenüber einem Bremsbefehl 
erlangen.

Andererseits sind Regelungen auf Statusnachrichten angewiesen und 
brauchen diese ohne viel Verzögerung. OK, Regelungen ist nix für CAN. 
Mir fällt grad kein Beispiel ein.

Also wenn jemand dort bissl Insider ist, und man einen Tipp springen 
lassen könnte...
wör supper


von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Das hat nichts mit CAN zu tun. Das hängt alles vom Protokoll ab.
CANOPEN zb sollte zyklische Nachrichten schicken können.

Und CAN ist keineswegs für Regelungen ungeeignet.

von Gast (Gast)


Lesenswert?

Vielleicht solltest du dir über die Begriffe nicht so viele Gedanken 
machen. In CAN sind erst mal alles nur Nachrichten. Die ID bestimmt, 
welche Priorität die Nachricht hat (das ist wichtig, wenn zwei 
Nachrichten zur gleichen!! Zeit senden wollen).

Das mit deinen Status oder Ereignisnachrichten kannst du dann in deiner 
Applikation regeln. Die beiden Begriffe kann man, denke ich, auch nicht 
ganz trennen. Der Status des Bremspedal kann ja auch als Bremssignal 
gedeutet werden. Insgesamt legt man den CAN-Bus so aus, dass im 
Nominalfall max. Buslast/Busauslastung auftreten und dann hofft man, 
dass dadurch auch die Notfälle, wenn zufällig mal mehr Nachrichten 
gesendet werden noch im Rahmen bleiben.

Das ganze wird normalerweise umfangreich getestet, bevor ein Fahrzeug 
frei gegeben wird.

Für Regelungen ist CAN auf jeden Fall geeignet. Je nach Anforderung. Man 
muss halt mit dem Jitter (Zeitverzug bei Sendewunsch, wenn noch eine 
Nachricht auf dem Bus zu Ende gesendet wird und/oder eine höher 
priorisiert Nachricht zuvor gesendet wird) in der konkreten Aufgabe 
zurecht kommen.

Der Gast.

von Gast (Gast)


Lesenswert?

ups...hab ich mal nicht die Vorschau benutzt und gleich den ersten 
Fehler gefunden. Das muss heissen, dass man den Bus auf max. 50% 
Busauslastung auslegt. Den Antriebs-CAN wahrscheinlich sogar weniger.

von JochenZ (Gast)


Lesenswert?

Guten Abend,
nicht ohne Grund haben Oberklassefahrzeuge 5 CAN-Busse damit die Buslast 
nicht zu hoch wird.

Für Regelungen lässt man in den Nutzdaten noch ein Messagecounter (z.B.4 
Bit) mitlaufen, wenn da mal ne zyklische Botschaft ausbleibt, kann die 
Regelung darauf reagieren (extrapolieren).
Wichtige Botschaften werden mit einer XOR-Checksumme und ganz wichtige 
Botschaften zusätzlich mit einer CRC-Checksumme abgesichert. Wer jetzt 
nachgerechnet hat: von den 8Byte Nutzdaten gehen 2,5Byte zur 
Botschaftsabsicherung verloren :-(

Ereignisnachrichten werden im Automotive-Bereich glaub eh nicht so oft 
verwendet (zumindest, was ich bisher gesehen hab). Da wird der 
Bremspedalstatus alle 10ms gesendet, obwohl nicht gebremst wird.

Flexray soll die Nachteile von CAN lösen und kommt so langsam auch in 
Fahrzeugen in Serie.

Gruss
Jochen

von Peter D. (peda)


Lesenswert?

Dem CAN-Bus ist es völlig wurscht, wie Du die Nachrichten bezeichnest.

Er kennt keine Ereignisnachrichten oder Statusnachrichten.

Das sind dann höhere Schichten über dem CAN-Bus, die den Nachrichten 
eine bestimmte Bedeutung zuordnen.


Der Vorteil des CAN ist, man kann jeder Nachricht eine Priorität geben 
und damit deren Aussendung garantieren.

Der Nachteil des CAN ist, man kann ihn mit hochpriorisierten Nachrichten 
dichtmachen.
Jede hochpriorisierte Nachricht muß also einen genügend langen 
Zeitschlitz lassen, damit die anderen auch drankommen. Die Zeitschlitze 
werden mit abnehmender Priorität immer größer.

Man muß also ein CAN-Netzwerk planen und kann nicht darauf vertrauen, 
daß alle Nachrichten schon irgendwie ankommen werden.


Peter

von Fabian S. (rosepeter)


Lesenswert?

Hallo zusammen,

da gebe ich doch auch mal meinen Senf dazu

> Das mit deinen Status oder Ereignisnachrichten kannst du dann in deiner
> Applikation regeln. Die beiden Begriffe kann man, denke ich, auch nicht
> ganz trennen.

doch diese beiden Begriffe kann man trennen. Ereignisnachrichten tragen 
Ereignissemantik, Zustandsnachrichten nicht. In ereignisgesteuerten 
Systemen dürfen Ereignisse unter keinen Umständen verloren gehen, das 
könnte (je nach Ereignis) zum Systemausfall führen. Das interessante an 
Ereignisnachrichten ist auch, dass mit ihnen auch ein Kontrollfluss 
verbunden (teilweise auch bidirektional) ist, wohingegen 
Zustandsnachrichten nur mit einem Datenfluss verknüpft (ausschließlich 
unidirektional) sind .

So richtig Sinn macht diese Diskussion aber erst, wenn man das 
Kontrollparadigma auf den jeweiligen Knoten mit in Betracht zieht, so 
macht es z.B. nur begrenzt Sinn Ereignisnachrichten an einen 
zeitgesteuerten Knoten zu schicken.

> Dem CAN-Bus ist es völlig wurscht, wie Du die Nachrichten bezeichnest.
> Er kennt keine Ereignisnachrichten oder Statusnachrichten.
> Das sind dann höhere Schichten über dem CAN-Bus, die den Nachrichten
> eine bestimmte Bedeutung zuordnen.

ack

> Der Vorteil des CAN ist, man kann jeder Nachricht eine Priorität geben
> und damit deren Aussendung garantieren.
> Der Nachteil des CAN ist, man kann ihn mit hochpriorisierten Nachrichten
> dichtmachen.
> Jede hochpriorisierte Nachricht muß also einen genügend langen
> Zeitschlitz lassen, damit die anderen auch drankommen. Die Zeitschlitze
> werden mit abnehmender Priorität immer größer.
>
> Man muß also ein CAN-Netzwerk planen und kann nicht darauf vertrauen,
> daß alle Nachrichten schon irgendwie ankommen werden.

ack - eben das macht die Arbitierung halt etwas schwieriger, man muss 
immer das komplette (evtl. komplexe) System betrachten (inkl. der 
einzelnen Systemkomponenten selbst), sobald sich eine Komponente ändert, 
muss ich das erneut tun (Stichwort End-to-End-Timing).

Zeitgesteuerte Kommunikationssysteme (TDMA, global synchronisierte Uhren 
- z.B. TTCAN, FlexRay) sind hier hinsichtlich der Zusammensetzbarkeit 
wesentlich besser geeignet: globalen Kommunikations-Schedule aufstellen, 
der im Einklang mit der zeitlichen Schnittstelle der Komponenten steht. 
Kommt eine neue Komponente hinzu, stellt man den globalen Schedule 
erneut auf, ohne die einzelnen Komponenten betrachten zu müssen.

Ciao, Fabian

von Gast (Gast)


Lesenswert?

>Ereignisnachrichten tragen
>Ereignissemantik, Zustandsnachrichten nicht. In ereignisgesteuerten
>Systemen dürfen Ereignisse unter keinen Umständen verloren gehen, das
>könnte (je nach Ereignis) zum Systemausfall führen.

Das ist für die Übertragung aber unwichtig. Du kannst auch Nachrichten, 
die eigentlich nur zufällige Änderungen enthalten (Ereignisse) zyklisch 
senden. Die möglichen Empfänger wissen dann zumindest, dass der Sender 
noch da ist, und die Interpretation des Inhaltes wird dann in deiner 
Nachricht durchgeführt.

Neue Nachrichten bei z.B. Flexray einbinden ist auch nicht so einfach. 
Man muss nämlich doch jeden Teilnehmer anfassen und ihm den neuen Zyklus 
mitteilen (es ändert sich ja die Telegrammlänge, vielleicht wurde auch 
die Zykluszeit angepasst). Bei CAN ist das viel einfacher - nach dem 
Motto "Eine weitere Botschaft alle 100ms wird schon noch gehen, 
hautpsache die ID ist eindeutig." ;-)

der Gast.

von Se (Gast)


Lesenswert?

kennt jemand mal ne gute Literatur die erklärt was Ereignisnachrichten 
und Statusnachrichten genau sind?

von Fabian S. (rosepeter)


Lesenswert?

> Das ist für die Übertragung aber unwichtig. Du kannst auch Nachrichten,
> die eigentlich nur zufällige Änderungen enthalten (Ereignisse) zyklisch
> senden. Die möglichen Empfänger wissen dann zumindest, dass der Sender
> noch da ist, und die Interpretation des Inhaltes wird dann in deiner
> Nachricht durchgeführt.

Für die funktionale Eigenschaft (also Datum kommt von Knoten A zu Knoten 
B) einer Übertragung gebe ich dir recht, für die zeitlichen 
Eigenschaften nicht, weil dir hier die Arbitrierung einen Strich durch 
die Rechnung machen kann.

> Neue Nachrichten bei z.B. Flexray einbinden ist auch nicht so einfach.
> Man muss nämlich doch jeden Teilnehmer anfassen und ihm den neuen Zyklus
> mitteilen (es ändert sich ja die Telegrammlänge, vielleicht wurde auch
> die Zykluszeit angepasst). Bei CAN ist das viel einfacher - nach dem
> Motto "Eine weitere Botschaft alle 100ms wird schon noch gehen,
> hautpsache die ID ist eindeutig." ;-)

Ich behaupte nicht, dass es "einfach" ist einen globalen 
FlexRay-Schedule aufzustellen (im Gegenteil), aber nehmen wir doch mal 
folgendes Szenario an: wir haben ein (weitgehend) funktionierendes 
System, auf einem Knoten muss aber (aus irgendeinem Grund) eine Änderung 
vorgenommen werden, die dazu führt, dass eine Nachricht zu einem anderen 
Zeitpunkt gesendet wird (man kann auf dem betroffenen Knoten sogar 
"schneller" werden - also früher senden), zusammen mit der Arbitrierung 
kann dies unter Umständen dazu kommen, dass die zeitlichen Verhältnisse 
auf dem CAN-Bus total kippen und irgendwo im System wird wegen der 
daraus resultierenden Delays bei der Übertragung anderer Nachrichten 
eine Deadline verpasst.

Das Problem existiert bei zeitgesteuerten Bussystemen einfach nicht, 
solange man die zeitliche Schnittstelle der einzelnen Knoten garantieren 
kann - ok, ändert sich die, hat man auch hier Aufwand.

Das Problem, dass man bei CAN also hat, ist gewisse Knoten an bestimmten 
Zeitpunkten vom Senden abzuhalten, damit den Bus zu blockieren

... hm, ich merke gerade, dass ich die ganze Zeit argumentiere, dass es 
mit CAN schwierig ist, zeitliche Garantien für die Übertragungszeit 
abzugeben, was mit der ursprünglichen Diskussion Ereignisnachricht vs. 
Zustandsnachricht relativ wenig zu tun hat. Man kann durchaus 
Zustandsnachrichten über CAN übertragen, aber man tut sich halt schwer 
die zeitliche Akkuratheit zu garantieren.

Na gut, sei's drum - dann wünsche ich mal noch eine gute Nacht!

Ciao, Fabian

von Fabian S. (rosepeter)


Lesenswert?

> kennt jemand mal ne gute Literatur die erklärt was Ereignisnachrichten
> und Statusnachrichten genau sind?

ich würde folgendes empfehlen:

Kopetz, Real-Time Systems, Design Principles for Distributed Embedded 
Applications

Obermaisser, Event-Triggered and Time-Triggered Control Paradigms

Kopetz, Event-Triggered versus Time-Triggered Real-Time Systems
http://www.vmars.tuwien.ac.at/php/pserver/extern/docdetail.php?DID=566&viewmode=paper

man sollte dabei aber immer im Auge behalten, dass Kopetz natürlich die 
Time-Triggered Architecture verkaufen möchte.

Ciao, Fabian

von Se (Gast)


Lesenswert?

jo, die hab ich alle schon gelesen. Na gut, das ist wohl schon das beste 
was zu finden ist.

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
Noch kein Account? Hier anmelden.