7.4 对象字典

7.4.1 常规结构

标准对象字典的整体布局定义于表41。

表41:对象字典结构

索引 对象
0000h 未使用
0001h–001Fh 静态数据类型
0020h–003Fh 复合数据类型
0040h–005Fh 制造商指定复合数据类型
0060h–025Fh 设备协议指定数据类型
0260h–03FFh 保留
0400h–0FFFh 保留
1000h–1FFFh 通信协议区
2000h–5FFFh 制造商指定协议区
6000h–67FFh 标准化协议区1st逻辑设备
6800h–6FFFh 标准化协议区2nd逻辑设备
7000h–77FFh 标准化协议区3rd逻辑设备
7800h–7FFFh 标准化协议区4th逻辑设备
8000h–87FFh 标准化协议区5th逻辑设备
8800h–8FFFh 标准化协议区6th逻辑设备
9000h–97FFh 标准化协议区7th逻辑设备
9800h–9FFFh 标准化协议区8th逻辑设备
A000h–AFFFh 标准网络变量区
B000h–BFFFh 标准系统变量区
C000h–FFFFh 保留

对象字典容量65536,通过16位索引寻址,每个对象可包含多至256个子项,通过8位子索引号寻址。
0001h到001Fh的静态数据类型包含标准的类型定义如BOOLEAN、INTEGE、UNSIGNED、浮点、字符串等。
0020h到003Fh的复合数据类型是相对于标准数据类型而言的普适所有CANopen设备的预定义结构。
0040h到005Fh的制造商指定复合数据类型是相对于标准数据类型而言的特定CANopen设备所定义的结构。
设备协议可以定义附加数据类型作为其设备的类型。设备协议定义的静态数据类型和复合数据类型位列 0060h到025Fh。
CANopen设备可选择支持只读索引区的复合数据类型(从0020h到005Fh和0060h到025Fh)结构。子索引0保存子索引数,后续子索引数据类型为表44规定的UNSIGNED16。 从1000h到1FFFh的通信协议区包含了通信相关参数。这些对象适用于所有的CANopen设备。
从6000h到9FFFh的标准协议区包含可由网络读写的某类CANopen设备的所有数据对象。设备协议使用从6000h到9FFFh区域来描述功能和参数
对象字典在概念上迎合了可选功能,这意味着生产商在其CANopen设备提供某些扩展功能,可以使用预定义方式。从2000h到5FFFh的空间正是为制造商的定制功能所留。
从A0000h到AFFFh的网络变量区应包含输入变量和输出变量,这是可编程CANopen设备的一部分。这些网络变量的定义不在本规范的范围内,而是将来的协议和框架的一部分。
B000h到BFFFh的系统变量应包含输入变量和输出变量,其为有层次感的基础CANopen网络的一部分。 这些系统变量的定义不在本规范的范围内,而是将来的协议和框架的一部分。

7.4.2 索引和子索引的使用

16位的索引可寻址对象字典的所有对象。简单的变量可由索引直接引用。记录和数组可由索引寻址其数据的整体机构。
定义子索引来访问数据结构的具体元素。对于单一的对象字典对象如UNSIGNED8、BOOLEAN、INTEGER32等值,其子索引始终是00h。对于复合的对象字典对象如带有多个数据字段的数组或记录,子索引的引用域为主索引所指向的数据结构。子索引访问的字段可以是不同的数据类型。

7.4.3 对象代码的使用

对象代码表达了对象字典特定索引处的对象类型。使用到以下定义:

表42:对象字典对象定义

对象名称 说明 对象代码
NULL 无数据字段对象 00h
DOMAIN 大体量数据,如可执行的程序代码 02h
DEFTYPE 表示类型定义如BOOLEAN, UNSIGNED16, FLOAT等等 05h
DEFSTRUCT 定义了一种新的记录类型如在21h的PDO映射结构 06h
VAR 单值如UNSIGNED8、BOOLEAN、FLOAT、INTEGER16和VISIBLE STRING等 07h
ARRAY 多数据字段对象,每个数据字段都是一种简单相同的基本数据类型变量如UNSIGNED16的数组。子索引0类型为UNSIGNED8,并非数组的一部分。 08
RECORD多数据字段对象,数据字段可以是任意简单变量的组合。子索引0是U NSIGNED8,子索引255是UNSIGNED32,并非记录的一部分。 09h

7.4.4 数据类型的使用

对象的数据类型信息包括下列预定义类型:BOOLEAN、FLOAT、UNSIGNED、INTEGER、VISIBLE/OCTET STRING、TIME_OF_DAY、TIME_DIFFERENCE和DOMAIN(见7.1)。它还包含预定义的复合数据类型PDO 映射和制造商、协议规范或应用协议规范所定义的其它类型。禁止定义记录的记录、记录数组或包含数组的记录。数组或记录对象内的一个子索引表示一个数据字段。

