主站设备通过SDO可以读取对象字典中的对象内容,或者在允许的情况下修改对象数据。
SDO传输框架
SDO的传输方式遵循C/S,即客户端服务器模式,一问一答的形式。
CAN总线网络中的SDO客户端发起,SDO的服务端做出应答。
SDO之间的数据交换至少需要2个CAN报文才能实现,且2个CAN报文的标识符不一样。
SDO的传输模型如下图所示:
SDO传输报文
SDO的传输分为不高于4个字节和高于4个字节的对象数据传输。
小于等于4个字节的采用加速SDO传输方式。
大于4个字节采用分段传输或块传输方式。
数据段采用小端模式,低位在前,高位在后。
所有的SDO报文数据段都必须是8个字节,多余的补零。
SDO传输报文格式如下图所示:
命令代码,说明了SDO的传输类型和传输数据的长度。
SDO加速写传输报文
“-”表示有数据但不予考虑,写数据时建议写0即可。
SDO加速读传输报文
SDO读操作不高于4个字节的对象报文时,采用加速方式。加速SDO读报文如下表:
下面使用SDO来控制伺服电机的运动的实列来说明SDO的使用方法;
该伺服驱动器的单位:10000 脉冲数等于编码器1圈
位置单位:脉冲数
速度单位:脉冲数/秒
加速度单位:脉冲数/秒平方
速度值 0x60FF == 0XC350 == 300 r/m
假设伺服驱动器的设备节点为0x03;
- 先复位节点: 0x0000 81 00 00 00 00 00 00 00
- 远程启动节点:0x0000 01 00 00 00 00 00 00 00
- 0x603 2F 60 60 00 03 00 00 00 // 设置为协议速度控制模式
- 0x603 23 FF 60 00 50 C3 00 00 // 设置目标速度 300 转/分
- 0x603 23 83 60 00 50 C3 00 00 // 设置预置加速度 300 转/分 / 秒
- 0x603 2b 40 60 00 06 00 00 00 // 写控制字为:0x06
- 0x603 2b 40 60 00 07 00 00 00 // 写控制字为:0x07
- 0x603 2b 40 60 00 0F 00 00 00 // 写控制字为:0x0F
- 0x603 2b 40 60 00 07 00 00 00 // 写控制字为:0x07
控制命令发送完后,通过SDO也可以获得设备的常见的状态,如下所示:
- 0x603 40 41 60 00 00 00 00 00 // SDO_读取_状态字反馈
- 0x603 40 6C 60 00 00 00 00 00 // SDO_读取_速度反馈
- 0x603 40 64 60 00 00 00 00 00 // SDO_读取_位置反馈