【AUTOSAR网络管理】AUTOSAR网络管理状态机迁移详解

一、概述

AUTOSAR 就是AUTomotive Open System ARchitecture的(汽车开放系统架构)。

将汽车电子控制单元(ECU)的软件底层做了一个标准的封装。大家公用一套底层软件,只修改其中参数,就可以匹配不同硬件,只需要开发应用层即可。

什么是网络管理?

网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

网络请求(Network Request):当ECU 处于网络请求状态时,说明ECU有网络通讯的需求,会一直持续发送NM Frame,保持着唤醒。

网络释放(Network Rleased):当ECU 处于网络释放状态时,说明ECU没有网络通讯的需求,不再发送NM报文,只发送应用报文,等待所有节点释放网络后同时进入预睡眠状态。

本地唤醒又叫做主动唤醒,和硬线相关的唤醒方式一般称为本地唤醒源。如:KL15硬线,硬件传感器信号(如:脚踢门,后备箱打开)
主动唤醒节点的网络管理报文必须先于应用报文发送

远程唤醒又叫做被动唤醒,简单说就是和总线信号相关的唤醒方式。比如收到网络管理报文或者指定诊断报文,或者包含KL15信号的应用报文(有些节点没有KL15硬线,而是网关转发包含KL15信号的应用报文唤醒)
被动唤醒的节点,发送网络管理报文和应用报文的先后顺序无特别要求

二、 报文

在这里插入图片描述
Byte 0:
源节点标识符(Source Node Identifier)
NM PDU的byte 0 用于发送源节点标识符,每一个 ECU 都会被分配一个唯一的标识符,来告知接收节点该 NM PDU 是由哪个节点发送的
这里填的是ECU的地址,或者叫ECU的ID或者偏移地址;
此条报文的ID=一个基础值+Offset,例如一个主机厂规定NM Base Address为0x500,ECU的地址为2f,
那么这条网络管理报文的ID为0x52f。同理一个网络管理报文为0x505,Offset为5
byte1:
控制比特向量(Control Bit Vector)
NM PDU 的byte 1 被分配用于发送控制比特向量,该字节中传递着当前节点的网络状态
bit 0 :重复消息请求状态,0:不请求重复消息状态,1:请求重复消息状态
该比特位不被使用,设置为’0’。
bit 3 :网络管理统筹睡眠标志; 0:主统筹节点不要求开始同步关闭 1:主统筹节点要求开始同步关闭 ;该比特位不被使用,设置为’0
bit 4 :激活唤醒标志;0:节点不唤醒网络(被动唤醒) ,1:节点唤醒网络(主动唤醒)
bit 6 :部分网络标志;0:网络管理报文不包含部分网络管理请求信息, 1:网络管理报文包含部分网络管理请求信息;该比特位不被使用,设置为’0
其他bit位暂时预留
在这里插入图片描述

三、报文发送与接收状态

在这里插入图片描述
*代表,允许缓冲区的报文发送

AppFrame 包括:诊断报文、标定报文、应用报文、测试报文等。这里的测试报文是一种预留报文,主要用于开发阶段,携带一些目标信息,便于Bug问题排查。

四、时间参数

在这里插入图片描述
在这里插入图片描述

五、 NM状态机

Nm状态机包含三大三小,以下做详细介绍
在这里插入图片描述

5.1 Bus_Sleep Mode(BSM)

睡眠模式就是ECU启动时的起始状态或者ECU睡眠的最终状态。
当没有唤醒请求时,ECU的Controller应当切换至Sleep模式下,电流消耗降至最低水平。
节点上电或复位后应默认进入睡眠模式。
在睡眠模式下,NM报文只收不发,APP报文不收不发
出现特定唤醒源,可以被唤醒。

注:当Transiver支持并使能了特定帧唤醒时,该ECU只会接受特定的NM报文才会正常唤醒,否则就会一直处于休眠状态。 如果Transiver不支持特定帧唤醒,那么网络的任意报文都可以唤醒该ECU,如果唤醒条件不满足,又会走休眠流程继续休眠,就在唤醒和睡眠中交替,这种方式是不支持特定帧唤醒的Transiver的典型特征。如果整车的NM都可以正常运作,那么就不会频繁出现唤醒和睡眠交替的方式,这种方式一般都是台架测试才会出现。

5.2 Network Mode(NM)

