Forum: Mikrocontroller und Digitale Elektronik Gültigkeit von CAN Nachrichten -> Frage


von Se (Gast)


Lesenswert?

Servus

Ich habe mal ne Frage wegen den Gültigkeiten von Nachrichten die übern 
CAN Bus gehen sollen.
Angenommen beim Sender staut sich die Sendewarteschlange und eine im 
Puffer befindliche Nachricht muss warten. Es gibt ja Situationen in 
denen eine Nachricht ihre Gültigkeit verliert, richtig?
Wie macht man das in der Praxis? Gibt es zu jedem Identifier eine 
Look-up-Tabelle wo die Gültigkeit einer jeden ID gespeichert ist?

gruß
S

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Bei CAN ist das nicht so.

Bei einem Protokoll, dass über CAN überträgt, kann das so sein.

Hast du noch konkretere Angaben was du vor hast?

von Se (Gast)


Lesenswert?

Soll ne Art Gateway/Bridge zwischen 2 CAN Netzen werden.
Es gibt nen bestimmten Zyklus in dem der Datenaustausch erfolgt. Daher 
sammeln sich CAN Nachrichten an. Und ich dachte, ich muss jene aus der 
Warteschlange löschen, die eh keine Gültigkeit mehr haben.

von Se (Gast)


Lesenswert?

Hat das vielleicht was mit dem "Earliest Deadline First" gemeinsam?

von Peter D. (peda)


Lesenswert?

Se wrote:

> Angenommen beim Sender staut sich die Sendewarteschlange und eine im
> Puffer befindliche Nachricht muss warten.

Wenn Du eine Sendewarteschlange haben willst, mußt Du sie in Software 
emulieren.

Der CAN-Bus selber hat keine Warteschlange, alle Nachrichten werden 
streng nach Priorität (lowest ID first) gesendet.


Nachrichtenm die veralten können, sollte man eben nicht in eine 
Warteschlange packen, sondern einfach direkt in einen der 15 Datenpuffer 
stellen.
Dann setzt man einen Timeout auf, der dann diesen Puffer wieder 
freigibt, wenn die Nachricht noch nicht gesendet wurde.
Dabei auf die richtige Reihenfolge achten, damit nicht versehentlich die 
Nachricht zerstört wird, wenn sie gerade gesendet wird.


Peter

von Se (Gast)


Lesenswert?

Dort in den einzelnen Datenpuffern kann es aber auch sein, dass mal 
nicht gesendet wird und neue Daten nachrücken.

Du meinst, es mit einem Timeout zu lösen. Das ist OK.

Wenn ich dennoch ein Earliest-Deadline-Fist Verfahren einbaue, wie kann 
ich dann sagen welche ID welche Deadline hat?
Weis das nur der "Erbauer" des CAN Netzes?

von Peter D. (peda)


Lesenswert?

Se wrote:

> Wenn ich dennoch ein Earliest-Deadline-Fist Verfahren einbaue, wie kann
> ich dann sagen welche ID welche Deadline hat?

Wenn die Nachrichten nach ID gesendet werden dürfen, kannst Du soviele 
Nachrichten einstellen, wie der CAN-Chip Sendepuffer hat.

Wenn Du eine andere Reihenfolge wünschst, mußt Du einen Softwarepuffer 
programmieren und darin eine Dir genehme Sortierung vornehmen. Es kann 
dann aber nur ein Sendepuffer des CAN-Chips verwendet werden.


Der Timeout muß nun prüfen, ob die Nachricht noch im Softwarepuffer ist 
oder schon im Senderegister.
Das Senderegister kann man dann disablen, muß aber noch testen, ob 
gerade kein  Senden erfolgt (Flag testen).
Ist das Senden beendet, kann das nächste Paket aus dem Softwarepuffer 
geholt werden.


Peter

von Null (Gast)


Lesenswert?

Wenn der Bus dauernd am Anschlag laeuft, dh dauernd verstopft ist sollte 
man sich ueberlegen, ob man noch auf der richtigen Spur ist. Allenfalls 
sollte man die Geschwindigkeit um eine Groessenordnung erhoehen (bringt 
nur was bei grossen Blocklaengen), einen anderen Bus waehlen, einen 
zweiten Bus einziehen, das Meldungskonzept ueberdenken. Ich fuehl mich 
nicht mehr wohl, wenn mein Bus mehr als 30% belastet ist. Ist natuerlich 
auch eine Sache der Arbitrierung. Wenn die Arbitrierung sauber ist, kann 
man dauernd auf 100% gehen.

von Null (Gast)


Lesenswert?

Vergass noch : Solange eine Meldung innerhalb einer maximale Wartezeit 
abgeliefert wird geht's noch. Unbrauchbar wird's wenn keine maximale 
Wartezeit mehr gibt.

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.