轻松掌握CANOpen最难理解的对象字典
2016-01-09
摘要:CANopen是一种架构在控制局域网路(Controller Area Network,CAN)上的高层通讯协议,其中对象字典是协议中最为核心的概念,透彻掌握其相关内容,运用CANOpen将会如鱼得水,游刃有余。
CANopen对象字典(OD: Object Dictionary)是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,描述了对应CANopen节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递形式就叫做EDS文件(电子数据文档Electronic Data Sheet)。对象字典,就像体检表,具备这个人每个功能的参数,便于用人单位(主站)进行合理分配工作。如图1所示。
图1对象字典与体检表
每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个8 位的索引值,这个索引值通常被称为子索引,其范围是0x00到0xFF之间。
每个索引内具体的参数,最大用32位的变量来表示,即Unsigned32,四个字节。
每个CANopen设备都有一个对象字典,使用电子数据文档(EDS文件)来记录这些参数,而不需要把这些参数记录在纸上。对于CANopen网络中的主节点来说,不需要对CANopen从节点的每个对象字典项都访问。
CANopen对象字典中的项由一系列子协议来描述。子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引、数据类型,以及这个对象是否必需、读写属性等等,这样可保证不同厂商的同类型设备兼容。
CANopen协议的核心描述子协议是DS301,其包括了CANopen协议应用层及通信结构描述,其它的协议子协议都是对DS301 协议描述文本的补充与扩展。在不同的应用行业都会起草一份CANopen设备子协议,子协议编号一般是DS4xx 。
对象字典概述
如表1所示,为对象字典索引区域定义,其中标绿色底纹的通讯对象子协议区和制造商特定子协议区是用户需要关注的区域。
表1对象字典概述
Index range索引范围 |
Description描述 |
0000h |
Reserved保留 |
0001hto 025Fh |
Data types数据类型 |
0260hto 0FFFh |
Reserved保留 |
1000hto 1FFFh |
Communication profile area通讯对象子协议区 |
2000hto 5FFFh |
Manufacturer-specific profile area制造商特定子协议区 |
6000hto 9FFFh |
Standardized profile area标准化设备子协议区 |
A000hto AFFFh |
Network variables网络变量(符合IEC61131-3) |
B000hto BFFFh |
System variables用于路由网关的系统变量 |
C000hto FFFFh |
Reserved保留 |
通讯对象子协议区(Communication profile area)
通讯对象子协议区(Communication profile area)定义了所有和通信有关的对象参数,如表2所示,标绿色底纹的索引范围1000hto 1029h为通用通讯对象,所有CANopen节点都必须具备这些索引,否则将无法加入CANopen网络。其他索引根据实际情况进行分配与定义。
表2通讯对象子协议区
Index range索引范围 |
Description描述 |
1000hto 1029h |
General communication objects通用通讯对象 |
1200hto 12FFh |
SDO parameter objects SDO参数对象 |
1300hto 13FFh |
CANopen safety objects 安全对象 |
1400hto 1BFFh |
PDO parameter objects PDO参数对象 |
1F00hto 1F11h |
SDO manager objects SDO管理对象 |
1F20hto 1F27h |
Configuration manager objects配置管理对象 |
1F50hto 1F54h |
Program control object程序控制对象 |
1F80hto 1F89h |
NMT master objects网络管理主机对象 |
通用通讯对象(General communication objects)
由于通用通讯对象十分重要,NMT主站(CANopen主站)在启动时,通常都全部或者部分读取所有从站中通用通讯对象中的索引,所以所有的通用通讯对象都必须在CANopen从站中实现,使用者也必须熟知这些索引地址与其含义。如表3所示。
表3通用通讯对象
Index索引 |
Object对象 |
Name名字 |
1000h |
VAR变量 |
Device type设备类型 |
1001h |
VAR变量 |
Error register错误寄存器 |
1002h |
VAR变量 |
Manufacturer status register制造商状态寄存器 |
1003h |
ARRAY数组 |
Pre-defined error field预定义错误场 |
1005h |
VAR变量 |
COB-ID Sync message同步报文COB标识符 |
1006h |
VAR变量 |
Communication cycle period同步通信循环周期(单位us) |
1007h |
VAR变量 |
Synchronous windows length同步窗口长度(单位us) |
1008h |
VAR变量 |
Manufacturer device name制造商设备名称 |
1009h |
VAR变量 |
Manufacturer hardware version制造商硬件版本 |
100Ah |
VAR变量 |
Manufacturer software version制造商软件版本 |
100Ch |
VAR变量 |
Guard time守护时间(单位ms) |
100Dh |
VAR变量 |
Life time factor寿命因子(单位ms) |
1010h |
VAR变量 |
Store parameters保存参数 |
1011h |
VAR变量 |
Restore default parameters恢复默认参数 |
1012h |
VAR变量 |
COB-ID time stamp时间报文COB标识符(发送网络时间) |
1013h |
VAR变量 |
High resolution time stamp高分辨率时间标识 |
1014h |
VAR变量 |
COB-ID emergency紧急报文COB标识符 |
1015h |
VAR变量 |
Inhibit time emergency紧急报文禁止时间(单位100us) |
1016h |
ARRAY数组 |
Consumer heartbeat time消费者心跳时间间隔(单位ms) |
1017h |
VAR变量 |
Producer heartbeat time生产者心跳时间间隔(单位ms) |
1018h |
RECORD记录 |
Identity object厂商ID标识对象 |
1019h |
VAR变量 |
Sync.counter overflow value同步计数溢出值 |
1020h |
ARRAY数组 |
Verify configuration验证配置 |
1021h |
VAR变量 |
Store EDS存储EDS |
1022h |
VAR变量 |
Storage format存储格式 |
1023h |
RECORD记录 |
OS command操作系统命令 |
1024h |
VAR变量 |
OS command mode操作系统命令模式 |
1025h |
RECORD记录 |
OS debugger interface操作系统调试接口 |
1026h |
ARRAY数组 |
OS prompt操作系统提示 |
1027h |
ARRAY数组 |
Module list模块列表 |
1028h |
ARRAY数组 |
Emergency consumer紧急报文消费者 |
1029h |
ARRAY数组 |
Error behavior错误行为 |
制造商特定子协议(Manufacturer-specific Profile)
对象字典索引2000hto 5FFFh为制造商特定子协议,通常是存放所应用子协议的应用数据。而上文所描述的通讯对象子协议区(Communication profile area)是存放这些应用数据的通信参数。比如广州致远电子的XGate-COP10从站模块规定了:
lRPDO的通讯参数存放在1400hto15FFh映射参数存放在1600hto17FFh数据存放为2000h之后厂商自定义区;
lTPDO的通讯参数存放在1800hto19FFh映射参数存放在1A00hto1BFFh数据存放为2000h之后厂商自定义区。
对于在设备子协议中未定义的特殊功能,制造商也可以在此区域根据需求定义对象字典对象。因此这个区域对于不同的厂商来说,相同的对象字典项其定义不一定相同。
标准化设备子协议(Standardized profile area)
标准化设备子协议,为各种行业不同类型的标准设备定义对象字典中的对象。目前已有十几种为不同类型的设备定义的子协议,例如 DS401、DS402、DS406等,其索引值范围为0x6000~0x9FFF。同样,这个区域对于不同的标准化设备子协议来说,相同的对象字典项其定义不一定相同。