总线54讲,基于Python的AutoSAR网络管理自动化测试系统[详解]

文摘   汽车   2024-08-23 11:48   上海  

干巴巴的干活,帮助广大同行少做重复性工作

优秀的质量,来自严格的测试
曾几何时,车上是不存在网络管理的概念的,因为压根不需要。
整车电源管理,全部是由BCM来做的,所有其他件的电源,都是由BCM控制的,BCM只要一下电,整个车就都没电了。
这种情况下,BCM作为整车唯一的off档耗电器件,只要它做好了低功耗,基本上车辆的电源管理就算ok了。

技术日新月异地迭代

上述“主-从”式电源管理,比较low,效率低下,不符合行业技术发展趋势,也很难玩出什么花样来。

几乎所有的功能,都要启动全车ECU,真的痛心疾首的浪费。
有鉴于此,网络管理的概念应运而生,它使得整车电源管理变得十分高效灵活!
后浪把前浪拍在沙滩上
网络管理,最初大多数车企是osek标准,这个标准是1994年由德国的几家企业发起的,比如宝马、西门子等等。
但是,由于osek标准的定义不够详细,它在很多方面都给行业带来了混乱和不确定性。
十年之后,AutoSAR作为后起之秀,凭借更强大的实力,代替了oesk的地位,AutoSAR网络管理(以下简称 ANM)也代替了osek网络管理,成为全行业车企共同的选择。
也就是说,如果您是2020年之后才接触的网络管理规范,您根本不用去了解osek了,没用。
关于网络管理的概念和定义,不是本文讨论的重点,网上资料到处都是,各家主机厂抄来抄去,大同小异。


测试方案

如上述跳转图,ANM测试的主要目的就是测试各个状态调整的条件和时间参数。

就全行业而言,ANM测试的先驱应该是北汽,其是较早投入ANM路线的车企。

虽然,现在,几乎所有的车企都有自己的AutoSAR NM体系,都能在理论上把它阐述得头头是道,但是真正拥有全面测试能力的车企,并不多。

车辆技术联合业内优秀开发商,发布了基于Python的全自动ANM测试系统,源代码交付,助力贵司严格检验供应商交付质量,助力贵司建立起这个领域的开发能力、升级完善能力。

该方案为合作伙伴的商业方案,得好几万,所以不做私人交流哈~

敲黑板,接下来我们详细讲解,AutoSAR网络管理测试,都测什么,怎么测?

显而易见,ANM主要包含3个主状态,如上图红色圈圈所示。
其中,红色大圆圈,NetWork Mode,还可以进一步划分为重复报文模式、正常操作模式、准备睡眠模式,三种状态。

此外,上图还展示了0~17,共17个状态迁移动作,它们均有各自的条件,也有各自的行为特征要求,我们要逐一测试。

一个DTU,若满足了本文描述的所有单步骤的测试性能,那么它就可以在网络管理的任意随机组合状态跳转中,游刃有余、畅通无阻,展示出自己无与伦比的可靠性,坚不可摧的鲁棒性。

测试项
测试方法
NM报文检查(检查最基础的id正确性)

1、一般而言,行业通用的NM ID范围为0x5XX

2、通过本地唤醒硬线,唤醒DTU,检查DTU发出来的网络管理报文,要和通信矩阵定义的相同,且不存在其他多余的网络管理报文。

3、若DTU不存在本地唤醒,则随便用一个0x5xx报文,通过被动唤醒将其唤醒。

报文唤醒测试(被动唤醒的正确性)
1、在DTU已休眠的情况下,对其发应用报文(id小于0x500),持续发2s,DTU不应当被唤醒,报文应当持续发送失败,若发送成功(收到了ack),则本项测试不通过。

2、在DTU已休眠的情况下,对其发诊断报文(id为0x7xx),持续发2s,DTU不应当被唤醒,报文应当持续发送失败,若发送成功(收到了ack),则本项测试不通过。

3、在DTU已休眠的情况下,对其发0x5xx报文,只发送3帧,周期为快周期参数,一般为20ms,DTU应当被唤醒。再等待DTU休眠,逐一轮换其他NM报文(注意避开DTU自己的NM报文id),DTU均应能唤醒。

