小谈MIL/SIL/PIL/HIL

2024-02-16 01:30
文章标签 pil 小谈 mil hil sil

本文主要是介绍小谈MIL/SIL/PIL/HIL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在基于模型的软件工程(MBSE)中,我们经常会谈到MIL/SIL/PIL和HIL,很多新入门者常常会搞混它们的含义,笔者撰写本文的目的是概要性的介绍XIL之间的区别与联系,尽我所能把它们讲清楚。

术语定义:

  • MIL:Model in loop, 验证控制算法模型是否准确地实现了功能需求;

  • SIL: Software in loop,在PC上验证代码实现的功能是否与模型一致;

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

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

几个常见问题:

  • 这四个测试名字里都有in the loop,那么是不是一定要有闭环?

NO,某些控制算法实现的功能本身就是不带闭环的,比如接收到某信号后点亮某某灯,在这种情况下就不需要闭环。

  • 是不是一定要有被控对象模型?

NO,在笔者有限的认知里,

(1)大部分狭义的MIL(End2 End Test)是需要带被控对象模型的(也有例外,如上文讲的某功能知识控制一个灯的开关,大没有必要建一个灯泡的模型),广义的MIL一般不care被控对象模型;

(2)SIL测试可带被控对象模型,但带被控对象模型的意义不大;

(3)PIL一般是不带被控对象模型(PlantModel)的;

(4)HIL(无论哪个层级)一般来说都需要被控对象模型。

  • 是不是MIL一定要用浮点数,SIL一定要用定点数?

NO,有些公司进行开发时直接跳过浮点模型用定点建模,在这种情况下,MIL也是用定点数进行测试;dsp和最新的MCU的浮点运算功能都已经很强大,支持用浮点数生成(编写)的代码,在这种情况下SIL也是用浮点来测试。

  • 不是模型生成的代码可不可以做SIL?

Yes,前面已经讲了SIL不一定需要被控对象模型,手写代码也可以做SIL,只是测试用例需要提前根据功能定义好。

(一) MIL

MIL就是模型在环,通俗一点理解就是对模型在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足了设计的功能需求。MIL是所有测试中最关键的,因为MIL的test accept criterion必须源于功能需求,没有其它的东西可以参考。而SIL/PIL的测试用例往往都是借用MIL的测试用例,一旦在MIL这个阶段的使用了错误测试用例,这个Bug很有可能会最终流出去,即便所有的测试都通过了。

a) 狭义的MIL

狭义的MIL一般指针对带被控对象模型,实现整个控制功能的模型进行End to End的测试。

如下图,电机控制的MIL模型有MotorController和PlantModel两个子模型组成:

PlantModel又包含:

  • Predriver

  • Mosfet全桥

  • 电流采样电路

  • PMSM电机

  • 电机位置传感器采集电路

运行simulink仿真,比如我们设定电池电压13V,电机转速800rpm,指令力矩2Nm,在scope中我们电机输出了较理想的正弦波,输出力矩也稳定在2Nm左右,如下:

做到这一步,MIL就算结束了吗?非也非也,MIL还有一个重要的任务是为SIL和PIL的testcase收集test vectors(TV)。仿真的侧重点在于功能是否已正确实现,而MIL在simulation的基础上,还要把所有的输入输出保存起来作为测试向量将来给SIL/PIL使用。

以MotorController为被控对象,让我们看看下表:

b) 广义的MIL

在软件测试领域还有一个很重要的概念是测试覆盖度,对于ASIL级别比较高的产品,一般都需要MCDC测试覆盖度100%,而如果模型比较复杂的话,往往前文所述的狭义的MIL很难达到100%的测试覆盖度,因此我们还需要对某一个具体的子功能模块特别设置一些测试用例来测试,在这种情况下,往往不使用PlantModel。

(二) SIL

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

因此这个测试的目的就决定了带不带被控对象模型并不是那么重要。SIL测试一般都在PC上完成,对代码的编译器一般都是LCC,SDK,MSC等这些。

至于SIL的实现方法,那真是五花八门多种多样了:

  • 将代码封装成S function在simulink中进行比较;

  • 用Matlan GUI开发自定义MIL&SIL工具,完成simulink仿真、S-funtion仿真及比较功能(大部分工作都在后台完成,不用那么多鼠标键盘操作)。

  • Matlab中通过将模型转换为SIL模型:

    set_param(model_name,‘SimulationMode’,’Software-in-the-loop’)

  • 使用Targetlink工具箱(死鬼死贵的说)

  • 使用基于Microsoft Visual Studio或基于VSC环境开发的其它第三方测试工具,如MxVDev;

  • 使用与Matlab和Targetlink无缝链接的第三方工具,如BTC;

