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.

Servicedatenobjekte (SDO) 1:
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 00

Allgemeiner Fehler

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