目录
0 前言
1 Autosar基本概念
1.1 网络管理主要有三种模式:
1.2 状态的转换(测试点)
1.3 时间参数
2 实践学习
以下内容如有不对,还请评论区内多多指正
网络管理的理论知识网上很多,讲的也都很精细,所以本文主要从项目中来介绍。
首先需要明确的是网络管理听起来很高大上,但其目的很简单,就是为了省电。
TIPs:
1.CanNm_NetWorkRequest() :开关或者点火信号来唤醒网络
2.Repeat Message Bit Received;RepeatMessageRequest() :前者是自己发出的,后者是其他节点发出的
1.总线睡眠模式:为了省电进入低功耗模式,等待被唤醒。唤醒后进入网络模式的重复报文状态。
2.准备总线睡眠模式:为即将到来的睡眠做准备(类似于睡前上个厕所给手机充电等),等T_WAIT_BUS_SLEEP定时器溢出后进入总线睡眠模式。如果被唤醒,进入网络模式的重复报文状态。在该模式下,APP报文和NM报文都不再发送。
3.网络模式:常规的活动模式,由内部的三种状态组成:重复报文状态,常规运行状态,准备睡眠状态。
节点进入网络模式后,需要开启T_NM_TIMEOUT定时器。每次收发成功报文都会重新刷新定时器。
无论睡眠条件是否满足,重复报文状态都可以使节点保持一段时间的活跃状态。
节点处于重复报文状态时,T_NM_TIMEOUT定时器超时溢出时,需要重启T_NM_TIMEOUT定时器;进入重复报文状态后,需要在唤醒时间t内恢复通信。在重复报文状态内持续的时间 == T_REPEAT_MESSAGE,T_REPEAT_MESSAGE超时以后,若对网络通信有需求则进入常规运行状态,反之进入准备睡眠状态。节点离开重复报文状态时需要将重复报文请求标志位清零。
节点处于常规运行状态时,T_NM_TIMEOUT定时器超时溢出时,需要重启T_NM_TIMEOUT定时器;常规运行状态需要按照T_NM_MessageCycle 的周期发送网络管理报文。
节点处于准备被睡眠状态时,T_NM_TIMEOUT定时器超时溢出时,进入准备睡眠模式。准备睡眠状态时定时器T_NM_TIMEOUT 溢出后 ,需进入准备总线睡眠模式,定时器收到网络报文时会reset定时器。在准备睡眠状态时,NM报文会被停发,但是APP报文还是会继续发送。
BSM TO RMS:
1.首先收到唤醒信号,然后就进入RMS,这一过程需要在T_WakeUp时间内完成。
2.如果是从PBSM/NOS/RSS进入RMS的话需要在T_START_NM_TX时间内发送第一帧网络报文;如果是从BSM或PBSM进入RMS的话需要在_START_App_TX时间内发送第一帧应用报文。
3.发送第一帧网络管理报文后按照T_NM_MessageCycle的周期持续发送报文。
4.RMS保持T_REPEAT_MESSAGE时间后节点将会进入下一个状态。
以T_START_APP_Tx为例:
RMS TO RSS:
1.唤醒后进入RMS
2.检查是否只回复应用报文没有回复网络报文,是的话就进入了RSS
RSS TO PBSM
1.检查是否没有收到网络报文,是的话就进入了RSS
2.检查是否没有收到APP报文,是的话就进入PBSM
PBSM TO BSM
1.首先进入PBSM中
2.检查错误帧,如果收到了错误帧则说明进入BSM
a. 检查NM_TIMEOUT = 最后一帧应用报文发出的时间 - 最后一帧网络报文发出的时间
b. 检查WAIT_BUS_SLEEP = 第一帧错误帧的出现时间 - 最后一帧应用报文发出的时间
总结:整体来说网络管理的循序为BSM -> RMS ->1500ms(在重复报文状态中保持的时间) -> NOS -> 停止向ECU发送NM报文或关闭点火信号立即转换状态 ->RSS,ECU停发NM报文但APP报文还是会发,等定时器溢出后则进入PBSM,收到或者发送NM报文则会reset定时器 -> PBSM,ECU停发APP报文 ->BSM 总线休眠,测试中需检测是否发出错误帧,以及休眠电流是否符合要求。
网络管理中有许多状态的转化,又有一大堆定时器,如果只看理论那一定会让人很头疼。接下来将介绍3个例子来帮助理解:
1 发送网络报文0x400: 00 11 01 00 00 00 00 00 (主动唤醒 请求节点进入网络报文状态)节点回复0x459:59 00 21 00 00 00 02 00 (21:重复报文状态 NM唤醒 02:首次被唤醒是因为网络报文)
报文先以50ms的间隔恢复一帧,然后以500ms的间隔恢复三帧以此为循环 --> 因为根据文档规定非BSM状态进入RMS要在50ms内发出第一帧,500ms是网络模式中(除了准备睡眠模式外)报文的发送周期,发送三帧是因为RMS的计时器为1500ms
2 从网络模式到总线睡眠模式一共需要的时间是4s (T_NM_TIMEOUT+ T_WAIT_BUS_SLEEP)
操作方法:
1)手动发送两帧网络报文(内容全为0),则应用报文和网络报文回复一段时间,然后停止
2)检查最后一帧NM报文和最后一帧应用报文发出的时间,相减即为T_NM_TIMEOUT =2s
3)出现第一帧错误帧时即说明总线已经休眠,错误帧出现时间减去最后一帧应用报文发出时间T_WAIT_BUS_SLEEP =2s
3 当节点在RSS时,收到诊断报文会恢复到NOS,并启动 T_WAIT_DiagReq定时器(5s),当定时器溢出后又会回到RSS
谢谢大家