CANopen对象字典生成办法
CANopen协议是一种基于控制器局域网(CAN)的应用层协议,该协议具有实时高效、组网灵活和产品兼容性高等优势,CANopen协议在国内越来越受到青睐,其应用领域也越来越多广泛,不仅应用于过程与生产自动化等领域,还涉及到医疗、铁路、军事、太阳能等等领域。目前CANopen协议由CiA(CANinAutomation)组织负责管理与推广。
对象字典是CANopen通信接口与应用程序之间接口,是CANopen协议的重要组成部分。在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对象字典通用结构如表1所示。
索引 | 对象 |
0000h | 未用(Notused) |
0001-001F | 静态数据类型(标准数据类型,如Boolean,Integer16) |
0020-003F | 复杂数据类型 (预定义由简单类型组合成的结构如PDOCommPar,SDOParameter) |
0040-005F | 制造商规定的复杂数据类型 |
0060-007F | 设备子协议规定的静态数据类型 |
0080-009F | 设备子协议规定的复杂数据类型 |
00A0-0FFF | 保留(Reserved) |
1000-1FFF | 通讯子协议区域 (如设备类型,错误寄存器,支持的PDO数量) |
2000-5FFF | 制造商特定子协议区域 |
6000-9FFF | 标准的设备子协议区域 |
A000-FFFF | 保留(Reserved) |
表1CANopen对象字典通用结构
1.2EDS文件描述
CANopen网络中每个节点都有一个对象字典,对象字典包含了描述这个设备和它的网络行为的所有参数。而在描述CANopen设备时,使用了一种标准化的ASCII格式的描述文件,即:电子数据表(EDS)。电子数据表不仅记录了对象字典的所有参数,同时也对设备及其配置进行标准化的描述,所以EDS电子数据表是对象字典的载体与保存方式。
二、对象字典的实现
通常来说,在CANopen工程中将所有的CANopen通信描述条目放在一个表格中,然后用索引来访问所有的对象。这不失是一个解决方法,不过这种方法只适用于系统简单、通信参数少、非CANopen通信标准化的产品中,而且对象字典的修改与管理工作都较为繁琐。由此本文介绍一种动态输入掩码显示各个参考的对象类型,编辑过程不断检查其正确性并修正的对象字典生成器ODBuilder。ODBuilder工具生成的对象字典,通信描述完全符合CANopen标准规范CiADS301以及设备描述符合EDS标准文件CiADSP306规范,具有CANopen标准化设备的通用性。
三、对象字典生成器ODBuilder
3.1对象字典生成原理
对象字典生成器ODBuilder生成对象字典的原理是根据CANopen通信协议的访问对象字典的机制,通过固定的索引、子索引来创建每一个CANopen对象字典条目。访问对象字典示意图如图3.1所示。
图3.1CANopen访问对象字典
对象字典条目表格提供一个指向存储器中某个变量的指针,而应用程序可直接通过变量名称访问所需的条目。因此对象字典条目列表就构成了索引/子索引与对应变量名称之间的接口。
对象字典列表分为几个不同的块,目的为了方便对象的查找。通常分为用户可通过索引查找相应的列表(如通信CommunicationProfileArea),再通过偏移量访问该列表中所需的单元。因此在生成对象字典时为了描述索引里的单元,就先创建该单元的访问类型、数据类型和指针变量等的结构体。然后利用创建好的结构体与应用变量建立相关联的
CANopen对象字典生成办 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)