CANopen - Funktionen des CAN-Testers

Inhalt

Siehe auch: Übersicht CAN-Tester 


Zweck und Einsatzbereich

Der CAN-Tester ist als Testprogramm auf niedriger CAN-Bus-Telegramm-Ebene konzipiert, mit einigen Erweiterungen die für "hausinterne Tests" bei Firma MKT verwendet werden. Möglich sind:

Der CAN-Tester kann dabei sowohl als Client oder Server arbeiten. Um eine sinnvolle SDO-Server-Funktionalität zu ermöglichen, verfügt der CAN-Tester über ein eigenes CANopen-Object-Dictionary, dessen Einträge editiert werden können. Die Beschreibung eines CANopen-ODs kann aus EDS-Dateien importiert werden; danach können auch "Werte" per SDO aus einem CANopen-Device gelesen und in Form einer DCF-Datei (Device Configuration File) exportiert werden. Diese Funktion ist zum Testen komplexerer CANopen-Geräte extrem hilfreich;  auch im Zusammenhang mit professionellen CANopen-Konfigurationstools (wie z.B. den CANopen Configuration Manager).

Zum Nutzen der SDO-Client-Funktionalität (d.h. zum "Anstossen" von Schreib- und Lesezugriffen) dienen spezielle Befehle des Kommandointerpreters (sdo.read und sdo.write).

Zurück zum Seitenbeginn


CANopen OD Browser / Scanner

Mit dem CANopen-OD-Browser kann das eigene, oder ein 'fremdes' CANopen-Object-Dictionary ("OD") untersucht werden.

Darüberhinaus bietet der CAN-Tester die Möglichkeit, auch ohne EDS-Datei 'alle' Objekte in einem unbekannten CANopen-Slave zu finden. Dazu im Hauptmenü des CAN-Testers die Funktion Tools ... Scan remote OD into the  browser aufrufen. Dabei werden der Reihe nach alle möglichen Objekt-Indizes (0x0000...0xFFFF) 'ausprobiert', was sehr lange dauern kann. Um das Einscannen zu beschleunigen, kann der gescannte Index-Bereich daher vor dem Start eingegrenzt werden. Details zum OD-Scanner finden Sie in einer gesonderten Datei.

Screenshot CANopen OD Browser

Öffnen des OD-Browsers für ein externes OD (per SDO) : Im Hauptmenü des CAN-Testers per Tools...Open Remote CANopen OD Browser .

Öffnen des OD-Browsers für das eigene OD (des CANopen-Testers) : Im Hauptmenü des CAN-Testers per Tools...  Local CANopen OD Browser .

Die Spalten in der Tabelle haben folgende Bedeutung:

Object

Hier stehen Objekt-Index und -Subindex in hexadezimaler Form.

Name

Der Name des Objektes; stammt i.A. aus dem EDS-File. Bei aus einem 'unbekannten' CANopen-Slave eingelesenen ODs versucht der CAN-Tester, den Namen der wichtigsten Objekte zu 'erraten' (was im Falle der Objekte im Kommunikationsprofil meistens auch passt).

Data Type

Datentyp nach CANopen, allerdings nicht als numerischer Code, sondern als Klartext.

Access

Zugriffsrechte aus dem EDS-File (wenn vorhanden bzw geladen).

Display

Definiert, wie der CAN-Tester die Daten anzeigen soll: hex = Hexadezimal, dec = Dezimal, asc = ASCII (Text) .

Value

