
NMTNetwork Management是CANopen总线最高优先级的命令帧ID固定为0x000所有节点都必须响应。一、NMT报文结构帧ID0x0000最高优先级数据长度2字节Byte 0D0 命令字Byte 1LE 目标节点ID0x00 广播所有节点二、5个NMT命令字0x01 — 启动Start让节点进入运行状态Operational0x02 — 停止Stop关闭绝大多数通讯服务0x80 — 进入预运行Pre-operational仅开放SDO配置通道0x81 — 重置节点Reset Node恢复全部通讯参数为出厂默认值0x82 — 重置通讯Reset Communication只重置通讯相关参数三、节点状态机设备上电后的状态跳转顺序初始化Initialisation↓预运行Pre-operational← 心跳发0x7F↓ 收到NMT 0x01运行Operational← 心跳发0x05↓ 收到NMT 0x80预运行Pre-operational↓ 收到NMT 0x02停止Stopped← 心跳发0x04四、实战中最常用的操作让总线上所有设备进入运行状态发送01 00命令字01 广播所有节点单独让节点1进入运行状态发送01 01命令字01 节点ID1让设备恢复出厂设置通讯参数发送81 01命令字81 节点ID1五、为什么NMT用0x000作为帧IDCAN总线采用11位IDID越小优先级越高。0x000是整个总线上优先级最高的ID保证NMT命令在任何时候都能优先送达不会因为总线繁忙而被延迟。六、调试时的心跳状态判断在配置阶段设备心跳一直是0x7F预运行这是正常的——说明设备在线只是还没进入运行状态。只有发了NMT 0x01之后心跳才会变成0x05。---作者CANopen实战笔记