(nur
bei besonderen Terminals mit CANopen verfügbar, mit stark modifizierter
CANopen-Implementierung)
Diese Dokument beschreibt, wie ein CANopen-Netzwerk nach angeschlossenen
CANopen-Knoten durchsucht werden kann.
Hinweis: Nur wenige Terminals enthalten diese Funktion - seit
2005 (siehe Feature Matrix)
!
Inhalt
Siehe auch:
Da MKT's
"Bedienterminals mit CANopen" vom Prinzip her keine CANopen-MASTER sondern
CANopen-SLAVES sind, ist der Node-Scanner an dieser Stelle NICHT CANOPEN
- KONFORM ! ! ! !
... und wurde daher bislang auch NUR IN DER SONDER-FIRMWARE "Art111102"
implementiert.
Warum ?
Der Node-Scanner sendet SDO-Lesebefehle an alle 127 moeglichen CANopen-Knoten,
um festzustellen, "wer sich meldet". Dabei wird ein SDO-Timeout von einigen
hundert Millisekunden verwendet, um auch langsame Teilnehmer zu erkennen.
SDO-Transfers sind aber leider einfache "Punkt-zu-Punkt"-Verbindungen, die
in einem CANopen-Netzwerk sorgfältig von Netzwerkmanager festgelegt
werden (dazu gibt's gute und teure Programme, die alle Busteilnehmer verwalten).
Was das Terminal macht, nämlich als CANopen-Slave "mal grade eben 127
Knoten auf blauen Dunst ansprechen" ist daher i.A. ALLERSTRENGSTENS
VERBOTEN, weil ein derartiges Vorgehen GARANTIERT Kollisionen
verursacht falls noch andere Geräte (z.B. der "echte" CANopen-Master)
per SDO kommunizieren ! Setzen Sie die CANopen-Node-Scan-Funktion daher nur
ein, wenn Sie garantieren könnnen, dass diese Funktion keine katastrophalen
(z.B. durch den Zusammenbruch des CAN-Netzwerks verursachten) Folgen haben
kann !
-
Wiederhole fuer alle 127 moeglichen Knoten :
-
Sende SDO-Lesebefehl per SDO-Client an Objekt 0x1000 (device type) des momentan
gescannten Knotens und warte einige dutzend Millisekunden auf eine Antwort
Falls der SDO-Client ein gueltiges Resultat an die Applikationebene (hier:
Node-Scanner) liefert:
-
Knoten in die Liste aufnehmen
-
zusätzlich aus Objekt 0x1008 den "Namen" lesen
-
und einen weiteren Parameter, dessen Bedeutung im August 2004 noch unbekannt
war
Nach Abschluss der Knoten-Lese-Schleife :
-
Liste aller erkannten Knoten auf dem Display anzeigen
-
dem Bediener die Anwahl EINES DIESER KNOTEN ermöglichen (per Cursor
up/down bzw. Drehknopf)
-
Bei Auswahl (per ENTER) den CANopen-Client im Protokoll-Stack so umprogrammieren,
dass von nun an mit dem "neuen" Knoten per SDO-Client kommuniziert wird
-
Flag fuer das Anzeigeprogramm setzen (z.B. nscan.state=7 , siehe nächstes
Kapitel)
-
nscan.count
-
Liefert die Anzahl der beim Scannen erkannten Knoten.
-
nscan.run=X
-
Startet das Scannen, bzw bricht einen schon laufenden Scan ab.
nscan.run=1 : START des Scannens
nscan.run=0 : ABBRUCH des Scannens
nscan.run=2 : Start wenn die Node-Liste noch leer ist
(falls bei nscan.run=2 die Liste bereits gefüllt ist, wird nicht neu
gescannt, sondern sofort der Markierungsbalken aktiviert)
Optional kann nach "nscan.run=X" noch ein zweiter Parameter angegeben werden,
mit dem z.B. die Bildschirmanzeige des Node-Scanners unterdrueckt werden
kann. Näheres noch unbekannt.
-
nscan.sel
-
Liefert die Zeilennummer in der Auswahliste (0..N), die grade vom Bediener
selektiert wurde (-> Cursorbalken).
-
nscan.sel.id
-
Liefert den Node-ID der grade in der Liste markierten Zeile. Dieser Wert
ist auch dann noch gueltig, wenn das Fenster des Node-Scanners bereits wieder
geschlossen wurde !
-
nscan.show=0
-
Verbirgt das Fenster des Node-Scanners
-
nscan.show=1
-
Zeigt das Fenster des Node-Scanners wieder an
-
nscan.state
-
Liefert den Zustand der state machine des Node-Scanners. Dies kann z.B. verwendet
werden, um waehrend des langwierigen Scan-Vorgangs auf dem Display anzuzeigen,
"was grade passiert". Mögliche Werte sind in NodeScan.h definiert, hier
nur ein (eventuell schon veralteter) Auszug :
#define NODESCAN_STATE_OFF 0 /* Urzustand, "nichts los" */
#define NODESCAN_STATE_PREPARE 1 /* CANopen-Stack wird vorbereitet */
#define NODESCAN_STATE_WAIT_SDO_FREE 2 /* Warte bis SDO-Client FREI ist */
#define NODESCAN_STATE_WAIT_RESPONSE 3 /* Warte auf SDO-Antwort */
#define NODESCAN_STATE_CLOSE 4 /* SDO-Kanal wird geschlossen */
#define NODESCAN_STATE_SCAN_DONE 5 /* SCAN-Vorgang abgeschlossen */
#define NODESCAN_STATE_SWITCH_NODE 6 /* Warte auf Umschaltung Node-ID */
#define NODESCAN_STATE_NODE_SWITCHED 7 /* Node-ID-Umschaltung
abgeschlossen*/
(Hinweis: Je nachdem wie "kompliziert" das Auslesen weiterer Infos während
des Scan-Vorgangs noch wird, könnten noch weitere Zustaende dazukommen
! )
Für das Anzeigeprogramm besonders wichtig ist die Abfrage "nscan.state==7"
, denn dies bedeutet :
- Der Scan-Vorgang wurde erfolgreich abgeschlossen, UND
- der Bediener konnte sich fuer eins der erkannten Geraete entscheiden, UND
- der SYSTEC-CANopen-Stack konnte erfolgreich dazu motiviert werden,
von nun an mit dem "neuen" Knoten per SDO zu kommunizieren
File: ..?..\uptwin1\help\nodescan_49.htm
Author: W.Büscher, MKT Systemtechnik
Last modified: 2005-08-15 (ISO8601, YYYY-MM-DD)
back to top