本篇文章主要介绍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
版权声明:本文为博主原创文章,转载请附上博文链接!

关于Autosar中的NM模块的理解的更多相关文章

  1. 说说对 Node 中的 fs 模块的理解? 有哪些常用方法?

    一.是什么 fs(file system),该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装 可以说,所有与文件的操作都是通过fs核心模块实现 导入模块如下: const fs  ...

  2. TypeScript 中命名空间与模块的理解?区别?

    一.模块 TypeScript 与ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者expo ...

  3. SoC中的IP模块学习

    SoC中的IP模块学习 理解IP Spec-->register定义,理解原理+架构框图 查看testcase+model(看已有的测试例程),分析操作/使用模块的流程,寄存器的配置方法 运行仿 ...

  4. 深入理解python中的select模块

    简介 Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kque ...

  5. 关于requirejs中的define的原理理解

    我们已经了解到模块模式是为单例创建私有变量和特权方法的. 一个最基本的例子: var foo=(function(){ var something='cool', var another=[1,2,3 ...

  6. 蓝牙协议 基于TI cc2540 模块的理解(转)

    源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20. ...

  7. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  8. python 导入模块 import 理解

    --python 导入模块 import 理解 -----------------------------------2014/03/18 python 导入一个模块的过程要求有一个叫做“路径搜索”的 ...

  9. 转 node.js里面的http模块深入理解

    问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...

随机推荐

  1. PyCharm3.0默认快捷键

    PyCharm3.0默认快捷键(翻译的) 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + S ...

  2. IdentityServer4【QuickStart】之设置和概述

    设置和概述 有两个基本的方式来开启一个新的IdentityServer项目: 从头开始 从asp.net Identity模板开始 如果你从头开始,我们提供了一些基于内存中构建的存储,所以你不必一开始 ...

  3. JavaScript中的函数和C#中的匿名函数(委托、lambda表达式)

    在js中function是一个一个引用类型,所以可以出现这样的代码: 'use strict'; var compare=function(value1, value2) { if (value1&l ...

  4. flex实现三栏等分布局

    前言 在实际开发中,我们经常会想要实现的一种布局方式就是三栏等分布局,那么我们如何来解决这个问题呢? 解决 方法一:flex 外层容器也就是ul设置display:flex,对项目也就是li设置fle ...

  5. vue.js 添加 fastclick的支持

    fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...

  6. python之路--JavaScript

    一. JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,希望这门语言能成为国际化标准,于是决定将Jav ...

  7. ADO.NET工具类(二)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. jsp页面给字体加颜色

    jsp页面给字体加颜色<span style="color:red">要加颜色的部分</span>

  9. Civil 3D 二次开发 新建CLR项目出现错误C2143

    新建CLR项目出现错误C2143 按照Objectarx Training创建.net混合项目,编译时出现一下错误: 原因不明: 解决方法: 在Stdafx.h文件中添加: #define WIN32 ...

  10. LitJson的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...