CAN网络管理

什么是CAN网络管理?
对CAN网络中的节点进行管理(启动,运行和休眠)的一种机制,分为直接网络管理和间接网络管理。直接网络管理由特定的网络管理报文来管理网络,每个节点对应一条网络管理报文,节点自动建环,网络管理的报文按照环的顺序依次发出。间接网络管理没有特定的网络管理报文,网络的管理通过各节点发出的周期性应用报文来实现,主要用于监测节点的离线/在线状态。
为什么要做网络管理?
由于汽车CAN网络中有许多的通信节点,有可能既有高速节点又有低速节点,如此多的节点难免就会造成网络中的某些节点通信错误。为了确保网络中的各个ECU之间的通信的可靠性和安全性,于是网络管理出现了。 在OSKE_NM中网络管理主要提供这些服务:
- 初始化ECU资源即网络接口;
- 启动网络;
- 提供网络配置功能;
- 管理节点监控的不同机制;
- 检测执行以及标记网络或节点的工作状态;
- 读取或设置网络或节点相关的参数;
- 协调全局工作模式(即全局休眠模式);
- 支持诊断。 对于这些服务,并不是网络中的每一个节点都需要实现,也可以只实现部分
直接网络管理的实现机制?
直接网络管理是通过专门的NM消息(NMPDU)实现的。
NMPDU的格式如下表:
NMPDU应用在CAN总线上时的消息格式:
它被分为三种类型:Ring消息(正常工作的环消息)、Alive消息(Alive message)和limp home消息(limp home message)。 Alive消息主要是通知网络上的其他节点,本地节点要上线,即加入到逻辑环中。当网络管理功能启动后,经过一系列初始化操作,节点开始发送的第一个消息是不带睡眠标志的alive 消息,当节点被跳过时,节点同样发送不带睡眠标志的alive消息告诉网络中的节点此节点被跳过,请求重新加入逻辑环中,网络中的节点收到alive消息之后经过判断找到该节点在逻辑环中的位置。
Ring消息的作用是负责逻辑环中传输Ring消息,Ring消息的传输类似于令牌环机制,Ring消息相当于令牌。
LimpHome消息是节点在LimpHome模式下发送的周期性管理消息,目的是为了保证网络中的其他节点能够监听到本地的节点。当该节点能够成功接收到其他节点发送的网络管理消息时,说明节点已经恢复正常,它会发送Alive消息,重新加入逻辑环。
注:对于LX-1项目的直接网络管理其并没有实现这个逻辑环,所以也就没有了这三种消息类型。但是其管理方式还是使用的NMPDU的方式,数据格式也符合上述规定。
直接网络管理的实现过程
直接网络管理功能分为四大部分:在启动时初始化网络设置;在总线系统运行时进行节点状态监测;唤醒和休眠管理,在网络无需工作时进入休眠状态;启动硬件。
直接网络管理通过逻辑环来实现各个节点网络网络管理消息之间的同步。逻辑环中的消息是由网络地址小的节点传送到网络地址大的节点,网络地址大的节点再将消息传给网络地址小的节点,从而首尾相连。网络中的消息是以广播的形式发送的,一个节点发送消息的时候其余节点都接收该消息并用特定的后继算法判断自己是不是发送节点的逻辑后继。如果是则处理该消息,如果不是则抛弃该消息。 系统状态有三种:NM On、NM Off和NM Shutdown三个,NM on状态可以进一步划分为NM Init、NM Awake、NM bus sleep三个子状态
NM Off状态是系统恢复后的初始状态,启动网络管理后系统便进入NM On状态即网络管理的运行状态,网络的故障检测和睡眠都是在这个状态完成。网络进入NM On之后,首先进入NM Init初始化状态,进行网络管理初始化操作。初始化操作完成之后,网络中的节点便进入NM Awake状态。NM Awake状态时网络是没有进入睡眠的一种状态,系统一般会保持在该状态直到系统满足进入睡眠状态的条件,系统则进入睡眠状态。当网络进入NM BUS Sleep状态之后,网络中的节点也可以被唤醒,然后重新初始化、运行、进行正常的操作。 从NM Awake状态默认进入的子状态时NM Reset。在NM Reset状态下,节点发送alive类型的网络管理消息。如果消息发送成功,节点将进入NM Normal状态,并在此状态下重复发送逻辑环消息——Ring消息,进行网络管理的相关检查操作。如果alive消息发送不成功或者Ring消息接收或者发送失败,节点将进入NM limpHome状态。进入NM limpHome状态之后,节点周期性地发送LimpHome消息,以便及时报告自己的故障情况,同时它又不断的监听网络上的其他节点的网络消息,直到该故障节点可以成功传输网络管理消息。此时该节点重新进入NM Reset状态进行重启,然后进行一般的网络管理操作。
在OSEK规范中,有一套协商休眠机制使网络进入休眠状态。当某个节点不需要通信时,在发送自己的Ring消息时,将睡眠指示位置1,然后发送给自己的后继节点,其后继节点如果同意休眠请求,则重复这一动作,如果不同意,可以将休眠指示位置0,发送不带休眠标志的Ring消息,将整个网络保持在唤醒状态。当网络中所有节点都同意休眠,即带有休眠标志的Ring消息在逻辑环中传递一周,发送休眠标志的节点发送休眠确认消息,网络 中的节点都等待CANNM_MSG_WAIT_BUSSLEEP_TIME时间之后同时进入休眠状态。
注:LX-1的网络管理中,网络有三个模式Bus Sleep Mode、Prepare Bus Sleep Mode和Network Mode。系统默认是进入Bus Sleep Mode,当系统中的任意一个节点需要总线通信时就周期性的发送NMPUDs,此时系统即从Bus Sleep Mode跳出进入Network mode状态。由于休眠需要一点时间,所以Prepare Bus Sleep Mode状态就是为这准备的。如果一个节点需要进行休眠,则其停止发送NMPDUs。当总线上没有NMPDUs且总线空闲时,系统应在T_NM_TIMEROUT+T_WAIT_BUS_SLEEP(4000ms)时间后执行休眠操作。
间接网络管理的实现机制
间接网络管理通过监控网络管理消息来实现网络的监控。这就要求网络中的所有节点必须周期性的发送网络管理消息。
间接网络管理的实现过程
间接网络管理对于传输和发送的检测包括两种超时监测机制:一种是通过全局时间(TOB)来定义所有的周期性消息监测超时;另一种是为每个消息分配一个监测超时。
如果网络使用的是全局时间监测,那么其中的某个节点在TOB时间内没有收到其他节点的网络管理消息,则该节点认为网络中的上没有其他节点在线,如果在TOB超时之前收到来自其他节点的网络管理消息,则设置该消息的发送节点为在线状态。若节点在预定时间TOB都没有收到自己发送的网络管理消息,则设置本地节点为静默模式,反之设置为非静默模式。
对于每个消息都有检测超时,其实时性优于全局时间监测。
间接网络管理的状态转换图如下:
间接网络管理主要包括NM Off和NM On状态,其中NM On状态由包括NM Bus Sleep和NM Awake两个状态,NM Awake又包括NM Normal、NM LimpHome和NMWaitBusSleep三个子状态。NM Awake是系统进入NM On之后的默认状态,而NM Normal又是进入NM Awake的默认状态。在间接网络管理中,只有当数据链路层出现重大错误时,节点才会进入NM LimpHome状态,这以状态的转换条件与直接网络管理不同。当故障排除后节点将重新进入NM Normal状态。NM WaitBusSleep是节点进入休眠状态之前的一个等待状态。当计时器WAIT_BUSSLEEP_TIME超时后,所有节点进入休眠状态。
在间接网络管理中,节点休眠不采用直接网络管理的协商机制,而采用主节点控制的管理方法。当从节点需要休眠时便主动向主节点发出休眠请求,主节点询问其他从节点,若有从节点不同意休眠,则网络维持在唤醒状态,所网络中节点都同意休眠,则主节点发送休眠命令,控制所有节点进入等待休眠状态,然后等待WaitBusSleep超时后,网络进入休眠状态。
注:W7208项目为每个消息都分配一个监测超时,如果超时没有收到相应节点的消息则在网络管理报文中将其标记为离线,然后定时广播出去。一旦主节点下发休眠命令或超过3秒没有接收到网络管理消息,则本节点开始进入休眠。