目录
在can网络中,只有主站可以发送控制信息,来控制从站,从站不需要发送对网络控制消息的响应消息。
网络管理系统负责初始化、启动及停止网络及网络中的设备,属于主从系统。
CANopen网络中有且只有一个NMT主机,可以配置本身在内的CANopen网络。
NMT服务
CANopen按照协议规定的状态机执行相应的工作。其中,部分为内部自动实现切换,部分必须由NMT主机发送NMT报文实现转换,具体如下图所示:
NMT报文的COB-ID固定是0x000
数据区由2个字节组成:第一个字节是命令字,表明该帧的控制作用。
第二个自己是节点地址,当值为0时,表明为广播消息,网络中的所有从设备都有效。
NMT报文格式
设备节点Node-ID值为0时,所有的设备节点都被寻址。
CS:command specifier
设备上电后会自动进入初始化状态,包括正在初始化、复位节点和复位通信。正在初始化将各个模块的参数加载,而复位节点将对象字典制造商定义区和子协议区恢复到上次保存值,复位通信将对象字典中通信参数恢复到上次保存值。
而后设备发送Boot-up,自动进入预操作状态,此状态为主要的配置节点状态。
完成配置后,节点需要NMT主站发送NMT报文进入操作状态,操作状态是CANopen节点正常工作时的状态,各个模块的功能都应能够正常工作。
0x000 0x01 0x0 // 启动所有节点
0x000 0x01 0x03 // 启动节点3
0x000 0x02 0x03 // 停止节点3
0x000 0x80 0x03 // 节点3进入预操作状态
0x000 0x81 0x03 // 复位节点3
0x000 0x82 0x03 // 复位节点3通信
NMT错误控制
NMT错误控制主要用于检测网络中的设备是否在线和设备所处的状态,包括节点守护、寿命保护和心跳。
备注:不允许同时使用节点守护个心跳;
节点保护、寿命保护和心跳的事件不宜设置过短,否则网络负载比较大。
NMT 节点守护
未完待续......................
节点守护是主站查询从站的状态,然后从站响应返回相应的从站状态。
The NMT-Master sends a CAN remote frame (no data bytes) as follows:
NMT主站节点发送一个远程帧(没有数据)如下所示:
COB-ID |
0x700+Node-ID |
从设备节点返回一个消息
COB-ID | Byte 0 |
0X700+NODE-ID | Bit7:toggle; bit6-0:state |
转换位toggle bit: 在每次节点守护请求时,值在0与1之间交替切换(第一次的值是0)
state的值定义如下:
Value | State |
0 | 初始化中:Initialising |
1 | 未连接:Disconnected |
2 | 连接中:Connecting |
3 | 准备中:Preparing |
4 | 停止:Stopped |
5 | 操作状态:Operational |
127 | 预操作状态:Pre-operational |
HeartBeat Message 心跳报文
心跳是生产者定时发送一个心跳报文报告自己的状态给心跳的消费者。
这是一种生产者消费者的通信模型。
生产者可以是主站也可以是从站,消费者可以是主站也可以是从站。
HEARTBEAT Producer ⇒ Consumer(s)
COB-ID | Byte0 |
0X700+NODE-ID | state |
state | Meaning |
0 | Boot-up |
4 | Stopped |
5 | Operational |
127 | Pre-operational |
NMT Boot-up
从设备发送一个启动消息告诉主站自己已经从初始化进入到预操作状态。
An NMT-Slave issues the Boot-up message to indicate to the NMT-Master that it has entered the state Pre-operational from state Initialising:
NMT-Master <= NMT-Slave
COB-ID | Byte 0 |
0X700+NODE-ID | 0 |
节点上线报文和心跳报文实例