[关闭]
@wuqi0616 2017-04-18T13:05:41.000000Z 字数 2657 阅读 1439

CANopen协议应用

项目-CANopen通信时延与多轴运动系统建模


为什么要用CANopen?

1、CANopen 总线协议采用多主访问原则,相对于Ethenet 具有非破坏性避免总线冲突的优势。
2、CANopen 协议作为公开免费协议,透明度高,大大降低了运动控制系统的成本。

为什么要定义CANopen?

开放式系统互联(OSI)网络模型角度看,CAN总线协议只定义了物理层和数据链路层,没有规定应用层,CAN报文中的标识符和字节数据的使用并没有一个标准。所以制定了标准的应用层协议CANopen总线协议,提供统一的应用协议、通讯描述以及设备描述,从而使得现场总线具备更好的通用性和开放性。

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给出,文档主要对驱动设备和运动控制行业标准以及控制变量进行了统一的规定,给出统一的对象字典和默认配置:

  1. 驱动设备和运动控制中出现的错误进行了编码,当错误发生时,设备会自动发送错误到总线给主节点,也可以由主节点查询错误寄存器对象查看对应值。
  2. 对设备进行了预定义设定,规定了驱动设备的类型,PDO预定义映射等,在开发时可以直接使用默认预定义设置,不需要进行额外配置
  3. 对电机数据和驱动数据进行了规定和对象字典的制定。
  4. 对设备控制进行了详细说明,给出了在CANopen协议下多种电机运行模式:回原点模式、位置模式、插补模式、速度模式、力矩模式,并对控制对象和状态对象进行了详细说明。
  5. 对驱动设备因子组进行了规定,运动控制驱动器需要可以转换物理尺寸和设备的内部单位。而设置一些因子可以实现这种转换,因此这些对象将解决单位转换问题。
  6. 对电机在各运行模式下的具体控制方式及步骤进行了详细说明,例如回原点模式下,电机回原点方式、回原点速度及加速度大小配置等。

NMT状态机决定了通信功能单元的行为,具体CANopen设备状态机如下图所示
此处输入图片的描述
此处输入图片的描述
伺服器开机上电之后自动发送BOOT UP启动报文给主控制器,以表示伺服器从节点启动完成,自动进入预操作状态。在预操作状态下主控制器通过SDO配置伺服器的运动模式以及PDO映射关系,接着控制伺服器从节点进入操作状态。
此处输入图片的描述
此处输入图片的描述
其中RPDO_Mapping()函数主要完成运动控制器从节点的RPDO映射功能,方便主控制器对关键变量的实时修改和操作。TPDO_Mapping()函数主要完成从节点TPDO映射功能,将需要实时反馈的变量映射成TPDO,例如将状态字对象6041h映射成TPDO,当6041h值发生变化时,伺服器从节点通过TPDO自动发送对象值,方便主机监听节点状态。PDO映射流程:
此处输入图片的描述


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注