Hallo Gemeinde, ich habe hier im Forum schon gesucht und das Gewünschte nicht gefunden. Es geht um eine CAN-Bus_2.0A-Anwendung mit ca. 20 Teilnehmern. Diese müssen unterscheidbar sein und idealerweise am Strang in aufsteigender Reihen folge (1-20) erscheinen. Die Crux ist jetzt, dass die CAN-Nodes in rauher Umgebung betrieben werden und physisch eigentlich nur ein vergossenen Klötzchen sind. Es gibt keine Drehschalter und keine Mäuseklaviere um eine Teilnehmeradresse zu vergeben. Im Auslieferungszustand könnte per Definition die Teilnehmeradresse "0" sein. Meines Wissens gibt es eine "Daisy Chain"-Lösung, bei der alle Teilnehmer mit einer ankommenden und einer abgehenden Digitalleitung nacheinander aktiviert werden. Wenn sie eine gültige Teilnehmeradresse haben oder eine von einem Master erhalten haben schalten sie die abgehenden Digitalleitung ein, und der nächste Teilnehmer mit Teilnehmeradresse "n+1" kommt an den Bus. Weiterhin könnte man eine Art Analogschalter für den weiterführenden CAN-Strang in Betracht ziehen. Der weiterführende CAN-Strang wird dann eingeschaltet, wenn der aktuelle Teilnehmer eine gültige ID hat (oder ausgehandelt hat). Was aber, wenn der Fall auftritt, dass zwei Teilnehmer exakt die gleiche CAN-ID haben? Also z.B. "Teilnehmer n" ID = 4 = OK; "Teilnehmer n+1" ID = 4 = falsch Ist dann noch der Fall unterscheidbar und können die Nodes eine "richtige" Teilnehmeradresse beziehen? Ein Tipp wäre hilfreich. Grüße Runout
Alle Geräte haben eine Input- und eine Output-Leitung für Daisy-Chain (im folgenden DC genannt). Alle Geräte sind am CAN verbunden und senden ohne gültige ID-Vergabe erstmal nichts sondern hören nur zu. 1. Beim Eintreffen einer Nachricht zur ID-Neuvergabe auf z.B. 0x7F0 (auf die alle Geräte IMMER hören) vergessen alle Geräte ihre ID und schalten ihren eigenen DC-Ausgang logisch "1". Das erste Geräte hat den DC-Eingang offen und sieht logisch "0". 2. Jetzt wird auf 0x7F0 dazu aufgefordert, die erste ID zu vergeben. Das Gerät, dass noch nicht konfiguriert ist UND dessen Eingang auf "0" ist, akzeptiert die Nachricht (im ersten Moment das erste Gerät). Konfiguriert seine eigene ID UND deaktiviert seinen Ausgang. 3. Der Erfolg kann auf z.B. 0x7F1 gemeldet werden oder der Master macht einfach mit einer gewissen Wartezeit weiter. 4. Das Spiel wiederholt sich, bis keine Antwort mehr kommt (oder wenn keine Antwort vom Knoten vorgesehen ist, einfach nach Nmax Messages). 5. Der Master meldet oder gleicht ab, wie viele Knoten gefunden wurden. Ggf. gibt es noch einen Funktionstest Anmerkungen: - Mit jeder neuen ID-Vergabe kann eine spezifische ID vergeben werden oder man gestaltet es so, dass einfach durchnummeriert wird. - Ich würde davon absehen, dieses Spiel jedesmal beim Start zu durchlaufen. Besser die Geräte merken sich ihre Konfiguration. Man macht einen gesonderten Ablauf bei der Inbetriebnahme, damit der ganze Ablauf unter Beobachtung abläuft.
CAN hat keine Teilnehmeradressen. Du hast Message-IDs und die müssen eindeutig sein. Die Message-IDs sind aber nicht bestimmten Nodes zugeordnet. Jeder Node kann beliebige Message-IDs senden und auf beliebige Message-IDs reagieren. Du kannst natürlich entscheiden bestimmte Message-IDs bestimmten Nodes zuzuordnen, sowohl was den Empfang als auch Versand angeht. Mein Vorschlag: verpass jedem Node bei der Herstellung eine unveränderbare GUID, also global eindeutige ID. Viele Microcontroller haben sowas schon fertig eingebaut, kann man aber z.B. auch als EEPROMs fertig vorprogrammiert kaufen. Jetzt lässt Du immer jeden Node alle paar Sekunden seine GUID mit einer bestimmten Message-ID seine GUID senden. Den genauen Abstand zwischen den Nachrichten absichtlich mit etwas Zufall versehen. Wenn man jetzt eine Weile auf dem Bus lauscht bekommt man die GUIDs aller angeschlossenen Geräte. Und dann vergibst Du eine Message-ID mit der ein Gerät per GUID gezielt angesprochen werden kann. Damit kannst Du dann z.B. eine LED an dem Gerät aufleuchten lassen um es von den anderen zu unterscheiden. Und genauso ihm eine individuelle Message-ID zuordnen über die es dann in Zukunft angesprochen werden kann. Alternativ kann man natürlich auch die GUIDs jedes Nodes auf einen Barcode drucken und auf jeden Node aufkleben, auflasern etc.
Können die Nodes zur Konfiguration vom Bus genommen werden? Es gibt im CANopen z.B. das LSS-Protokoll, das ist für genau so eine Konfiguration gemacht. MfG
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.