MIL/SIL/PIL/HIL/VIL

摘要:
基本原理是使用与MIL相同的测试用例输入,将MIL的测试输出与SIL的测试输入进行比较,并检查两者之间的偏差是否在可接受范围内。测试通过标准是在使用与SIL相同的测试用例输入进行测试时,比较PIL和SIL的输出。如果两者之间的差异在允许范围内,则测试通过。

MIL:Model in the loop 模型在环,对模型在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足设计的功能需求。验证控制算法模型是否准确地实现了功能需求,MIL是所有测试中最关键的。

SIL:Software in the loop 是一种等效性测试,测试的目的是验证代码与控制模型在所有功能上是完全一致的。其基本原则一般是使用与MIL完全相同的测试用例输入,将MIL的测试输出与SIL的测试输出进行对比,考察二者的偏差是否在可接受的范围之内。在PC上验证代码实现的功能是否与模型一致

MIL/SIL/PIL/HIL/VIL第1张

PIL:Processor in the loop在目标处理器上验证代码实现的功能是否与模型一致

PIL测试与SIL测试的不同在于软件是使用的目标MCU的编译器(Tasking)进行编译链接,也需要运行在目标板上,其基本工作原理如下。

MIL/SIL/PIL/HIL/VIL第2张

其测试通过准则是,使用与SIL相同的测试用例输入进行测试时,比较PIL和SIL的输出,如果两者之差在容许范围之内,则测试通过。

HIL:Hardware in the loop硬件在环仿真,在ECU/EPP/整套系统上验证代码实现的功能是否与需求定义一致

一般来说按照in the loop的深度不同可以分为三个层级:

  • ECU级:也可以称之为信号级,仅仅ECU软硬件采用实物,闭环回路的其他组成部分均采用虚拟仿真系统

  • EPP级:也可以称之为驱动级,EPP是Electrical Power Package的缩写, ECU及执行机构采用实物,闭环回路的其他组成部分采用虚拟仿真系统

  • System级:也可以称之为机械级,系统组件采用实物,闭环回路其他组成部分采用虚拟仿真系统

VIL:Vehide in the loop 实车在环测试

参考:https://zhuanlan.zhihu.com/p/27351047

https://zhuanlan.zhihu.com/p/27011210

https://wenku.baidu.com/view/cbaae59764ce0508763231126edb6f1aff0071a2.html

http://www.ind4.net/html/news/newsDetail_7007.html

免责声明:文章转载自《MIL/SIL/PIL/HIL/VIL》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Centos7搭建日志服务器rsyslog+loganalyzer【转】分析SQL Server计划缓存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Looper.prepare()

Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息。注:写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.get...

h5-audio/video标签

音频/视频 基础用法 属性 事件 audio元素和video元素 <audio src="http://t.zoukankan.com/成都.mp3"></audio> <video src="http://t.zoukankan.com/成都.mp4"></video> 一些属性 1、autoplay 自动...

QEventLoop 的使用两例

熟悉的陌生人 Qt 是事件驱动的,所以当你用Qt的时候,几乎时时刻刻和 QEventLoop 打交道、,只是你可能没有意识到: QCoreApplicaton::exec() QApplication::exec() QDialog::exec() QThread::exec() QDrag::exec() QMenu::exec() ... 在前面列...

说说WeakReference弱引用

WeakReference弱引用概述 http://www.cnblogs.com/xrq730/p/4836700.html,关于Java的四种引用状态具体请参看此文 Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。 但是现实的情况时,写代码的时候,往往通过把所有指向某个对象...

iOS 并行编程:Thread

1 创建线程 1.1 NSThread 使用 NSThread 来创建线程有两个可以使用的方法: 1) 使用 detachNewThreadSelector:toTarget:withObject:类方法来生成一个新的线程。 2) 创建一个新的 NSThread 对象,并调用它的 start 方法。 这两种创建线程的技术都在你的应用程序里面新建了...

libuv::进程

对于基于事件(event-based)的程序来说, 有个限制,没办法很好地利用多核,提高CPU使用率. 即使能够使用多线程编程来分发 handle, 但是每个 loop 还是只有一个线程. 这时候, 使用多进程就能够分担 loop 的压力,并且通过多进程 + 通信的方法, 会比 多线程 + 共享内存的方法更加安全, 易于开发. #include <c...