一旦进入Network Mode,计时器T_NM_Timeout就会启动,只要成功接收到来自总线上的NM报文或者成功发送至总线NM报文,都会将该计时器T_NM_Timeout重置
处于网络模式中的节点,网络通讯处于开启或工作模式(包含了开始工作和结束工作的准备阶段),网络模式又细分为以下三个阶段:
① Repeat Messaga State(RMS)
当节点从其他模式进入Network Mode时,默认进入RMS,该阶段是网络正式开始工作前的准备状态,用来等待网络中的所有相关节点进行网络准备,开启通信。该状态能够确保ECU的状态机从BSM或者PSM切换到Network Mode模式下能够及时被其他ECU节点发现.
当成功进入到RMS状态时,该节点就会重新发送NM报文并开启计时器T_REPEAT_MESSAGE。
在该状态下存在着两个子状态:
NM Immediate Transmit State
在该模式下,ECU的目的是快速唤醒整个网络,同时该节点将会以配置参数T_NM _ImmediateCycleTime的周期发送NM报文,而发送次数由N__ImmediateNM_TIME来决定,每一次成功发送,该参数就会减1,直至为0,退出该子状态;
Nm Normal Transmit State
在该模式下,ECU节点将会以正常报文周期T_NM_MessageCycle的方式来发送NM报文,最多发送PEAT_MESSAGE时长
②Normal Operation State(NOS)
该状态为节点通信正常工作状态,只要ECU节点自身存在网络通信的需要,那么ECU就会原一直工作在NOS的状态下。该状态下NM报文的发送周期为T_NM_MessageCycle的周期来发送报文,每次报文的成功发送或接收计时器NM_Timeout超时都会重置该计时器NM_Timeout;
在该状态下的NM报文以及应用报文都应该正常发送和接收。
③ Ready Sleep State(RSS)
节点工作完成后,由NOS状态完成后进入到RSS状态,准备进入睡眠状态,该阶段是用来等待网络中所有节点工作完成之后统一进入睡眠状态。在该模式下,ECU节点应当停止发送NM报文。每次成功接受到来自网络上的NM报文,计时器T_NM_TIMEROUT 就会重置,一旦T_NM_TIMEROUT 超时,那么就会离开该状态转而进入Prepare Bus-Sleep状态。

5.3 Prepare Bus_Sleep Mode(PBM)

节点从网络模式的准备睡眠进入预睡眠模式,该模式与RSS的作用类似,但它已经不再属于网络模式了,是正式进入睡眠阶段的更进一步的准备阶段。一旦进入该模式,计时器T_WAIT_BUS_SLEEP就会启动。在该模式下禁止网络管理报文的发送,允许接受NM报文。应用报文已经在buffer中的一般允许继续发送,但最终应该是silent bus,该ECU的Controller的状态应当处于operational mode。一旦T_WAIT_BUS_SLEEP超时,就会进入到Bus-Sleep阶段。

六、状态机迁移

6.1状态迁移图

在这里插入图片描述

6.2状态迁移解释

状态机流转总结:
​​​​​​​ECU最初处于Bus-Sleep Mode中,当它有了通信需求(比如接收其他ECU的NM报文,或者它的逻辑功能要求自己唤醒,比如车门控制器收到了遥控钥匙的信号),它就会进入Network Mode,RMS是Network Mode的入口状态,到达这个状态之后,ECU会启动一个Repeat Message Timer,在这个Timer定义的时间内,ECU会一直处于RMS。当这个timer结束后,如果有通信需求,ECU则进入NOS,如果没有通信需求,则进入RSS。NOS就是ECU正常运行的状态,此时它的应用报文和NM报文都会正常收发。当ECU没有通信需求,它会瞬间进入RSS,在RSS中,如果又出现了通信需求,ECU则瞬间再回复到NOS,如果在一个Timeout Timer中一直没有通信需求,ECU就进入PSM,在PSM状态中,也会启动一个Timeout Timer,如果在这段时间内有了通信需求,ECU又会立即回到RSM,如果过了这个timer还没有通信需求,则ECU会回到BSKM中。

6.2.1 节点1—初始化

节点上电后,经初始化函数CANNm_Init()默认进入总线睡眠状态,在总线睡眠状态下应停发所有应用报文和网络管理报文,但要可以接收网络管理报文,以使其他节点能够唤醒当前节点

6.2.2 节点2—BSM进入Network Mode

当节点收到了网络管理报文时,不是直接进入网络模式,而是上报应用层,应用层判断当前状态,允许的话会调用CanNm_PassiveStartup()函数,使节点进入网络模式。当节点自身想要进行网络通讯时,调用CanNm_NetworkRequest()使节点进入网络模式。前者是被动,后者是主动。后者发送的网络管理报文中CBV的Active Wakeup Bit位为1.

节点在网络模式中要一直发送应用报文。

