Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Signal Editor の Inputs ブロックを使用したハーネス モデルのシミュレート

この例では、Signal Editor の Inputs ブロックを使用してテスト ハーネス モデルをシミュレートすることにより、モデル カバレッジ レポートを生成する方法を説明します。Signal Editor ダイアログ ボックスでアクティブなシナリオを選択することにより、単一のテスト ケースまたは反例をシミュレートできます。詳細については、Signal Editor の Inputs ブロックを使用したハーネス モデルのシミュレートを参照してください。

すべてのテスト ケースをシミュレートし、それらを 1 つにまとめたモデル カバレッジを測定するには、cvsim または parsim コマンドを使用します。

この例では、Signal Editor をハーネス ソースとして選択することにより、ハーネス モデルを生成します。Signal Editor のシナリオは、テスト ケースまたは反例に関連付けられている信号ソースで構成されます。そのため、1 つにまとめたモデル カバレッジ レポートを生成するには、関数 cvsim または parsim を使用して、すべてのシナリオをシミュレートします。

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');
Checking compatibility for test generation: model 'sldvdemo_cruise_control'
Compiling model...done
Building model representation...done

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

Generating tests using model representation from 06-Apr-2023 10:18:45...
........................

Completed normally.

Generating output files:

    Harness model:
    C:\Users\vshukla\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\vshukla.Bdoc23b.j2218172\sldv-ex99648832\sldv_output\sldvdemo_cruise_control\sldvdemo_cruise_control_harness.slx

Results generation completed.

    Data file:
    C:\Users\vshukla\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\vshukla.Bdoc23b.j2218172\sldv-ex99648832\sldv_output\sldvdemo_cruise_control\sldvdemo_cruise_control_sldvdata.mat

3.1 つにまとめたモデル カバレッジ レポートの生成

Simulink Design Verifier は、Signal Editor のハーネスを複数のシミュレーション モードで自動的に構成します。生成されたテスト ケースをシミュレートし、Test Unit のカバレッジを収集するには、[シミュレーション] ツールストリップ メニューの [すべて実行 (カバレッジ)] ボタンをクリックします。

あるいは、解析によってハーネス モデルが生成されたら、関数 cvtest および cvsim を使用する次のコードを使用して、1 つにまとめたモデル カバレッジ レポートを生成できます。

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 を使用する次のコードを使用して、1 つにまとめたモデル カバレッジ レポートを生成することもできます。

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);
[06-Apr-2023 10:19:40] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to parallel pool with 4 workers.
[06-Apr-2023 10:20:42] Starting Simulink on parallel workers...
[06-Apr-2023 10:21:13] Configuring simulation cache folder on parallel workers...
[06-Apr-2023 10:21:14] Loading model on parallel workers...
[06-Apr-2023 10:21:28] Running simulations...
[06-Apr-2023 10:21:39] Completed 1 of 3 simulation runs
[06-Apr-2023 10:21:39] Completed 2 of 3 simulation runs
[06-Apr-2023 10:21:39] Completed 3 of 3 simulation runs
[06-Apr-2023 10:21:40] 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);