FC510x - PCI-Karten für CANopen

Servicedatenobjekte (SDO)

Die im Objektverzeichnis aufgeführten Parameter werden über Servicedatenobjekte gelesen und beschrieben. Diese SDOs sind Multiplexed Domains, also Datenstrukturen beliebiger Größe, die mit einem Multiplexor (Adresse) versehen sind. Der Multiplexor besteht aus 16-Bit-Index und 8-Bit-Subindex, die die entsprechenden Einträge im Objektverzeichnis adressieren.

SDO-Protokoll: Zugriff auf Objektverzeichnis

Die CANopen Buskoppler sind Server für das SDO, d.h. sie stellen auf Anforderung des Clients (z. B. des IPCs oder der SPS) Daten zur Verfügung (Upload) oder sie empfangen Daten vom Client (Download). Dabei findet ein Handshake zwischen Client und Server statt.

Wenn der zu übertragende Parameter bis zu 4 Bytes umfasst, genügt ein einziger Handshake (ein Telegrammpaar): Beim Download sendet der Client die Daten zusammen mit Index, Subindex und der Server bestätigt den Erhalt. Beim Upload fordert der Client die Daten an indem er Index und Subindex des gewünschten Parameters überträgt, und der Server sendet den Parameter (incl. Index und Subindex) in seinem Antworttelegramm. 

Für Upload und Download wird das gleiche Identifier-Paar verwendet. In den stets 8 Byte großen Telegrammen sind im ersten Datenbyte die unterschiedlichen Dienste codiert. Bis auf die Objekte 1008h, 1009h und 100Ah (Gerätename, Hardware- bzw. Softwareversion) sind alle Parameter der Buskoppler nur bis zu 4 Byte groß, daher beschränkt sich diese Beschreibung auf die Übertragung dieser Daten im beschleunigten Transfer (Expedited Transfer).

 

Protokoll

Im Folgenden wird der Aufbau der SDO-Telegramme beschrieben.

 
 

Client -> Server, Upload Request

 
11-bit Identifier
8 Byte Nutzdaten
0x600 (=1536dez) + Node-ID
0x40
Index0
Index1
SubIdx
0x00
0x00
0x00
0x00
Parameter
Erläuterung
Index0
Index Low-Byte (Unsigned16, LSB)
Index1
Index High-Byte (Unsigned16, MSB)
SubIdx
Subindex (Unsigned8)
 
 

Client -> Server, Upload Response

 
11-bit Identifier
8 Byte Nutzdaten
0x580 (=1408dez) + Node-ID
0x4x
Index0
Index1
SubIdx
Data0
Data1
Data2
Data3
Parameter
Erläuterung
Index0
Index Low-Byte (Unsigned16, LSB)
Index1
Index High-Byte (Unsigned16, MSB)
SubIdx
Subindex (Unsigned8)
Data0
Daten Low-Low-Byte (LLSB)
Data3
Daten High-High-Byte (MMSB)

Parameter des Datentyps Unsigned8 werden im Byte D0 übertragen, Parameter des Typs Unsigned16 in D0 und D1.

Die Anzahl der gültigen Datenbytes ist im ersten CAN-Datenbyte (0x4x) wie folgt codiert:

 
Anzahl Parameter-Bytes
1
2
3
4
Erstes CAN-Datenbyte
0x4F
0x4B
0x47
0x43
 
 

Client -> Server, Download Request

 
11-bit Identifier
8 Byte Nutzdaten
0x600 (=1536dez) + Node-ID
0x22
Index0
Index1
SubIdx
Data0
Data1
Data2
Data3
Parameter
Erläuterung
Index0
Index Low-Byte (Unsigned16, LSB)
Index1
Index High-Byte (Unsigned16, MSB)
SubIdx
Subindex (Unsigned8)
Data0
Daten Low-Low-Byte (LLSB)
Data3
Daten High-High-Byte (MMSB)

Optional ist es möglich, im ersten CAN-Datenbyte die Anzahl der gültigen Parameter-Datenbytes anzugeben

 
Anzahl Parameter-Bytes
1
2
3
4
Erstes CAN-Datenbyte
0x2F
0x2B
0x27
0x23

