CANopen协议在工业自动化中无处不在,但复杂的对象字典、多样的报文类型常让开发者头疼。本文将NMT网络管理、SDO服务数据、PDO过程数据、心跳机制及COB-ID速查表一网打尽,助你快速掌握CANopen精髓。
NMT(网络管理)
NMT负责设备的状态切换、上线管理与心跳监控
1.1 从机状态切换指令
NMT主站通过特定指令控制从机的运行状态,指令格式:功能码 + 节点ID
| 指令码 | 功能 | 说明 |
|---|---|---|
| 01 + Node-ID | 启动(START) | 从机进入运行状态 |
| 02 + Node-ID | 停止(STOP) | 从机暂停工作 |
| 80 + Node-ID | 预操作(PRE-OPERATIONAL) | 从机进入配置状态 |
| 81 + Node-ID | 复位应用层 | 重置从机应用参数(通信参数保留) |
| 82 + Node-ID | 复位节点通讯 | 重置从机通信参数 |
1.2 节点上线与心跳报文
- 节点上线:从机启动后,主动发送700h + Node-ID报文(数据段为1字节00),告知主站“已就绪”。
- 心跳报文:从机周期性发送700h + Node-ID报文,数据段1字节标识当前状态:
- 04:停止状态
- 05:运行状态
- 7F:预操作状态
主站通过73F报文(无节点ID)广播自身在线状态。
SDO(服务数据对象)
SDO用于非实时的参数读写(如对象字典配置),采用“请求-响应”模式,报文格式固定。
2.1 SDO报文ID规则
| 方向 | COB-ID |
|---|---|
| 发送(主站→从机) | 600h + Node-ID |
| 响应(从机→主站) | 580h + Node-ID |
2.2 SDO读报文格式
发送报文(主站请求读参数)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x600+NodeID | 8 | 命令字(固定0x40) | 对象索引(高+低) | 对象子索引 | 填充0x00 |
响应报文(从机返回数据)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x580+NodeID | 8 | 命令字(随数据长度变化) | 对象索引 | 对象子索引 | 返回数据(最大4字节) |
响应命令字规则:
- 1字节数据:0x4F
- 2字节数据:0x4B
- 3字节数据:0x47
- 4字节数据:0x43
- 读取失败:0x80
2.3 SDO写报文格式
发送报文(主站请求写参数)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x600+NodeID | 8 | 命令字(固定0x23) | 对象索引(高+低) | 对象子索引 | 要写的数据 |
响应报文(从机返回数据)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x580+NodeID | 8 | 命令字(固定0x60) | 对象索引 | 对象子索引 | 要写的数据 |
PDO(过程数据对象)
PDO是CANopen的实时数据传输载体,分为发送PDO(TPDO,从机→主站)和接收PDO(RPDO,主站→从机),最多支持4组PDO通道。
3.1 PDO报文ID规则
| PDO类型 | TPDO(从机发) | RPDO(主站发) |
|---|---|---|
| PDO1 | 180h + NodeID | 200h + NodeID |
| PDO2 | 280h + NodeID | 300h + NodeID |
| PDO3 | 380h + NodeID | 400h + NodeID |
| PDO4 | 480h + NodeID | 500h + NodeID |
3.2 PDO传输触发条件
PDO的传输时机由传输类型决定,核心触发条件包括同步(SYNC)、远程帧(RTR)、事件(如数据变化):

3.3 PDO的传输类型
PDO的传输类型位于通信参数(RPDO:1400h~1403h,TPDO:1800h~1803h)的子索引02上。
传输触发类型如下:

