用Parsim记录并行模拟中的覆盖率
这个例子展示了如何在多个并行的Simulink®模拟中记录覆盖率,这些模拟对应于不同的测试用例,通过使用SimulationI金宝appnput对象和parsim
命令。如果系统上已安装“并行计算工具箱”,则parsim
命令并行运行模拟。否则,模拟将以串行方式运行。
模型概述
的slvnvdemo_powerwindow_parsim
模型包含一个电动窗控制器和一个低阶工厂模型。组件slvnvdemo_powerwindow_parsim power_window_control_system /控制
是引用模型的模型块吗slvnvdemo_powerwindow_controller
,它使用Stateflow®图表实现控制器。
mdl =“slvnvdemo_powerwindow_parsim”;isModelOpen = bdIsLoaded(mdl);open_system (mdl);
为多个模拟设置数据
方法确定信号编辑器块中测试用例的数量NumberOfScenarios
参数。测试用例的数量决定了要运行的迭代的数量。
sigEditBlk = [mdl .' /输入'];numCases = str2double(get_param(sigEditBlk),“NumberOfScenarios”));
创建一个数组
对象来定义要运行的模拟集。每个SimulationInput对象对应于一个模拟,并存储在数组中金宝app仿真软件。SimulationInput
思敏
.对于每个模拟,设置这些参数:
ActiveScenario
来指示要执行哪个信号编辑器块的场景CovEnable
打开覆盖率分析CovSaveSingleToWokspaceVar
将覆盖结果保存到工作区变量CovSaveName
来指定变量的名称。
为simIn(idx) = Simulink.SimulationI金宝appnput(mdl);simIn(idx) = setBlockParameter(simIn(idx), sigEditBlk,“ActiveScenario”, idx);simIn(idx) = setModelParameter(simIn(idx),“CovEnable”,“上”);simIn(idx) = setModelParameter(simIn(idx),“CovSaveSingleToWorkspaceVar”,“上”);simIn(idx) = setModelParameter(simIn(idx),“CovSaveName”,“covdata”);结束
使用Parsim并行运行模拟
使用
函数并行执行模拟。传递SimulationInput对象数组,parsim
思敏
,进入parsim
函数作为第一个参数。设置ShowProgress
选项在
在MATLAB命令窗口中显示仿真进度。的输出。parsim
命令simOut
,一个数组金宝app仿真软件。SimulationOutput
对象。
simOut = parsim(simIn,“ShowProgress”,“上”);
[26-11-2022 09:35:47]检查并行池的可用性…使用'Processes'配置文件启动并行池(parpool)…[26-11-11-2022 09:36:37]在并行工作上启动Simulink…金宝app[26-11-2022 09:37:36]在并行工作者上配置模拟缓存文件夹…[26-11-2022 09:37:37]加载模型的并行工人…[26-11-2022 09:38:34]运行模拟…[26- 11 -2022 09:39:13]完成2次模拟运行中的1次[26- 11 -2022 09:39:13]清理并行工人…
每一个
对象包含存储为的已记录覆盖率结果金宝app仿真软件。SimulationInput
.这些覆盖结果存储在一个名为cv.cvdatagroup
对象covdata
,如先前由CovSaveName
参数。使用parsim
运行多个模拟意味着捕获错误,以便后续的模拟可以继续运行。任何错误都记录在ErrorMessage
属性的SimulationOutput对象。
covdata
引用包含覆盖结果的文件。引用文件中的覆盖率数据自动加载到内存中covdata
由覆盖函数使用。
simOut (1) .covdata
…cvdata文件:/tmp/Bdoc22b_2134332_1905614/tpf28ebee9/slcover -ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1。cvt日期:2022年11月26日09:39:12
计算累积覆盖率
的每个元素中获取覆盖率数据simOut
并累积结果。
coveragdata = simOut(1).covdata;为i = 2: numCases coverageData = coverageData + simOut(i).covdata;结束
通过使用覆盖高亮显示来查看模型上的累计覆盖结果。
cvmodelview (coverageData);open_system (“slvnvdemo_powerwindow_parsim / power_window_control_system”);
生成一个累积覆盖率报告。
cvhtml (“cummulative_cov_report.html”, coverageData);