概述
CANopen的对象字典(Object Dictionary,简称OD)是CANopen协议的核心概念之一。可以看多一个有序的对象组,每个对象采用了一个16位的索引值来寻址,同时也定义了8位的子索引,为了允许访问数据结构中的单个元素,类似于结构体。
对象字典可以看做一些数据的类型定义,如果把对象字典看做一本书的话,CANopen的行为准则就要参考着本书,不管是做什么,只要它的行为要参考对象字典,就必须先查阅字典,在决定是否去做。
关于对象字典的结构,可以看下图,给出了索引值的范围及其对应的对象。
重点关注,颜色标注的三项:描述子协议
CANopen 网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。CANopen对象字典中的项由一系列的子协议来描述,子协议描述对象字典中每个对象的功能、名字、索引、子索引、数据类型、读/写属性,以及这个对象是否必需等,从而保证不同厂商的同类型设备兼容。CANopen 协议的核心描述子协议是DS301,包括CANopen协议应用层及通信结构描述,其他子协议都是对DS301协议描述文本的补充与扩展。其子协议主要分为以下3类:
- 通讯对象子协议区(Communication profile area)
通信子协议(Communication Profile)描述对象字典的主要形式,以及对象字典中的通信对象和参数。这个子协议适用于所有的CANopen设备,其索引值范围为0x1000~0x1FFF。
- 通用通讯对象(General communication objects)
对于设备子协议中未定义的特殊功能,制造商可以在制造商自定义子协议(Manufacturer-specific profile)中根据需求定义对象字典项。因此,这个区域对于不同厂商来说,相同的对象字典项定义不一定相同,其索引值范围为0x2000~0x9FFF。
- 标准化设备子协议(Standardized profile area)
标准化设备子协议,为各种行业不同类型的标准设备定义对象字典中的对象。目前已有十几种为不同类型的设备定义的子协议,例如 DS401、 DS402、 DS406 等,其索引值范围为 0x6000~0x9FFF。 同样,这个区域对于不同的标准化设备子协议来说,相同的对象字典
项其定义不一定相同。
对于对象字典,可以利用python环境生成.c,.h文件,为后续开发准备
需要的开发环境:
- python2.7
- wxPython
- CANFestival固件包 https://canfestival.org/index.html.en
安装好后,可以看到对象字典的定义范围,便可以用来配置参数。