CanOpen通信----PDO与SDO

服务数据对象SDO

服务数据对象 (SDO) 通过对象索引和子索引与对象字典建立联系, 通过SDO 可以读取对象字典中的对象内容, 或者在允许的情况下修改对象数据。

SDO 传输框架

SDO 传输方式遵循客户端—服务器模式,即一问一答方式。由 CAN 总线网络中的 SDO 客户端发起,SDO 服务器作出应答。因此, SDO 之间的数据交换至少需要两个 CAN 报文才能实现, 而且两个 CAN 报文的 CAN 标识符不一样。
CanOpen通信----PDO与SDO

SDO 传输报文

SDO 的传输分为不高于 4 个字节和高于 4 个字节的对象数据传输。 不高于 4 个字节采用加速 SDO 传输方式,高于 4 个字节采用分段传输或块传输方式。SDO 传输报文由 COB-ID 和数据段组成。由下表 可以看出,T_SDO 和R_SDO 报文的 COB-ID 不一致。数据段采用小端模式,即低位在前,高位在后排列。 所有的 SDO 报文数据段都必须是 8 个字节。SDO 传输报文格式如下表:
CanOpen通信----PDO与SDO
其中, 命令代码指明了该段 SDO 的传输类型和传输数据长度, 索引和子索引是对象在列表的位置, 数据是该对象的数值。

SDO 加速写传输报文

对于不高于 4 个字节的读写, 采用加速 SDO 传输。 按照读写方式及内容数据长度的不一致,传输报文各不相同。加速 SDO 写报文如下表:
CanOpen通信----PDO与SDO
符号- 表示数据不予考虑,写数据时建议写 0。

SDO 加速读传输报文

SDO 读操作不高于 4 个字节的对象报文时,采用加速方式。 加速 SDO 读报文如下表。
CanOpen通信----PDO与SDO

SDO分段读传输报文

当数据大于4个字节时,采用分段读来执行操作,起始发送帧报文结构与加速传输报文保持一致。
起始报文结构如下
CanOpen通信----PDO与SDO
传输过程由命令大妈触发位(bit 6)交互发送0和1,必须保持此规律从站才给予响应。
过程报文如下
CanOpen通信----PDO与SDO
分段传输结束帧包含有末尾帧标志和数据长度,报文如下
CanOpen通信----PDO与SDO

过程数据对象PDO

过程数据对象 (PDO) 用来传输实时的数据,是 CANopen 中最主要的数据传输方式。由于 PDO 的传输不需要应答,且 PDO 的长度可以小于 8 个字节,因此传输速度快。
PDO 的映射配置遵循流程如下
CanOpen通信----PDO与SDO

PDO 传输框架

PDO 的传输遵循的是生产者消费者模型, 即 CAN 总线网络中生产者产生的 TPDO 可根据 COB-ID 由网络上一个或者多个消费者 RPDO 接收,传输模型如下图所示
CanOpen通信----PDO与SDO

PDO 对象

按照接收与发送的不同,PDO 可分为 RPDO 和 TPDO。 PDO 由通信参数和映射参数共同决定最终传输的方式及内容。 本伺服驱动器使用了 4 个 RPDO 和 4 个 TPDO 来实现 PDO 的传输,相关对象列表如下
CanOpen通信----PDO与SDO

PDO 通信参数

PDO 的 CAN 标识符

PDO 的 CAN 标识符即 PDO 的 COB-ID, 包含控制位和标识数据, 确定该PDO 的总线优先级。COB-ID 位于通信参数 (RPDO:1400h ~ 1403h,TPDO:1800h ~ 1803h)的子索引 01 上,最高位决定该 PDO 是否有效。
CanOpen通信----PDO与SDO

PDO 的传输类型

PDO 的传输类型位于通信参数 (RPDO:1400h ~ 1403h,TPDO:1800h ~ 1803h)的子索引 02 上,决定该 PDO 遵循何种传输方式
CanOpen通信----PDO与SDO
通信参数(RPDO:1400h1403h,TPDO:1800h1803h) 子索引 02 不同的数值代表不同的传输类型,定义了触发 TPDO 传输或处理收到的 RPDO 的方法,具体对应关系如表所示
CanOpen通信----PDO与SDO
● 当 TPDO 的传输类型为 0 时,如果映射数据发生改变,且接收到一个同步帧,则发送该 TPDO;
● 当 TPDO 的传输类型为 1~240 时,接收到相应个数的同步帧时,发送该 TPDO。
● 当 TPDO 的传输类型是 254 或 255 时,映射数据发生改变或者事件计时器到达则发送该 TPDO。
● 当 RPDO 的传输类型为 0~240 时,只要接收到一个同步帧则将该 RPDO 最新的数据更新到应用;当 RPDO 的传输类型为 254 或者 255 时,将接收到的数据直接更新到应用。

禁止时间

针对 TPDO 设置了禁止时间,存放在通信参数 (1800h~1803h) 的子索引03 上,防止 CAN 网络被优先级较高的 PDO 持续占有。该参数的单位是 100us,设置数值后,同一个 TPDO 传输间隔减不得小于该参数对应的时间。
举例:
TPDO2 的禁止时间为 300, 则 TPDO 的传输间隔不会小于 30ms。

事件计时器

针对异步传输(传输类型为 254 或 255)的 TPDO,定义事件计时器,位于通信参数(1800h ~ 1803h)的子索引 05 上。事件计时器也可以看做是一种触发事件,它也会触发相应的 TPDO 传输。如果在计时器运行周期内出现了数据改变等其它事件,TPDO 也会触发,且事件计数器会被立即复位。

PDO 映射参数

PDO 映射参数包含指向 PDO 需要发送或者接收到的 PDO 对应的过程数据的指针,包括索引、子索引及映射对象长度。每个 PDO 数据长度最多可达 8 个字节,可同时映射一个或者多个对象。其中子索引 0 记录该 PDO 具体映射的对象个数,子索引 1~8 则是映射内容。映射参数内容定义如下
CanOpen通信----PDO与SDO
索引和子索引共同决定对象在对象字典中的位置,对象长度指明该对象的具体位长,用十六进制表示,即
CanOpen通信----PDO与SDO