服务资料对象(SDO)可用来存取远端节点的对象字典,读取或设定其中的资料。提供对象字典的节点称为SDO server,存取对象字典的节点称为SDO client。SDO 通讯一定由SDO client 开始,并提供初始化相关的参数。
在CANOpen的术语中,上传是指由 SDO server 中读取资料,而下载是指设定 SDO server 的资料。
由于对象字典中的资料长度可能超过 8 个字节,无法只用一个 CAN 页框传输, SDO 也支援长讯息的分割(segmentation)和合并(desegmentation)。这样的对象有二种:SDO 下载/上传(SDO download/upload)及SDO 区块下载/上传(SDO Block download/upload)。CANOpen 协定较新版本支援SDO区块传输,可以允许传输大量的资料,且传输的 overhead 可以较低。
负责处理 SDO 资料传输的 COB ID 可在对象字典中设定。在对象字典的索引 0x1200 至 0x127F 可设定 SDO server 的 COB ID,最多可设定到 127 个。而 SDO client 可以在对象字典的索引 0x1280 至 0x12FF 中设定。不过预定义连结(pre-defined 连接ion set)定义在开机后(Pre-operational 状态)可用来设定设备组态的 SDO。接收用的 COB ID 为 0x600 + 节点 ID,而传送用的 COB 为 0x580 + 节点 ID。
以下用 SDO 下载来说明 SDO 的协定,SDO client 在要启始下载时,会送出 CAN 讯息,其 ID 为接收端 SDO channel 的 COB ID,而 CAN 页框的资料字段内容如下:
CAN 页框的资料字段
|
字节 1
|
字节 2-3
|
字节 4
|
字节 5-8
|
3 位元
|
1 位元
|
2 位元
|
1 位元
|
1 位元
|
ccs=1
|
接收(=0)
|
n
|
e
|
s
|
索引
|
子索引
|
资料
|
- ccs 是 SDO 传输时 client 指令的识别码,可分为以下几种:
- 0:SDO区域下载
- 1:启始下载
- 2:启始上传
- 3:SDO区域上传
- 4:中断SDO传输
- n为此讯息中实际资料的长度,只有在e和s设定时有效
- e若设为1,表示是快速传输(expedited transfer),目前讯息即包括了所有要传输的资料。若设为0,表示要传输的资料无法用一个讯息传送,会分割为数个讯息。
- s若设为1,且e也设为1,表示资料长度记录在n。若n设为0,表示实际完整资料的长度会放在此讯息中的资料字段中。
- 索引是要存取资料的对象字典索引。
- 子索引是要存取变量的子索引。
- 资料在快速传输(e=1)时是要上传的资料,若s=1且e=0,则是实际资料的长度。
CANOpen