Autosar - 网络管理

时间:2024-03-18 10:40:30

1 网络管理组成部分

        网络管理部分由通信管理器(简称ComM),通用网络管理器接口(简称NmIf),总线相关的网络管理器(简称NM,包括CanNMLinNMFrNM),总线相关的状态管理器(简称SM,包括CanSMLinSMFrSM)四个模块构成。

1.1ComM 模块

        ComM模块简化用户对通信栈的使用,包括对网络管理使用的简化,同时协调一个ECU上多个独立的软件对总线通信模型的分时复用。可以通过ComM唤醒启动和保持物理信道唤醒;限制通信模式;协调通信请求;透明化软件组件和物理信道的关系;保持物理信道独立性;请求通信;支持不同的通信模式;询问当前的通信模式;获得通信模式变换的通知;支持多种物理通道类型;支持禁止唤醒物理通道;提供用户到通信通道的映射;询问当前请求的通信模式;提供被抑制的通信请求的计数器;对被抑制的通信请求的计数器清零;重设ComM模式限制;提供当前通信模式的计算。

1.2NmIf模块

        通用网络管理接口模块是ComM和总线相关的网络管理模块(比如CAN网络管理和FlexRay网络管理)之间的适配层,这是它的基本功能。此外,NmIf还提供了一种相同ECU上多个互联网络之间的交互功能,这被称为NM协调功能,其中交互指的是让这些网络可以同步进入网络睡眠状态。

1.3总线相关的网络管理模块(XXX NM)

        总线相关的网络管理模块是一个只适用于同一种总线上的硬件无关的协议,提供了一个通用网络管理接口层和对应总线接口模块之间的适配层。总线相关的网络管理模块对每一个网络都维护一个状态机以及两种请求(网络请求和网络释放)模式。这主要是为了协调网络在正常操作模式和总线睡眠模式之间的变换,也是它的核心功能。总线相关的网络管理模块还提供了一些可选功能,如实现服务检查所有当前的节点,检查其他的节点是否已经准备睡眠等。

1.4总线相关的状态管理器模块(XXX SM)

        每个通信总线也有自己的和总线相关的状态管理器模块。这个模块实现了对应总线的控制流。总线相关的状态管理器模块主要负责维护两个状态机:

        1) 网络通信模式状态机:负责维护网络通信模式;

        2) 总线离线恢复状态机:负责把总线从离线事件中恢复。

        比如CAN总线的状态管理器CanSM,负责实现CAN网络控制流程的抽象。CanSM提供API以便ComM来请求CAN网络进行通信模式的切换。ComM请求切换网络模式的时候,会传递一个参数(用来标识是哪个网络)。对应网络收到这个请求之后,会执行对应的通信模式切换。在网络通信模式切换的过程中,会执行对应的CAN外设控制和PDU处理。

        由于延迟等原因,网络的通信模式可能会和ComM请求的不一致。这就需要CanSM通过以下两种方式来提供接口向ComM反馈当前的通信模式:

        1) CanSM自己提供APIComM可以通过这个API调用来得到CAN网络当前的通信模式。

        2) CanSM使用ComM提供的回调函数来通知通信模式的改变。

2 网络管理关键技术

2.1网络管理架构设计

        网络管理的架构如图 2.1所示

        最上层是通信管理器ComM模块,负责简化用户对网络管理和总线通信状态的控制等

        网络管理部分使用通信服务栈来发送和接收维护网络**态的网络管理帧

        总线相关的状态管理器通过使用通信服务栈的服务来控制总线通信状态

        网络管理的在ECU抽象层和微控制器抽象层直接使用通信服务栈的模块。

Autosar - 网络管理

2.1 网络管理架构设计

2.2总线状态管理器网络模式管理机制

        本小节以CanSM为例,阐述总线状态管理器中的网络模式管理机制。

        CanSM管理的网络模式总线状态如表 2.1所示。

        表 2.1 CAN总线网络模式的所有状态

Autosar - 网络管理

        为了管理总线状态管理器中的网络模式,CanSM为每个CAN网络实现如图 2.2所示的网络模式状态机。

Autosar - 网络管理

        图 2.2 CanSM的网络模式状态机

        这样,网络模式状态机的核心状态转移如表 2.2所示,其中变迁编号使用图 2.2中的编号。

        表 2.2 网络模式状态机的核心合法状态转移

Autosar - 网络管理

        表 2.2使用的转移动作编号是表 2.3中的动作编号。

       

