CANopen 是一种基于 CAN 总线(Controller Area Network)的高层协议,它定义了网络节点之间通信的数据结构和行为。在 CANopen 协议中,**对象字典**(Object Dictionary)是每个节点上存储其配置和状态数据的数据结构。对象字典是一个全局的数据库,包含了所有可访问的参数和变量,它们以一种标准化的方式被组织和命名。
### 对象字典的结构
对象字典由一系列的条目组成,每个条目都有一个唯一的索引(Index)。索引是一个16位的值,用于唯一标识对象字典中的每一个条目。对于某些条目,还可能有子索引(Sub-index),用来进一步细分条目的数据。子索引是一个8位的值,从1开始编号。
### 对象字典的类型
对象字典中的条目可以是以下几种类型:
- **变量**(Variable):单个数值,如温度、位置等。
- **数组**(Array):一组相同类型的变量。
- **记录**(Record):一组不同类型的变量,通常表示一个复杂的状态或配置。
- **对象**(Object):包含其他变量、数组或记录的复合类型。
### 对象字典的访问
对象字典的条目可以通过 CANopen 的预定义服务进行访问:
- **读取服务**(Read Service):读取对象字典条目的值。
- **写入服务**(Write Service):改变对象字典条目的值。
- **同步服务**(Sync Service):用于同步所有节点的时间基准。
- **时间戳服务**(Time Service):用于读取和写入节点的内部时钟。
- **紧急服务**(Emergency Service):用于发送紧急停止信号。
### 常见的对象字典条目
一些常见的对象字典条目包括:
- **设备类型**(Device Type)
- **硬件版本**(Hardware Version)
- **软件版本**(Software Version)
- **节点ID**(Node ID)
- **心跳时间**(Heartbeat Time)
- **错误寄存器**(Error Register)
- **生产者心跳时间**(Producer Heartbeat Time)
- **同步命令**(Synchronization Command)
### 对象字典的标准化
为了确保不同制造商的设备可以互操作,对象字典的许多部分都遵循了标准化。例如,CiA(CAN in Automation)定义了一系列的标准对象字典条目,这些标准定义了设备应该具备的特定功能和行为。
理解 CANopen 的对象字典对于开发和维护 CANopen 网络设备至关重要,因为它定义了设备如何与网络中的其他节点通信和交互。