主要内容

使用 Signal Editor Inputs 模块仿真框架模型

此示例说明如何通过使用 Signal Editor Inputs 模块仿真测试框架模型来生成模型覆盖率报告。您可以通过在“信号编辑器”对话框中选择活动场景来仿真单个测试用例或反例。有关详细信息,请参阅使用信号编辑器输入模块仿真框架模型

要仿真所有测试用例并测量其组合模型覆盖率,请使用 cvsimparsim 命令。

在此示例中,您通过选择信号编辑器作为框架源来生成框架模型。信号编辑器场景由与测试用例或反例关联的信号源组成。然后,要生成组合模型覆盖率报告,您可以使用 cvsimparsim 函数仿真所有场景。

1.打开模型并配置框架选项

使用 sldvharnessopts 选项为 sldvdemo_cruise_control 模型创建框架模型。将 HarnessSource 选项设置为 Signal Editor

model = 'sldvdemo_cruise_control';
open_system(model);
opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.SaveHarnessModel = 'on';
opts.HarnessSource = 'Signal Editor';
opts.HarnessModelFileName = 'sldvdemo_cruise_control_harness';
opts.SaveReport = 'off';

2.生成测试用例

使用 sldvrun 函数和 sldvoptions 分析模型。

sldvrun('sldvdemo_cruise_control', opts);
save_system('sldvdemo_cruise_control_harness');
28-Jan-2025 14:45:20
Checking compatibility for test generation: model 'sldvdemo_cruise_control'
Compiling model...done
Building model representation...done

28-Jan-2025 14:45:26

'sldvdemo_cruise_control' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 28-Jan-2025 14:45:26...

........................
28-Jan-2025 14:46:23

Completed normally.

Generating output files:

    Harness model:
    C:\Users\user\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\user.BdocJan.j2834914\sldv-ex99648832\sldv_output\sldvdemo_cruise_control\sldvdemo_cruise_control_harness.slx

28-Jan-2025 14:46:28
Results generation completed.

    Data file:
    C:\Users\user\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\user.BdocJan.j2834914\sldv-ex99648832\sldv_output\sldvdemo_cruise_control\sldvdemo_cruise_control_sldvdata.mat

3.生成组合模型覆盖率报告

Simulink Design Verifier 会自动将信号编辑器框架配置为多仿真模式。要仿真生成的测试用例并收集测试单元的覆盖率,请点击“仿真”工具条菜单上的全部运行(覆盖率) 按钮。

或者,在分析生成框架模型后,您可以使用以下应用 cvtestcvsim 函数的代码来生成组合模型覆盖率报告。

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';
test = cvtest(harnessModel);
test.modelRefSettings.enable = 'On';
test.modelRefSettings.excludeTopModel = 1;
covData = [];
for id = 1:numOfScenarios
set_param(signalEditorBlock,'ActiveScenario',id);
aCovData = cvsim(harnessModel);
if isempty(covData)
covData = aCovData;
else
covData = covData + aCovData;
end
end
save_system('sldvdemo_cruise_control_harness');
cvhtml('Coverage_Harness',covData);

您还可以选择使用以下应用 parsim 函数的代码来生成组合模型覆盖率报告。

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';

simIn  = Simulink.SimulationInput.empty(0,numOfScenarios);
for id = 1:numOfScenarios
    simIn(id) = Simulink.SimulationInput(harnessModel);
    simIn(id) = simIn(id).setBlockParameter(signalEditorBlock,'ActiveScenario', id);
    simIn(id) = simIn(id).setModelParameter('CovEnable', 'on');
    simIn(id) = simIn(id).setModelParameter('CovSaveSingleToWorkspaceVar', 'on');
end

simOut = parsim(simIn);
cvhtml('Coverage_Harness',simOut.covdata);
[28-Jan-2025 14:46:35] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'Processes' profile ...
28-Jan-2025 14:47:48: Job Running. Waiting for parallel pool workers to connect ...
Connected to parallel pool with 8 workers.
[28-Jan-2025 14:48:07] Starting Simulink on parallel workers...
[28-Jan-2025 14:48:44] Configuring simulation cache folder on parallel workers...
[28-Jan-2025 14:48:45] Loading model on parallel workers...
[28-Jan-2025 14:50:25] Running simulations...
[28-Jan-2025 14:51:00] Completed 1 of 3 simulation runs
[28-Jan-2025 14:51:00] Received simulation output (size: 7.48 KB) for run 1 from parallel worker.
[28-Jan-2025 14:51:00] Completed 2 of 3 simulation runs
[28-Jan-2025 14:51:00] Received simulation output (size: 13.48 KB) for run 2 from parallel worker.
[28-Jan-2025 14:51:00] Completed 3 of 3 simulation runs
[28-Jan-2025 14:51:00] Received simulation output (size: 13.48 KB) for run 3 from parallel worker.
[28-Jan-2025 14:51:00] Cleaning up parallel workers...

覆盖率报告表明,通过仿真 sldvdemo_cruise_control_model 的所有测试用例,实现了 100% 的覆盖率。

5.清理

% To complete this example, close the models.
close_system('sldvdemo_cruise_control_harness', 0);
close_system('sldvdemo_cruise_control', 0);