CAN笔记(21) 服务数据对象
1. 服务数据对象
在 CAN笔记(17) 预定义报文ID 提及到:
服务数据对象 SDO (Service data object)主要用于 CANopen 主站对从节点的参数配置
服务确认是 SDO 的最大的特点,为每个消息都生成一个应答,确保数据传输的准确性
如果超时没有确认,则发送节点将 会重新发送原报文
这就像快递, 需要收方签收后, 给寄方发送一个已经签收的确认才算完成一次投递
在一个 CANOpen 系统中,通常
CANOpen 从节点作为 SDO 服务器(Sever)
CANOpen 主节点作为 SDO 客户端(Client)
称为 CS 通讯
SDO 客户端通过索引和子索引,能够访问 SDO 服务器上的对象字典
这样 CANOpen 主节点可以访问从节点的任意对象字典项的参数
并且 SDO 也可以传输任何长度的数据(当数据长度超过 4 个字节时就拆分成多个报文来传输)
2. 通讯原则
SDO 的通讯原则非常单一:
发送方(客户端) 发送 CAN-ID 为 600h + Node-ID 的报文
其中 Node-ID 为接收方(服务器) 的节点地址, 数据长度均为 8 字节
接收方(服务器) 成功接收后, 回应 CAN-ID 为 580h + Node-ID 的报文
这里的 Node-ID 依然是接收方(服务器) 的节点地址, 数据长度均为 8 字节
3. 快速 SDO 协议
最常用最常见的 SDO 协议是快速 SDO
所谓快速, 就是 1 次来回就搞定,前提是 读取和写入的值不能大于 32 位
命令中直接包含了要读写的索引、 子索引、 数据
快速 SDO 的难点在于 command specifier(CS)命令符的记忆:
通过快速 SDO, 可以直接对 CANOpen 节点的对象字典中的值进行读取和修改
所以在做 参数配置 之外, 也经常作为 关键性数据传输 之用
比如 CANOpen 控制机器人的电机转动角度时, 就使用 SDO 来传输, 保证可靠转动角度
4. 普通 SDO 协议
当需要传输的值 超过 32 位 时
就不能使用快速 SDO 传输,必须使用普通 SDO 进行 分帧传输
在应用中较少用到, 一般用于 CANOpen 节点的程序固件升级
或者做网关转换 MVB 总线之类数据最大可达 256 位的应用
普通 SDO 协议难点在于分包逻辑与 CS 命令符的变化
下载协议 (download protocol) :
上传协议 (upload protocol):
当然普通SDO的CAN帧ID与快速SDO相同,依然:
发送方(客户端)发送的报文CAN-ID为 600h + Node-ID 的报文
接收方(服务器) 成功接收后, 回应 CAN-ID 为 580h + Node-ID 的报文
参考:
相关推荐:
CAN笔记(20) 过程数据对象
CAN笔记(19) 网络管理
CAN笔记(18) 对象字典
CAN笔记(17) 预定义报文ID
CAN笔记(16) CANOpen简介
谢谢!