CANopen-"Node-Scan"-Funktion

(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:


Wichtiger Hinweis zum CANopen-Node-Scanner

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 !

Prinzipieller Ablauf beim Scannen

Falls der SDO-Client ein gueltiges Resultat an die Applikationebene (hier: Node-Scanner) liefert:

Nach Abschluss der Knoten-Lese-Schleife :

Interpreterkommandos und -Funktionen zum Steuern des Node-Scanners

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