also weiß jeder teilnehmer von vornherein, nachrichten mit
welchem identifier er versenden kann/darf? will sagen: jedem
teilnehmer ist eine reihe von für ihn in frage kommenden
identifiern bekannt.
Ja, hinter einem CAN-BUS-Teilnehmer steht in der Regel ein
Mikroprozessorsystem, das die Nachrichten für sich herausfiltert.
Meist wird auch ein spezieller CAN-Prozessor benutzt, in dem
auch Filtermasken gesetzt werden können, so daß das nachfolgende
System nicht von einer Nachrichtenflut überschwemmt wird.
So kommen nur vorgefilterten Nachrichten zur Auswertung.
wenn TN7 den request-rahmen NA3 liest, muß er nachschauen
„steht ident. 3 in meiner liste?“.
Ja, so soll es sein.
und wenn das nicht der fall
ist, sendet er auch nix. außerdem weiß er überhaupt nix davon,
daß die anforderung von TN5 kommt. richtig?
Ja, wie gesagt wird primär nicht danach geschaut, wer der
Absender ist, sondern es wird die Nachricht anhand des
Identifiers erkannt.
Allerdings ist es doch so, daß ein Teil des Identifier
als Kennung für den sendenden Teilenenhmer reserviert ist.
(7bit = max.128 CAN-Teilnehmer am BUS).
Dies ist wohl auch deshalb notwendig, damit es keine
BUS-Konflikte gibt, wenn 2 Teilnnehmer die gleiche Nachricht
versenden wollen.
Die Nachricht wird eben am Identifier erkannt, welcher zwar
vom Sender mit gesendet wird aber es ist keine Geräteadresse
sonder eine vorher festgelegte Nummer einer bestimmten
Nachricht.
Wie gesagt, muß ich hier doch noch ergänzen, daß im Identifier
auch eine Gerätekennung drin ist.
Damit ist auch klar, daß jeder die Nachricht
senden kann und jeder eine gesendete Nachricht empfangen
und verwerten kann.
In der Industrie gibt es für die Vergabe der Identifier sogar
Tabellen, in denen viele vorkommende Nachrichten schon ein
Standard-Identifier zugeordnet ist.
ok. also beispiel: die wischersteuerung im auto soll den
wischer einschalten. das weiß sie aber nur, wenn sie ne
entsprechende nachricht kriegt. und das heißt, sie muß vorher
daten anfordern, und zwar mit einer für die wischersteuerung
gedachten priorität (=identifier).
Priorität ist nicht gleich Identifier.
Aber der Identifier bestimmt, in welcher Reihenfolge die
Teilnehmer bei gleichzeitigen BUS-Anforderungen zum Zuge kommen.
In dem Beispiel würde ich eher annehmen, daß ein Regensensor
festgestellt hat, daß es mit einer bestimmten Stärke regnet.
Außerdem wird natürlich die Stellung des Wischerschalters
(manuelles Auslösen) relevant sein.
Dann werden diese Nachrichte einfach mit dem entsprechenden
Identifier auf den BUS gegeben.
Alle Teilnehmer am BUS hören die Nachricht und entscheiden
für sich, ob sie irgendwie reagieren müssen.
-> Die Wischersteuerung sagt sich: „Diese Nachricht ist in
meiner Liste“ und wird also wischen.
-> Das ESP-System wird evtl. seine Parameter auf
„nasse Straße“ optimieren usw.
die zuständige „hauptsteuerung“ sagt sich: „dem teil kann
geholfen werden“ und verschickt eine nachricht mit dem selben
identifier, womit der wischer weiß: „aha, da is das, was ich
haben wollte“. richtig so?
So rum ist es nicht sinnvoll (siehe oben).
Die Wischersteuerung meldet selbstständig sofort auftretende
Fehler, ansonsten muß sie nicht ständig plappern.
oder kann die „hauptsteuerung“ auch daten an den wischer
senden, ohne daß dieser was angefordert hat?
Logisch, das muß auch gehen.
Jeder kann Nachrichten versenden, wenn es seine Aufgabe ist.
dann schreibst du
Zusätzlich kann aber auch jeder andere Teilnehmer die
Nachricht „NA3“ verwerten, wenn er damit was anfangen kann.
also doch keine identifier-liste für jeden teilnehmer? wie
weiß aber dann ein anderer teilnehmer, ob er mit einer
nachricht was anfangen kann? wird das im datenfeld
unterschieden?
Wenn ein Teilnehmer einen Identifier nicht in seiner Liste
der zu behandelnden Nachrichten hat, dann braucht er auch
nichts machen.
Jeder Teilnehmer muß nur eine Liste der für ihn relevanten
Nachrichten haben.
und was passiert, wenn zwei sender eine nachricht mit
demselben identifier verschicken wollen, aber mit
unterschiedlichem datenfeld? dann gibt’s doch nen fehler…
Das wäre so, aber wie oben schon gesagt, wird im Identifier
auch eine Kennung für jeden Teilnehmer hinterlegt.
Damit bekommt auch immer der Teilnehmer zuerst den BUS,
welcher die höhere Priorität hat (auch wenn die Art der
Nachricht die gleiche ist).
sorry, aber ich bin da immer noch net ganz durchgestiegen…
-)=)
Wird schon werden.
Gruß Uwi