7.4.5 访问权限的使用

该属性定义了对象的访问权限。其视角是面对CANopen网络设备。

有以下权限可选:

表43:数据对象访问权限属性

属性 描述
rw 读写权限
wo 只写权限
ro 只读权限
const 只读并且值为常量 该值可以在NMT初始化态更改。其余状态不可变更。

7.4.6 类别和条目类别的使用

类别和条目类别定义了对象是强制性的、可选的还是条件的。CANopen设备必须支持强制对象,可以支持可选对象。如果设备执行特定的功能才会支持对应的对象。此种情况下,详细的对象规范会描述其中关系,并且该对象被定义为条件类别。

7.4.7 数据类型条目的使用

7.4.7.1 简述

静态数据类型放在对象字典里只是出于定义的目的。范围从0001h到0007h、0010h、从 0012h到 0016h,并从0018h到001Bh可以被映射进RPDO,以明确该CANopen设备不使用(无关)的空间。DEFTYPE和DEFSTRUCT不允许映射到 RPDOs中。 数据类型如下所示:

表44:对象字典的数据类型

索引 对象 名称
0001h DEFTYPE BOOLEAN
0002h DEFTYPE INTEGER8
0003h DEFTYPE INTEGER16
0004h DEFTYPE INTEGER32
0005h DEFTYPE UNSIGNED8
0006h DEFTYPE UNSIGNED16
0007h DEFTYPE UNSIGNED32
0008h DEFTYPE REAL32
0009h DEFTYPE VISIBLE_STRING
000Ah DEFTYPE OCTET_STRING
000Bh DEFTYPE UNICODE_STRING
000Ch DEFTYPE TIME_OF_DAY
000Dh DEFTYPE TIME_DIFFERENCE
000Eh 保留
000Fh DEFTYPE DOMAIN
0010h DEFTYPE INTEGER24
0011h DEFTYPE REAL64
索引 对象 名称
0012h DEFTYPE INTEGER40
0013h DEFTYPE INTEGER48
0014h DEFTYPE INTEGER56
0015h DEFTYPE INTEGER64
0016h DEFTYPE UNSIGNED24
0017h 保留
0018h DEFTYPE UNSIGNED40
0019h DEFTYPE UNSIGNED48
001Ah DEFTYPE UNSIGNED56
001Bh DEFTYPE UNSIGNED64
001Ch–001Fh 保留
0020h DEFSTRUCT PDO_COMMUNICATION_PARAMETER
0021h DEFSTRUCT PDO_MAPPING
0022h DEFSTRUCT SDO_PARAMETER
0023h DEFSTRUCT IDENTITY
0024h–003Fh 保留
0040h–005Fh DEFSTRUCT 制造商的复合数据类型
0060h–007Fh DEFTYPE 设备协议规范的标准数据类型1st的逻辑设备
0080h–009Fh DEFSTRUCT 设备协议规范的标准数据类型1st的逻辑设备
00A0h–00BFh DEFTYPE 设备协议规范的标准数据类型2nd的逻辑设备
00C0h–00DFh DEFSTRUCT 设备协议规范的标准数据类型2nd的逻辑设备
00E0h–00FFh DEFTYPE 设备协议规范的标准数据类型3rd的逻辑设备
0100h–011Fh DEFSTRUCT 设备协议规范的标准数据类型3rd的逻辑设备
0120h–013Fh DEFTYPE 设备协议规范的标准数据类型4th的逻辑设备
0140h–015Fh DEFSTRUCT 设备协议规范的标准数据类型4th的逻辑设备
0160h–017Fh DEFTYPE 设备协议规范的标准数据类型5th的逻辑设备
0180h–019Fh DEFSTRUCT 设备协议规范的标准数据类型5th的逻辑设备
01A0h–01BFh DEFTYPE 设备协议规范的标准数据类型6th的逻辑设备
01C0h–01DFh DEFSTRUCT 设备协议规范的标准数据类型6th的逻辑设备
01E0h–01FFh DEFTYPE 设备协议规范的标准数据类型7th的逻辑设备
0200h–021Fh DEFSTRUCT 设备协议规范的标准数据类型7th的逻辑设备
0220h–023Fh DEFTYPE 设备协议规范的标准数据类型8th的逻辑设备
0240h–025Fh DEFSTRUCT 设备协议规范的标准数据类型8th的逻辑设备

数据类型使用详见7.1。每个CANopen设备不需要支持所有已定义的数据类型。CANopen设备仅需支持它在1000h到AFFF用到的数据类型。
预定义的复合数据类型放在标准的数据类型之后。详见7.4.8。
CANopen设备可选支持标准数据类型编码的数据长度(UNSIGNED32)。例如索引000Ch

