@wuqi0616
2017-04-18T13:05:41.000000Z
字数 2657
阅读 1439
项目-CANopen通信时延与多轴运动系统建模
1、CANopen 总线协议采用多主访问原则,相对于Ethenet 具有非破坏性避免总线冲突的优势。
2、CANopen 协议作为公开免费协议,透明度高,大大降低了运动控制系统的成本。
开放式系统互联(OSI)网络模型角度看,CAN总线协议只定义了物理层和数据链路层,没有规定应用层,CAN报文中的标识符和字节数据的使用并没有一个标准。所以制定了标准的应用层协议CANopen总线协议,提供统一的应用协议、通讯描述以及设备描述,从而使得现场总线具备更好的通用性和开放性。
CANopen协议下,总线系统遵循主从结构:
---SDO协议
服务数据对象(SDO)可用来存取远端节点的对象字典,读取或设定其中的数据。提供对象字典的节点称为SDO server,存取对象字典的节点称为SDO client。SDO 通讯一定由SDO client 开始,并提供初始化相关的参数。
在CANopen的术语中,上传是指由 SDO server 中读取数据,而下载是指设定 SDO server 的数据。
由于对象字典中的数据长度可能超过8个字节,无法只用一个CAN数据包传输,SDO也支援长数据包的分割(segmentation)和合并(desegmentation)。这样的对象有二种:SDO下载/上传(SDO download/upload)及SDO区块下载/上传(SDO Block download/upload)。CANopen协议较新版本支援SDO区块传输,可以允许传输大量的数据,且传输的overhead可以较低。
负责处理SDO数据传输的COB ID可在对象字典中设置。在对象字典的索引0x1200至0x127F可设定SDO server的COB ID,最多可设定到127个。而SDO client可以在对象字典的索引0x1280至0x12FF中设定。不过预定义连结(pre-defined connection set)定义在开机后(Pre-operational状态)可用来设定设备组态的SDO。接收用的COB ID为0x600 +节点ID,而传送用的COB为0x580 +节点ID。
---PDO 协定
过程数据对象 (PDO) 协议可用来在许多节点之间交换即时的数据。可透过一个 PDO ,传送最多 8 字节(64位)数据给一设备,或由一设备接收最多 8 字节(64位元)的数据。一个 PDO 可以由对象字典中几个不同索引的数据组成,规划方式则是透过对象字典中对应 PDO mapping 及 PDO 参数的索引。
PDO 分为两种:传送用的 TPDO 及接收用的 RPDO。一个节点的 TPDO 是将数据由此节点传输到其他节点,而 RPDO 则是接收由其他节点传输的数据。一个节点分别有 4 个 TPDO 及 4 个 RPDO 。
PDO 可以用同步或异步的方式传送:同步的 PDO 是由 SYNC 信号触发,而异步的 PDO 是由节点内部的条件或其他外部条件触发。例如若一个节点规划为允许接受其他节点产生的 TPDO 请求,则可以由其他节点送出一个没有数据但有设置 RTR 位元的 TPDO(TPDO 请求),使该节点送出需求的数据。
借由 RPDO 也可以使两种设备同时启动。
CANopen协议主节点通过网络管理功能(Network Management,MNT)对所有从节点进行统一管理;协议采用对象字典(ObjectDictionary,OD)概念,作为协议交流和通信的载体;而主从通信方式又分为服务数据对象(Service Data Object,SDO)和过程数据对象(Process Data Object)两种。
设备的启动及重置由状态机(state machine)控制。状态机需包括以下的几个状态:Initialization, Pre-operational, Operational 及 Stopped。
对象字典是CANopen协议的通信基础,是协议最重要的部分。对象字典是一个有序的列表,字典中定义了所有通信所需要的特征对象,例如通信周期、错误报警等。
对象字典含有数据对象、通信对象及应用对象三大类。
CANopen协议中有关设备驱动和运动控带畑关标准由巧当CiA402给出,文档主要对驱动设备和运动控制行业标准以及控制变量进行了统一的规定,给出统一的对象字典和默认配置:
NMT状态机决定了通信功能单元的行为,具体CANopen设备状态机如下图所示
伺服器开机上电之后自动发送BOOT UP启动报文给主控制器,以表示伺服器从节点启动完成,自动进入预操作状态。在预操作状态下主控制器通过SDO配置伺服器的运动模式以及PDO映射关系,接着控制伺服器从节点进入操作状态。
其中RPDO_Mapping()函数主要完成运动控制器从节点的RPDO映射功能,方便主控制器对关键变量的实时修改和操作。TPDO_Mapping()函数主要完成从节点TPDO映射功能,将需要实时反馈的变量映射成TPDO,例如将状态字对象6041h映射成TPDO,当6041h值发生变化时,伺服器从节点通过TPDO自动发送对象值,方便主机监听节点状态。PDO映射流程: