CANopen对象字典生成办法
引言
CANopen协议是一种基于控制器局域网(CAN)的应用层协议,具有实时高效、组网灵活和产品兼容性高等优势。在国内,CANopen协议越来越受到青睐,并在各个领域广泛应用,包括过程与生产自动化、医疗、铁路、军事、太阳能等等。目前,CANopen协议由CiA(CANinAutomation)组织负责管理与推广。
对象字典是CANopen通信接口与应用程序之间的接口,是CANopen协议的重要组成部分。在CANopen网络中,每个标准的CANopen设备都有一个对象字典,用来描述设备的全部功能。
在CANopen配置或开发工程中,对象字典的创建与管理是不可或缺的步骤,也是保证CANopen正常通信的重要保障。对于简单的CANopen系统工程,手动编写对象字典是可行的。但是对于复杂的、通信量庞大的CANopen工程,仅依靠人工编写对象字典效率较低,同时容易出现错误,可能给工程带来潜在的危险。为了提高对象字典的编辑效率,同时最大限度地避免错误,本文介绍了一个快速可靠的对象字典生成器ODBuilder,为CANopen工程的对象字典生成与修改提供了一个很好的解决方案。
一、对象字典结构与EDS文件描述
1.1 对象字典结构
对象字典是一个有序的对象组,每个对象采用一个16位的索引值来寻址,并定义了一个8位的子索引。对象字典中的索引值0000-0x0FFF用于定义数据类型,而一个CANopen节点的对象字典相关的常用范围在0x1000到0x9FFF之间。其中,索引1000h-1FFFh描述的是通信对象(COB),如设备类型、错误寄存器、支持的PDO数量等,该参数定义了CANopen接口的通信功能。索引2000h-5FFFh是预留给制造商定义的特定对象。索引000h-9FFFh用于标准化设备子协议的对象描述,例如I/O模块子协议、驱动与运动控制设备子协议、传感器与测量设备子协议、医疗器材子协议、电梯子协议等。CANopen对象字典的通用结构如下表所示:
| 索引 | 对象 | |------------|--------------| | 0000h | 未用 | | 0001-001F | 静态数据类型 | | 0020-003F | 复杂数据类型 | | 0040-005F | 制造商规定的复杂数据类型 | | 0060-007F | 设备子协议规定的静态数据类型 | | 0080-009F | 设备子协议规定的复杂数据类型 | | 00A0-0FFF | 保留 | | 1000-1FFF | 通讯子协议区域 | | 2000-5FFF | 制造商特定子协议区域 | | 6000-9FFF | 标准的设备子协议区域 | | A000-FFFF | 保留 |
1.2 EDS文件描述
在CANopen网络中,每个节点都有一个对象字典,而对象字典的载体与保存方式是电子数据表(EDS),它是一种标准化的ASCII格式的描述文件。EDS文件不仅记录了对象字典的所有参数,还对设备及其配置进行了标准化的描述。因此,EDS文件是对象字典的载体与保存方式。
二、对象字典的实现
通常情况下,可以将所有的CANopen通信描述条目放在一个表格中,并使用索引来访问所有的对象。然而,这种方法只适用于系统简单、通信参数少、非CANopen通信标准化的产品,并且对象字典的修改与管理工作都较为繁琐。因此,本文介绍了一种动态输入掩码的对象字典生成器ODBuilder,它可以显示各个参考的对象类型,实时检查并修正对象字典的正确性。ODBuilder生成的对象字典符合CANopen标准规范CiADS301以及设备描述符合EDS标准文件CiADSP306规范,具有通用性。
三、对象字典生成器ODBuilder
3.1 对象字典生成原理
对象字典生成器ODBuilder根据CANopen通信协议的访问对象字典机制,通过固定的索引和子索引来创建每一个CANopen对象字典条目。对象字典条目表格提供了指向存储器中某个变量的指针,应用程序可以直接通过变量名称访问所需的条目。因此,对象字典条目列表构成了索引/子索引与变量名称之间的接口。为了方便对象的查找,对象字典列表分为几个不同的块,用户可以通过索引查找相应的列表,然后通过偏移量访问该列表中所需的单元。在生成对象字典时,首先创建访问类型、数据类型和指针变量等结构体,然后将其与应用变量建立相关联的索引条目。此外,还会编辑一个包含指向子索引字段的指针列表,方便查找相关条目。
3.2 对象字典生成过程
对象字典生成器ODBuilder创建一个简明树形结构的对象字典工程,方便修改与访问对象字典条目。在编辑对象字典条目过程中,无需手工输入不同条目的数据类型,直接通过下拉选项选择对应类型。ODBuilder会实时检查对象字典条目的输入正确性,并提供修正参考。最后,可以导出符合CiADSP306规范的标准EDS文件。ODBuilder的对象字典生成过程原理框图如下图所示:
3.3 创建简明树型条目
根据对象字典条目的分布特性,ODBuilder将创建的对象字典以简明的树型结构排列,索引值由小到大。用户可以直接点击条目来访问或修改某一索引。如下图所示:
3.4 编辑对象字典索引属性
根据CANopen协议规范,可以灵活设定索引的"可选"、"制造商"、"强制"属性。例如,对于索引0x1000h,通常用于设备类型,如果作为从站的产品,该索引通常具有"强制"属性,ODBuilder会自动设置为"强制"属性。
可选择索引是否存储在非易失存储器、ROM或RAM中,根据不同CANopen设备的存储需求进行设置。
通过下拉条选择索引的对象参数、数据类型、访问类型。同时,可以选择该索引条目是否具有PDO映射功能。
根据对象参数属性,如果选择为变量,默认值、最小值和最大值可以进行输入。
子索引会自动继承索引的属性,无需重新设定存储属性和PDO映射参数。
3.5 检查输入正确性
在复杂的CANopen系统工程中,ODBuilder会实时检查对象字典的输入,确保每个属性参数都正确输入,避免遗漏。例如,如果编辑对象字典时遗漏索引标识符(Designator)的输入,ODBuilder会提示用户进行输入。同样,如果遗漏索引值、对象类型、数据类型、访问类型等任何一项,都会有相应的输入提示。
3.6 导出EDS文件
当完成对象字典的编辑,ODBuilder的检查功能可以大大减少输入错误,并且可以导出符合CiADSP306规范的EDS文件。该文件不仅包含了CANopen设备的对象字典内容,还包括文件描述信息和设备信息。
结语
本文介绍了一种快速可靠的对象字典生成器ODBuilder,它可以灵活创建和修改CANopen的对象字典,并生成符合标准规范的EDS文件。ODBuilder已经成功应用于多个行业设备的对象字典生成,包括医疗器材、运动控制、轨道运输等。
参考文献:
[1] Olaf Pfeiffer, Andrew Ayre, Christan Keydel, "Embedded Networking with CAN and CANopen", 2008, pp. 42-56.
[2] Holger Zeltwanger, "现场总线CANopen设计与应用", 2011, pp. 62-75.
[3] CiA Draft Standard 306, Version 1.3, 01 January 2005.
[4] CANopen Object Dictionary Software ODBuilder Manual, Edition August 2008.
联系信息:
- 地址:北京市海淀区中关村大街18号B座15层1530室
- 电话:(010)82350740
- 邮编:100190