关于Autosar中的NM模块的理解

关于Autosar中的NM模块的理解

 

本篇文章主要介绍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网络管理为例来进行说明,我会主要围绕其中最重要的一个状态机来进行介绍。

首先我们讲一讲,为了实现网络管理,我们要考虑些什么因素,也就是有

Autosar网络管理NM)是汽车电子系统中一项重要的技术,在汽车的通信和控制方面发挥着关键作用。 AUTOSAR COM是AUTOSAR标准的一部分,它从OSEK COM标准发展而来,为汽车控制单元应用软件提供了统一的通信环境,定义了公共的软件通信接口和行为,增强了应用软件模块的可移植性,还提供了标准化访问汽车通讯系统和ECU通讯的方式,提出了不同速率总线网络间的数据交换方法 [^1]。 Autosar的CanNM定义了一些网络管理状态,反映CAN总线上网络节点的运行情况。如CAN_NM_BUS_SLEEP状态表示CAN总线处于休眠状态,节点间通信暂停以节省能量,此时不能发送NM Msg,但可接收NM Msg,而App Msg(包括诊断报文、标定报文、应用报文、测试报文等)既不能发送也不能接收。当系统需要唤醒时,会从休眠状态切换到活动状态 [^2]。 在AutoSAR NM网络管理中,存在NM PDU快速发送状态。此状态下需要开启NM - Timeout Timer,该计时器使网络管理报文在一段时间内快速周期性发送,期间不能发送正常周期网络管理报文和应用报文,所有应用报文需在第一帧快速NM PDU报文发送开始延迟一段时间后才能发送。当节点接受或发送一条网络管理报文,或者计时器超时,计时器会立即重置,其作用可理解为提醒各ECU进入预工作状态 [^3]。 ### 代码示例 以下是一个简单的伪代码示例,用于说明NM - Timeout Timer的基本逻辑: ```python # 初始化NM - Timeout Timer nm_timeout_timer = 0 # 初始化计时器状态 timer_running = False def start_nm_timeout_timer(): global nm_timeout_timer, timer_running nm_timeout_timer = 10 # 假设设置为10个时间单位 timer_running = True def update_nm_timeout_timer(): global nm_timeout_timer, timer_running if timer_running: nm_timeout_timer -= 1 if nm_timeout_timer <= 0: timer_running = False # 计时器超时处理逻辑 handle_timer_timeout() def handle_timer_timeout(): print("NM - Timeout Timer超时,执行相应操作") # 模拟发送或接收网络管理报文 def send_or_receive_nm_message(): global timer_running if timer_running: timer_running = False # 重置计时器 start_nm_timeout_timer() ```
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值