主要内容

通过使用Parsim记录并行模拟中的覆盖范围

此示例显示了如何通过使用模拟浇口对象和对应于不同的测试用例的多个并行Simulink®模拟中的覆盖范围金宝appParsim命令。如果系统上安装了并行计算工具箱,则Parsim命令并行运行模拟。否则,模拟在串行中运行。

模型概述

slvnvdemo_powerwindow_parsim模型包含电源窗口控制器和低阶工厂模型。组成部分slvnvdemo_powerwindow_parsim power_window_control_system /控制是一个推荐模型的模型块slvnvdemo_powerwindow_controller使用StateFlow®Chart实现控制器。

mdl ='slvnvdemo_powerwindow_parsim';isModelOpen = bdIsLoaded (mdl);open_system (mdl);

设置多个模拟数据

通过使用使用的信号编辑器块中的测试用例数numberofscenarios.范围。测试用例的数量确定要运行的迭代次数。

sigeditblk = [mdl'/输入'];numcases = str2double(get_param(sigeditblk,“NumberOfScenarios”));

创建一个数组金宝appsimulink.simulationInpul.用于定义要运行的模拟集的对象。每个仿真对象对应于一个模拟,并存储在数组中西班.对于每个模拟,设置以下参数:

  • ActiveScenario.表示要执行的信号编辑器块的哪种情况

  • 可执行打开覆盖分析

  • CovSaveSingleToWokspaceVar将覆盖结果保存到工作区变量

  • Covsavename.以指定变量的名称。

为了idx = numcases:-1:1 simin(idx)= s金宝appimulink.simulationInput(MDL);Simin(IDX)= SetBlockParameter(Simin(IDX),SigeditBlk,“ActiveScenario”,IDX);SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),“可应合”'上');SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),'CovsaveSingletOworkSpacevar''上');SIMIN(IDX)= SETMODELPARAMETER(SIMIN(IDX),'covsavename''covdata');结尾

通过使用Parsim并行运行模拟

使用Parsim函数并行执行模拟。传递仿真量数组,西班,进入Parsim函数作为第一个参数。设置showprogress.选项显示MATLAB命令窗口中的模拟的进度。来自的产出Parsim命令是sim,一组金宝appsimulink.simulationOutput.对象。

simout = parsim(simin,'showprogress''上');
[23- 2 -2021 16:43:19]检查并行池的可用性…使用'local'配置文件启动并行池(parpool)…Connected to the parallel pool (number of workers: 4).连接到并行池。金宝app[23- 2 -2021 16:44:54]配置并行工作器的模拟缓存文件夹…平行工人的装载模型…运行模拟…[23- february -2021 16:46:13] Completed 1 of 2 simulation runs [23- february -2021 16:46:13] Completed 2 of 2 simulation runs [23- february -2021 16:46:13] clean up parallel workers…

每个金宝appsimulink.simulationInpul.对象包含存储为的记录覆盖结果cv.cvdatagroup.对象.这些覆盖结果存储在名为的字段中Covdata.,如前所述Covsavename.范围。使用Parsim运行多个模拟意味着捕获错误,以便后续的模拟可以继续运行。任何错误都记录在错误信息SimulationOutput对象的属性。

Covdata.引用包含覆盖结果的文件。来自引用文件的覆盖数据将自动加载到内存中Covdata.由覆盖功能使用。

SIMOUT(1).covdata
ans = ... cvdata文件:/tmp/bdoc21a_1606923_4016/tpe1039265/ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt日期:23-Feb-2021 16:46:12

计算累积覆盖

从每个元素获取覆盖数据sim并累积结果。

copdagedata = simout(1).covdata;为了i = 2:numcases hockagedata = copdagedata + simout(i).covdata;结尾

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

cvmodelview(copdagedata);Open_System('slvnvdemo_powerwindow_parsim / power_window_control_system');

生成累计覆盖报告。

cvhtml(“cummulative_cov_report.html”,coveragedata);