概述
在CANopen协议中,作为通讯对象的过程数据对象PDO(Process Data Object),服务数据对象SDO(Service Data Object),用来传输应用信息和配置信息。
简单来说,PDO属于过程数据,即单向传输,无需接受节点回应CAN报文来确认,属于“生产消费”模型
SDO属于服务数据,有指定接受节点的地址(Node-ID),并且需要指定的接受节点回应CAN报文来确定已经接收,如果超时未确认,重新发送该报文,属于“服务器客户端”模型。
其中PDO和SDO的报文ID分为功能码和节点号(7位,最大为128)
CAN的帧ID在canopen中一般也称为COB-ID,COB-ID=Fuction-ID+Node-ID
PDO
CAN-ID 定义
作为一个节点,需要发送和接受。PDO 分为 TPDO(发送 PDO)和(接收 RPDO),发送和接收是以 CANopen 节点自身为参考。TPDO和RPDO分别有四个数据对象,每种数据对象就是一条CAN报文封装,数据长度被限制为 1~8 字节。
在 PDO 预定义中,人为规定了 TPDO 和 RPDO,规定了 Node-ID 在 PDO 中的位置,规定了 PDO 的编号
如果发送数据特别多,可以依次往后添加TPDO5,TPDO6等等,在对象字典可以手动配置添加。
传输形式:同步传输和异步传输
异步传输:由特定事件触发
触发方式有两种,第一种是由设备子协议中规定的特定事件来触发,例如,定时传输(定时器时间一道就触发传输),数据变化传输,第二种是通过发送与PDO的COB-ID相同的远程帧来触发。一般采用第一种。
同步传输:通过接受同步对象实现同步
通过一个同步报文让所有节点在同一时刻进行上传数据或者执行下达的应用指令。一般同步报文有NMT主机控制,也就是网络管理。
同步传输有可以分为周期传输(通过接受同步对象(SYNC)来实现,可以设置 1~240 个同步对象触发)和非周期传输(由远程帧预
触发或者由设备子协议中规定的对象特定事件预触发传送)。
通信参数
PDO 通信参数,定义了该设备所使用的 COB-ID、传输类型、定时周期等。 RPDO 通讯参数位于对象字典索引的 1400h to 15FFh, TPDO 通讯参数位于对象字典索引的 1800h to19FFh。 每条索引代表一个 PDO 的通信参数集,其中的子索引分别指向具体的各种参数。
对应PDO通讯参数可以在对象字典里配置,如图,每一个发送PDO都对应的有通信参数配置。
映射参数
它包含了一个对象字典中的对象列表,这些对象映射到相应的 PDO,其中包括数据的长度(单位,位),对于生产者和消费者都必须要知道这个映射参数,才能够正确的解释 PDO 内容。 就是将通信参数、应用数据和具体 CAN 报文中数据联系起来。
在程序中定义自己需传输的数据,通过TPDO配置映射参数,映射关系可以在对象字典里配置,包括每一个数据的字节大小,每一个字节在CAN数据帧的位置(数据帧的CAN-ID为唯一标识,对应在通讯参数里配置)
SDO
SDO主要用于对从节点的配置。(主从节点相对于发送和接受来说,通常 CANopen 从节点作为 SDO 服务器, CANopen 主节点
作为客户端,称为 CS 通讯)
服务确认是 SDO 的最大的特点,为每个消息都生成一个应答,确保数据传输的准确性。
通讯原则
发送方(客户端) 发送 CAN-ID 为 600h+Node-ID 的报文,
其中 Node-ID 为接收方(服务器) 的节点地址, 数据长度均为 8 字节;
接收方(服务器) 成功接收后, 回应 CAN-ID 为 580h+Node-ID 的报文。 这里的 Node-ID依然是接收方(服务器) 的节点地址, 数据长度均为 8 字节。
使用CAN收发仪器测试:
快速SDO
最常用最常见的 SDO 协议是快速 SDO, 所谓快速, 就是 1 次来回就搞定。 前提是读取和写入的值不能大于 32 位,即一次可以携带4字节数据
通过快速 SDO, 可以直接对 CANopen 节点的对象字典中的值进行读取和修改, 所以在做参数配置之外, 也经常作为关键性数据传输之用。
普通 SDO 协议
当需要传输的值超过 32 位时, 就不能使用快速 SDO 传输。 必须使用普通 SDO 进行分帧传输。 在应用中较少用到, 一般用于 CANopen 节点的程序固件升级, 或者做网关转换MVB 总线之类数据最大可达 256 位的应用。
普通SDO的CAN帧ID与快速SDO相同, 依然发送方(客户端)发送的报文CAN-ID
为 600h+Node-ID, 接收方(服务器) 成功接收后, 回应 CAN-ID 为 580h+Node-ID 的报文。
注:参考资料:广州致远电子股份有限公司CANopen 轻松入门