节点进入网络模式后,默认进入重复报文阶段,启动定时器NM-Timeout,NM-Timeout用来记录网络管理报文是否超时,其超时时间为CanNmTimeoutTime,每收到或成功发送一帧网络管理报文,都应重启NM-Timeout。节点要开始周期发送网络管理报文。常规情况下,节点要先等待一个时间偏移量(CanNmMsgCycleOffset)后再发送第一帧网络管理报文,发送周期为CanNmMsgCycleTime,发送次数为CanNmRepeatMessageTime。

网络中所有节点的报文发送周期CanNmMsgCycleTime和CanNmTimeoutTime都是相同的,且CanNmTimeoutTime必须大于CanNmMsgCycleTime;所有节点的CanNmMsgCycleOffset都是不同的,以防止网络中所有节点同时发送网络管理报文造成网络拥塞。

6.2.2.1 BSM进入RMS

当ECU在Bus-Sleep阶段,存在本地唤醒请求时,ECU应当主动激活网络,并进入Immediate Transmit State阶段,同时将发送的NM报文中的Active Wake up bit置为1。
在该状态下,应当按照N_ImmediateNM_TIMES的次数发送报文周期为T_NM_ImmediateCycleTime的网络管理报文。
当N_ImmediateNM_TIMES 等于0之后,NM状态就会从Immediate Transmit State进入到Normal Transmit State。

当ECU处于Bus-Sleep阶段时,如果接收到有效的NM报文,则会进入到Normal Transmit State。当进入到该阶段后,在T_REPEAT_MESSAGE 超时前,ECU将按照T_NM_MessageCycle周期来传输报文,同时T_MESSAGE_TIMEOUT也会启动

6.2.3 节点3— RMS进入NOS(常规运行阶段)

当节点在重复报文阶段发送了CanNmRepeatMessageTime次网络管理报文后,需要退出重复报文阶段,退出时判断网络当前处于释放状态还是请求状态,如果处于请求状态,则进入常规运行阶段,如果处于释放状态,则进入准备睡眠阶段。
在常规运行阶段中,节点要周期发送网络管理报文,发送周期为CanNmMsgCycleTime。节点网络此时处于正常工作状态。
在常规运行阶段中,定时器NM-Timeout如果超时了要被重启。

6.2.4 节点4— NOS进入RMS

当节点处于常规运行阶段时,如果收到了Repeat Message Request置为1的网络管理报文,则会强制重新进入重复报文阶段。进入重复报文阶段后的逻辑同上。

6.2.5 节点5— NOS进入RSS(进入准备睡眠阶段)

当节点不再需要进行网络通讯时,应用层会调用**CanNm_NetworkRelease()**函数,释放网络,节点进入准备睡眠阶段,停发网络管理报文,但要保持应用报文的发送。

6.2.6 节点6— RSS进入NOS(重新返回常规运行阶段)

节点处于准备睡眠阶段时,存在本地唤醒,可以调用CanNm_NetworkRequest()函数使节点重新回到常规运行阶段。

6.2.7 节点7—RSS进入RMS(准备睡眠阶段返回重复报文阶段)

当节点处于准备睡眠阶段时,如果收到了Repeat Message Request置为1的网络管理报文,也会强制重新进入重复报文阶段。进入重复报文阶段后的逻辑同上。

6.2.8 节点8—RMS进入RSS(由重复报文阶段进入准备睡眠阶段)

如上文所述,当重复报文阶段退出时如果节点网络处于释放状态,则节点直接进入准备睡眠阶段。

6.2.9 节点9—RSS进入PSM( 进入预睡眠模式)

当节点在准备睡眠阶段NM-Timeout超时,即网络中所有节点都已进入准备睡眠阶段(或不处于网络模式),网络中没有网络管理报文,节点将会进入预睡眠模式,同时启动定时器Wait Bus-Sleep Timer,其超时时间为CanNmWaitBusSleepTime,所有节点的CanNmWaitBusSleepTime都应配置为相同的,以保证所有节点同时进入睡眠模式。

节点在预睡眠模式中同样不发送网络管理报文,同时还要停止应用报文的发送。

6.2.10 节点10\12—PSM进入NM( 由预睡眠模式进入网络模式)

应用层想要使用网络进行通讯,或收到了其他节点的网络管理报文,就会重新进入网络模式,也是默认进入重复报文阶段。

6.2.11 节点11— PSM进入BSM(进入睡眠模式)

当节点在预睡眠模式中定时器Wait Bus-Sleep Timer超时后,就会进入睡眠模式,睡眠模式中网络管理报文和应用报文同样都不发送,节点正式进入休眠状态,应尽可能地关闭功能,降低能量消耗。

