基于EPS 诊断的压力测试
2021-05-21席刚刚
席刚刚
(同济大学,上海 201800)
0 引言
EPS(Electronic Power Steering,电子助力转向)由机械转向系统加上转矩传感器、车速传感器、电子控制单元、减速器、电动机等组成。它在传统机械转向系统的基础上,根据方向盘上的转矩信号和汽车的行驶车速信号,利用电子控制装置使电动机产生相应大小和方向的辅助动力,协助驾驶员进行转向操作,作为整车安全件之一,要通过测试来确保软件的性能。压力测试是给软件不断加压,强制其在极限情况下的运行,观察它可以运行到何种程度,从而发现性能缺陷。通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况。然后做针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整。本文结合实际案例,在响应多个诊断指令时EPS负反馈,响应代码是72,截取部分诊断指令,对EPS 进行压力测试,然后对测试结果处理,检查是否存在软件缺陷。
1 压力测试实现
1.1 测试准备
需要准备好12 V 电源,集成CANoe licence 的CAN 盒一个,EPS 样件,EPS 所配套的电源线束和通信线束,终端电阻,测试电脑一台,按照图1 进行连接(网络唤醒)。
图1 测试连接
1.2 测试流程
由上位机软件自动发出诊断请求,等待EPS 给出响应后,判断是否为正响应,是正响应继续进行下个请求,直到所有的请求全部发完。诊断流程如图2 所示。
1.3 自动测试脚本
测试案例基于CANoe环境,利用CAPL 语言进行编程,本次诊断压力测试案例开发中,主测试Case 包含5 个事件,依次分别是进入扩展会话模式、向EPS 请求安全认证种子、向EPS 发送安全认证key、写入参数1、写入参数2、写入参数3、写入参数4。
/*cycle send*/
for(i=0;i<10;i++)
{
EnterExtendSession();
RequestSecuritySeed();
SendSecurityKey();
WriteParameter1();
WriteParameter2();
WriteParameter3();
WriteParameter4();
testWaitForTimeout(2000);
}
实际上整车厂造车时涉及到的诊断服务远超过这些,本次只截取其中某个工位涉及到的诊断服务,对其进行连续循环测试,同时发送整车级报文。设定总线负载率达到60%以上(通过发送小周期报文实现),验证EPS 在恶劣工况下能否响应诊断工具的请求,检查软件的表现性能(图3)。
基于不同的ECU(Electronic Control Unit,电子控制单元),在循环写入参数时,需要注意有些ECU 在连续写入相同值时不响应请求,基于这样的软件逻辑,本次Case 中连续写入值不同,采用交替值写入,以写入参数1 请求函数为例,对请求服务的第8个字节进行交替赋值。此处的变量i 在主测试已经定义,并在for 循环中进行自加加运算,结合请求函数,能够实现连续两次写入的值不同。
i=i%2;
if(i==0)
{diagTX.byte(7)=0x2B;}
if(i==1)
{diagTX.byte(7)=0x2C;}
2 测试数据处理
为了详细观察EPS 表现,在测试完成后需要对测试数据进行处理,测试目的是为了检测软件在极限工况下的表现0 根据需求,EPS 在收到请求后750 ms 内判断是否写入,写入成功发送正响应,写入不成功发送负响应,因此在出现负响应时检查请求到响应之间的时间间隔,测试数据为总线数据(图4)。借助spy3 工具,把CANoe 记录的数据转化成.CSV 文件,然后在Excel 里面打开(图5),再利用公式if(P3=7F,(B3-B2)*1000,0)计算,然后用max 筛选出最大的时间,判断其是否超过750 ms。
图2 诊断流程
图3 总线负载
图4 总线数据
图5 测试数据
3 总结
压力测试的目的是检测软件在极端工况下的表现情况,在供应商处检查出问题,避免在整车厂出现问题,测试时必要条件是模拟整车环境,尽可能做到与产线的工况一致,但为了增加工况的恶劣性,可以适当增加总线负载率。另外,在每一个请求之间的时间间隔应尽可能小,这样测试效果才会显著,但是必须要等到上一个请求服务得到反馈之后才能请求第二帧,否则测试将失去意义。由于测试数据较大,因此处理时一定要采用快捷高效准确的方式。