在工业控制和汽车领域,CAN是一种流行的现场总线,到处都可以看到它的身影。而CAN协议本身只定义了物理层和链路层,对应用层没有规定。各家都可以自定义自己的应用层协议内容,但是这样一来各家协议就不能兼容,大家各自搞一套,似乎是有点重复造轮子的意思,而且协议稳定需要较长的验证,这样一来开发周期和开发质量就很依赖协议开发者的水平,项目进度和项目质量往往难以得到保证。这时候,一套通用的可以为各家所用的协议就非常有意义了,而CANopen就是这样的角色,所有也就应运而生了。
下面,笔者为大家简要介绍一下CANopen,希望能对各位看官有一点帮助。
CANopen发展概况
CANopen行业应用
什么是CANopen
CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通信协协议,包括通信子协议及设备子协议,常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。
由于 CANopen 协议的创始人团队也是 CAN-bus 的创始人团队,此协议充分发挥了CAN-bus 所具备的所有优势,特别是 CiA 组织的主席蔡豪格( Holger Zeltwanger) 先生对于 CANopen 协议坚持开放、免费、非盈利的原则。时至今日已经成为全世界最为流行的 CAN 应用层协议
CAN( Controller Area Network)现场总线仅仅定义了第 1 层(物理层,见 ISO11898-2 标准)、第 2 层(数据链路层,见ISO11898-1 标准)没有规定应用层;而在实际设计中,前两层完全由硬件实现,设计人员无需再为此开发相关软件( Software)或固件( Firmware),只要了解如何调用相关的接口和寄存器,即可完成对 CAN 的控制。
基本每个行业的 CAN 应用,都需要一个高层协议来定义 CAN 报文中的 11/29位标识符、 8 字节数据的使用。但在 CAN 总线的工业自动化应用中, 由于设备的互通互联的需求越来越多,所以需要一个开放的、标准化的高层协议:这个协议支持各种 CAN 厂商设备的互用性、互换性,能够实现在 CAN 网络中提供标准的、统一的系统通讯模式,提供设备功能描述方式,执行网络管理功能。 其中包括: 应用层(Application layer):为网络中每一个有效设备都能够提供一组有用的服务与协议。 通讯描述(Communication profile):提供配置设备、通讯数据的含义,定义数据通讯方式。 设备描述(Device proflile):为设备(类)增加符合规范的行为。
CANopen优势
稳定性:CAN物理层、链路层的优势
实时性:实时更新的过程数据无需接收方应答
小网络:网络控制报文均采用数据最小字节数
标准帧:11bit的ID域,以尽量减少传输时间
单字传输:需要接收方确认的配置参数一般都是采用快速单字传输
CANopen协议简介
CANopen 对象字典( OD: Object Dictionary) 是 CANopen 协议最为核心的概念。所谓的对象字典就是一个有序的对象组,描述了对应 CANopen 节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递形式就叫做 EDS 文件(电子数据文档Electronic Data Sheet)。
对象字典,就像体检表,具备这个人每个功能的参数,便于用人单位(主站)进行合理分配工作。
对象字典索引区域定义,其中标绿色底纹的通讯对象子协议区和制造商特定子协议区是用户需要关注的区域。
每个对象采用一个 16 位的索引值来寻址,这个索引值通常被称为索引,其范围在 0x0000到 0xFFFF 之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个 8 位的索引值,这个索引值通常被称为子索引,其范围是 0x00 到 0xFF 之间。
每个 CANopen 设备都有一个对象字典,使用电子数据文档( EDS 文件)来记录这些参数,而不需要把这些参数记录在纸上。 CANopen 对象字典中的项由一系列子协议来描述。子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引、数据类型,以及这个对象是否必需、读写属性等等,这样可保证不同厂商的同类型设备兼容。
EDS文件:
OD文件:
网路管理NMT
CANopen 网络为了稳定可靠可控,都需要设置一个网络管理主机,所有节点的启动、停止都是有他进行指挥。
NMT 主机一般是 CANopen 网络中具备监控的 PLC 或者 PC(当然也可以是一般的功能节点), 所以也成为 CANopen 主站。相对应的其他 CANopen 节点就是 NMT 从机(NMT-slaves)。
每个 CANopen 从节点的 CANopen 协议栈中,必须具备 NMT 管理的相应码,这是节点具备 CANopen 协议的最基本的要素。
过程数据对象PDO
COB-ID:
对于 PDO 和 SDO 的报文 ID 分配, 为了减少网络的组态工作量, CANopen 预定义了强制性的缺省标识符( CAN-ID)分配表,该分配表是基于 11 位 CAN-ID 的标准帧格式。 将其划分为 4 位的功能码(Function-ID) 和 7 位的节点号( Node-ID)。
PDO:
PDO 属于过程数据用来传输实时数据,即单向传输,无需接收节点回应CAN 报文来确认。 从通讯术语上来说是属于“生产消费”模型 PDO,就像食品销售柜台, 生产者摆出“食品”,但只有“需要”的消费者才会来买,没有指向性。
SDO客户端:发送方(客户端) 发送 CAN-ID 为 600h+Node-ID 的报文,其中 Node-ID 为接收方(服务器) 的节点地址, 数据长度均为 8 字节
SDO服务器:接收方(服务器) 成功接收后, 回应 CAN-ID 为 580h+Node-ID 的报文。 这里的 Node-ID依然是接收方(服务器) 的节点地址, 数据长度均为 8 字节
通过快速 SDO, 可以直接对 CANopen 节点的对象字典中的值进行读取和修改, 所以在做参数配置之外,也经常作为关键性数据传输之用。比如 CANopen 控制机器人的电机转动角度时,就使用 SDO 来传输,保证可靠到达,通常在实时性要求高,可靠性要求高的场合使用。
普通SDO:
当需要传输的值超过 32 位时,就不能使用快速 SDO 传输。必须使用普通 SDO 进行分帧传输,在应用中较少用到。
特殊协议
canfestival---开源的CANopen协议栈
好了,各位看官,今天的分享就到这里。
精彩内容,下周继续。
标签:协议,浅谈,CANopen,嵌入式,索引,节点,SDO,ID From: https://blog.csdn.net/2401_84369443/article/details/139580529