parsim を使用した並列シミュレーションのカバレッジの記録
この例では、SimulationInput オブジェクトおよび parsim コマンドを使用して、異なるテスト ケースに対応する Simulink® の複数の並列シミュレーションのカバレッジを記録する方法について説明します。システム上に Parallel Computing Toolbox がインストールされている場合、parsim コマンドはシミュレーションを並列実行します。そうでない場合、シミュレーションは逐次実行されます。
モデルの概要
slvnvdemo_powerwindow_parsim モデルには、パワー ウィンドウ コントローラーおよび低次のプラント モデルが含まれます。コンポーネント slvnvdemo_powerwindow_parsim/power_window_control_system/control は、Stateflow® チャートでコントローラーを実装するモデル slvnvdemo_powerwindow_controller を参照する Model ブロックです。
mdl = "slvnvdemo_powerwindow_parsim";
isModelOpen = bdIsLoaded(mdl);
open_system(mdl);

複数のシミュレーションのデータ設定
Signal Editor ブロックで NumberOfScenarios パラメーターを使用して、テスト ケースの数を特定します。テスト ケースの数によって実行する反復回数が決まります。
sigEditBlk = mdl + "/Input"; numCases = str2double(get_param(sigEditBlk,"NumberOfScenarios"));
オブジェクトの配列を作成し、実行するシミュレーションのセットを定義します。各 Simulink.SimulationInputSimulationInput オブジェクトは 1 つのシミュレーションに対応し、配列 simIn に格納されます。各シミュレーションで、以下のパラメーターを設定します。
ActiveScenario。Signal Editor ブロックのどのシナリオを実行するかを示します。CovEnable。カバレッジ解析をオンにします。CovSaveSingleToWokspaceVar。カバレッジの結果をワークスペース変数に保存します。CovSaveName。変数の名前を指定します。
for idx = numCases:-1:1 simIn(idx) = Simulink.SimulationInput(mdl); simIn(idx) = setBlockParameter(simIn(idx),... sigEditBlk,"ActiveScenario",idx); simIn(idx) = setModelParameter(simIn(idx),... "CovEnable","on"); simIn(idx) = setModelParameter(simIn(idx),... "CovIncludeTopModel","off"); simIn(idx) = setModelParameter(simIn(idx),... "CovSaveSingleToWorkspaceVar","on"); simIn(idx) = setModelParameter(simIn(idx),... "CovSaveName","covdata"); end
parsim を使用したシミュレーションの並列実行
関数 を使用して、シミュレーションを並列実行します。最初の引数として parsimSimulationInput オブジェクトの配列 simIn を関数 parsim に渡します。ShowProgress オプションを on に設定し、MATLAB コマンド ウィンドウにシミュレーションの進行状況を表示します。parsim コマンドからの出力は simOut であり、Simulink.SimulationOutput オブジェクトの配列です。
simOut = parsim(simIn,ShowProgress="on");
[12-Aug-2025 18:01:33] Checking for availability of parallel pool... [12-Aug-2025 18:01:34] Running simulations... [12-Aug-2025 18:01:53] Completed 1 of 2 simulation runs [12-Aug-2025 18:01:56] Completed 2 of 2 simulation runs
各オブジェクトには、ログ記録されたカバレッジの結果がSimulink.SimulationInputとして格納されます。これらのカバレッジの結果は、事前に cv.cvdatagroup objectsCovSaveName パラメーターによって指定されたとおり、covdata という名前のフィールドに格納されます。parsim を使用して複数のシミュレーションを実行した場合、後続のシミュレーションを継続して実行できるようにエラーがキャプチャされます。エラーはすべて SimulationOutput オブジェクトの ErrorMessage プロパティに記録されます。
covdata はカバレッジの結果が記載されたファイルを参照します。カバレッジ関数によって covdata が使用されるときに、参照ファイルのカバレッジ データが自動的にメモリに読み込まれます。
simOut(1).covdata
ans = ... cvdata
file: /tmp/Bdoc25b_2988451_566893/tp77645017/slcoverage-ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt
date: 12-Aug-2025 18:01:52
累積カバレッジの計算
simOut の各要素からカバレッジ データを取得し、結果を累積します。
coverageData = simOut(1).covdata; for i = 2 : numCases coverageData = coverageData + simOut(i).covdata; end
カバレッジの強調表示を使用して、モデル上で累積されたカバレッジの結果を参照します。
open(Simulink.BlockPath(... "slvnvdemo_powerwindow_parsim/power_window_control_system/control")); cvmodelview(coverageData);

累積カバレッジ レポートを生成します。
cvhtml("cumulativeCovReport",coverageData);