AutoSAR网络管理的目的其实就是为了降低汽车的功耗,当网络上没有信息交互时,网络将进入睡眠模式。AutoSAR的网络管理(Network)是通过网络管理报文(NM Message)实现的,主要分为三大模式:
网络管理部分由通信管理器(简称ComM),通用网络管理器接口(简称NmIf),总线相关的网络管理器(简称NM,包括CanNM,LinNM,FrNM),总线相关的状态管理器(简称SM,包括CanSM,LinSM,FrSM)四个模块构成。
ComM模块简化用户对通信栈的使用,包括对网络管理使用的简化,同时协调一个ECU上多个独立的软件对总线通信模型的分时复用。
通用网络管理接口模块是ComM和总线相关的网络管理模块(比如CAN网络管理和FlexRay网络管理)之间的适配层,这是它的基本功能。此外,NmIf还提供了一种相同ECU上多个互联网络之间的交互功能,这被称为NM协调功能,其中“交互”指的是让这些网络可以同步进入网络睡眠状态。
总线相关的网络管理模块是一个只适用于同一种总线上的硬件无关的协议,提供了一个通用网络管理接口层和对应总线接口模块之间的适配层。总线相关的网络管理模块对每一个网络都维护一个状态机以及两种请求(网络请求和网络释放)模式。这主要是为了协调网络在正常操作模式和总线睡眠模式之间的变换,也是它的核心功能。
总线相关的网络管理模块还提供了一些可选功能,如实现服务检查所有当前的节点,检查其他的节点是否已经准备睡眠等。
每个通信总线也有自己的和总线相关的状态管理器模块。这个模块实现了对应总线的控制流。总线相关的状态管理器模块主要负责维护两个状态机:
比如CAN总线的状态管理器CanSM,负责实现CAN网络控制流程的抽象。CanSM提供API以便ComM来请求CAN网络进行通信模式的切换。ComM请求切换网络模式的时候,会传递一个参数(用来标识是哪个网络)。对应网络收到这个请求之后,会执行对应的通信模式切换。在网络通信模式切换的过程中,会执行对应的CAN外设控制和PDU处理。
由于延迟等原因,网络的通信模式可能会和ComM请求的不一致。这就需要CanSM通过以下两种方式来提供接口向ComM反馈当前的通信模式:
网络管理的架构如图 2.1所示。最上层是通信管理器ComM模块,负责简化用户对网络管理和总线通信状态的控制等。网络管理部分使用通信服务栈来发送和接收维护网络激活态的网络管理帧。总线相关的状态管理器通过使用通信服务栈的服务来控制总线通信状态。网络管理的在ECU抽象层和微控制器抽象层直接使用通信服务栈的模块。
本小节以CanSM为例,阐述总线状态管理器中的网络模式管理机制。
CanSM管理的网络模式总线状态如表 2.1所示。
表2.1 CAN总线网络模式的所有状态
名字 | 描述 |
---|---|
CANSM UNINITED | 网络总线尚未被初始化 |
CAN NO COMMUNICATION | 总线NO通信模式,此状态总线不能进行通信 |
CANSM SILENT COMMUNICATION | 总线SILENT通信模式,此状态只能进行接收通信 |
CANSM FULL COMMUNICATION | 总线FULL通信模式,此状态既能接收又能发送 |
为了管理总线状态管理器中的网络模式,CanSM为每个CAN网络实现如图 2.2所示的网络模式状态机。
这样,网络模式状态机的核心状态转移如表 2.2所示,其中变迁编号使用图 2.2中的编号。
表2.2 网络模式状态机的核心合法状态转移
变迁编号 | 触发条件 | 转移动作编号 |
---|---|---|
3 | 网络初始化 | H 、J、A |
5 | ComM请求CAN总线进入FULL通信 | I、K、F、B、C、A |
8 | ComM请求CAN总线停止通信 | D、J、H、A |
9 | ComM请求CAN总线进入FULL通信 | F、C、A |
7 | ComM请求CAN总线进入SILENT通信模式 | E、G、A |
表 2.2使用的转移动作编号是表 2.3中的动作编号。
表2.3 CAN总线的网络模式状态机的动作表
动作编号 | 动作描述 |
---|---|
A | ComM的回调函数以通知ComM模式切换 |
B | 调用COM模块服务启动接收方向的PDU组 |
C | 调用COM模块服务启动发送方向的PDU组 |
D | 调用COM模块服务关闭接收方向的PDU组 |
E | 调用COM模块服务关闭发送方向的PDU组 |
F | 调用CAN总线接口层服务设置PDU为在线模式 |
G | 调用CAN总线接口层服务设置PDU模式为发送方向离线 |
H | 调用CAN总线接口层服务设置CAN收发器进入休眠模式 |
I | 调用CAN总线接口层服务设置CAN收发器进入正常模式 |
J | 调用CAN总线接口层服务设置CAN控制器进入睡眠模式 |
K | 调用CAN总线接口层服务设置CAN控制器进入启动模式 |
如果总线发生离线事故(简称Bus-Off),传统的做法是直接重启通信通道,效率较差。为了高效修复网络,总线状态管理器为被管理的总线实现一种总线离线恢复机制。本小节就以CAN总线为例,阐述总线离线恢复机制。
CanSM为每个CAN网络维护一个如图 2.3所示的总线离线恢复状态机。
图2.3 总线离线恢复状态机
总线离线恢复状态机的状态如表 2.4所示。
表2.4 Bus-off恢复状态机状态分类
名字 | 描述 |
---|---|
CANSM | BOR空闲状态 |
CANSM BOR CHECK INIT | BOR初始化状态 |
CAMSM BOR TXOFF L1 | BOR第一离线阶段 |
CAMSM BOR CHECK L1 | BOR第一离线阶段检查 |
CAMSM BOR TXOFF L2 | BOR第二离线阶段 |
CAMSM BOR CHECK L2 | BOR第二离线阶段检查 |
CAMSM BOR NO BUS OFF | BOR正常情况下的收敛状态(发送正常) |
每个总线离线恢复状态机有一个总线离线计数器。
这个计数器分为如下三个阶段:
每个Bus-off恢复状态机有一个bus-off-timer,即总线离线计时器。这个计数器分为如下三个值比较:
AUTOSAR CAN NM基于分布式直接网络管理策略。
在这种策略下,每个节点根据通信系统中发送或者接收到的NM消息来执行自给自足的网络活动。
AUTOSAR CAN NM对等算法基于周期性的NM消息。NM消息通过广播发送,所有网络中的所有节点都可以接收到。接收到NM消息表示发送这个NM消息的节点倾向保持网络工作模式(NETWORK MODE)。如果有节点准备好进入总线睡眠模式(BUS SLEEP MODE),它就停止发送NM消息,但是只要它还能够接收到从其他节点发来的NM消息,它就延迟到总线睡眠模式的变迁。最终,在一定的时限内,由于不再接收到NM消息,每个节点都启动到总线睡眠模式的变迁。
如果网络中的任何节点需要总线通信,它可以通过发送NM消息使网络从来总线睡眠模式中唤醒。AUTOSAR CAN NM的对等算法可以总结为如下两个点:
实现这种对等算法可以通过一个网络状态机来维护。这个状态机的特征如下:
NM消息的发送周期(即CANNM_MSG_CYCLE_TIME)由静态配置决定。一个网络内的所有节点的这个周期参数应该是相等的。如果没有任何优化,这肯定会给对应的总线增加不小的负载,即使使用发送周期偏移量(即CANNM_MSG_OFFSET_TIME)这个参数来避免数据的并发。
为了支持总线负载优化,我们考虑两个方面:
网络协调器负责同步地完成一个至少连接了两条总线的ECU的关闭操作。这些需要同步关闭的总线被称为协调总线,同步关闭算法则称为协调算法。
只要有一个节点需要保持协调总线使用状态,NM 协调器就需要保持协调网络处于使用状态。
检测总线上是否有其他节点未准备休眠的算法依赖于AUTOSAR NM算法的特性。节点间发送NM消息的最大时间间隔定义如下:第二个节点最晚应在第一个节点发送第二个NM消息之前发送NM消息。
如果NM协调器维持了总线的使用状态,有以下两种可能:
如果在所有协调总线上只有NM协调器在发送数据,且当它本身也不再需要总线的时候,NM协调器就会把所有协调总线推入休眠状态。NM协调器会发送一个所谓“最后一帧NM消息”,该消息会定时将所有总线同步推入休眠态。
如果NM协调器检测到以上的情况,以下条件都应被满足:
参考资料
【1】火龙果官网的文章
【2】知乎,yankai 大神的文章:基于AUTOSAR的网络管理精简介绍
【3】AutoSar之CAN网络管理
【4】 车载CAN总线网络管理协议浅析
【5】CSDN付费专栏AutoSAR系列讲解(实践篇)10.4-网络管理