Autosar - 网络管理

2.3 CAN总线的网络模式状态机的动作表

 

 

2.3总线状态管理器总线离线恢复机制

        如果总线发生离线事故(简称Bus-Off),传统的做法是直接重启通信通道,效率较差。为了高效修复网络,总线状态管理器为被管理的总线实现一种总线离线恢复机制。本小节就以CAN总线为例,阐述总线离线恢复机制。

        CanSM为每个CAN网络维护一个如图 2.3所示的总线离线恢复状态机。

Autosar - 网络管理

2.3 总线离线恢复状态机

        总线离线恢复状态机的状态如表 2.4所示。

        表 2.4 Bus-off恢复状态机状态分类

Autosar - 网络管理

        每个总线离线恢复状态机有一个总线离线计数器。这个计数器分为如下三个阶段:

        1) 计数器位于区间[01):总线恢复状态无离线状态。

        2) 计数器位于区间[1, CanSMBorCounterL1ToL2):总线恢复状态机离线的第一阶段。其中CanSMBorCounterL1ToL2为预设的第一阶段阈值。

        3) 计数器位于区间[CanSMBorCounterL1ToL2, CanSMBorCounterL2ToErr):总线恢复状态机离线的第二阶段。其中CanSMBorCounterL1ToL2为预设的第一阶段阈值,CanSMBorCounterL2ToErr为预设的第一阶段阈值。

        每个Bus-off恢复状态机有一个bus-off-timer,即总线离线计时器。这个计数器分为如下三个值比较:

        1) CanSMBorTimeTxEnsured:无Bus-off时间的确保时间间隔,这个时间要足够大来确保新的PDU被发送出去。

        2) CanSMBorTimeL1Bus-off第一离线阶段时间间隔,这个间隔内的所有离线事件被当做同一个离线事件。

        3) CanSMBorTimeL2Bus-off第二离线阶段时间间隔,这个间隔内的所有离线事件被当做同一个离线事件。

2.4网络管理对等算法

        唤醒请求(Wake Up Request)

                唤醒请求可分为两种:

                        ● 主动唤醒请求:来自模块内部对网络的请求。主动唤醒节点的网络管理报文必须先于应用报文发送。

                        ● 被动唤醒请求:来自总线上其他模块对该模块的网络请求。被动唤醒的节点,发送网络管理报文和应用报文的先后顺序无特别要求。

        网络状态(Network States)

                节点的网络状态包括以下两种:

                        ● 网络请求:模块需要主动与总线上其他节点进行信息交换时,它必须通过发送网络管理报文来请求网络,并将其网络状态设置为“网络请求”;

                        ● 网络释放:模块不需要主动与总线上其他节点进行信息交换时,必须将其网络状态设置为“网络释放”;需要注意的是,在网络释放状态下模块仍可能因总线上的其他节点请求网络而与其进行信息交互。

        总线唤醒(Bus wake up)

        采用AUTOSAR CAN 网络管理方式的ECU必须选择符合 ISO 11898-5 标准的高速 CAN 收发器。若ECU处于低功耗模式,仅在总线上出现符合ISO 11898-5标准定义的唤醒序列,且该 ECU成功接收到该网段定义的唤醒报文时才能够被总线唤醒。这里这条唤醒报文必须是该网段中 ECU 的网络管理报文。

        理解上面几个概念后,我们可以看下AUTOSAR 网络管理模式(AUTOSAR Network Management Operational Modes)了,AUTOSAR网络管理(以下简称 CanNm)包含以下三种模式:

        睡眠模式(Bus-Sleep Mode),预睡眠模式(Prepare Bus-Sleep Mode),网络模式(Network Mode) ,三种模式的切换过程如图3。

Autosar - 网络管理

          网络管理状态切换图

睡眠模式

          当节点没有主动网络唤醒及被动唤醒请求时,ECU 通信控制器切换至睡眠模式,ECU功耗降低至适当水平。在睡眠模式下,节点的网络管理报文和应用报文禁止发送,并且不能对总线上的报文进行ACK应答。同时节点在该模式下,如果检测到有效的唤醒源,节点必须被唤醒。

预睡眠模式

           在预睡眠模式下,总线活动静止下来,最终达到总线上没有活动,ECU通信控制器状态处于工作模式。在该模式下,节点的网络管理报文和应用报文禁止发送,但应该对总线上的报文进行 ACK应答。节点的网络管理状态必须保持预睡眠模式一段时间,一旦超时,网络管理状态应该离开预睡眠模式,进入睡眠模式。