Aktueller Wert.
Ähnlich wie beim Befehl sdo.r (Lesezugriff per SDO auf ein bestimmtes Objekt) wird auch hier bei 'sehr großen Objekten' (Fachchinesch : 'DOMAIN') nicht der Inhalt, sondern der Name einer Datei angezeigt, in der der CAN-Bus-Tester den Inhalt abgespeichert hat. Sehr praktisch beispielsweise beim Auslesen einer "EDS-Datei" aus dem Gerät selbst (Objekt 0x1021, z.B. bei MKT's CANopen-Buskoppler).

Size

Größe der Objektdaten, gemessen in BYTES. Beim Datentyp "Visible String" ist dies nicht die maximale Stringlänge, sondern die aktuelle. Leider gibt es keine Möglichkeit, die maximale Länge eines Objektes per SDO-Lesezugriff zu ermitteln !

Counters

Zählerstand für Lesezugriffe (links) und Schreibzugriffe (rechts). Traten beim Zugriff per SDO Fehler auf, werden auch diese gezählt; in der Spalte "Counters" steht dann z.B. ERR=3 (d.h. beim Schreib- oder Lesezugriff sind drei Fehler aufgetreten). Ursache ist oftmals ein Schreibzugriff, den der Prüfling aus irgendwelchen Gründen abgewiesen hat (z.B. Versuch den Inhalt eines "Read Only"-Objektes zu überschreiben.

Mit dem Funktionen 'Load' bzw 'Save' kann eine elektronische Beschreibung des ODs aus einer Datei importiert oder in einer Datei gespeichert werden. Zu den unterstützten Dateiformaten zählt auch das für CANopen übliche EDS-Format (electronic datasheet, oder auch electronic device specification).

Mit der Funktion 'Read' werden alle Werte neu per SDO eingelesen, und sofort in der Tabelle angezeigt. Dieser Vorgang kann, je nach Umfang des ODs, einige Sekunden dauern.

Werte (in der Tabellenspalte 'Value') können auch editiert werden. Beim Abschluss der Eingabe mit der ENTER-Taste kann der Wert dann per SDO in das abgesetzte CANopen-Gerät geschrieben werden. In vielen Fällen ist es aber einfacher, dies mit den im folgenden Kapitel beschriebenen Interpreter-Kommandos zu erledigen.

CANopen-EDS und DCF

Nach dem Auslesen eines OD's per SDO kann die so gewonnene "CANopen-Konfiguration" (d.h. die Summe aller im CANopen-OD eines Gerätes verfügbaren "Werte") in einer CANopen-konformen DCF-Datei (device configuration file) abgelegt werden. Wählen Sie dazu im Fenster des "Remote CANopen OD Browsers" die Funktion

    Save , wählen als Dateityp "Device Configuration File (*.dcf)", und dann den Namen der Zieldatei (und ggf. das Ziel-Verzeichnis). Anschließend kann die so erzeugte Datei z.B. mit einer anderen Konfiguration (d.h. einem anderen DCF) verglichen werden. Dazu eignen sich Datei-Vergleichs-Utilities wie die im glorreichen(!) Total Commander integrierte Funktion Files ... Compare by Content . Voneinander abweichende Werte (und Parameter) werden beim Total Commander in der Vergleichsliste rot markiert; mit den Buttons "Previous Difference" und "Next Difference" kann man sehr schnell alle Unterschiede in den beiden miteinander verglichenen (Text-)Dateien finden.

Die Spezifikation von EDS und DCF finden Sie übrigends in CiA (CAN in Automation) DS 306. Bei der Erstellung des CAN-Testers diente Draft Standard 306 V1.3 (vom 1. Januar 2005) als Grundlage für das Format der importierten und exportierten EDS- und DCF-Dateien. Das für unsere Zwecke unnötig komplexe,  auf XML basierende "XDD"-Format wird nicht unterstützt.

Die Strukturen von EDS und DCF sind nahezu identisch; der Unterschied ist lediglich das Vorhandensein der Einträge mit dem Schlüssel "ParameterValue" . Einige Beispieldateien (EDS und DCF) finden Sie im Unterverzeichnis "Objects" .  Die Datei MKTview2_DCF_Import_Test.dcf kann z.B. zu Testzwecken in MKT's "MKT-View II / CANopen" geladen und wieder ausgelesen werden.

Hinweis: Das grauenhaft komplizierte PDO-Mapping wird z.Z. vom CAN-Tester nicht unterstützt. Der Grund liegt darin, daß für den (CANopen-konformen) Schreibzugriff auf die PDO Mapping Parameter nicht einfach der Reihe nach alle Subindizes beschrieben werden dürfen, sondern zunächst der PDO "ungültig" gemacht werden muss, dann die Anzahl gemappter Objekte auf Null gesetzt, anschließend die gemappten Objekte in die passenden Subindizes geschrieben, danach die Anzahl gemappter Objekte auf die tatsächlich vorhandene Anzahl gesetzt werden muss; anschließend der PDO wieder "gültig" gemacht werden muss; .... ; und zu guter Letzt die Konfiguration dauerhaft abgespeichert und ein Node-Reset ausgelöst werden muss (damit die neue Konfiguration verwendet wird). Aus diesem Grund empfehlen wir für die Konfiguration der PDOs unbedingt die Anschaffung eines geeigneten CANopen-Konfigurationstools (z.B. "CANopen Configuration Manager" oder vergleichbare Produkte) .

Zurück zum Seitenbeginn


Interpreterfunktionen zum Zugriff auf Objekte im CANopen-OD per SDO

Lesezugriff per SDO:

Syntax:
sdo.r( <ObjektIndex.Subindex> [,Datentyp[,Default]] )
Beispiele:
@print sdo.r($1008.0) ; show device name (as "visible string")

@I=1 ; Read all 32bit floating point variables (object 0x4008)
@N=sdo.r($4008.0) ; how many variables do we have FOR THIS TYPE ?
@repeat
   @print "AppVar4008.%02lX = %lg (FLT32)",I,sdo.r($4008.I,F32) ; 32 bit float !!
   @I=I+1
@until(I>N)

Das letzte Beispiel stammt aus dem Test-Script "CanopenTerminalTest.cts", mit dem in einer Schleife alle Subindizes von Objekt 0x4008 gelesen werden.
In diesem Fall muss der Datentyp (hier : FLT32 = 32-Bit floating point) als Argument beim Aufruf der sdo.read-Funktion übergeben werden, weil der Interpreter andernfalls einen 32-Bit-Integer-Typ verwenden würde. Grund: Beim Lesezugriff per SDO erfährt der SDO-Client zwar, wie viele Bytes gelesen wurden, nicht aber den Datentyp. Per Default geht der Interpreter immer von Integer-Typen aus. Als Datentyp können die CANopen-Datentyp-Codes, oder besser (lesbarer) die folgenden symbolischen Konstanten verwendet werden, ggf. auch abgekürzt. Alle Symbole in einer Zeile der folgenden Auflistung entsprechen dem gleichen CANopen-Datentyp .

Bei 'sehr großen Objekten' (CANopen-Fachchinesisch : 'DOMAIN') liefert die Funktion sdo.r() nicht den Inhalt, sondern den Namen einer Datei, in der der CAN-Bus-Tester den Inhalt abgespeichert hat. Der Dateiname wird automatisch aus dem Objekt-Index und -Subindex erzeugt, mit dem Vorsatz 'Readout_Obj' um zu verdeutlichen, daß es sich bei dieser Datei um einen aus einem CANopen-Objekt ausgelesenen Wert handelt.
Beispiel zum Auslesen einer "EDS-Datei" aus dem Gerät selbst (Objekt 0x1021, funktioniert z.B. mit MKT's CANopen-Buskoppler):

Befehlszeile aus einem Test-Script:
print sdo.r($1021.0,str) ; Try to read a 'stored EDS' from this device

Antwort vom CAN-Tester: Hier kein "Wert" sondern der Name der vom CAN-Tester erzeugten Datei 'mit dem Wert':
C:\MKT\CAN_Tester_for_Windows\Objects\Readout_Obj1021_00.eds

Schreibzugriff per SDO:

Syntax:
sdo.w( <ObjektIndex.Subindex> , <Datentyp> , < zu schreibender Wert > )
Beispiel:
@sdo.w ($1017.0,U16, 100 ) ; set heartbeat producer time to 100 milliseconds

Siehe auch : Übersicht aller Interpreterfunktionen und -Kommandos des CAN-Testers


CANopen-Datentypen

Die folgenden elementare Datentypen waren in CiA DS301 V4.0 auf Seite 9-58 definiert.
Hinweis: Bei weitem nicht alle dieser Typen werden vom CAN-Tester unterstützt !
Der "Index" eines Datentyps bezieht sich auf das Object Dictionary eines jeden CANopen-Knotens (dient nur zu Definitionszwecken, unter diesen Indizes werden Sie bei den meisten CANopen-Knoten nichts auslesen können !)
Name Index Size in bits Remarks
BOOLEAN 0x01 ?? we use 8 bits for this !
INTEGER8 0x02 8
INTEGER16 0x03 16
INTEGER32 0x04 32
UNSIGNED8 0x05 8
UNSIGNED16 0x06 16
UNSIGNED32 0x07 32
REAL32 0x08 32 floating point, not fully supported
VISIBLE_STRING 0x09 X not supported
OCTET_STRING 0x0A X not supported
UNICODE_STRING 0x0B X not supported
TIME_OF_DAY 0x0C not supported
TIME_DIFFER 0x0D not supported
BIT_STRING 0x0E not supported
DOMAIN 0x0F not supported
INTEGER24 0x10 not supported
REAL64 0x11 not supported
 .... 0x12..0x16 other exotic types, not supported
reserved 0x17
 .... 0x18..0x1B very exotic types, not supported
reserved 0x1C..0x1F
PDO_COMM_PAR 0x20 8 + x
PDO_MAPPING 0x21 8 + n*32
SDO_PARAMETER 0x22 8 + x
IDENTITY 0x23 8 + 4*32

Siehe auch:

Zurück zum Seitenbeginn


SDO-Fehlercodes

<noch keine deutsche Übersetzung verfügbar>

The table below shows some error codes that may occur during SDO upload or download.
Most of these error codes are taken from CANopen DS301 V4.
Some of these errors may also be caused by external devices on the CAN bus.
For a more sophisticated explanation of these errors you should check the CiA literature or other CAN protocol descriptions.
SDO Error Code Meaning
0x05030000 TOGGLE-BIT NOT ALTERNATED
0x05040000 SDO-PROTOCOL TIMED OUT
0x05040001 COMMAND SPECIFIER NOT VALID OR UNKNOWN
0x05040002 INVALID BLOCK SIZE
0x05040003 INVALID SEQUENCE NUMBER
0x05040004 CRC ERROR
0x05040005 OUT OF MEMORY
0x06010000 UNSUPPORTED ACCESS TO AN OBJECT
0x06010001 ATTEMPT TO READ A WRITE-ONLY OBJECT
0x06010002 ATTEMPT TO WRITE A READ-ONLY OBJECT
0x06010047 UNSUPPORTED ACCESS, INTERNAL INCOMPATIBLE
0x06020000 OBJECT DOES NOT EXIST IN DICTIONARY
0x06040041 OBJECT CANNOT BE MAPPED TO THE PDO
0x06040042 MAPPED OBJECTS WOULD EXCEED PDO LENGTH
0x06040043 GENERAL PARAMETER INCOMPATIBILITY
0x06040047 GENERAL INTERNAL INCOMPATIBILITY
0x06060000 ACCESS FAILED DUE TO HARDWARE ERROR
0x0606002F ACCESS FAILED DUE TO CAN ERROR
0x06070010 DATA TYPES DO NOT MATCH
0x06070010 LENGTH OF PARAM DOES NOT MATCH
0x06070012 LENGTH OF PARAM TOO HIGH
0x06070013 LENGTH OF PARAM TOO LOW
0x06090011 SUBINDEX DOES NOT EXIST
0x06090030 VALUE RANGE EXCEEDED
0x06090031 VALUE RANGE TOO HIGH
0x06090032 VALUE RANGE TOO LOW
0x06090036 MAXIMUM VALUE IS LESS THAN MINIMUM VALUE
0x08000000 GENERAL ERROR
0x08000020 DATA CANNOT BE TRANSFERRED TO APPLICATION
0x08000021 .. due to local control
0x08000022 .. due to device state
0x08000023 OBJECT DIRECTORY GENERATION FAILS

Siehe auch: Fehlercodes des CAN-Testers

Zurück zum Seitenbeginn


Zuletzt bearbeitet: 2010-03-08, Wolfgang Büscher (DL4YHF) .