对象字典
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Powerlink 的对象字典
一、 对象字典简介
设备对象字典是CANopen 的核心概念。CANopen 是CAN 网络的应用层协议,CANopen 建立在CAN 的数据链路层(CAN 只定义了物理层和数据链路层)之上。一个典型的CANopen 设备(如下图1.1所示)可以分为三个部分:
● 通信部分 ● 对象字典 ● 应用部分
图 1.1 典型的CANopen 设备模块
通行部分提供在总线上收发通信对象的服务,应用部分出了处理硬件接口外还提供设备内部控制功能,
对象字典是通信部分和应用程序的接口,他描述了设备使用的数据类型、通信对象以及应用对象。
对象字典是设备描述中最重要的部分,其实质是一组对对象集合,可以以一种定义好的方式被网络中的设备访问。主要的参考标准是CiA301。
二、 对象字典的规约
2.1 对象字典的一般结构
对象字典条目的格式如下图2.2所示。
图 2.1 对象字典的条目结构
对象字典的记录条目如上所示,包括6个部分。
(1)Index
对象字典的索引是用来表示此条对象在字典中的位置,类似于对象的地址。(2)Object
对象栏用特定的对象名表示,它用来表示对象字典里的特定索引处的对象类型。所有的对象类型如下表2.1所示。
表 2.1 对象字典的对象类型定义
(3)Name
名称栏给出一个对特定对象的功能的文本描述。
(4)Type
类型栏给出对象类型。包含以下的预定义类型:布尔,浮点数,无符号整形,有符号整形,8 字节/可见字符串,time-of-day,时差和域。它也包含预定义的复杂数据类型,例如PDO映射和其他一些如生产商或设备规定。不能定义记录的记录,记录排列或者排列的记录也属于这种类型。当对象是一个排列或一个记录,子索引就是对象里的一个数据域。
(5)Attrib.
属性栏特定对象的访问权限。对象可以是如下表2.2所列的属性。
表 2.2 对象的属性
(6)M/O
M/ O栏定义对象是强制性的还是可选的。强制性对象必须在设备上实现,可选对象可以不必在设备上实现。然而,对特定对象的可需要相关对象的支持(这之间的关系在具体的对象中说明)。
2.2对象字典的组成部分
下表2.3给出了对象字典的整所有组成部分。
表2.3 对象字典的组成
2.3标准数据类型规范
下表2.4说明了对象字典中的标准数据类型。
表2.4对象字典中的标准数据类型
2.4预定义复杂数据类型规范
(1) 对象字典中预定义复杂数据类型如下表2.5所示.
表2.5 对象字典中的预定义复杂数据类型
(2) PDO通信参数说明
PDO通信参数如下表2.6所示。(可以参考查阅对象1400h-15FFh的详细说明)
表2.6 PDO通信参数
(3) PDO映射参数说明
PDO映射参数结构如下表2.7所示。
表2.7 PDO映射参数
(4) SDO通信参数说明
SDO通信参数结构如下表2.8所示。
表2.8 SDO通信参数
(5) Identity说明
表2.9 PDO映射参数
2.5对象字典的访问模式
对象字典的访问是通过SDO来实现的。具体的过程将在随后的SDO模块中再做分析。
三、PowerLink中的对象字典
3.1一般数据类型的定义
一般数据类型,如上表2.4所示,在PowerLink程序中的EplObd.h文件中定义为枚举类型tEplObdType:
3.2复杂数据类型的定义
PDO的参数定义如下图所示,
图 3.1 PDO参数的定义
SDO参数定义定义如下图3.2
图3.2 SDO参数定义
3.3对象字典条目的定义
PowerLink中,定义了两个结构体,如下
图 3.2 对象字典条目结构体、子条目结构体
PowerLink中的对象字典主要是利用这两个结构体建立起来的。再来看EplObdMacro.h文件,我们来看几条宏定义.。
#define EPL_OBD_BEGIN_PART_GENERIC() static tEplObdEntry aObdTabGeneric_g[] = {
#define EPL_OBD_BEGIN_PART_MANUFACTURER() static tEplObdEntry aObdTabManufacturer_g[] = {
#define EPL_OBD_BEGIN_PART_DEVICE() static tEplObdEntry aObdTabDevice_g[] = {
#define EPL_OBD_END_PART() {EPL_OBD_TABLE_INDEX_END,(tEplObdSubEntryPtr)(void*)&dwObd_OB K_g,0,NULL}};
这几条宏定义是用来定义Object的。
然后再看SubObject的定义SubObject相关的宏定义.txt,这几条几种使用到的数据类型的SubObject。
四、下一步的工作
下一步主要是,分清楚PowerLink源码的模块、结构,之后就针对每个模块进行详细的分析。