此示例显示了如何通过使用模拟浇口对象和对应于不同的测试用例的多个并行Simulink®模拟中的覆盖范围万博1manbetxParsim
命令。如果系统上安装了并行计算工具箱,则Parsim
命令并行运行模拟。否则,模拟在串行中运行。
这slvnvdemo_powerwindow_parsim
模型包含电源窗口控制器和低阶工厂模型。组成部分slvnvdemo_powerwindow_parsim power_window_control_system /控制
是一个推荐模型的模型块slvnvdemo_powerwindow_controller
使用StateFlow®Chart实现控制器。
mdl ='slvnvdemo_powerwindow_parsim';isModelOpen = bdIsLoaded (mdl);open_system (mdl);
通过使用使用的信号编辑器块中的测试用例数numberofscenarios.
范围。测试用例的数量确定要运行的迭代次数。
sigeditblk = [mdl'/输入'];numcases = str2double(get_param(sigeditblk,“NumberOfScenarios”));
创建一个数组
用于定义要运行的模拟集的对象。每个仿真对象对应于一个模拟,并存储在数组中万博1manbetxsimulink.simulationInpul.
西班
.对于每个模拟,设置以下参数:
ActiveScenario.
表示要执行的信号编辑器块的哪种情况
可执行
打开覆盖分析
CovSaveSingleToWokspaceVar
将覆盖结果保存到工作区变量
Covsavename.
以指定变量的名称。
为了idx = numcases:-1:1 simin(idx)= s万博1manbetximulink.simulationInput(MDL);Simin(IDX)= SetBlockParameter(Simin(IDX),SigeditBlk,“ActiveScenario”,IDX);SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),“可应合”那'上');SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),'CovsaveSingletOworkspacevar'那'上');SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),'covsavename'那'covdata');结尾
使用
函数并行执行模拟。传递仿真量数组,Parsim
西班
,进入Parsim
函数作为第一个参数。设置showprogress.
选项在
显示MATLAB命令窗口中的模拟的进度。来自的产出Parsim
命令是sim
,一组万博1manbetxsimulink.simulationOutput.
对象。
simout = parsim(simin,'showprogress'那'上');
[23- 2 -2021 16:43:19]检查并行池的可用性…使用'local'配置文件启动并行池(parpool)…Connected to the parallel pool (number of workers: 4).连接到并行池。万博1manbetx[23- 2 -2021 16:44:54]配置并行工作器的模拟缓存文件夹…平行工人的装载模型…运行模拟…[23- february -2021 16:46:13] Completed 1 of 2 simulation runs [23- february -2021 16:46:13] Completed 2 of 2 simulation runs [23- february -2021 16:46:13] clean up parallel workers…
每个
对象包含存储为的记录覆盖结果万博1manbetxsimulink.simulationInpul.
.这些覆盖结果存储在名为的字段中cv.cvdatagroup.
对象Covdata.
,如前所述Covsavename.
范围。使用Parsim
运行多个模拟意味着捕获错误,以便后续的模拟可以继续运行。任何错误都记录在错误信息
SimulationOutput对象的属性。
Covdata.
引用包含覆盖结果的文件。来自引用文件的覆盖数据将自动加载到内存中Covdata.
由覆盖功能使用。
SIMOUT(1).covdata
ans = ... cvdata文件:/tmp/bdoc21a_1606923_4016/tpe1039265/ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt日期:23-Feb-2021 16:46:12
从每个元素获取覆盖数据sim
并累积结果。
copdagedata = simout(1).covdata;为了i = 2:numcases hockagedata = copdagedata + simout(i).covdata;结尾
通过使用覆盖率高亮显示来查看模型上的累积覆盖率结果。
cvmodelview(copdagedata);Open_System('slvnvdemo_powerwindow_parsim / power_window_control_system');
生成累计覆盖报告。
cvhtml(“cummulative_cov_report.html”,coveragedata);