CAN笔记(21) 服务数据对象

本文深入解析了CANopen中的服务数据对象(SDO),包括其作用、通讯原则、快速SDO与普通SDO协议的区别及应用场景。SDO是CANopen主从节点间参数配置和数据传输的关键,确保数据准确性和可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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 的报文


参考:

《CANopen 轻松入门》


相关推荐:

CAN笔记(20) 过程数据对象
CAN笔记(19) 网络管理
CAN笔记(18) 对象字典
CAN笔记(17) 预定义报文ID
CAN笔记(16) CANOpen简介


谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氢键H-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值