(三) PIL

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

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

此外,PIL测试还能够测量某个功能模块的程序运行时间、堆栈(系统和用户)使用情况等等如下图,这些数据在所有软件功能模块集成之前对软件CPU Load、软件是否有跑飞的风险都是有非常大的帮助的。

这篇关于小谈MIL/SIL/PIL/HIL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713116

相关文章

PIL Python Imaging Library (PIL)

介绍         把Python的基础知识学习后,尝试一下如何安装、加载、使用非标准库,选择了图像处理模块PIL。         Python Imaging Library (PIL)是PythonWare公司提供的免费的图像处理工具包,是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能。虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》,作者是 Mohamad Taib Miskon 等人,发表在 2024 年 IEEE 自动控制与智能系统国际会议(I2CACIS)上。以下是该论文的主要内容概述: 研究背景: 论文讨论了在马来西亚沙巴州偏远地

PIL库图像压缩教程

图像压缩教程 本教程展示如何使用Python中的PIL(Pillow)库进行图像压缩。详细介绍如何加载图像、压缩图像,以及保存压缩后的图像。 步骤包括: 安装所需库加载图像压缩图像保存压缩后的图像 确保环境中安装了Pillow库。如果没有安装,可以通过以下命令进行安装: pip install Pillow from PIL import Image# 1. 加载图像def loa

Carmaker Hil部署

本文主要简单介绍carmaker  HIl的部署(Windows环境) carmaker  HIL的上位机与Xpack 4的下位机通过一个以太网口进行连接,然后打开上位机的网络连接配置,并关闭防火墙: 打开carmaker HIL的配置,对网络连接进行设置: 各项解释如下: 选择可执行文件,一般选择默认的xeno文件即可:

PIL 库的使用入门

PIL 库是python中很有用的处理图像的库,全名Python Imaging Library, 目前最新版本PIL 1.1.16。利用好它,可以很方便地对图像进行操作处理, 包括对原图处理,以及产生新的图片等。本文主要介绍总结PIL中常用类及其方法,详细介绍移步handbook,官方文档,Pillow Reference廖雪峰老师网站也有简单的PIL例子介绍。 1. Image类 1

module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

在ComfyUI Manager Update All 之后,可能会出现以下情况: module 'PIL.Image' has no attribute 'ANTIALIAS' 它主要是来以下路径: ComfyUI-Custom-Scripts/py/constrain_image.py 原因:     ANTIALIAS在 Pillow 10.0.0 中被删除(在之前的多个版

PIL convert(‘RGB‘) 用法

PIL 不提供 BGR转RGB的方法。 1. 图像模式转换 如果图像当前的模式不是 RGB,例如它是灰度(L)、CMYK 或其他模式时,convert('RGB') 会将图像转换为 RGB 格式。 灰度图像 (L): 如果图像是灰度图像 (L),convert('RGB') 会将其转换为 RGB 模式。每个灰度值会复制到红、绿、蓝三个通道上。 img = Image.open("gra

【经验小谈】 alignbottom失效 全屏失效

Andriod学习不深奥,经验全从实践来 大家好,今日经验分享之~ 全屏的应用 1、android:layout_alignBottom="@+id/iv_icon" 是不是发现不管怎么弄,都不能贴在iv_icon的底部? 这个时候情不断的尝试,比如更换控件试试,然后删掉自定义控件试试 如果都不能解决,那么看看你的父布局是不是添加了Margin 或者Padding

【经验小谈】BUG整理

Andriod学习不深奥,经验全从实践来 大家好,今日经验分享之~ bug小理 关于自定义View今天进行了详细的探索,这里总结如图 1、自定义view中  declare-styleable 引入了两个lib 工程但是爆出 D:\WorkSpace\FirstWork\slide_library\res\values\vpi__attrs.xml:53: erro

随机涂鸦 pil

随机涂鸦 pil import mathimport timeimport cv2img1=cv2.imread("/home/lixiang/下载/mp4/111.jpg")from PIL import Image, ImageDrawimport randomdef tuya(img):draw = ImageDraw.Draw(img)# 涂鸦数量num_scribbles =