使用Parsim在并行模拟中记录覆盖
这个例子展示了如何通过使用SimulationInput对象和控件来记录不同测试用例对应的多个并行Simulink®仿真中的覆金宝app盖率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-Feb-2022 12:55:24]检查并行池的可用性…使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数量:4)。[26-Feb-2022 12:56:25]在并行工人上启动Simulink…金宝app[26-Feb-2022 12:57:23]在并行工作上配置模拟缓存文件夹…[26- 02-2022 12:57:24]在并行工人上装载模型…[26-Feb-2022 12:58:05]运行模拟…[26-Feb-2022 12:58:44]完成2次模拟运行中的1次[26-Feb-2022 12:58:44]清理并行工人…
每一个
对象包含存储为的记录覆盖率结果金宝app仿真软件。SimulationInput
.这些覆盖率结果存储在一个名为cv.cvdatagroup
对象covdata
,如前所述CovSaveName
参数。使用parsim
运行多个模拟意味着捕获错误,以便后续模拟可以继续运行。任何错误都记录在ErrorMessage
属性。
covdata
引用包含覆盖率结果的文件。引用文件中的覆盖率数据将自动加载到内存中covdata
由覆盖函数使用。
simOut (1) .covdata
Ans =…cvdata文件:/tmp/Bdoc22a_1891349_161646/tpaf1ba9b1/ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1。日期:2022年2月26日12:58:43
计算累积覆盖率
获取的每个元素的覆盖率数据simOut
然后累积结果。
coverageData = 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);