CANopen 是一种基于 CAN 总线(Controller Area Network)的通信协议,广泛用于嵌入式系统、工业自动化、汽车电子和机器人等领域。其核心是通过高效的通信和设备管理来实现多个节点之间的协同工作。NMT(Network Management,网络管理) 是 CANopen 协议中的一个关键功能,它负责管理网络上节点的状态,确保数据的可靠传输和节点间的协调。
NMT 功能概述
NMT 是 CANopen 协议中的一种网络管理服务,主要用于控制网络节点的状态。NMT 协议使得网络上的各个设备(通常称为节点)能够根据预定的状态来协调其行为。它通过 NMT 控制命令 来管理节点的操作,并确保在设备间的状态变化时进行适当的响应。
NMT 的主要任务包括:
- 启动节点(Start Node)
- 停止节点(Stop Node)
- 复位节点(Reset Node)
- 进入预定义状态(如“预操作”或“服务模式”)
NMT状态
NMT 协议定义了节点的几种基本状态,每个节点都有一个当前状态,这些状态控制着节点的行为:
-
预操作模式(Pre-Operational) :
- 节点处于预操作模式时,它已经被初始化并且可以进行配置或诊断,但不能进行正常的通信。
- 节点在这个模式下,可以接受 NMT 命令进行操作或测试。
-
操作模式(Operational) :
- 节点在此模式下能够执行其正常的工作任务,发送和接收数据。
- 这是节点的正常工作状态,网络中的其他节点可以与其交互。
-
停止模式(Stopped) :
- 节点处于停止模式时,不会处理任何通信请求或数据。
- 节点被停用,不再参与任何数据交换。
-
复位模式(Reset) :
-
这个状态通常由网络管理命令触发,使节点重启并进入初始状态,类似于软重启。
-
当节点发生故障或需要重新初始化时,可能会发送复位命令。
-
| 编号 | 描述 |
|---|---|
| (1) | 在上电时网络状态机自动进入初始化状态 |
| (2) | 状态机初始化完成后,自动进入预操作状态 |
| (3) | 或本控或NMT启动从站进行进行总线控制 |
| (4)(7) | 进入预操作状态 |
| (5)(8) | NMT进入停止状态 |
| (6) | 进入预操作状态 |
| (9)(10)(11) | 复位从站(复位应用规范部分) |
| (12)(13)(14) | 复位从站通信(复位通信部分) |
NMT 控制命令
NMT 控制命令通过 CANopen 网络传输,以 CANopen 网络管理命令(Network Management Command)格式发送。以下是常见的 NMT 控制命令:
-
Start Node(启动节点) :
- 发送该命令使节点进入 Operational(操作模式) ,并开始其正常的工作状态。
- 命令格式:
0x01
-
Stop Node(停止节点) :
- 发送该命令使节点进入 Stopped(停止模式) ,即停止与网络上的其他节点通信。
- 命令格式:
0x02
-
Reset Node(复位节点) :
- 发送该命令使节点重置,返回初始状态。此命令通常用于节点的故障恢复。
- 命令格式:
0x81
-
Enter Pre-Operational Mode(进入预操作模式) :
- 节点进入预操作模式,可以用于测试、配置或诊断,节点仍不发送正常数据。
- 命令格式:
0x80
NMT 消息结构
NMT 控制命令是通过 CAN 总线以特殊的 NMT 消息格式传输的。NMT 消息的结构一般包含以下内容:
- CAN ID:NMT 消息通常具有特定的 CAN ID,这个 ID 标识该消息是网络管理命令。
- 命令字节:命令字节指示所执行的 NMT 控制命令,如
0x01为启动节点,0x02为停止节点等。 - 节点 ID:指定目标节点(设备)的 ID,通常为 1 到 127 的整数。
例如,如果要向节点 5 发送“启动节点”的命令,NMT 消息可能类似于:
- CAN ID:
0x700 + 5(通常为0x705) - 命令字节:
0x01(表示启动节点)
NMT 服务
NMT 也涉及到服务模式(Service Mode),当网络上的节点进入该模式时,它们可以接受来自其他节点的网络管理命令。这对于网络中的节点管理和状态协调非常重要。
- 服务模式 允许节点接收 NMT 控制命令,以决定是否执行进入操作模式、停止或重启等操作。
- 在某些情况下,节点可能会自动进入服务模式,等待来自主控制器的指令,进行必要的操作。
NMT 和 CANopen 各层的协同工作
- 应用层(Application Layer) :当节点在 NMT 协议中进入操作模式时,节点会根据其应用层的具体实现进行正常的业务处理,如传感器数据采集、执行控制等。
- 传输层(Transport Layer) :NMT 协议中的节点状态管理也可能影响数据的传输方式,尤其是节点处于停止状态时,无法发送或接收数据。
通过 NMT 协议的管理,可以灵活控制节点的状态,使得网络上的节点能够根据实际需求进行快速响应和调整。