ComM(通信管理)和CanNm(network)
1 网络管理组成部分
网络管理部分由通信管理器(简称ComM),通用网络管理器接口(简称NmIf),总线相关的网络管理器(简称NM,包括CanNM,LinNM,FrNM),总线相关的状态管理器(简称SM,包括CanSM,LinSM,FrSM)四个模块构成。
1.1ComM 模块
ComM模块简化用户对通信栈的使用,包括对网络管理使用的简化,同时协调一个ECU上多个独立的软件对总线通信模型的分时复用。可以通过ComM唤醒启动和保持物理信道唤醒;限制通信模式;协调通信请求;透明化软件组件和物理信道的关系;保持物理信道独立性;请求通信;支持不同的通信模式;询问当前的通信模式;获得通信模式变换的通知;支持多种物理通道类型;支持禁止唤醒物理通道;提供用户到通信通道的映射;询问当前请求的通信模式;提供被抑制的通信请求的计数器;对被抑制的通信请求的计数器清零;重设ComM模式限制;提供当前通信模式的计算。
1.2NmIf模块
通用网络管理接口模块是ComM和总线相关的网络管理模块(比如CAN网络管理和FlexRay网络管理)之间的适配层,这是它的基本功能。此外,NmIf还提供了一种相同ECU上多个互联网络之间的交互功能,这被称为NM协调功能,其中“交互”指的是让这些网络可以同步进入网络睡眠状态。
1.3总线相关的网络管理模块
总线相关的网络管理模块是一个只适用于同一种总线上的硬件无关的协议,提供了一个通用网络管理接口层和对应总线接口模块之间的适配层。总线相关的网络管理模块对每一个网络都维护一个状态机以及两种请求(网络请求和网络释放)模式。这主要是为了协调网络在正常操作模式和总线睡眠模式之间的变换,也是它的核心功能。
总线相关的网络管理模块还提供了一些可选功能,如实现服务检查所有当前的节点,检查其他的节点是否已经准备睡眠等。
1.4总线相关的状态管理器模块
每个通信总线也有自己的和总线相关的状态管理器模块。这个模块实现了对应总线的控制流。总线相关的状态管理器模块主要负责维护两个状态机:
1) 网络通信模式状态机:负责维护网络通信模式;
2) 总线离线恢复状态机:负责把总线从离线事件中恢复。
比如CAN总线的状态管理器CanSM,负责实现CAN网络控制流程的抽象。CanSM提供API以便ComM来请求CAN网络进行通信模式的切换。ComM请求切换网络模式的时候,会传递一个参数(用来标识是哪个网络)。对应网络收到这个请求之后,会执行对应的通信模式切换。在网络通信模式切换的过程中,会执行对应的CAN外设控制和PDU处理。
由于延迟等原因,网络的通信模式可能会和ComM请求的不一致。这就需要CanSM通过以下两种方式来提供接口向ComM反馈当前的通信模式:
1) CanSM自己提供API,ComM可以通过这个API调用来得到CAN网络当前的通信模式。
2) CanSM使用ComM提供的回调函数来通知通信模式的改变。
2 网络管理关键技术
2.1网络管理架构设计
网络管理的架构如图 2.1所示。最上层是通信管理器ComM模块,负责简化用户对网络管理和总线通信状态的控制等。网络管理部分使用通信服务栈来发送和接收维护网络激活态的网络管理帧。总线相关的状态管理器通过使用通信服务栈的服务来控制总线通信状态。网络管理的在ECU抽象层和微控制器抽象层直接使用通信服务栈的模块。
图 2.1 网络管理架构设计
2.2总线状态管理器网络模式管理机制
本小节以CanSM为例,阐述总线状态管理器中的网络模式管理机制。
CanSM管理的网络模式总线状态如表 2.1所示。
表 2.1 CAN总线网络模式的所有状态
名字
|
描述
|
CANSM UNINITED
|
网络总线尚未被初始化
|
CANSM NO COMMUNICATION
|
总线NO通信模式,此状态总线不能进行通信
|
CANSM SILENT COMMUNICATION
|
总线SILENT通信模式,此状态只能进行接收通信
|
CANSM FULL COMMUNICATION
|
总线FULL通信模式,此状态既能接收又能发送
|
为了管理总线状态管理器中的网络模式,CanSM为每个CAN网络实现如图 2.2所示的网络模式状态机。
图 2.2 CanSM的网络模式状态机
这样,网络模式状态机的核心状态转移如表 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控制器进入启动模式。
|
2.3总线状态管理器总线离线恢复机制
如果总线发生离线事故(简称Bus-Off),传统的做法是直接重启通信通道,效率较差。为了高效修复网络,总线状态管理器为被管理的总线实现一种总线离线恢复机制。本小节就以CAN总线为例,阐述总线离线恢复机制。
CanSM为每个CAN网络维护一个如图 2.3所示的总线离线恢复状态机。
图 2.3 总线离线恢复状态机
总线离线恢复状态机的状态如表 2.4所示。
表 2.4 Bus-off恢复状态机状态分类
名字
|
描述
|
CANSM BOR IDLE
|
BOR空闲状态
|
CANSM BOR CHECK INIT
|
BOR初始化状态
|
CANSM BOR TXOFF L1
|
BOR第一离线阶段
|
CANSM BOR CHECK L1
|
BOR第一离线阶段检查
|
CANSM BOR TXOFF L2
|
BOR第二离线阶段
|
CANSM BOR CHECK L2
|
BOR第二离线阶段检查
|
CANSM BOR NO BUS OFF
|
BOR正常情况下的收敛状态(发送正常)
|
每个总线离线恢复状态机有一个总线离线计数器。这个计数器分为如下三个阶段:
1) 计数器位于区间[0,1):总线恢复状态无离线状态。
2) 计数器位于区间[1, CanSMBorCounterL1ToL2):总线恢复状态机离线的第一阶段。其中CanSMBorCounterL1ToL2为预设的第一阶段阈值。
3) 计数器位于区间[CanSMBorCounterL1ToL2, CanSMBorCounterL2ToErr):总线恢复状态机离线的第二阶段。其中CanSMBorCounterL1ToL2为预设的第一阶段阈值,CanSMBorCounterL2ToErr为预设的第一阶段阈值。
每个Bus-off恢复状态机有一个bus-off-timer,即总线离线计时器。这个计数器分为如下三个值比较:
1) CanSMBorTimeTxEnsured:无Bus-off时间的确保时间间隔,这个时间要足够大来确保新的PDU被发送出去。
2) CanSMBorTimeL1:Bus-off第一离线阶段时间间隔,这个间隔内的所有离线事件被当做同一个离线事件。
3) CanSMBorTimeL2:Bus-off第二离线阶段时间间隔,这个间隔内的所有离线事件被当做同一个离线事件。
2.4网络管理对等算法
AUTOSAR CAN NM基于分布式直接网络管理策略。在这种策略下,每个节点根据通信系统中发送或者接收到的NM消息来执行自给自足的网络活动。
AUTOSAR CAN NM对等算法基于周期性的NM消息。NM消息通过广播发送,所有网络中的所有节点都可以接收到。接收到NM消息表示发送这个NM消息的节点倾向保持网络工作模式(NETWORK MODE)。如果有节点准备好进入总线睡眠模式 (BUS SLEEP MODE),它就停止发送NM消息,但是只要它还能够接收到从其他节点发来的NM消息,它就延迟到总线睡眠模式的变迁。最终,在一定的时限内,由于不再接收到NM消息,每个节点都启动到总线睡眠模式的变迁。
如果网络中的任何节点需要总线通信,它可以通过发送NM消息使网络从来总线睡眠模式中唤醒。
AUTOSAR CAN NM的对等算法可以总结为如下两个点:
1) 每个网络节点如果想保持总线通信,就会一直发送周期性的NM消息;如果它不再需要保持总线通信,它就不再发送NM消息。
2) 如果总线通信已经被释放,并且在配置的一段时间内没有发送或者接收到NM消息,则执行到Bus-Sleep模式的转移。
实现这种对等算法可以通过一个网络状态机来维护。这个状态机的特征如下:
1) AUTOSAR CAN NM状态机应包含从一个网络节点的角度来看的状态,变迁和触发条件。
2) AUTOSAR CAN NM状态机的变迁应通过NmIf层的函数调用或者自身的定时器的到期来触发。
图 2.4演示了这种可以实现CanNm需要的对等算法的状态机,其中NETWORK MODE对应于正常的网络状态,包括三个READY SLEEP(此状态表示准备离开网络态)、NORMAL OPERAION(正常工作态)、REPEAT MESSAGE(周期发送消息态)子状态;PREPARE BUS SLEEP MODE对应于准备进入睡眠模式;BUS SLEEP MODE对应于总线睡眠模式。
图 2.4 CanNM状态机
2.5总线负载优化机制
NM消息的发送周期(即CANNM_MSG_CYCLE_TIME)由静态配置决定。一个网络内的所有节点的这个周期参数应该是相等的。如果没有任何优化,这肯定会给对应的总线增加不小的负载,即使使用发送周期偏移量(即CANNM_MSG_OFFSET_TIME)这个参数来避免数据的并发。
为了支持总线负载优化,我们考虑两个方面:
1) 成功接收到NM消息后,设置发送周期时间为CANNM_MSG_REDUCED_TIME(这个值是节点相关的,并且比CANNM_MSG_CYCLE_TIME的1/2要大,但是比CANNM_MSG_CYCLE_TIME要小)。
2) 如果成功发送出NM消息,则设置发送周期时间为CANNM_MSG_CYCLE_TIME。
这样保证CANNM_MSG_REDUCED_TIME值最小的两个节点在交替发送NM消息。
这个算法保证在一个CANNM_MSG_CYCLE_TIME内最多会有2个NM消息被发送出去。
总线负载优化功能在进入Normal Operation State时开启,退出Normal Operation State时关闭。
2.6网络管理协调机制
网络协调器负责同步地完成一个至少连接了两条总线的ECU的关闭操作。这些需要同步关闭的总线被称为协调总线,同步关闭算法则称为协调算法。
只要有一个节点需要保持协调总线使用状态,NM 协调器就需要保持协调网络处于使用状态。
检测总线上是否有其他节点未准备休眠的算法依赖于AUTOSAR NM算法的特性。节点间发送NM消息的最大时间间隔定义如下:第二个节点最晚应在第一个节点发送第二个NM消息之前发送NM消息。
如果NM协调器维持了总线的使用状态,有以下两种可能:
1) 该总线上至少还有一个节点保持活跃状态。因为根据算法,NM 协调器的NM消息之间可以有某些节点发送消息。
2) 没有其他节点需要使用总线。因为根据算法,NM 协调器会是唯一需要在总线上发送NM消息的节点。
为检测后一种情况,算法使用了远程睡眠通知机制。
对于AUTOSAR CAN NM,如果在Normal Operation状态在一段配置的时间内都没有收到需要维持总线使用状态的NM消息,NM则会认为其他所有节点都已准备休眠。
如果在所有协调总线上只有NM协调器在发送数据,且当它本身也不再需要总线的时候,NM协调器就会把所有协调总线推入休眠状态。NM协调器会发送一个所谓“最后一帧NM消息”,该消息会定时将所有总线同步推入休眠态。
如果NM协调器检测到以上的情况,以下条件都应被满足:
1) 在所有运行的有AUTOSAR NM管理的协调总线上,除了NM 协调器发出的NM 消息没有其他NM 消息。
2) 在所有运行的有OSEK NM管理的协调总线上,所有节点上正在发送的只有准备休眠的消息。
3) NM 协调器准备休眠。
4) NM 协调器应当在所有协调总线上请求NM消息传输以保证同步关闭。
如果NmIf已经后开始关闭协调总线,且有协调总线未指示进入总线睡眠状态,且至少有一条协调总线的网络管理器重启,那么NM Interface就会调用回调函数ComM_Nm_RestartIndication或调用OSEK NM中合适的函数以请求网络。
--------------------- 本文来自 18155350390 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weixin_37584762/article/details/79883235?utm_source=copy
赞 (0)