此示例显示了如何通过使用模拟浇口对象和对应于不同的测试用例的多个并行Simulink®模拟中的覆盖范围万博1manbetxParsim
命令。如果系统上安装了并行计算工具箱,则Parsim
命令并行运行模拟。否则,模拟在串行中运行。
这slvnvdemo_powerwindow_parsim
模型包含电源窗口控制器和低阶工厂模型。组成部分slvnvdemo_powerwindow_parsim / power_window_control_system / control
是一个推荐模型的模型块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-FEB-2021 16:43:19]检查并行池的可用性...使用“本地”配置文件...启动并行池(Parpool)...连接到并行池(工人数量:4)。[23-FEB-2021 16:44:05]在并行工人上启动Si万博1manbetxmulink ... [23-Feb-2021 16:44:54]配置并行工人的模拟缓存文件夹... [23-FEB-2021 16:44:55]在平行工人上加载模型...... [23-FEB-2021 16:45:30]运行模拟...... [23-FEB-2021 16:46:13]完成了2个模拟运行中的1个[23-2月2021年16:46:13]完成了2个模拟运行中的2个[23:46:13]清理平行工人......
每个
对象包含存储为的记录覆盖结果万博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);