In der Regel ist das jedoch nicht erforderlich, da jeweils nur die niederwertigen Datenbytes bis zur Länge des zu beschreibenden Objektverzeichniseintrags ausgewertet werden. Ein Download von Daten bis zu 4 Byte Länge kann daher bei BECKHOFF Busknoten immer mit 22 h im ersten CAN-Datenbyte erfolgen.

 
 

Client -> Server, Download Response

 
11-bit Identifier
8 Byte Nutzdaten
0x580 (=1408dez) + Node-ID
0x60
Index0
Index1
SubIdx
0x00
0x00
0x00
0x00
Parameter
Erläuterung
Index0
Index Low-Byte (Unsigned16, LSB)
Index1
Index High-Byte (Unsigned16, MSB)
SubIdx
Subindex (Unsigned8)
 
 

Abbruch Parameterkommunikation

Im Falle einer fehlerhaften Parameterkommunikation wird diese abgebrochen. Client bzw. Server senden dazu ein SDO-Telegramm folgender Struktur:

 
11-bit Identifier
8 Byte Nutzdaten
0x580 (Client) oder 0x600(Server) + Node-ID
0x80
Index0
Index1
SubIdx
Error0
Error1
Error2
Error3
Parameter
Erläuterung
Index0
Index Low-Byte (Unsigned16, LSB)
Index1
Index High-Byte (Unsigned16, MSB)
SubIdx
Subindex (Unsigned8)
Error0
SDO Fehler-Code Low-Low-Byte (LLSB)
Error3
SDO Fehler-Code High-High-Byte (MMSB)

Liste der SDO-Fehler-Codes (Abbruch-Grund des SDO-Transfers):

SDO Fehler-Code
Erläuterung
0x05 03 00 00
Toggle Bit nicht geändert
0x05 04 00 01
SDO Command Specifier ungültig oder unbekannt
0x06 01 00 00
Zugriff auf dieses Objekt wird nicht unterstützt
0x06 01 00 02
Versuch, auf einen Read_Only Parameter zu schreiben
0x06 02 00 00
Objekt nicht im Objektverzeichnis vorhanden
0x06 04 00 41
Objekt kann nicht ins PDO gemappt werden
0x06 04 00 42
Anzahl und/oder Länge der gemappten Objekte würde PDO Länge überschreiten
0x06 04 00 43
Allgemeine Parameter Inkompatibilität
0x06 04 00 47
Allgemeiner interner Fehler im Gerät
0x06 06 00 00
Zugriff wegen Hardware-Fehler abgebrochen
0x06 07 00 10
Datentyp oder Parameterlänge stimmen nicht überein oder sind unbekannt
0x06 07 00 12
Datentyp stimmt nicht überein, Parameterlänge zu groß
0x06 07 00 13
Datentyp stimmt nicht überein, Parameterlänge zu klein
0x06 09 00 11
Subindex nicht vorhanden
0x06 09 00 30
allgemeiner Wertebereich-Fehler
0x06 09 00 31
Wertebereich-Fehler: Parameter wert zu groß
0x06 09 00 32
Wertebereich-Fehler: Parameter wert zu klein
0x06 0A 00 23
Resource nicht verfügbar
0x08 00 00 21
Zugriff wegen lokaler Applikation nicht möglich
0x08 00 00 22
Zugriff wegen aktuellem Gerätestatus nicht möglich

Für die Register-Kommunikation (Index 0x4500, 0x4501) wurden weitere, herstellerspezifische Fehler-Codes eingeführt:

SDO Fehler-Code
Erläuterung
0x06 02 00 11
ungültige Tabelle: Tabelle oder Kanal nicht vorhanden
0x06 02 00 10
ungültiges Register: Tabelle nicht vorhanden
0x06 01 00 22
Schreibschutz noch gesetzt
0x06 07 00 43
fehlerhafte Anzahl Funktionsargumente
0x06 01 00 21
Funktion noch aktiv, später erneut versuchen
0x05 04 00 40
Allgemeiner Routing Fehler
0x06 06 00 21
Fehler Zugriff BC Tabelle
0x06 09 00 10
Allgemeiner Fehler bei Kommunikation mit Klemme
0x05 04 00 47
Time-out bei Kommunikation mit Klemme