Service Data Objects (SDO)
The parameters listed in the object directory are read and written by means of service data objects. These SDOs are Multiplexed Domains, i.e. data structures of any size that have a multiplexer (address). The multiplexer consists of a 16-bit index and an 8-bit sub-index that address the corresponding entries in the object directory.
SDO protocol: access to the object directory
The CANopen Bus Couplers are servers for the SDO, which means that at the request of a client (e.g. of the IPC or the PLC) they make data available (upload), or they receive data from the client (download). This involves a handshake between the client and the server.
When the size of the parameter to be transferred is not more than 4 bytes, a single handshake is sufficient (one telegram pair): For a download, the client sends the data together with its index and sub-index, and the server confirms reception. For an upload, the client requests the data by transmitting the index and sub-index of the desired parameter, and the server sends the parameter (including index and sub-index) in its answer telegram.
The same pair of identifiers is used for both upload and download. The telegrams, which are always 8 bytes long, encode the various services in the first data byte. All parameters with the exception of objects 1008h, 1009h and 100Ah (device name, hardware and software versions) are only at most 4 bytes long, so this description is restricted to transmission in expedited transfer.
Protocol
The structure of the SDO telegrams is described below.
Client -> Server, Upload Request
11 bit identifier | 8 bytes of user data | |||||||
0x600 (=1536dez) + node ID | 0x40 | Index0 | Index1 | SubIdx | 0x00 | 0x00 | 0x00 | 0x00 |
Parameters | Explanation |
---|---|
Index0 | Index low byte (Unsigned16, LSB) |
Index1 | Index high byte (Unsigned16, MSB) |
SubIdx | Sub-index (Unsigned8) |
Client -> Server, Upload Response
11 bit identifier | 8 bytes of user data | |||||||
0x580 (=1408dec) + node ID | 0x4x | Index0 | Index1 | SubIdx | Data0 | Data1 | Data2 | Data3 |
Parameters | Explanation |
---|---|
Index0 | Index low byte (Unsigned16, LSB) |
Index1 | Index high byte (Unsigned16, MSB) |
SubIdx | Sub-index (Unsigned8) |
Data0 | Data low low byte (LLSB) |
Data3 | Data high high byte (MMSB) |
Parameters whose data type is Unsigned8 are transmitted in byte D0, parameters whose type is Unsigned16 use D0 and D1.
The number of valid data bytes is coded as follows in the first CAN data byte (0x4x):
Number of parameter bytes | 1 | 2 | 3 | 4 |
---|---|---|---|---|
First CAN data byte | 0x4F | 0x4B | 0x47 | 0x43 |
Client -> Server, Download Request
11 bit identifier | 8 bytes of user data | |||||||
0x600 (=1536dec) + node ID | 0x22 | Index0 | Index1 | SubIdx | Data0 | Data1 | Data2 | Data3 |
Parameters | Explanation |
---|---|
Index0 | Index low byte (Unsigned16, LSB) |
Index1 | Index high byte (Unsigned16, MSB) |
SubIdx | Sub-index (Unsigned8) |
Data0 | Data low low byte (LLSB) |
Data3 | Data high high byte (MMSB) |
It is optionally possible to give the number of valid parameter data bytes in the first CAN data byte
Number of parameter bytes | 1 | 2 | 3 | 4 |
---|---|---|---|---|
First CAN data byte | 0x2F | 0x2B | 0x27 | 0x23 |
This is, however, not generally necessary, since only the less significant data bytes up to the length of the object directory entry that is to be written are evaluated. A download of data up to 4 bytes in length can therefore always be achieved in Beckhoff bus nodes with 22h in the first CAN data byte.
Client -> Server, Download Response
11 bit identifier | 8 bytes of user data | |||||||
0x580 (=1408dec) + node ID | 0x60 | Index0 | Index1 | SubIdx | 0x00 | 0x00 | 0x00 | 0x00 |
Parameters | Explanation |
---|---|
Index0 | Index low byte (Unsigned16, LSB) |
Index1 | Index high byte (Unsigned16, MSB) |
SubIdx | Sub-index (Unsigned8) |
Breakdown of Parameter Communication
Parameter communication is interrupted if it is faulty. The client or server send an SDO telegram with the following structure for this purpose:
11 bit identifier | 8 bytes of user data | |||||||
0x580 (client) or 0x600(server) + node ID | 0x80 | Index0 | Index1 | SubIdx | Error0 | Error1 | Error2 | Error3 |
Parameters | Explanation |
---|---|
Index0 | Index low byte (Unsigned16, LSB) |
Index1 | Index high byte (Unsigned16, MSB) |
SubIdx | Sub-index (Unsigned8) |
Error0 | SDO error code low low byte (LLSB) |
Error3 | SDO error code high high byte (MMSB) |
List of SDO error codes (reason for abortion of the SDO transfer):
SDO error code | Explanation |
---|---|
0x05 03 00 00 | Toggle bit not changed |
0x05 04 00 01 | SDO command specifier invalid or unknown |
0x06 01 00 00 | Access to this object is not supported |
0x06 01 00 02 | Attempt to write to a Read_Only parameter |
0x06 02 00 00 | The object is not found in the object directory |
0x06 04 00 41 | The object can not be mapped into the PDO |
0x06 04 00 42 | The number and/or length of mapped objects would exceed the PDO length |
0x06 04 00 43 | General parameter incompatibility |
0x06 04 00 47 | General internal error in device |
0x06 06 00 00 | Access interrupted due to hardware error |
0x06 07 00 10 | Data type or parameter length do not agree or are unknown |
0x06 07 00 12 | Data type does not agree, parameter length too great |
0x06 07 00 13 | Data type does not agree, parameter length too short |
0x06 09 00 11 | Sub-index not present |
0x06 09 00 30 | General value range error |
0x06 09 00 31 | Value range error: parameter value too great |
0x06 09 00 32 | Value range error: parameter value too small |
0x06 0A 00 23 | Resource not available |
0x08 00 00 21 | Access not possible due to local application |
0x08 00 00 22 | Access not possible due to current device status |
Further, manufacturer-specific error codes have been introduced for register communication (index 0x4500, 0x4501):
SDO error code | Explanation |
---|---|
0x06 02 00 11 | Invalid table: Table or channel not present |
0x06 02 00 10 | Invalid register: table not present |
0x06 01 00 22 | Write protection still set |
0x06 07 00 43 | Incorrect number of function arguments |
0x06 01 00 21 | Function still active, try again later |
0x05 04 00 40 | General routing error |
0x06 06 00 21 | Error accessing BC table |
0x06 09 00 10 | General error communicating with terminal |
0x05 04 00 47 | Time-out communicating with terminal |