主要内容

用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”));

创建一个数组金宝app仿真软件。SimulationInput对象来定义要运行的模拟集。每个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并行运行模拟

使用parsim函数并行执行模拟。传递SimulationInput对象数组,思敏,进入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);