CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通信协定,包括通信子协定及设备子协定常在嵌入式系统中使用,也是工业控制经常使用到的一种现场总线。服务器
因为CAN总线只定义了物理层和数据链路层,并无定义应用层,所以须要CANopen通讯协议来统一度量,把各类设备标准化。CANopen 实现了OSI模型中的网络层以上(包括网络层)的协定。网络
标准的 CANopen 页框:数据结构
CANopen 将 CANbus 的 11 位元 ID 称为通信对象 ID (COB-ID)。分为 4 位元的功能码及 7 位元的 CANopen 节点 ID。架构
7 位元的 ID 共有 128 种不一样的组合,其中 ID 0 不使用,所以一个 CANopen 网络上最多容许 127 台设备。对象
应用CANopen时,须要传递的配置信息和应用信息都放在过程数据对象PDO(Process data object)和服务数据对象SDO(Service data object)blog
过程数据对象(PDO)服务索引
PDO分为TPDO和RPDO事件
PDO属于过程数据,单向传输,无需接收节点回应CAN报文来确认,属于“生产消费”模型资源
一个节点分别有 4 个 TPDO 及 4 个 RPDO 。同步
PDO的触发方式:
服务数据对象SDO
服务数据对象用于读写节点的对象字典,现只实现SDO下载和上传的全速模式,不支持正常模式也不支持块下载和上传,由于数据量不大,实现的功能足够用,SDO全速下载和上传采用应答式服务,由监控终端向节点发送服务请求,由节点返回应答。
SDO属于服务数据,“服务器客户端”模型,轮询式
SDO传送机制:
加速传送(Expedited transfer):最多传输4字节数据
分段传送(Segmented transfer):传输数据长度大于4字节
块传送(Block transfer):当传送数据长度大于4字节时,多个分段只由一个确认报文应答以增长总线吞吐量
对象字典OD
CANopen 设备都须要具有对象字典(Obiect Dictionary),用来设定设备组态及进行非即时的通信。
是一个有序的对象组,每一个对象采用一个16位的索引值来寻址,为了容许访问数据结构中的单个元素,同时定义了一个8位的子索引。
三个子协议:
通讯子协议描述对象字典的主要形式,以及对象字典中的通讯对象和参数。适用于全部的CANopen设备,索引值范围为0x1000~0x1FFF
制造商自定义子协议根据需求定义对象字典项,索引值范围为0x2000~0x5FFF
设备子协议为各类不一样类型的设备定义对象字典中的对象,其索引值范围为0x6000~0x9FFFF