(TIME_OF_DAY)包含值0000 0030h=48d使用48位序列作为TIME_OF_DAY的数据类型编码。如果长度是可变的(例如000Fh=域),对象条目包含0000 0000h
为支持复合数据类型,CANopen设备可选择提供该种数据类型结构。子索引00h值为索引支持最大子索引数,当然不计入00和FFh,表44的接下来的子索引值编码为UNSIGNED16(UNSIGNED8是旧的实现)。对象索引0020h描述了PDO通讯参数结构如下所示(见对象从1400h到15FFh):

表45:复合数据类型示例

子索引 (说明)
00h 04h ( 4个子索引)
01h 0007h (UNSIGNED32)
02h 0005h (UNSIGNED8)
03h 0006h (UNSIGNED16)
04h 0005h (UNSIGNED8)

标准(简单)和复合的制造商特定数据类型可通过读取子索引01h来区分:复合数据类型对象该子索引是有值的,而标准数据类型对象该索引不存在,因此会得到中止SDO传输的反馈。
请注意,某些条目数据类型为UNSIGNED32的对象是带有字符结构的(例如PDO COB-ID,见图67)。

7.4.7.2 对象字典条目的组织结构

如果某个对象字典对象包含几个分项,子索引00h描述了最大子索引,不计入FFh,其对象条目编码为UNSIGNED8。
子索引FFh描述了对象类型及其结构。它被编码为UNSIGNED32且其组织如下:
图51:子索引FF<sub>h</sub>结构 图51:子索引FFh结构

可选支持子索引FFh。如果支持的话就要连整个对象字典的复合数据类型结构也一并提供,以使得可以上传整个对象字典条目结构。

7.4.8 预定义复合数据类型规范

本节介绍用于通信的预定义复合数据类型结构。值的范围和含义的解释由使用这些类型的对象的详细描述给出。

7.4.8.1 PDO通讯参数记录规格

表46说明PDO通讯参数的记录。

表46:PDO通讯参数记录

索引 子索引 名称 数据类型
0020h 00h 最大子索引号 UNSIGNED8
'' 01h COB-ID UNSIGNED32
'' 02h 传输类型 UNSIGNED8
'' 03h 抑制时间 UNSIGNED16
'' 04h 保留 UNSIGNED8
'' 05h 事件定时器 UNSIGNED16
'' 06h 同步启动值 UNSIGNED8

7.4.8.2 PDO映射参数记录规格

表47表达PDO 映射参数记录。

表47:PDO映射参数记录

索引 子索引 名称 数据类型
0021h 00h PDO映射对象数 UNSIGNED8
'' 01h 第1个映射的对象 UNSIGNED32
'' 02h 第2个映射的对象 UNSIGNED32
'' : ::: ::::::
'' 40h 第64个映射的对象 UNSIGNED32

7.4.8.3 SDO参数记录规格

表48指定SDO参数记录。

表48:SDO参数记录

索引 子索引 名称 数据类型
0022h 00h 最大子索引支持 UNSIGNED8
'' 01h COB-ID 客户端->服务器 UNSIGNED32
'' 02h COB-ID 服务器->客户端 UNSIGNED32
'' 03h SDO客户端应答服务器的Node-ID UNSIGNED8

7.4.8.4 身份记录规格

表49指定身份的记录。

表49:身份记录

索引 子索引 名称 数据类型
0023h 00h 最大子索引支持 UNSIGNED8
'' 01h Vendor-ID UNSIGNED32
'' 02h 产品码 UNSIGNED32
'' 03h 修订版本号 UNSIGNED32
'' 04h 序列号 UNSIGNED32

7.4.8.5 OS调试记录规格

表50指定OS调试记录。

表50:OS调试记录

索引 子索引 名称 数据类型
0024h 00h 最大子索引支持 UNSIGNED8
'' 01h 命令 OCTET_STRING
'' 02h 状态
00h-命令已完成-没有错误
01h-命令完成-错误
02h——预留
:::::
FEh——预留
FFh-命令执行
UNSIGNED8
'' 03h 回复 OCTET_STRING

7.4.8.6 OS命令记录规格

表51中指定OS命令的记录。

表51:OS命令的记录

索引 子索引 名称 数据类型
0025h 00h 最大子索引支持 UNSIGNED8
'' 01h 命令 OCTET_STRING
'' 02h 状态
00h-命令已完成-没有错误-未回复
01h-命令已完成-没有错误-答复
02h-命令完成-错误-未回复
03h-命令完成-错误-回复
04h-预留
:::::
FEh——预留
FFh-命令执行
UNSIGNED8
'' 03h 回复 OCTET_STRING