本篇文章主要介绍AutoSar中关于NM模块的理解。
阅读本篇文章希望达到的目的:
1. NM(网络管理)是用来做什么的;
2. AutoSar中网络管理的原理;
3.项目实例介绍
1. NM(网络管理)是用来做什么的;
大家知道,不管是传统的燃油车还是新能源车,车上都有各种各样的ECU,而所有这些ECU都是需要用电的,而车上的供电单元一般是蓄电池,因此蓄电池的电量是有限的,对于新能源车来说太耗电无疑会给电池的续航里程带来巨大影响,因此为了尽可能的省电,所以就提出了网络管理,也就是说网络管理一个最重要的作用就是为了省电。
那么网络管理是如何来实现省电的呢?我们知道车上的所有ECU之间会通过CAN通信、Flexray或以太网等进行相互通信连接在一起,那么网络管理就是通过在各个ECU的网络上,发送一些命令制定一套规则,来实现各个ECU的协同睡眠和唤醒。
什么是ECU的睡眠和唤醒?为了支持睡眠和唤醒,ECU的芯片必须支持低功耗模式和正常工作模式的切换。低功耗模式(ECU睡眠)指一个ECU断电或者处于极少数的外围器件工作的模式;唤醒指的是ECU处于全工作模式。
举个例子来说,也许你看过特斯拉的车门,它的门把手是和门平齐的,只有你带着车钥匙靠近时,它的门把手才会张开,其实这就是在唤醒了车门控制器,也就是说你把车停在那里时,实际上车门控制器是在睡眠状态,耗电量极地,而你带着车钥匙靠近了,表示你要用车了,他就会通过无线感应模块来唤醒车门,这样你就可以正常打开车门了,这个时候车门控制器ECU就处于唤醒状态。
总结下:其实网络管理就是用来节约能源,有效的实现车上的ECU的协同睡眠和唤醒。
2. AutoSar中网络管理的原理;
以下,我会以用的比较多的CAN网络管理为例来进行说明,我会主要围绕其中最重要的一个状态机来进行介绍。
首先我们讲一讲,为了实现网络管理,我们要考虑些什么因素,也就是有哪些需求。
网络管理最终要实现的是车上的ECU能够协同睡眠以及唤醒,也就是说网络管理最重要的一点是要保证车上的ECU能够协同唤醒和休眠。那么假如车上的ECU都处于睡眠模式,网络上都没有报文,你咋实现唤醒呢,其实,一般不会让所有的ECU都处于睡眠模式,这个时候可能会有极少的ECU处于工作状态,比如车上的BCM。也就是说有一些ECU是通过KL15直接唤醒的,而有些是通过CAN报文唤醒。当然或许后面会升级到更加节能的模块,可以不需要钥匙信号,这些模块在睡眠状态时,耗能非常少,因此可以一直处于可唤醒状态。
为了满足这种协同唤醒和睡眠,我们下面来看看Autosar中的NM是如何实现协同的。
如图所示,状态机中有三个主状态,分别是BusSleep、PreSleep、Network三个状态;其中Network状态又分为三个子状态,分别是RepeatMsg、NormalOperate、ReadSleep。下面我来讲一下每个状态它的作用。
BusSpleep状态:这个状态就是我们所说的休眠状态,这个状态下是不发送网络管理报文也不收发应用报文,一般该状态时一个低功耗的状态,也就是我们上文提到的协同睡眠状态。当然我们上电初始化时,也会默认进入该状态。
PreSleep状态:这个状态是进入休眠状态的前一准备状态,这个状态一般不发送网络管理报文帧了,也不发送应用报文了,只是等待其他ECU一起睡眠,为啥要这个状态呢,其实就是实现‘’协同‘’两个字,也就是让等一段时间让车上所有ECU实现一起睡眠,其实这个一起睡眠还是比较重要的,比如车上某个ECU的工作与其他ECU的工作是关联的,比如VCU(整车控制器)和INV(电机控制器),有可能VCU不发报文了,会导致INV报故障,因此这种情况是要避免的。
Network状态:这个状态是允许ECU进行正常通信的,一般这个状态下即可以收发网络管理报文帧也可以收发应用报文(包括诊断报文),意思就是唤醒状态。接下来我来解释一下这个状态下里面的三个子状态的含义:
Repeat meassage:表示重复发网络管理报文的状态。首先说说这个状态下会发生什么事,一般我们进入网络(Network)状态时,首先会进入这个状态,这个状态下会快速的发送一些网络管理报文帧出来,为啥要快速发送一些网络管理报文呢?其实就是想尽快的告诉车上的其他ECU,我上线了!我要正常通信了,大家请注意啊,大家也和我一块进行整车通信啊。就是以上这个意思。
Normal Operation:在进入RepeatMsg一段一时间后,如果需要通信,就会跳到正常工作状态,正常工作状态会按照正常的周期发送网络管理报文,以及所有应用报文正常进行通信,可以说这个状态就是真正的唤醒状态。
ReadySleep:如果唤醒后,需要休眠,那么我们可能需要做一些准备工作才能允许我们的ECU进入休眠,比如这个时候有一些数据要存储、比如电机控制器检测到电机还没停下来等等情况,因此这个状态就是用来做一些休眠前的准备工作,我们可以看到,任何从唤醒到休眠的过程,都需要经过这个状态,也就是说睡眠前有些准备工作是必须要完成的。那么这个状态下,其实还是能够进行通信的,只有进入PreSleep状态,才会把相应的应用报文收发关闭,以及发送NM报文关闭。还有一点要声明的是,一般网络管理报文帧的接收不会关闭。
其实,网络管理中,各个状态的切换条件是比较重要的,有兴趣的可以看着图进行钻研一下。
3.项目实例简要介绍
以下我大概谈一下,我做的国内还算比较规范的网络管理的项目。
客户的需求是一个标准的AutoSar架构的网络管理。
在休眠状态,我们的ECU只有CAN收发器处于工作状态,也就是说能检测NM报文,当然这个是通过芯片来实现的。
我们的ECU连接上了KL15信号,那么我们的ECU支持KL15唤醒以及NM报文唤醒,也就是有效唤醒源是这两种。
下面我以NM报文唤醒为例,大概说一下唤醒的过程。
在睡眠状态,车上网络状态是没有报文的,一旦车上BCM检测到要使用网络时,就是第一时间发出网络管理报文出来,这个时候我们的ECU也会收到该网络管理报文,因此会唤醒我们的ECU,首先我们的ECU的收发器收到NM报文后,告诉芯片要唤醒了,这个时候就会给控制器供电,然后程序就会初始化,进入BusSleep状态,接着会进入RepeatMsg模式,这个时候会迅速发出第一帧NM报文,会快速发出5帧NM报文(如周期10ms),让其他节点知道我们的ECU醒来了,然后会切换到正常周期的NM报文,如50ms,当然这个时候,系统也在初始化,应用报文也会到一定周期能够正常收发。处于RepeatMsg状态一定时间后,会切换到NormalOpr模式,这个时候就会正常通信了。这个模式下NM报文是以一定周期发送的如500ms,告诉所有节点我在正常通信。其实NM报文里面是有一些信息的,比如唤醒原因,用户数据等等,这些都可以去定义。
下面讲一下NM休眠的过程:
处于NormalOpr状态下,如果ECU不需要网络了,比如KL15断开,ECU这个时候就会选择释放网络,释放网络就是从Normal状态切换到ReadySleep状态,这个时候会进行一些故障存储、下电前的装备工作,完成后,等待一定时间就会进入到PreSleep状态,这个状态将会把应用报文和TX网络管理报文也关闭,等待一定时间就会进入BusSleep状态,进入BusSleep后,会让控制器进入休眠。
NM网络管理,虽然状态机比较简单,但是其中最大的难题在于具体实施过程中一些细节的把握,同时在理解客户的需求上,需要下大力气去钻研,因为这个东西涉及到整个车上网络的一个协作。
我大概讲以上这些内容,希望路过的你不虚此行,当然有兴趣的也可以发我邮箱进行交流 1370334525@qq.com
---------------------
作者:AgingMoon
来源:CSDN
原文:https://blog.csdn.net/AgingMoon/article/details/77826995
版权声明:本文为博主原创文章,转载请附上博文链接!