1.对象字典OD
对象字典是每个CANopen设备必须具有的功能,它包含了设备所有可以被访问的参数,客户端使用索引(Index)和子索引(Sub-index)来读写对象字典里的参数。
对象字典主要用来设定设备组态及进行非即时的通讯。每个对象采用16位索引的方式来寻址,为了寻访数据结构中的单个元素,又定义了8位的子索引。同时对象字典也对数据类型做出了定义。
索引(hex) | 对 象 |
0000 | 保留 |
0001-001F | 基本数据类型 |
0020-003F | 复杂数据类型 |
0040-005F | 制造商规定的数据类型 |
0060-007F | 设备子协议的基本数据类型 |
0080-009F | 设备子协议的复杂数据类型 |
00A0-0FFF | 保留 |
1000-1FFF | 通信子协议区域 |
2000-5FFF | 制造商特定子协议区域 |
6000-9FFF | 标准设备子协议区域 |
A000-BFFF | 标准接口子协议区域 |
C000-FFFF | 保留 |
CANopen网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。一个节点的对象字典是在电子数据文档(EDS:Electronic Data Sheet)中描述或者记录在纸上。节点本身只需要能够提供对象字典中必需的对象,以及其它可选择的、构成节点部分可配置功能的对象。
2.CANopen通讯
CANopen 的物理层 CANbus 每次传送的数据量不大,其中包括 11 位元的 ID、远端传输请求(RTR)位元及大小不超过8字节的数据。CANopen 将 CANbus 的 11 位元 ID 称为通讯对象 ID (COB-ID)。当传输数据发生冲突时,CANbus 的仲裁机制会使 COB-ID 最小的讯息继续传送,不用等待或重传。不同通讯对象对8字节数据的使用及各字节代表的意义不同。
不同通讯对象对8字节数据的使用及各字节代表的意义不同,以下是一个标准的 CANopen页框:
功能码 | 节点ID | RTR | 数据长度 | 数据 | |
长度 | 4位元 | 7位元 | 1位元 | 4位元 | 0-8位字节 |
CANopen通讯模型主要定义3种通讯协议,分别为NMT协定,服务数据对象SDO协定,过程数据对象PDO协定。
NMT协定
网络管理讯息NM遵循了主站/从站的架构进行NMT通讯。在这架构之下只有一个主站,而此主站可以搭配多个从站。所有的CANopen节点都有自己专属的NMT状态,而主站可以藉由NMT的讯息去控制从站的状态。
NMT通讯数据主要用于对CANopen网络的管理,NMT在数据字节中只使用了两字节,如图:
功能码 | 节点ID | RTR | 数据长度 | 标识符 | 字节0 | 字节1 | |
长度 | 4位元 | 7位元 | 1位元 | 4位元 | 0x000 | 命令字 | 从节点ID |
服务数据对象SDO
服务数据对象SDO用来读写CANopen设备的对象字典。提供对象字典的节点称为SDO server,存取对象字典的节点称为SDO client。SDO 通讯一定由SDO client 开始,并提供初始化相关的参数。
在CANopen的术语中,上传是指由 SDO server 中读取数据,而下载是指设定 SDO server 的数据。
SDO通讯数据主要用于非时间关键数据,比如通讯参数。SDO在数据字节的使用:
功能码 | 节点ID | RTR | 数据长度 | 字节0 | 字节1 | 字节2 | 字节3-7 | |
长度 | 4位元 | 7位元 | 1位元 | 4位元 | SDO命令 | 索引 | 子索引 | 数据 |
过程数据对象PDO
PDO用于传输实时数据,从一个生产者到一个或多个消费者。可用来在许多节点之间交换即时的数据。
PDO分为两种:传送用的TPDO及接收用的RPDO。一个节点的TPDO是将资料由此节点传输到其他节点,而RPDO则是接收由其他节点传输的资料。本产品一个节点分别有4个TPDO及4个RPDO。
每个 PDO 在对象字典中由两个对象描述:通信参数和映射参数。PDO 通信参数指明使用哪个 COB-ID,传输类型,禁用时间和定时时间;PDO 映射参数用于设定 PDO报文中的数据的映射关系,确定要传输的数据在 CAN 报文数据域中的定位。该参数允许 PDO 的生产者和消费者知道正在传输什么信息,而不需要在 CAN 报文中增加额外的协议控制信息,使传输的效率达到最高。一个 PDO 最多可以映射 64 个对象。
PDO在数据字节的使用:
功能码 | 节点ID | RTR | 数据长度 | 数据 | |
长度 | 4位元 | 7位元 | 1位元 | 4位元 | 过程数据对象(PDO)的8个字节全部用来传输实时数据。 |