睡眠模式→重复报文状态(被动唤醒性能测试)

测试方法:

在DTU睡眠的情况下,发三帧NM报文,将其激活,DTU将在60ms时间内发出来第一帧NM报文,第一帧NM报文之后20ms内发出来第一帧app报文。

DTU发NM报文的前1500ms称为“重复报文状态”,在该状态阶段,DTU的NM报文周期为500ms。

显然,理论上讲,复报文状态”时间段内,应该有约3帧报文。

上述的“60ms”、20ms1500ms3帧“500ms”等参数,均可通过测试用例进行配置,测试系统应完成自动化测试及核对。

睡眠模式→重复报文状态(本地唤醒性能测试)

测试方法:

在DTU睡眠的情况下,控制本地唤醒将其激活,DTU将在100ms时间内发出来第一帧NM报文,第一帧NM报文之后20ms内发出来第一帧app报文。

DTU发NM报文的前1500ms称为“重复报文状态”,在该状态阶段,DTU前10帧报文的周期为20ms,之后的NM报文周期为500ms。

显然,理论上讲,复报文状态”时间段内,应该有12帧报文。

上述的“100ms”、20ms1500ms10帧“500ms”等参数,均可通过测试用例进行配置,测试系统应完成自动化测试及核对。

Repete→Normal

所谓Normal状态,就是本地唤醒持续有效的稳定状态。

测试方法:

在DTU睡眠的情况下,通过本地唤醒将其激活,并保持本地唤醒持续有效。

DTU在快周期阶段结束之后,进入慢周期,Repete阶段结束之后,即进入Normal

一般而言,NM报文的自定义区域会有相关字段,表征DTU是否处于Repete阶段。

测试系统应能对上述参数及特征进行全自动校对!

Normal→Repete

Normal转Repete的情况不多见,一般是网络上其他ECU刷存在感,嗷嗷一声我来了,让大家注意点。

测试方法:

在DTU睡眠的情况下,通过本地唤醒将其激活,并保持本地唤醒持续有效,等待DTU进入慢周期的Normal模式。

可以通过特征byte的特征bit,确认DTU已脱离Repete模式,进入了Normal模式。

进入Normal之后,对DTU发一帧NM报文,且相关字段的bit置1,要求DTU跳转至Repete模式,相当于嗷嗷一声。

DTU收到该NM报文之后,应当进入Repete模式,相关的bit置1,表征自己处于Repete状态。当然,这个“置1”也是维持不了多久的,一般也就1500ms。

在整个过程中,DTU的时序及特征值,均有明确定义及要求,测试系统应能自动核对。

Repete→Ready Sleep

此调整一般出现在被动唤醒或者本地唤醒短暂有效的情形。

被动唤醒的ECU,其工作时,绝大多数时间都是Ready Sleep Mode,不发NM报文,只发app报文。

测试方法:

在DTU睡眠的情况下,发三帧NM报文,通过被动唤醒将其激活。

DTU直接进入慢周期,以500ms发NM报文,Repete阶段结束之后,因为其没有持续有效的本地唤醒源,所以立刻就进入Ready Sleep Mode,停发NM报文,仍发app报文。

理论上讲,DTU发NM报文的时间段长度即为Repete阶段,约1500ms。

测试系统应能自动核对DTU的上述特性。

Ready SleepRepete

此现象一般出现于2种情况:

1、DTU当前已经没有唤醒网络的必要了(持续被动唤醒,或有效的本地唤醒已取消),NM报文都停了,但是忽然被别的模块刷了一下存在感,被迫进入了Repete模式。

2、DTU从一开始就是被动唤醒的,但是,忽然,自己的本地唤醒源有效了。

测试方法:

在DTU睡眠的情况下,发三帧NM报文,通过被动唤醒将其激活。

DTU直接进入慢周期,以500ms发NM报文,Repete阶段结束之后,因为其没有持续有效的本地唤醒源,所以就进入Ready Sleep Mode,停发NM报文,仍发app报文。

估摸着DTU的NM报文停发1000ms左右,对DTU发NM报文,通过使特定bit置1,对它刷存在感,强迫它进入Repete状态。

