关于CANopen通信协议,这些基础点你知道吗?
关于CANopen通信协议,这些基础点你知道吗?
CANopen是一种广泛应用于工业控制领域的通信协议,它基于CAN(Controller Area Network)总线技术,提供了设备间可靠的数据交换机制。本文将详细介绍CANopen的背景、应用场景、技术架构以及关键组件,帮助读者全面了解这一重要的工业通信标准。
背景介绍
CANopen于1993年在博世公司领导下,由来自不同欧洲国家的大学和公司组成的研究团队在欧洲研究项目中开发。1994年,开发完成的CANopen规范被移交给国际用户和制造商组织“CAN in Automation (CiA)”。从那时起,这个非营利协会一直负责维护这些文档,并开发和增强通信系统。如今,CANopen规范包括超过20,000页的规范,涵盖不同行业的设备和应用配置文件。
除了嵌入式机器控制外,CANopen最初被用于医疗设备,如X射线设备、计算机断层扫描系统等。在90年代末,CANopen开始应用于非公路车辆,随后在电梯和铁路车辆行业也得到了应用。在深度嵌入式控制系统中也有应用,例如控制滑动或旋转门的典型应用。在模块化I/O设备中,CANopen也被用作骨干总线系统。
CANopen的应用场景几乎是无限的。只要有超过两个基于微控制器的单元需要通信,CANopen就是一个候选方案。CAN的底层鲁棒性和可靠性,结合CANopen应用层的灵活性以及由CANopen配置文件提供的互操作性,使得CANopen成为最成功的嵌入式控制网络之一。
CANopen成功的原因之一是其基础服务和协议的相对稳定性。从3.0版本到4.X版本,只进行了一次重大改进——不考虑1994年到1995年原型阶段的前两个版本。这降低了CANopen设备供应商和系统设计者的投资成本。
CANopen提供了服务和协议规范,以及设备和应用配置文件规范。符合这些规范的设备能够与其他CANopen设备互操作;实现相同功能甚至可以实现产品的互换性。
OSI参考模型
CANopen是一种独立于设备和制造商的协议,用于CAN总线上的通信,并涵盖了OSI参考模型的应用层(第7层)。除了Profibus之外,CANopen在欧洲的自动化技术和许多嵌入式控制领域已经得到了广泛应用。
CANopen由“CAN in Automation (CiA)”在EN 50325-4标准中进行了标准化,定义了以下关键点:
- 通过通信对象(COB)在CAN总线节点之间交换命令和数据,创建统一的基础。
- 实现实时交换过程数据、传输大量数据或发送报警帧的机制。
- 定义通过配置文件访问设备某些参数的标准化接口。
下图展示了CANopen在OSI参考模型中的分类:
每一层对应的文件标准参考下图:
CANopen设备结构
CANopen标准描述了基于CAN的网络中数据的交换。该标准定义了基础通信机制(通信配置文件)和通信设备的功能(设备配置文件)。这意味着,通过总线传输的过程数据的解释也在CANopen中得到了定义。
下图描述了CANopen设备的基本通信结构:
在上图结构中,CANopen基于层次化结构运行,使用多种通信对象进行数据交换。在一个CANopen网络中,设备通过以下方式通信:
- 过程数据对象(PDOs):用于实时数据交换
- 服务数据对象(SDOs):用于设备配置和参数更新
- 网络管理(NMT)协议:用于控制和监控网络状态
- 同步(SYNC)和紧急消息(EMCY):用于确保时间关键型过程的执行
当然,这些通信数据交互在实际运行过程中,CANopen设备可以处于不同的状态。根据所处的状态,仅允许使用某些特定的功能或通信对象。CANopen的网络管理状态机(NMT状态机)提供了可能的操作状态的概览,并展示了它们之间的关联。
以下是CANopen设备的主要状态及其支持的通信服务:
- 初始化状态(Initialization):设备上电后进入此状态,此时设备准备进入CAN总线通信。
- 预操作状态(Pre-operational):设备初始化完成后自动进入此状态,此时可以使用SDO(服务数据对象)进行设备配置。
- 操作状态(Operational):设备进入此状态后,PDO(过程数据对象)可以正常通信,设备处于正常工作模式。
- 停止状态(Stopped):在此状态下,设备停止通信,但配置的连接监控仍然有效。
状态之间的转换通常由NMT(网络管理)命令触发,这些命令通过特定的CAN ID(如0x000)发送。
下表是状态和可以使用的通信对象关系:
对象字典(Object Dictionary)
CANopen应用层的核心是对象字典(Object Dictionary:简称OD),这是所有CANopen设备的关键组成部分:
- 定义:OD是一个结构化的表格,用于存储过程数据和配置设置,有助于定义CANopen节点的操作方式。
- 结构:它具有16位索引和8位子索引,允许有大量的唯一条目(每个索引最多可达65,536个索引和256个子条目)。
- 标准参数:OD中的特定索引保留用于标准参数,如设备名称,使在网络中识别设备变得更容易。
- 强制和可选条目:某些索引是所有CANopen设备所必需的(如设备类型),而其他则是可选的(如软件版本)。
- 使用对象字典:设备使用OD来执行功能(如启动数据采集),主设备使用它来读取数据或检查设备设置。
- 访问对象字典:通过服务数据对象(SDO)和过程数据对象(PDO)访问OD,这是读取和写入字典的方法。
- 数据类型:OD包含基本数据类型(如整数和布尔值),也可以处理更复杂的类型,如字符串或自定义的CANopen特定类型。
OD在管理CANopen设备中至关重要,确保网络操作有组织、标准化和高效。
OD对象字典的结构比较好,每个参数都可以通过一个16位索引和一个8位子索引来寻址。这个24位地址被一些通信服务用作多路复用器,以克服CAN数据链路层仅提供的2048个标识符的限制。这实际上是对所有CANopen协议默认使用的11位CANID的有效延长。
下图是16位索引的参数说明:
这些参数中的每一个都可以通过8位子索引寻址多达256个子参数。
CANopen对象字典支持多达八个逻辑设备,因此你可以在单个CANopen设备中实现多个设备配置文件。所以一个具有Canopen的控制器设备可能具有八个电机实例,或者有可能还是具备额外的输入/输出功能的运动控制器。