CANopen-"Node-Scan"-function

(only available for certain terminals with a special, modified implementation of the CANopen protocol)

This document describes how to scan a CANopen network for all connected nodes.

Note: Only very few terminals support this function - since 2005 (see Feature Matrix) !

Contents

See also:


Important note about the CANopen-Node-Scanner

Because MKT's "Terminals with CANopen" are no CANopen-MASTERs but CANopen-SLAVES, having a node-scanner as explained below is NON-CONFORMAL TO THE CANOPEN PROTOCOL ! ! ! !

... and will most likely only be implemented ONLY IN A SPECIAL FIRMWARE ("Art11102") .

Why ?

The node-scanner sends read-requests via SDO to all 127 possible CANopen-nodes to find out "who answers". During this time, the SDO-timeout will be set to some hundred milliseconds, which is necessary to detect "slow" slaves too.

But unfortunately SDO-transfers are simple point-to-point connections, which must be carefully planned in a CANopen network by an administrator (or manager). There are very nice, but costly PC programs out there for managing all nodes in a CANopen network.

When the terminal scans for nodes itself (trying to communicate with all 127 nodes, which the admin doesn't know) is generally FORBIDDEN in a CANopen network, because doing so will DEFINITELY cause collisions on the bus sooner or later, when other devices (or the "real" CANopen-master) want to communicate with each other via SDO too ! Remeber this, it is your responsibility: Only use the node-scan function if you can guarantee that it will not cause problems - which may result in a minor catastrophy like the total breakdown of the CAN network (if you don't know why, or what all this is about, you cannot guarantee it; so you must not use it ) !

Principle of a CANopen-node scan

If the SDO-client returns a valid result to the application layer (here: node scanner) :

After the above node-scan-loop :

Interpreter commands and -functions for controlling the node scanner

< sorry, not translated yet >

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_01.htm
Author: W.Büscher, MKT Systemtechnik
Last modified: 2005-08-15 (ISO8601, YYYY-MM-DD)

back to top