このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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'));
オブジェクトの配列を作成し、実行するシミュレーションのセットを定義します。各 SimulationInput オブジェクトは 1 つのシミュレーションに対応し、配列 Simulink.SimulationInput
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),... 'CovSaveSingleToWorkspaceVar','on'); simIn(idx) = setModelParameter(simIn(idx),... 'CovSaveName','covdata'); end
parsim を使用したシミュレーションの並列実行
関数
を使用して、シミュレーションを並列実行します。最初の引数として SimulationInput オブジェクトの配列 parsim
simIn
を関数 parsim
に渡します。ShowProgress
オプションを on
に設定し、MATLAB コマンド ウィンドウにシミュレーションの進行状況を表示します。parsim
コマンドからの出力は simOut
であり、Simulink.SimulationOutput
オブジェクトの配列です。
simOut = parsim(simIn, 'ShowProgress', 'on');
[04-Aug-2023 00:44:51] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'Processes' profile ... Connected to parallel pool with 4 workers. [04-Aug-2023 00:45:42] Starting Simulink on parallel workers... [04-Aug-2023 00:46:41] Configuring simulation cache folder on parallel workers... [04-Aug-2023 00:46:42] Loading model on parallel workers... [04-Aug-2023 00:47:43] Running simulations... [04-Aug-2023 00:48:29] Completed 1 of 2 simulation runs [04-Aug-2023 00:48:29] Completed 2 of 2 simulation runs [04-Aug-2023 00:48:29] Cleaning up parallel workers...
各
オブジェクトには、ログ記録されたカバレッジの結果がSimulink.SimulationInput
として格納されます。これらのカバレッジの結果は、事前に cv.cvdatagroup
objectsCovSaveName
パラメーターによって指定されたとおり、covdata
という名前のフィールドに格納されます。parsim
を使用して複数のシミュレーションを実行した場合、後続のシミュレーションを継続して実行できるようにエラーがキャプチャされます。エラーはすべて SimulationOutput オブジェクトの ErrorMessage
プロパティに記録されます。
covdata
はカバレッジの結果が記載されたファイルを参照します。カバレッジ関数によって covdata
が使用されるときに、参照ファイルのカバレッジ データが自動的にメモリに読み込まれます。
simOut(1).covdata
ans = ... cvdata file: /tmp/Bdoc23b_2347338_114237/tp930e6f4d/slcoverage-ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt date: 04-Aug-2023 00:48:28
累積カバレッジの計算
simOut
の各要素からカバレッジ データを取得し、結果を累積します。
coverageData = simOut(1).covdata; for i = 2 : numCases coverageData = coverageData + simOut(i).covdata; end
カバレッジの強調表示を使用して、モデル上で累積されたカバレッジの結果を参照します。
cvmodelview(coverageData);
open_system('slvnvdemo_powerwindow_parsim/power_window_control_system');
累積カバレッジ レポートを生成します。
cvhtml('cummulative_cov_report.html', coverageData);