DTU收到NM报文之后,应在60ms之内发送出自己的NM报文,以慢周期500ms发送,且通过特定bit,表征自己处于Repete状态。

上述的“500ms”、“1000ms“60ms“500ms”等参数,均可通过测试用例进行配置,并完成自动化测试及核对。

Normal Operate → Ready Sleep

这个太常见了,一般就是DTU的本地唤醒源有效,实现特定功能之后,本地唤醒源消失,进入了Ready Sleep State。

测试方法:

在DTU睡眠的情况下,控制本地唤醒源有效,唤醒DTU。

DTU先进入Repete状态,先快周期,然后慢周期,然后进入Normal状态。

DTU标表征当前是否处于Repete状态的特征bit也经历了1→0变化。

确认DTU进入Normal之后,取消本地唤醒源,DTU应该出现至少一帧APP报文,距离其前面最后一帧NM报文超过1000ms。也就是说,NM报文停发1000ms了,还有app报文。

测试系统应能自动核对DTU的上述特性。

Ready SleepNormal Operate

典型场景就是,DTU被本地唤醒激活,经过Repete进入了Normal,然后取消了本地唤醒,又进入Ready Sleep State。

进入Ready Sleep State超过2000ms,会跳出Net Work Mode,进入Prepare Bus Sleep Mode。

但如果在2000ms内,本地唤醒源又有效了,它又反悔了,则可以再次回到Normal 模式。相比一下,如果被其他ECU通过特定bit刷了存在感的话,则可以进入Repete模式。

测试方法:

在DTU睡眠的情况下,控制本地唤醒源有效,唤醒DTU。

DTU先进入Repete状态,先快周期,然后慢周期,然后进入Normal状态。

确认DTU进入Normal之后,取消本地唤醒源,再等待1500ms,此时距离最近一帧NM报文的时间应该为1000ms左右,且app报文没有停发。

设置本地唤醒有效。

然后,检查DTU发的NM报文中,表征其是否处于Repete的位应当为0,表征其是否位于Normal的bit应当为1,且NM报文为慢周期。

测试系统应能自动核对DTU的上述特性。

Ready Sleep → Prepare Bus Sleep预睡眠状态

测试方法:

可通过本地唤醒或被动唤醒两种方式测试,主要测试DTU在Ready Sleep State阶段待多长时间,典型值是2000ms。

本地唤醒,先有效后无效,使DTU进入Ready Sleep State。

DTU停发NM报文即意味着进入Ready Sleep State,停发app报文即意味着进入Prepare Bus Sleep,二者之差即为DTU在Ready Sleep State阶段待的时间,定义为T_NM_TIMEOUT。

被动唤醒,发3帧周期为20ms的报文,等待1500ms,经过Repete之后,即认为其进入了Ready Sleep State,此时NM报文即停发,然后再等待其停发app报文即可计算时间差。

测试系统应能自动核对DTU的上述特性。

Prepare Bus Sleep预睡眠状态 → Bus-Sleep Mode

app停发之后,超过一定时间T,DTU应进入休眠,该时间应根据DTU的工作属性,在测试用例中做成可配置参数。

测试方法:

通过被动唤醒,发3帧NM报文,唤醒DTU。

对DTU持续发app报文,直至发送失败,收不到ack,此刻距离最后一帧app报文的时间差,即为上述定义T。

测试系统应能回读app报文的发送结果,自动记录时间,自动核对DTU的上述特性。

Prepare Bus Sleep预睡眠状态 → Repete

这个就太讨厌了,都快睡着了,又把我晃醒了。

测试方法:

这个跳转的特征类似于“Bus Sleep Mode → Repete Message State”,区别仅在于,由于此时DTU并没有休眠,所以首帧NM报文发出来的时间要求较高,要短于T_wake-up,典型值为60ms。

其他特性,和Bus Sleep Mode → Repete Message State”相同,DTU要表征自己处于repete状态,表征自己是否是本地唤醒,对Repete阶段的时长也有要求。

测试系统应能自动核对DTU的上述特性。


【推荐】

总线10讲,东半球最好用的excel2dbc工具,永远免费送


车辆技术
致力于汽车研发测试技术的研究推广,帮助同行互通有无,为提升职业价值感,为产业崛起而奋斗!
 最新文章