主要内容

使用Parsim记录并行模拟中的覆盖率

这个例子展示了如何在多个并行的Simulink®模拟中记录覆盖率,对应于不同的测试用例,使用SimulationInput对象万博1manbetx和帕西姆命令。如果系统上已安装并行计算工具箱,则帕西姆命令并行运行模拟。否则,模拟将串行运行。

模型概述

这个slvnvdemo_powerwindow_parsim模型包括一个电动窗控制器和一个低阶对象模型。组件slvnvdemo_powerwindow_parsim power_window_control_system /控制是参照模型的模型块slvnvdemo_powerwindow_controller,它使用Stateflow®图表实现控制器。

mdl=“slvnvdemo\u powerwindow\u parsim”;isModelOpen = bdIsLoaded (mdl);open_system (mdl);

为多个模拟设置数据

使用情景数参数。测试用例的数量决定了要运行的迭代次数。

sigEditBlk=[mdl“/输入”];numCases = str2double (get_param (sigEditBlk“NumberOfScenarios”));

创建一个万博1manbetx模拟输入对象来定义要运行的模拟集。每个SimulationInput对象对应于一个模拟,并存储在阵列中斯明.对于每个模拟,设置以下参数:

  • 活动场景指示要执行的信号编辑器块的哪个场景

  • 令人垂涎的打开覆盖率分析的步骤

  • CovSaveSingleToWokspaceVar将覆盖率结果保存到工作区变量的步骤

  • CovSaveName指定变量的名称。

对于idx=numCases:-1:1 simIn(idx)=Simu万博1manbetxlink.SimulationInput(mdl);simIn(idx)=setBlockParameter(simIn(idx),sigEditBlk,“ActiveScenario”, idx);思敏(idx) = setModelParameter(思敏(idx),“CovEnable”,“开”);simIn(idx)=setModelParameter(simIn(idx),“CovSaveSingleToWorkspaceVar”,“开”);simIn(idx)=setModelParameter(simIn(idx),“CovSaveName”,“covdata”);终止

使用Parsim并行运行模拟

使用帕西姆函数并行执行模拟。传递SimulationInput对象数组,斯明,进入帕西姆函数作为第一个参数。设置展示进展选项在MATLAB命令窗口中显示仿真过程。的输出帕西姆命令是simOut,数组万博1manbetx模拟输出物体。

simOut=parsim(simIn,“展示进步”,“开”);
[01-Sep-2021 10:50:22]检查并行池的可用性…使用连接到并行池的“本地”配置文件启动并行池(parpool)(工作线程数:4)。[01-Sep-2021 10:51:22]在并行工作线程上启动Simulink…[01-Sep-2021 10:52:30]在并行工作线程上配置模拟缓存文件夹。。。[01-Sep-2021 10:52:31]平行作业机上的加载模型…[01-Sep-2021 10:53:01]运行模拟…[0万博1manbetx1-Sep-2021 10:53:52]完成了两次模拟运行中的一次[01-Sep-2021 10:53:52]完成了两次模拟运行中的两次[01-Sep-2021 10:53:52]清理平行作业机。。。

每个万博1manbetx模拟输入对象包含存储为cv.cvdatagroup物体. 这些覆盖率结果存储在名为covdata,如CovSaveName参数。使用帕西姆运行多个模拟意味着捕获错误,以便后续模拟可以继续运行。任何错误都记录在ErrorMessageSimulationOutput对象的属性。

covdata引用包含覆盖率结果的文件。当covdata由覆盖函数使用。

simOut(1).covdata
ans=…cvdata文件:/tmp/Bdoc21b_1757077_198821/tp177031f5/ex16619798/slcov_输出/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt日期:2021年9月1日10:53:51

计算累积覆盖

从每个元素中获取覆盖率数据simOut积累结果。

coverageData=simOut(1).covdata;对于i=2:numcase coverageData=coverageData+simOut(i).covdata;终止

通过使用覆盖率高亮显示来查看模型上的累积覆盖率结果。

cvmodelview(coverageData);开放式系统(“slvnvdemo\u电动车窗\u parsim/电动车窗\u控制系统”);

生成累积覆盖率报告。

cvhtml(“cummulative_cov_report.html”,覆盖率数据);