前面

搞模型代码生成,一定会经常听到这几个名字:MIL、SIL、PIL、HIL,搞得人头晕脑胀。
MIL,Model in the Loop:模型在环测试,验证控制算法的模型是否满足功能需求。
SIL,Software in the Loop:软件在环测试,在PC上验证代码与模型功能是否一致。
PIL,Processor in the Loop:处理器在环测试,在处理器上验证代码与模型功能是否一致。
HIL,Hardware in the Loop:硬件在环测试。
更详细的可以看下面这个网页,我觉得这个讲的还是比较清楚的。
简单说说MIL、SIL、PIL和HIL
这边博客准备尝试一下PIL测试,具体体会一下是什么意思(例子来自AutoMBD)。

模型搭建

PIL的本质是在处理器(芯片硬件)上进行代码与模型功能一致验证。
对于PIL来说,有两个工程是需要创建的,一个是被测模型moudle工程,一个是用于测试和对照的top工程
为了简化流程,我们可以原则一个简单的示例,比如说Sin函数。

PILmoudle

首先新建一个模型,命名PILmoudle。
拖入MBD_S32K1xx_Config_Information模块,并设置:
1、芯片基本信息
image.png
2、连接信息
image.png
拖入待测模块GFLIB_Sin_FLT,并引入输入输出端口:
image.png
这个被测模型搭建完毕,因为要关联仿真,别忘了把步长也设置成0.001,与top模型保持一致。

PILtop

因为要测试被测模型,所以要给被测模型找一个对照,所以top可以这样搭建:
image.png
一共是两条路径,一条红色代表标准的sin函数,一条蓝色代表你搭建的sin函数模型。
对于蓝色路径有下面几点需要注意:

1、如何关联被测模型?

这就要使用一个模块:
image.png
拖入之后,设置连接:
image.png

2、数据类型转换convert

convert模块不需要你人为的去设置,只要连接上,它就会自己呼应输入输出的数据类型。
image.png

3、激励用的斜坡函数

根据自己的需要设置,不绝对,只要能体现出来对比结果就行:
image.png

最后一样的设置步长0.001,就可以开始仿真,被测模型就回生成代码,然后烧录到硬件中,运行起来。
结果如下:
image.png
会发现被测对象在2pi处,开始起飞,与实际不符。
查询手册发现,输入是由要求的。
image.png
但我一直没明白,为什么是2pi处开始失真?
后来我又做了几个测试,起始点设为-pi、0、pi结果都是在2pi处开始失真,真是奇怪?
不知道有没有大佬能解释一下?

最后

例子很简单但也大致对PIL有了一个理解,加油!!!