测试工程师需要搞懂的测试类型:
- MIL用于测算法
- SIL和PIL用于测代码(和模型的一致性)
- HIL用于测控制器系统
MIL:模型在环测试
如图一所示,在Simulink模型中,将控制算法模型和被控对象模型连起来形成闭环,即在模型层面上实现闭环测试。这种测试通常发生在两种场景下:
- 验证算法,使用控制算法模型控制被控对象模型
- 做模型级别的集成测试
MIL测试的前提是要有被控对象模型,搭建被控对象模型或者采购现成的被控对象模型。
SIL:软件在环测试
SIL测试,这里的Software是指控制策略模型转换成的C代码编译之后的软件。
对于图一,如果把控制策略模型替换成由控制策略模型转换得到的C代码编译后的DLL文件,如果使用了和MIL测试时相同的测试用例,如果测试用例足够多,得到了和MIL测试相同的结果,那么是不是可以认为生成的C代码就和用于代码生成的模型是一致的呢?
SIL测试的目的就是为了验证自动生成的代码和用于代码生成的模型中行为上是一致的。
也就是说SIL测试是一种等效性测试,既然是等效性测试,就没必要搭建图一那样的闭环模型,而可以用图二实现等效性测试。
其实Simulink提供了SIL仿真模式,可以用更方便的方式实现SIL测试,使用:
set_param(model_name,’SimulationMode’,’Software-in-the-loop(SIL)’)
设置算法模型的仿真模式为SIL,然后对比Normal模式下的输出结果即可,并且这样做有助于过程自动化。如图三所示:
PIL:处理器在环测试
SIL测试是验证代码和模型的一致性,代码运行在Windows平台上,某种程度上说,这并不能保证代码到目标处理器上的运行结果也能够和模型保持一致。所以,就有了PIL测试。
PIL和SIL的不同之处在于,SIL将生成的代码通过DLL的方式运行在Windows平台上,而PIL,是将生成的代码运行到目标处理器上,两种模式使用的编译器也是不同的,SIL使用的就是Windows下的编译器,比如Visual Studio C++或者LCC编译器,而PIL使用的是目标编译器。
等效性测试的目的是为了防止代码生成过程出错。同样,编译过程也可能出错,编译器也可能有bug,综合模型测试、SIL测试和PIL测试的结果,帮助发现编译器出错可能引入的bug。
SIL和PIL是等效性测试,测试的目的是为了验证自动生成的代码和模型具有相同的行为,对于SIL和PIL的测试用例就没有功能意义上的要求,只要要求代码和模型输入的测试数据相同即可,当然希望数据量足够大,能够覆盖各种路径以及各种信号范围。
另外,因为PIL测试中代码运行在实际的控制器上,所以PIL测试除了可以验证代码和模型是否一致之外,还可以获得算法在实际控制器上的最长运行时间。
HIL:硬件在环测试
有人会把HIL和PIL混淆,也有人认为PIL是一种简化的HIL,理由是PIL测试的时候也需要引入硬件。这种理解是错误的。PIL和HIL测试的目的是不同的,PIL用于测试软件和模型是否一致,而HIL是用于测试控制器系统的,控制器系统包括了硬件、底层软件和应用层软件。
HIL测试通常将一个被测控制器和工控机相连,工控机上运行着被控对象的模型,并且模拟出被控对象的一些电气特性。在HIL场景下,被测试的控制器并不知道和它相连的是一台工控机,它会认为自己连接的就是真实的实物对象。
HIL测试通常比实物测试更节省成本,比如,做汽油机台架测试,需要有大量的汽油消耗,而通过HIL测试汽油机控制器,就没有汽油消耗。HIL测试之后,通常会跟着做实车测试。
标签:PIL,MIL,模型,测试,HIL,SIL From: https://www.cnblogs.com/laoluoits/p/16944050.html