. 网络管理 NMT ( Network management) 与 CANopen 主站
前文所述,一个 CANopen 网络中为了保证可靠、可控,必须要 NMT 网络管理,就像
一个军队一样,要令行禁止,才能达到稳定、高效的目标。如图 6.1 所示。指挥员( NMT
主机)通过发号施令,士兵(NMT 从机)进行自由俯卧训练,这样整个训练都是有序的。
所以 每个 CANopen 从节点的 CANopen 协议栈中,必须具备 NMT 管理的相应代码,
这是节点具备 CANopen 协议的最基本的要素 。
NMT 节点状态
NMT 管理涉及到一个 CANopen 节点从上电开始的 6 钟状态,包括:
初始化 ( Initializing ):节点上电后对功能部件包括 CAN 控制器进行初始化;
应用层复 位( Application Reset ):节点中的应用程序复位(开始),比如开关量输
出、模拟量输出的初始值;
通讯复位 ( Communication reset ):节点中的 CANopen 通讯复位(开始),从这个时
刻起,此节点就可以进行 CANopen 通讯了。
预操作状态 ( Pre-operational ):节点的 CANopen 通讯处于操作就绪状态,此时此节
点不能进行 PDO 通信,而可以进行 SDO 进行参数配置和 NMT 网络管理的操作;
操作状态 ( operational ):节点收到 NMT 主机发来的启动命令后, CANopen 通讯被
激活, PDO 通信启动后,按照对象字典里面规定的规则进行传输,同样 SDO 也可以
对节点进行数据传输和参数修改;
停止状态 ( Stopped ):节点收到 NMT 主机发来的停止命令后,节点的 PDO 通信被
停止,但 SDO 和 NMT 网络管理依然可以对节点进行操作;
除了初始化状态, NMT 主机通过 NMT 命令可以让网络中任意一个的 CANopen 节点
进行其他 5 种状态的切换。如图 所示。
当然 CANopen 节点也可以程序自动完成这些状态的切换。
![](https://i-blog.csdnimg.cn/direct/f2c036b1a04b495caebc5217e07d0d49.png)
NMT 节点上线报文
任何一个 CANopen 从站上线后,为了提示主站它已经加入网络(便于热插拔),或者
避免与其他从站 Node-ID 冲突。这个从站必须发出 节点上线报文( boot-up ) ,如图 所示,
节点上线报文的 ID 为 700 h +Node-ID , 数据为 1 个字节 0 。生产者为 CANopen 从站。
NMT 节点状态与心跳报文
为了监控 CANopen 节点是否在线与目前的节点状态。 CANopen 应用中通常都要求在线
上电的从站定时发送状态报文(心跳报文),以便于主站确认从站是否故障、是否脱离网络。
如图 所示,为心跳报文发送的格式, CANID 与节点上线报文相同 为 700 h +Node-ID ,
数据为 1 个字节,代表节点目前的状态, 04 h 为停止状态, 05 h 为操作状态, 7F h 为预操作状
态。
![](https://i-blog.csdnimg.cn/direct/93d6bfced8124aa390aa5ed099545370.png)
CANopen 从站按其对象字典中 1017 h 中填写的心跳生产时间( ms )进行心跳报文的发
送,而 CANopen 主站( NMT 主站)则会按其 1016h 中填写的心跳消费时间进行检查,假设
超过诺干次心跳消费时间没有收到从站的心跳报文,则认为从站已经离线或者损坏。
NMT 节点守护
在早期 CANopen 应用中,还有一种可以 通过轮询模式监视从站状态的节点守护模式 ,
它与心跳报文模式二者不能并存 。通过节点守护, MNT 主机可以检查每个节点的当前状态。
NMT-Master 节点发送 标准远程帧 (无数据)如下:
![](https://i-blog.csdnimg.cn/direct/51717e1b85d84525b3b940c11d84c229.png)
数据部分包括一个触发位( bit7 ), 触发位必须在每次节点保护应答中交替置“ 0 ”或者
“ 1 ” 。触发位在第一次节点保护请求时置为“ 0 ”。位 0 到位 6 ( bits0 ~ 6 )表示节点状态,
可为表 6.1 中的数值。
由于远程帧在 CAN 发展中逐渐被淘汰,而节点守护由于需要更多的主站开销与增加网
络负载, CiA 协会已经不建议使用,被心跳报文所取代 。
NMT 节点状态切换命令
NMT 网络管理中,最核心的就是 NMT 节点状态切换命令 ,这是 NMT 主站所进行网
络管理的“命令”报文。 使用者必须牢记这些命令 。
CANID 均为 000 h ,具备最高的 CAN 优先级。数据为 2 个字节:
第 1 个字节代表命令类型:
01 h 为启动命令(让节点进入操作状态);
02 h 为停止命令(让节点进入停止状态);
80 h 为进入预操作状态(让节点进入预操作状态);
81 h 为复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);
82 h 为复位节点通讯(让节点的 CAN 和 CANopen 通讯重新初始化,一般用于总线收到
干扰,导致节点总线错误被动,或者总线关闭时)。
第二个字节代表被控制的节点 Node-ID ,
如果要对整个网络所有节点同时进行控制,则这个数值为 0 即可。
![](https://i-blog.csdnimg.cn/direct/d256810aec0847a78be00b98f59b0f7d.png)