这个例子展示了如何在多个并行的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”));
创建一个
对象来定义要运行的模拟集。每个SimulationInput对象对应于一个模拟,并存储在阵列中万博1manbetx模拟输入
斯明
.对于每个模拟,设置以下参数:
活动场景
指示要执行的信号编辑器块的哪个场景
令人垂涎的
打开覆盖率分析的步骤
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”);终止
使用
函数并行执行模拟。传递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
参数。使用帕西姆
运行多个模拟意味着捕获错误,以便后续模拟可以继续运行。任何错误都记录在ErrorMessage
SimulationOutput对象的属性。
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”,覆盖率数据);