Hallo, erst mal an alle ein Dankeschön für die zahlreichen Antworten im anderen Thread. Ich habe mir jetzt mal das CAN-Protokoll genauer angeschaut, und das scheint zusammen mit Silicon Serial Number-ICs von Maxim (fast) die Lösung meines Problems zu sein (MAW: Voraussichtlihc war der Vorschlag, auf CAN zu wechseln das Ei des Kolumbus). Jetzt hätte ich aber noch einige Fragen, die mir vielleicht CAN-erfahrene Leute beantworten können. Und so stelle ich mir das jetzt vor: Also, ich hab jetzt eine Adresse mit 48 Bit, das CAN-Protokoll stellt mir in Version 2.0 29 Arbitrierungsbits zur Verfügung. Gut, ich nehme jetzt also die 29 niederwertigeren Bits aus meiner Adresse und schreibe sie in den Arbitrierungsblock eines Datentelegramms. In den Datenblock kommt die voll 48-Bit-Adresse. Nach dem einschalten der Anlage fangen alle Controller an, zu senden und nach der Arbitrierung bleibt der mit der kleinsten Adresse übrig und teilt der Welt am Draht seine Adresse mit und tut dann erst mal nichts mehr. Sind bei zwei Busteilnehmern jetzt die 29 Arbitrierungsbits gleich, kommt es spätestens bei der Übertragung des Datenblocks zu einem Bitfehler. Der Teilnehmer, der den Bitfehlere detektiert hat, tauscht dann die unteren 29 Bit der Adresse gegen die oberen aus, und versucht es nochmal. Was der andere Teilnehmer macht, ist mir noch nicht ganz klar, da muß ich noch ein bischen Literatur studieren. Frage: Kann das so was werden? Und jetzt kommt das Problem: Der (jetzt nur noch virtuell als solcher zu bezeichnende) Busmaster müsste auf den Empfang von allen möglichen Identifiern programmiert werden, damit die Nachrichten auch von ihm entgegengenommen werden. Also müsste ich jetzt entweder zigtausend Nachrichtencodes im Master hinterlegen, oder es gibt eine Möglichkeit, eine Art Broadcast rückwärts zu programmieren (im Sinne von: Nimmt jede Nachricht entgegen). Weiß da vielleicht jemand bescheid? Gruß, Harald
Durch das Maskieren der ID-Bits filtert man schon vor. Wenn man nicht maskiert, dann empfängt der "Master" alles, was auf dem Bus passiert. Werden die 48 Adress-Bits willkürlich vergeben, oder ist da ein System bzw. eine Gruppierung hinter? Dann könnte man die oberen 29 Bit als Identifier der Gruppe nehmen und die unteren 19 dann auf die restlichen Knoten/Teilnehmer verteilen. (29+29 = 58...)
Wie gesagt, ich würde nur 24 Bits nehmen, dann hat man noch 5 Bits, um die Art des Pakets zu kennzeichnen und schließlich braucht der Master ja auch eine Adresse. Nimmt man die 24 niederwertigen Bits, dann ist die Chance der Doppelbelegung sehr gering, aber nicht 0. In dem Fall denken beide, die Arbitrierung hätte geklappt und es kommt zu einem Fehler im Datenbereich, wenn dort alle 48 Bits gesendet werden. Die Daten werden verworfen und beide wiederholen solange, bis deren Errorcounter überläuft. Nun können alle die, die unterschiedlich sind, ihre 24 Bits an den Master durchgeben und der trägt sie in seine Liste ein und weist ihnen eine bestimmte Adresse zu. Jetzt schickt der Master nochmal eine Seriennummer-Anfrage an alle noch nicht zugewiesenen, aber diesmal sollen sie die höherwertigen 24 Bits als Identifier nehmen. Nun melden sich nur noch die Module, bei denen es zu Fehlern kam, weil die unteren 24 Bit gleich sind und diese werden nun eingetragen und zugewiesen. "Werden die 48 Adress-Bits willkürlich vergeben, oder ist da ein System bzw. eine Gruppierung hinter?" Im Prinzip ist es so, daß die Nummern je nach Herstellungsmonat/Jahr langsam ansteigen. Man kann auch bei Maxim anfragen, bei sehr großen Stückzahlen kann man sich zusammenhängende Bereiche reservieren lassen. Peter
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.