- (1) TPDO传输类型为0:映射数据改变且接收到一个同步帧时,发送该TPDO。
- (2) TPDO传输类型为1~240:接收到相应个数的同步帧时,发送该TPDO。
- (3) TPDO传输类型为254或255:映射数据改变或事件计时器到达时发送该TPDO。
- (4) RPDO传输类型为0~240:接收到一个同步帧时,将该RPDO最新数据更新到应用。
- (5) RPDO传输类型为254或255:将接收到的数据直接更新到应用。
对象字典(OD)
对象字典是所有可配置参数的仓库,通过16位索引 + 8位子索引标识,分为4大区域:
| 索引范围 | 区域 | 说明 |
|---|---|---|
| 1000h-1FFFh | 通讯对象子协议区 | 存储PDO、SDO、NMT等通信配置 |
| 2000h-5FFFh | 制造商特定子协议区 | 厂商自定义参数,灵活扩展 |
| 6000h-9FFFh | 标准化设备子协议区 | 如电机控制参数 |
CANopen通信流程示例
- 设备上线:从机发700+NodeID(00),主站确认;
- 状态配置:主站发NMT指令(如80+NodeID),从机进入预操作状态;
- 参数配置:主站通过SDO(600+NodeID)读写从机对象字典,配置PDO映射、传输周期等;
- 启动运行:主站发01+NodeID,从机进入运行状态;
- 实时通信:主站发SYNC(080)触发PDO,从机通过TPDO传数据,主站通过RPDO发控制指令;
- 故障监控:从机故障时发紧急报文(080+NodeID),主站通过心跳报文监控设备状态。
不同COB-ID的功能速查
6.1 网络管理类(NMT)
| COB-ID(11位) | 功能说明 | 示例场景 |
|---|---|---|
0x000 | 网络管理报文(NMT):启动、停止、复位等网络控制 | 主站发送0x000 + 数据0x01 0x02 → 让节点2进入运行状态 |
6.2 同步/时间类
| COB-ID(11位) | 功能说明 |
|---|---|
0x80 | 同步报文(SYNC):触发多个节点同步传输PDO |
0x100 | 时间戳报文(TIME):传递系统时间,用于节点时钟同步 |
6.3 紧急报文(EMCY)
| COB-ID(11位) | 功能说明 |
|---|---|
0x80 + 节点ID | 紧急报文:节点发生故障(如过流、超温)时主动上报故障代码 |
| 示例:节点3的EMCY → 0x83,发送故障代码0x0500(硬件过流) |
6.4 服务数据对象(SDO)
| COB-ID(11位) | 功能说明 | 通信方向 |
|---|---|---|
0x600 + 节点ID | SDO客户端发送报文:主站向从站发起读写对象字典请求 | 主站→从站 |
0x580 + 节点ID | SDO服务器回应报文:从站向主站返回读写结果/数据 | 从站→主站 |
示例:主站读节点2 → 主站发0x602,从站回0x582
6.5 过程数据对象(PDO)
每个节点最多支持4个TPDO和4个RPDO,默认COB-ID如下:
| PDO类型 | 默认COB-ID(11位) | 功能说明 |
|---|---|---|
| TPDO1 | 0x180 + 节点ID | 从站主动发送过程数据(如传感器值) |
| TPDO2 | 0x280 + 节点ID | 扩展发送数据 |
| TPDO3 | 0x380 + 节点ID | 扩展发送数据 |
| TPDO4 | 0x480 + 节点ID | 扩展发送数据 |
| RPDO1 | 0x200 + 节点ID | 主站向从站发送控制指令 |
| RPDO2 | 0x300 + 节点ID | 扩展控制数据 |
| RPDO3 | 0x400 + 节点ID | 扩展控制数据 |
| RPDO4 | 0x500 + 节点ID | 扩展控制数据 |
| 示例:节点4的TPDO1 → 0x184;主站发往节点4的RPDO1 → 0x204 |
6.6 心跳报文
CANopen标准中,从站的心跳报文COB-ID固定为 0x700 + 节点ID(11位标准帧)。
例:节点ID=2的从站,心跳报文COB-ID为0x700 + 0x02 = 0x702。
总结
CANopen协议通过清晰的报文分类(NMT、SDO、PDO、EMCY等)和灵活的对象字典机制,成为工业通信的事实标准。掌握NMT状态机、SDO配置流程、PDO触发模式以及各类COB-ID的用途,就能轻松应对大多数CANopen设备开发与调试任务。
小贴士:调试时可借助CAN分析仪抓包,对照本文速查表快速定位问题。
注:文中图片为示意图,实际使用时请参考具体设备手册。
-
PDO
+关注
关注
0文章
12浏览量
4612 -
SDO
+关注
关注
0文章
7浏览量
6223 -
NMT
+关注
关注
0文章
8浏览量
3853
发布评论请先 登录
【米尔-瑞萨RZ/G2UL开发板】5.CAN通讯进阶CANopen
CANopen协议移植编译,一直编译不过的原因?
Canopen协议读后感想
【下载有奖】Fluke红外热像资源中心,红外热像解读,一网打尽!
【大联大世平 NXP i.MX RT1064开发板试用体验】CANopen通讯
PDO是什么
CANOpen轻松入门_数据对象(PDO)和服务数据对象(SDO)
CANopen | 对象字典OD 02 - 修改CANopen节点的心跳报文发送间隔
CANopen协议核心秘籍:NMT、SDO、PDO、心跳报文一网打尽
评论