对象字典

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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源码的模块、结构,之后就针对每个模块进行详细的分析。

相关文档
最新文档