Simulink 需求关联与模型测试
模型的开发往往是根据需求进行,Simulink Requirements与Simulink Test集成了需求与测试功能,以验证在需求给定的要求下,模型的性能。
这是一个简单的PI控制器模型,且PI参数都已经调整完毕。我拥有测试输入数据(error)与测试输出数据(out),接下来的操作类似于对训练好的神经网络进行验证。
![Simulink 需求关联与模型测试 - 第1张 - 模型巴巴 Simulink 需求关联与模型测试 - 第1张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-1.png)
首先,要确定是对整个模型进行测试还是仅对一个模块(子系统)进行测试。接下来主要讲对一个模块(子系统)进行测试。对于整个模型的测试,可以不需要Harness,直接引入输入端,调用测试用例即可。
1 单个子系统的测试
这里我要测试我的控制器能否在测试输入下产生测试输出。
1.1 Test Harness的产生
首先要把子系统从模型中隔离出来,我们右击controller这个模块,然后点击Test Harness、 Create for ‘controller’。弹出的界面,可以不进行更改,点击 ok 即可,得到以下测试模型。
![Simulink 需求关联与模型测试 - 第2张 - 模型巴巴 Simulink 需求关联与模型测试 - 第2张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-2.png)
接着,点击模型工具栏的Analysis、Test Manager,弹出测试管家窗口,点击左上角 New 、 Test File 来新建测试文件,这里我们取名为demo
![Simulink 需求关联与模型测试 - 第3张 - 模型巴巴 Simulink 需求关联与模型测试 - 第3张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-3.jpg)
在右侧窗口的SYSTEM UNDER TEST部分,我们选择我们要测试的模型为 demo.slx,进一步,点击下方的 TEST HARNESS 刷新后选择我们新建的Harness(由于我这边多次创建,我的harness已经编号为6)
![Simulink 需求关联与模型测试 - 第4张 - 模型巴巴 Simulink 需求关联与模型测试 - 第4张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-4.png)
![Simulink 需求关联与模型测试 - 第5张 - 模型巴巴 Simulink 需求关联与模型测试 - 第5张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-5.jpg)
1.2 载入测试数据
前面完毕后,定义测试输入与测试输出的数据集合。在Test Manager的demo树中,选中New Test Case 1,右侧窗口的右下角会有INPUTS栏与BASELINE栏(两栏默认展开),前者是输入数据文件的调用,后者是输出数据文件的调用,且看下图,注意数据文件格式
![Simulink 需求关联与模型测试 - 第6张 - 模型巴巴 Simulink 需求关联与模型测试 - 第6张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-6.png)
数据采用EXCEL表格制作,为节省,我将输入与输出放在了一个文件下,即两个sheet,每个sheet至少需要两列,默认第一列是采样时间列,这个必须有。此外,需要给每个sheet的第一行起标签,标签名需要对应于测试模块的输入输出端口名,时间列的标签可随意。展开INPUT栏,点击下方Add,选择数据集(test_data.xlsx),仅勾选输入测试数据(Error),然后点击 Map Inputs,若STATUS显示绿色,最后点击Add即可,若为红色叉叉,请检查数据文件是否满足格式要求。
![Simulink 需求关联与模型测试 - 第7张 - 模型巴巴 Simulink 需求关联与模型测试 - 第7张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-7.jpg)
![Simulink 需求关联与模型测试 - 第8张 - 模型巴巴 Simulink 需求关联与模型测试 - 第8张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-8.jpg)
之后,同样的操作,展开BASELINE CRITERIA,对测试输出进行数据导入操作。
1.3 需求的产生
需求一般以文字的形式出现,仿真结果确实数据的形式出现,Simulink如何测试模型是否满足需求?难道Simulink内部自带语义识别,可以将文字转化为数字?不是的,Simulink的需求有如下两种方式
- 代码
- 测试数据集
这里,我们仅就测试数据集进行讨论,我们可以通过文字描述需求,进而将需求与测试数据相关联,若模型的测试结果符合测试数据,则认为该需求能够被满足。
首先,我们要创建需求,即Simulink Requirements。回到我们的顶层模型(demo0.slx),右下角鼠标找到虚化的图标,可显示如下
![Simulink 需求关联与模型测试 - 第9张 - 模型巴巴 Simulink 需求关联与模型测试 - 第9张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-9.png)
点击中间的大图标,可以调出需求编辑器
![Simulink 需求关联与模型测试 - 第10张 - 模型巴巴 Simulink 需求关联与模型测试 - 第10张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-10.png)
点击绿色的新建按钮,创建新的需求集。
![Simulink 需求关联与模型测试 - 第11张 - 模型巴巴 Simulink 需求关联与模型测试 - 第11张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-11.png)
点击创建需求,编辑Summary(可修改为输出误差)
![Simulink 需求关联与模型测试 - 第12张 - 模型巴巴 Simulink 需求关联与模型测试 - 第12张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-12.png)
![Simulink 需求关联与模型测试 - 第13张 - 模型巴巴 Simulink 需求关联与模型测试 - 第13张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-13.png)
右键点击demo0slreqx可以设置该需求集,例如显示需求的部署情况与测试通过情况。左击controller模块,再右击第一条需求任意位置后,选择Link From ‘controller’以及Link From Selected Test Case,使需求与模块、测试管家相关联,更新部署状态与验证状态后,如下图,蓝色满进度表示完全部署,黄色满进度表示完全未测试
![Simulink 需求关联与模型测试 - 第14张 - 模型巴巴 Simulink 需求关联与模型测试 - 第14张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-14.png)
![Simulink 需求关联与模型测试 - 第15张 - 模型巴巴 Simulink 需求关联与模型测试 - 第15张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-15.png)
1.4 测试与结果分析
前面都做完之后,回到测试管家,点击demo树下的New Test Case 1,然后点击工具栏的Run,见下图。发现一堆叉叉,说明模型未通过,这是理所当然的(测试数据的输出原先就设定了高度不匹配)。
![Simulink 需求关联与模型测试 - 第16张 - 模型巴巴 Simulink 需求关联与模型测试 - 第16张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-16.png)
我们回到simulink顶层模型,更新需求状态,得到
![Simulink 需求关联与模型测试 - 第17张 - 模型巴巴 Simulink 需求关联与模型测试 - 第17张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-17.png)
红色表示需求完全不满足。
回到测试管家,点击结果中的Baseline Criteria Results下的out,可视化结果如下。发现误差不小。
![Simulink 需求关联与模型测试 - 第18张 - 模型巴巴 Simulink 需求关联与模型测试 - 第18张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-18.jpg)
我们可以通过调整容许的误差,产生误差带,以使需求通过(根据实际而定),这里我选择了20的绝对误差,这时候,我们的需求就满足了
![Simulink 需求关联与模型测试 - 第19张 - 模型巴巴 Simulink 需求关联与模型测试 - 第19张](https://modelbaba.com/wp-content/uploads/2022/06/Simulink-Test-19.jpg)