CANOpen笔记

CANOpen是一种基于CAN(ControllerAreaNetwork)的高层通信协议,由CiA组织发展,包括紧急报文协议、过程数据对象(PDO)、服务数据对象(SDO)、网络管理和心跳报文等功能。对象字典是其核心特性,用于存储设备信息和状态。PDO用于实时数据传输,SDO用于访问节点对象字典,NMT则实现网络管理和节点监控。
摘要由CSDN通过智能技术生成

1、CANOpen简介

CANopen协议是在20世纪90年代末,由总部位于德国纽伦堡的CiA组织——CAN-in-Automation,在 CAL(CAN Application Layer)的基础上发展而来。CiA 在 CANopen 基础协议——CiA 301 之上,对各个行业不断推出设备子协议,使 CANopen 协议在各个行业得到更快的发展与推广。所谓的子协议,就是针对不同行业的应用对象,对CANopen 内部的数据含义进行重新定义,或者添加新的控制逻辑。

2、CANOpen组成

CANOpen的报文中包含信息有COB-ID、Data,其中COB-ID包含了功能码及对象设备节点号(Node-ID)、Data会包含命令符(CS)、索引号(Index)、子索引号(Sub-Index)、写入数据或反馈数据。(报文传输采用 CAN 标准帧格式,即 11bit 的 ID 域,以尽量减小传输时间)

对象字典(Object Dictionary)是 CANopen 最重要的特性,每一个对象字典由 16 位的索引(Index)和 8 位的子索引(Sub Index)来寻址。设备状态可通过读对应的对 象字典来查找,也可以通过写操作控制类的对象字典进行控制。一个节点的对象字典 Index 范围在 0x1000 到 0x9FFF 之间,标准结构如下表所示:

Index(hex)内容
0001-001F静态数据类型(标准数据类型,如 Boolean,Integer 16)
0020-003F复杂数据类型(预定义由简单类型组合成的结构如 PDOCommPar)
0040-005F制造商定义的复杂数据类型
0060-007F设备子协议定义的静态数据类型
0080-009F设备子协议定义的复杂数据类型
1000-1FFF通讯子协议区域(如设备类型,错误寄存器,支持的 PDO 数量)
2000-5FFF制造商指定数据区域
6000-9FFF标准设备子协议区域(例如“DSP-402 驱动和运动控制子协议”等)
A000-BFFF标准接口子协议区域

3、功能

3.1、紧急报文协议(Emergency protocol)

当设备内部发生错误,设备上报内部错误代码,提示 NMT主站。紧急报文属于诊断性报文,其COB-ID存储在 1014h的索引中,一般会定义为080h +node-ID。

COB-IDData
080h +node-IDbyte0byte1byte2byte3byte4byte5byte6byte7
紧急事件错误代码错误寄存器厂家自定义故障代码

3.2、过程数据对象PDO(Process data object)

PDO 属于过程数据用来传输实时数据,即单向传输,无需接收节点回应CAN报文来确认。使用PDO需要设置通讯参数及映射参数:

3.2.1、通讯参数

IndexSub-Index描述数据类型备注

RPDO:

1400-15FF

TPDO:

1800-19FF

00该Index参数数量unsigned8有效参数数量
01COB-IDunsigned32通讯指定COB-ID
02发送类型unsigned8PDO触发形式
00 非循环同步
01 循环同步
FC 远程同步
FD 远程异步
FE 异步,厂商特定事件
FF 异步,设备子协议特定事件
03生产禁止约束时间,单位0.1msunsigned16此时间间隔被不允许重复发送
05时间定时器触发时间间隔,单位1msunsigned16
06同步起始值unsigned8

3.2.2、映射参数

IndexSub-Index描述数据类型

RPDO:

1600-17FF

TPDO:

1A00-1BFF

00有效映射数量unsigned8
01映射数据unsigned32
02映射数据unsigned32
03映射数据unsigned32
**映射数据unsigned32

映射数据由映射的目标索引号、子索引号以及其数据类型,如要映射“设备节点号为1,索引1003的子索引02的数据,该数据为16位数据"到RPDO1的第一段数据则发送:

COB-IDData
0x6010x230x000x160x010x100x020x030x10
COB-ID写入命令符RPDO1-索引号1600第一段数据映射数据的数据类型-16位映射数据的子索引-02映射数据的索引-1003

索引号在数据帧是低位在前高位在后,映射数据的数据类型中8位对应发送“0x08”、16位对应发送“0x10”、32位对应发送“0x20”。

3.3、服务数据对象SDO(Service data object)

主要用来访问节点的对象字典,主站问,从站答。主 要用来在设备之间传输低优先级的对象,典型是对从设备进行配置、管理,比如模式配 置、PDO 配置等,类似于 Modbus 的一问一答体系。指令/应答结构如下:

COB-IDbyte0byte1byte2byte3byte4byte5byte6byte7
CSIndexSub-IndexDATAs

0x600+

Node-ID

0x23 写32位data1data2data3data4
0x2B 写16位0x000x00
0x2F 写8位0x00
0x40 读数据0x00

0x580+

Node-ID

0x43 上报32位data1data2data3data4
0x43 上报32位0x000x00
0x43 上报32位0x00
0x60 写入成功data2data3data4
0x80 写入错误

3.4、网络管理(NMT)

NMT(Network Management)管理报文用来实现 CANopen 网络中主节点对从节点监控和管理,如初始化、启动和停止节点,侦测失效节点。这种服务主要采用主从通 讯模式来实现,此消息不需要应答。只有主节点能够发送 NMT Modual Control 报文。信息格式如下:

COB-ID

byte0

byte1
0x00命令字0x01 节点置于可操作状态Node-ID
0x02 节点置于停止状态
0x80 节点置于预操作状态
0x81 节点置于应用重置状态
0x82 节点置于通讯重置状态

3.5、心跳报文(Heartbeat)

心跳报文(Hearbeat)实现 CANopen 网络中主节点与从节点之间的通讯保持。心跳报文格式如下:

COB-ID

byte0

0x700+Node-ID状态字0x00 启动状态

0x04 停止状态

0x05 可操作状态
0x7F 预操作状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值