主要内容

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

创建一个数组金宝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-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);