网络模式

           网络模式可分为三种内部状态:

重复报文状态 (Repeat Message State)
常规操作状态 (Normal Operation State)
准备睡眠状态(Ready Sleep State)

重复报文状态

        重复报文状态包含两个子状态:

                网络管理报文快速发送状态

                网络管理报文正常发送状态

NM PDU 快速发送状态

节点在进入NM PDU快速发送状态时,必须开启或重置NM-Timeout Timer,为了快速唤醒网络,必须以快速周期发送网络管理报文,同时不得发送正常周期网络管理报文;所有的应用报文必须在第一帧快速NM PDU报文发送开始后延迟一定时间才能发送。在NM PDU快速发送状态下,节点一旦接收或发送一条网络管理报文,或者NM-Timeout Timer超时,NM-Timeout Timer会立即重置。

NM PDU 正常发送状态

进入NM PDU 正常发送状态后,节点必须以正常周期发送网络管理报文。若节点因被动唤醒请求进入NM PDU正常发送状态,必须开启NM-Timeout Timer,同时所有的应用报文必须从节点检测到唤醒请求后延迟Tx_Enable_Time 才能发送。在NM PDU正常发送状态下,节点一旦接收或发送一条网络管理报文,或者 NM Timeout Timer超时,NM Timeout Timer会立即重置。

节点的网络管理状态保持重复报文状态一段时间(这段时间一般可以配置),一旦超时,网络管理状态会离开重复报文状态。在该状态下,节点的网络管理报文和应用报文能够正常发送。

常规操作状态

当节点处于网络模式因主动网络请求需要与网络上其他节点继续进行通信时,必须保持在常规操作状态。在常规操作状态下,节点一旦接收或发送一条网络管理报文,或者NM-Timeout Timer超时,NM-Timeout Timer应该立即重置。在该状态下,节点的网络管理报文和应用报文必须正常发送。

准备睡眠状态

节点进入准备睡眠状态后,必须停止发送网络管理报文,所有的应用报文在NM Timeout Timer超时后必须停止发送。在准备睡眠状态下,节点一旦接收到一条网络管理报文,NM Timeout Timer会立刻重置。NM Timeout Timer超时,节点的网络管理状态应该进入预睡眠模式。

网络管理报文(NM PDU)

网络管理报文格式(NM PDU structure)

AUTOSAR CAN 网络管理报文的数据场格式如下表所示:

Autosar - 网络管理

源节点标识符(Source Node Identifier)

NM PDU的字节 0 用于发送源节点标识符,每一个 ECU 都会被分配一个唯一的标识符,来告知接收节点该 NM PDU 是由哪个节点发送的。

控制比特向量(Control Bit Vector)

NM PDU 的字节 1 被分配用于发送控制比特向量。其中:

bit 0 :重复报文状态请求位;

bit 3 :网络管理睡眠协调位;

bit 4 :**唤醒位;

bit 6 :部分网络信息位;

其他bit位暂时预留。

Autosar - 网络管理

用户数据域(User Data)

网络管理报文的字节 2 到字节 7 用于发送用户自定义的数据信息,这些字节目前各项目为扩展预留,都被填充为‘0x00’。

网络管理状态切换(Network Management State Transition)

 

        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对应于总线睡眠模式。

Autosar - 网络管理

        图 2.4 CanNM状态机

2.5总线负载优化机制

        NM消息的发送周期(即CANNM_MSG_CYCLE_TIME)由静态配置决定。一个网络内的所有节点的这个周期参数应该是相等的。如果没有任何优化,这肯定会给对应的总线增加不小的负载,即使使用发送周期偏移量(即CANNM_MSG_OFFSET_TIME)这个参数来避免数据的并发。

        为了支持总线负载优化,我们考虑两个方面:

        1) 成功接收到NM消息后,设置发送周期时间为CANNM_MSG_REDUCED_TIME(这个值是节点相关的,并且比CANNM_MSG_CYCLE_TIME1/2要大,但是比CANNM_MSG_CYCLE_TIME要小)。

        2) 如果成功发送出NM消息,则设置发送周期时间为CANNM_MSG_CYCLE_TIME

        这样保证CANNM_MSG_REDUCED_TIME值最小的两个节点在交替发送NM消息。

        这个算法保证在一个CANNM_MSG_CYCLE_TIME内最多会有2NM消息被发送出去。

        总线负载优化功能在进入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中合适的函数以请求网络。