七. 附加策略

(1)网络管理报文立即发送模式

我们前文说过,当节点进入重复报文阶段时,会重复发送几次网络管理报文。常规情况下,因为网络管理报文通常周期比较长,且第一帧报文还有偏移量,所以激活网络的实时性不是很好,标准中为解决这个问题制定了一个能够立即发送网络管理报文的策略。

当CanNmImmediateNmTransmissions > 0时,要启动网络管理报文立即发送模式,此时CanNmMsgCycleOffset不再起作用,节点尽可能快地发送第一帧网络管理报文,发送周期不再为CanNmMsgCycleTime,而是用更短的CanNmImmediateNmCycleTime,共发送CanNmImmediateNmTransmissions次,然后进入常规运行阶段,之后网络管理报文的发送周期恢复CanNmMsgCycleTime。

注意:网络管理报文立即发送模式只有当节点主动唤醒网络的时候才启用,被动唤醒时不启用。是当前节点用来快速唤醒网络中其它节点的一个策略。

(2)总线负载降低策略(Bus Load Reduction Mechanism)

由上文可知,当节点处于重复报文阶段和常规运行阶段的时候,都会周期性发送网络管理报文,这对总线负载是一种消耗,且网络中节点越多,总线负载占用越大。标准中制定了一种策略来降低总线负载。

通常情况下,在常规运行阶段,所有节点都要发送网络管理报文,节点中有一个定时器CanNm Message Cycle Timer,每发送一帧网络管理报文,该定时器就重新装载CanNmMsgCycleTime的值,即网络管理报文的发送周期为CanNmMsgCycleTime。但其实只要有一个节点在发送报文,网络中所有节点就都可以保持在网络模式,多发的网络管理报文是对总线负载的浪费。

总线负载降低策略具体为:

当配置参数与CanNmBusLoadReductionEnabled为有效,且节点处于常规运行阶段时,进入总线负载降低模式,此时:

节点如果接收到了一帧网络管理报文,则应将定时器CanNm Message Cycle Timer重置为CanNmMsgReducedTime,而不是CanNmMsgCycleTime,CanNmMsgReducedTime 参数是一个小于 CanNmMsgCycleTime 且大于CanNmMsgCycleTime的一半( ½ CanNmMsgCycleTime)的时间值,且每个节点的CanNmMsgReducedTime 值不同。

节点如果发送了一帧网络管理报文,则还是将定时器CanNm Message Cycle Timer重置为CanNmMsgCycleTime。

这种策略的结果是:网络中只有CanNmMsgReducedTime 值最小的两个节点交替发送网络管理报文。

我们假设节点A的CanNmMsgReducedTime 最小,B次之,在某一时刻,网络上所有节点都进入了总线负载降低模式,此时某个节点发送了一帧网络管理报文,之后该节点因为是发送节点,所以定时器CanNm Message Cycle Timer重置为CanNmMsgCycleTime ,其余节点是接收节点,CanNm Message Cycle Timer重置为各自的CanNmMsgReducedTime,节点A的CanNmMsgReducedTime值最小,所以一段时间后率先发了一条网络管理报文,之后将CanNm Message Cycle Timer重置为CanNmMsgCycleTime,其余节点CanNm Message Cycle Timer再次重置为各自的CanNmMsgReducedTime,此时网络中节点B变成了CanNm Message Cycle Timer值最小的节点,一段时间后会发出一条网络管理报文,这又会使得节点A的CanNm Message Cycle Timer值变成最小,所以实现了网络中CanNmMsgReducedTime 值最小的两个节点交替发送网络管理报文,其余节点不发送网络管理报文。

当最小的两个节点中某个节点进入准备睡眠阶段,不再发送网络管理报文了,那么CanNmMsgReducedTime 值略大的下一个节点会开始发送网络管理报文。

当网络中只有一个节点处于常规运行阶段时,网络管理报文的周期为CanNmMsgCycleTime。

(3)远程睡眠指示

当配置参数CanNmRemoteSleepIndEnabled为有效的时候,如果节点在CanNmRemoteSleepIndTime时间后仍没有收到其他节点发送的网络管理报文,说明其它节点都已经进入休眠或准备休眠,此时应调用Nm_RemoteSleepIndication()函数通知应用层网络中所有节点都进入了休眠。如果此时节点又收到了其他节点发送的网络管理报文,应该再调用Nm_RemoteSleepCancellation()函数通知应用层取消之前的指示。该策略称为远程睡眠指示。

七、控制器状态梳理

在这里插入图片描述

  • 26
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值