CANopen协议核心秘籍:NMT、SDO、PDO、心跳报文一网打尽

描述

工程师必备:从状态切换、参数配置到实时数据传输,一篇搞定CANopen通信难题

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-IDDLCData[0]Data[1-2]Data[3]Data[4-7]
0x600+NodeID8

命令字(固定0x40)

对象索引(高+低)对象子索引填充0x00

响应报文(从机返回数据)

COB-IDDLCData[0]Data[1-2]Data[3]Data[4-7]
0x580+NodeID8命令字(随数据长度变化)对象索引对象子索引返回数据(最大4字节)

响应命令字规则:

  • 1字节数据:0x4F
  • 2字节数据:0x4B
  • 3字节数据:0x47
  • 4字节数据:0x43
  • 读取失败:0x80

2.3 SDO写报文格式

发送报文(主站请求写参数)

COB-IDDLCData[0]Data[1-2]Data[3]Data[4-7]
0x600+NodeID8

命令字(固定0x23)

对象索引(高+低)对象子索引要写的数据

响应报文(从机返回数据)

COB-IDDLCData[0]Data[1-2]Data[3]Data[4-7]
0x580+NodeID8

命令字(固定0x60)

对象索引对象子索引要写的数据

PDO(过程数据对象)

PDO是CANopen的实时数据传输载体,分为发送PDO(TPDO,从机→主站)接收PDO(RPDO,主站→从机),最多支持4组PDO通道。

3.1 PDO报文ID规则

PDO类型TPDO(从机发)RPDO(主站发)
PDO1180h + NodeID200h + NodeID
PDO2280h + NodeID300h + NodeID
PDO3380h + NodeID400h + NodeID
PDO4480h + NodeID500h + NodeID

3.2 PDO传输触发条件

PDO的传输时机由传输类型决定,核心触发条件包括同步(SYNC)远程帧(RTR)事件(如数据变化)

SDO

3.3 PDO的传输类型

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

传输触发类型如下:

SDO

  • (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通信流程示例

  1. 设备上线:从机发700+NodeID(00),主站确认;
  2. 状态配置:主站发NMT指令(如80+NodeID),从机进入预操作状态;
  3. 参数配置:主站通过SDO(600+NodeID)读写从机对象字典,配置PDO映射、传输周期等;
  4. 启动运行:主站发01+NodeID,从机进入运行状态;
  5. 实时通信:主站发SYNC(080)触发PDO,从机通过TPDO传数据,主站通过RPDO发控制指令;
  6. 故障监控:从机故障时发紧急报文(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分析仪抓包,对照本文速查表快速定位问题。


注: 文中图片为示意图,实际使用时请参考具体设备手册。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分