MiL → SiL → PiL → HiL 是什么?
基于模型的快速原型开发通常分为四个过程:MiL → SiL → PiL → HiL
1. MiL(Model in Loop)模型在环 在PC上基于模型的测试,它的输出是经过验证的控制算法模型。验证控制算法模型是否准确地实现了功能需求
2. SiL(Software in Loop)软件在环 将模型生成代码或者手工编写代码,编译成PC程序,在PC上的测试。它的输出是经过验证的嵌入式代码。 在PC上验证代码实现的功能是否与模型一致
3. PiL(Processor in Loop)处理器在环 将代码编译成目标系统程序,然后在PC上虚拟目标硬件环境(例如Simics,dSPACE),并进行测试。它的输出是经过验证的目标程序。在目标处理器上验证代码实现的功能是否与模型一致
4. HiL(Hardware in Loop)硬件在环 将目标系统程序烧入实际硬件设备,并进行测试或者汽车标定。 在ECU/EPP/整套系统上验证代码实现的功能是否与需求定义一致。
几个常见问题:
- 这四个测试名字里都有in the loop,那么是不是一定要有闭环?
- NO,某些控制算法实现的功能本身就是不带闭环的,比如接收到某信号后点亮某某灯,在这种情况下就不需要闭环。
- 是不是一定要有被控对象模型?
- NO,在笔者有限的认知里
(1) 大部分狭义的的MIL(End2End 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、软件是否有跑飞的风险都是有非常大的帮助的。
下面,我们再来讲讲HIL。HIL是Hardware-in-the-Loop Simulation的缩写。顾名思义,就是硬件在环仿真。其实“硬件”二字的含义比较宽泛,一般来说按照in the loop的深度不同可以分为三个层级:
- ECU级:也可以称之为信号级,仅仅ECU软硬件采用实物,闭环回路的其他组成部分均采用虚拟仿真系统
- EPP级:也可以称之为驱动级,EPP是Electrical Power Package的缩写, ECU及执行机构采用实物,闭环回路的其他组成部分采用虚拟仿真系统
- System级:也可以称之为机械级,系统组件采用实物,闭环回路其他组成部分采用虚拟仿真系统
为什么我们要采用HIL?这个问题可从以下几个方面来回答:
- 在某些项目的初期阶段,可能用于试验认证的MuleCar都没有造出来,因此可以利用HIL系统先行验证部分控制策略;
- 在项目开发过程中,软件Release往往比较频繁,但是整车验证的周期比较长且受各种条件限制,不可能针对每一版软件都进行整车试验,因此可以用HIL虚拟测试环境来替代部分功能性的整车验证;
- 某些测试工况(特别是FailSafe故障注入测试)风险很大,需要在HIL上先行模拟仿真测试或用HIL测试取代整车测试(试想一下如下场景:车辆180kph,转向过程中EPS电机卡死,what will happen?)
- HIL系统可以进行7*24自动化测试, 节约测试周期和人力投入(如EPS全功能故障注入测试,如手动试验,大概需要2人月,采用HIL测试可在1周内完成)
以EPS为例,HIL系统一般可以由以下几个部分构成:
- 被测的“Hardware”(ECU/EPP/EPS系统)
- 实时硬件仿真平台:用于模拟与in the loop 的Hard的电气及通讯输入输出接口,提供譬如TAS信号、电机位置信号、电流反馈信号、齿条力负载等等;接收被测Hardware发出的各种信号,传递给车辆模型(或车辆模型+转向系统模型)进行计算仿真;同时可以产生各种故障用于故障模拟。
- 实时仿真模型 用于模拟车辆在不同工况下的工作状态。一般来说包括车辆动力学模型,转向系统模型,驾驶员模型等。
- 试验管理软件 用于对试验进行管理、参数设置及监控、可视化界面输出、生成报告等等。
ECU级的EPS HIL系统
ECU级的EPS HIL系统被测对象是ECU,结构比较小巧,主要用于验证EPS的软件算法。EPS执行电机由实时硬件仿真平台(Motor Emulation)进行模拟,这一部分对模型的精度要求很高。
上图中实时模型仿真的Steering Sensor信号直接传递给了EPS软件,这种处理方法对EPS ECU厂家而言这样做是可行的(反正自家的软件,可以随便改接口);但对某些OEM而言此路不通,因为EPS软件不能从模型中直接获取转矩和转角信号,这就需要将实时仿真模型中的扭矩和转角信号传递给实时硬件平台,由实时硬件平台模拟出转矩和转角的物理信号(模拟量/PWM/SENT/PAS4/PSI5/旋变等等不同接口,详见笔者文章《简述电动转向系统扭矩转角传感器》)提供给ECU。
EPP级的EPS HIL系统
EPP级的HIL与ECU级HIL的区别在于电机采用了真实的助力电机,但仍然没有转向系统的其它机械部件,因而需要一个额外的伺服电机(磁粉制动器)来模拟齿条力负载。
System级的EPS HIL系统
系统级的EPS HIL被测对象为整套转向系统,实时仿真模型中只有整车动力学模型和驾驶员模型(不需要转向器模型和TAS模型),因此体积庞大。“实时硬件仿真平台“其实就是两个伺服电机:一个伺服电机工作于扭矩伺服模式,用于模拟齿条力负载(加载在齿条上或输出轴上均可),力矩指令由整车模型给定;另一个伺服电机工作于位置伺服模式或扭矩伺服模式,用于模拟驾驶员给方向盘各种不同的操作工况,指令由HostPC的测试用例给定。这个层级的HIL系统最接近于真实转向系统在整车的表现。
常见问题:
(1) 关于系统选型
取决于测试需求、公司技术能力及研发预算。Dspace,ETAS,Hirain等等都是比较成熟的系统供应商,当然如果对本公司技术水平足够自信的话也可以用NI板卡自己搭建,灵活性更强,造价也会相对低不少。
(2) 整车模型
VeDYNA,Carsim,IPG等都是知名的整车动力学模型供应商,但对于EPS这个应用而言,与整车模型交互的信息并不是很多,输入给整车模型的输入主要是车速、发动机转速和方向盘转角(转矩),从整车模型获取的主要参数是齿条力,某些高级一点的应用需要用到质心侧偏角和横摆角速度等等。
所以不差钱就买成熟模型,自己有技术底蕴也可以自己建车辆动力模型。但无论怎样,有两件事情是绕不过去的:
- 整车参数的获取,直接影响到模型输出的准确程度。参数不准确,哪怕使用的是知名成熟供应商的模型,也得不到准确的输出。至于如何获取准确的参数,一方面找OEM要,另一方面可以通过一些实验用状态观测的方法获取,那又是另一个Topic了。
- 一般来说,转向器模型和TAS模型需要自己搭建,可参考下图建立微分方程
(3) 测试用例
测试用例来源于系统功能需求与安全需求,一般来说分为两类:
功能与性能测试:
在不同的道路特征下(路面附着系数、水平属性、侧坡属性、凹凸属性……)目标车辆处于不同的状态(满载/轻载,不同胎压……)时,驾驶员做不同操纵工况(加减速,双移线,转角阶跃,转角脉冲,转矩阶跃,转矩脉冲,蛇形机动,稳态回转……);考察转向系统的稳定性和操纵感觉。
同上在不同工况下进行故障注入,考察整车的安全性;并检查故障是否被检测到,相应的FaultCode,DTC是否被记录,故障灯是否被点亮;是否能通过诊断会话获取相关的DTC及Snapshot?
MiL → SiL → PiL → HiL 是什么?的更多相关文章
- MIL/SIL/PIL/HIL/VIL
MIL:Model in the loop 模型在环,对模型在模型的开发环境下(如SIMULINK)进行仿真,通过输入一系列的测试用例,验证模型是否满足设计的功能需求.验证控制算法模型是否准确地实现了 ...
- 如何完成符合ISO 26262要求的基于模型设计(MBD)的测试
背景介绍 随着汽车行业的迅速发展,汽车的复杂程度不断增加,越来越多的汽车电子控制系统具有与安全相关的功能,因此对ECU的安全要求也越来越高.复杂的软件功能,将会带来大量的软件风险问题,如何保证软件的安 ...
- Dymola — 多学科系统仿真平台
Dymola 是法国Dassault Systems公司的多学科系统仿真平台,广泛应用于国内外汽车.工业.交通.能源等行业的系统总体架构设计.指标分解以及系统功能验证及优化等.Dymo ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Mac osx 安装PIL出现Some externally hosted files were ignored (use --allow-external PIL to allow).
出现这个问题Some externally hosted files were ignored (use --allow-external PIL to allow)的主要原因是PIL的一些依赖库还没 ...
- 使用Python中PIL图形库进行截屏
目的:通过使用Python的一个图形库PIL(Python Image Library)对屏幕进行截图 步骤: 1.下载PIL(路径)并安装 2.新建文件“截屏.py”,右键Edit with IDL ...
- Allegro之测量时显示两种单位(mil & mm)
首先确认你工程默认的单位是mil还是mm 例子为mils 在下面的选项中选择另外一项mm即可(如本身是mm,这里选择mils) 点击Apply,然后OK,操作测量功能,如下图所以效果:
- python PIL比较图片像素
# -*- coding: utf-8 -*- from PIL import Image from pylab import * def compare_pic_L(pic1,pic2): #打开第 ...
- 支付宝AR红包引出Python中的PIL小试
这两天支付宝AR红包火了,周围的同学全在玩.可是我一直在想这个原理是什么?通过请教大神和思考,知道了它有两个限定条件:GPS地理位置和图片的识别.所以,只要我们有了这两个限定条件,就不难进行该红包的破 ...
随机推荐
- WIN10:显示文件后缀.exe
- java数组复习和内存分配
Java基础知识复习 1.循环 1.1. for循环 for(int i =1;i<=10;i++){ System.out.println("Hello world"+i) ...
- QUIC协议详解
声明 本文可以自由转载但需注明原始链接.本文为本人原创,作者LightningStar,原文发表在博客园.本文主体内容参考论文[1]完成. 介绍 QUIC,发音同quick,是"Quick ...
- Tableau学习Step6一如何制作炫彩地图
Tableau学习Step6一如何制作炫彩地图 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一.统计地图概述 1.1 统计地图的基本概念 统计地图的本质:数据的正确对应 将数据信息和地理 ...
- LeetCode-018-四数之和
四数之和 题目描述:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 targe ...
- 调用Visual Studio的cl.exe编译C/C++程序
@ 目录 调用Visual Studio的cl.exe编译C/C++程序 前言 1.查看VS的路径 2.添加环境变量 3.查看设置是否生效 4.配置Notepad++ 调用Visual Studio的 ...
- swoole 聊天室
1:宝塔终端安装php 2:宝塔终端检测是否安装好 php-v 3:宝塔面板安装swoole扩展,终端检测 php -m 查看扩展 扩展已经安装完毕
- 高颜值测试报告- XTestRunner
Modern style test report based on unittest framework. 基于unittest框架现代风格测试报告. 特点 漂亮测试报告让你更愿意编写测试. 支持单元 ...
- 03 Java的数据类型分为两大类 类型转换 八大基本类型
数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte占1个字节范围: ...
- redis规范(实用)
redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用.通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁.通用的思想去考虑问题,而不是绑定在某种实现上. Redis 根据不同的用途 ...