最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
Simulink® Coverage™ がインストールされている場合、ソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) シミュレーション中にコード カバレッジ メトリクスを収集できます。コード カバレッジ データの収集 (Simulink Coverage)を参照してください。この例では、サードパーティ製ツールに関するコード カバレッジ メトリクスを収集できます (つまり、BullseyeCoverage や LDRA Testbed)。サードパーティ製ツールをインストールしなければなりません。Code Coverage Tool Supportを参照してください。
このスクリーン ショットは、コード カバレッジ ツールを有効にして SIL シミュレーションを実行することで取得された、コード カバレッジ レポートを示しています。注釈は指定したコード カバレッジ ツールによって異なります。
この例では、ノーマル モードのシミュレーション中にモデル カバレッジを測定し、同じシミュレーションを SIL モードで繰り返してコード カバレッジを測定します。モデル カバレッジおよびコード カバレッジのレポート内のハイパーリンクを使用することで、モデル カバレッジおよびコード カバレッジの結果を比較できます。
SIL と PIL のシミュレーション例については、SIL シミュレーションと PIL シミュレーションを使用した生成コードのテストを参照してください。
モデルが新しく開かれていることを確認します。
model='rtwdemo_sil_topmodel';
close_system(model,0)
open_system(model)
既存のビルド フォルダーを削除します。
buildFolder=RTW.getBuildDir(model); if exist(buildFolder.BuildDirectory,'dir') rmdir(buildFolder.BuildDirectory,'s'); end
モデル カバレッジ レポートの生成を設定します。
set_param(model, 'RecordCoverage','on') clear covCumulativeData
スティミュラス データを設定します。
T=0.1; % sample time [ticks_to_count, reset, counter_mode, count_enable, ... counter_mode_values_run1, counter_mode_values_run2, ... count_enable_values_run1, count_enable_values_run2] = ... rtwdemo_sil_topmodel_data(T);
モデルはコード カバレッジ メトリクスを収集するように設定されます。シミュレーションが完了すると、モデル カバレッジ レポートが開きます。カバレッジ表示ウィンドウを使用して、モデル内のブロックからカバレッジ レポートの対応するセクションに移動します。
counter_mode.signals.values = counter_mode_values_run1; count_enable.signals.values = count_enable_values_run1; set_param(model,'SimulationMode','normal');
対話的な表示やシミュレーション結果の比較のためのシミュレーション データ インスペクターを設定します。
Simulink.sdi.view; Simulink.sdi.clear;
シミュレーションを実行します。
simout_normal_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on');
結果を取得します。
Simulink.sdi.createRun('Run 1 (normal mode)', 'namevalue',... {'simout_normal_run1'}, {simout_normal_run1});
最初のシミュレーションで、レポートには達成したカバレッジは 100% 未満であると示されています。MC/DC カバレッジのレベルを 100% に増加させる別の入力信号を使用して、2 番目のシミュレーションを実行します。モデル カバレッジ レポートは、両方のシミュレーション実行の累積カバレッジを示すよう設定されていることに注意してください。
counter_mode.signals.values = counter_mode_values_run2; count_enable.signals.values = count_enable_values_run2; set_param(model,'SimulationMode','normal'); simout_normal_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on'); Simulink.sdi.createRun('Run 2 (normal mode)', 'namevalue',... {'simout_normal_run2'}, {simout_normal_run2});
SIL シミュレーションを実行する前に、サードパーティ製ツールが使用可能かどうか確認し、コード カバレッジ メトリクスを収集するようにモデルを設定します。サードパーティ製ツールを使用できない場合、モデルでは Simulink® Verification and Validation™ が使用されます。
covToolPath = ''; ldraPath = coder.coverage.LDRA.getPath; bullseyePath = coder.coverage.BullseyeCoverage.getPath; coverageSettings = get_param(model,'CodeCoverageSettings'); coverageSettings.TopModelCoverage='on'; if ~isempty(ldraPath) coverageSettings.CoverageTool='LDRA Testbed'; elseif ~isempty(bullseyePath) coverageSettings.CoverageTool='BullseyeCoverage'; else coverageSettings.CoverageTool='None'; end set_param(model,'CodeCoverageSettings',coverageSettings);
ノーマル モードのシミュレーションでは、モデルのカバレッジ メトリクスが生成されます。SIL シミュレーションでは、同じ入力スティミュラス信号を生成コードに適用して、コード カバレッジを測定できます。
最初のシミュレーションを SIL モードで実行します。
counter_mode.signals.values = counter_mode_values_run1; count_enable.signals.values = count_enable_values_run1; set_param(model,'SimulationMode','software-in-the-loop'); set_param(model,'CodeExecutionProfiling','off'); set_param(model,'CodeProfilingInstrumentation','off'); simout_sil_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on'); Simulink.sdi.createRun('Run 1 (SIL mode)', 'namevalue',... {'simout_sil_run1'}, {simout_sil_run1});
### Starting build procedure for: rtwdemo_sil_topmodel ### Successful completion of build procedure for: rtwdemo_sil_topmodel ### Preparing to start SIL simulation ... Building with 'gcc'. MEX completed successfully. ### Updating code generation report with SIL files ... ### Starting SIL simulation for component: rtwdemo_sil_topmodel ### Stopping SIL simulation for component: rtwdemo_sil_topmodel ### Completed code coverage analysis
2 番目のシミュレーションを SIL モードで実行します。
counter_mode.signals.values = counter_mode_values_run2; count_enable.signals.values = count_enable_values_run2; set_param(model,'SimulationMode','software-in-the-loop'); set_param(model,'CodeExecutionProfiling','off'); set_param(model,'CodeProfilingInstrumentation','off'); simout_sil_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on'); Simulink.sdi.createRun('Run 2 (SIL mode)', 'namevalue',... {'simout_sil_run2'}, {simout_sil_run2});
### Starting build procedure for: rtwdemo_sil_topmodel ### Generated code for 'rtwdemo_sil_topmodel' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of build procedure for: rtwdemo_sil_topmodel ### Preparing to start SIL simulation ... ### Starting SIL simulation for component: rtwdemo_sil_topmodel ### Stopping SIL simulation for component: rtwdemo_sil_topmodel ### Completed code coverage analysis
シミュレーションが完了したら、コマンド ウィンドウのリンクをクリックしてコード カバレッジ レポートを開き、累積コード カバレッジ結果を表示します。リンクは、サードパーティ製ツールをインストールしてある場合にのみ使用できます。
コード カバレッジ レポート内のハイパーリンクを使用して、ブロック線図内の対応する位置に移動します。カバレッジ表示ウィンドウを使用して、モデル カバレッジ レポートの対応するセクションを開くことができます。モデル カバレッジとコード カバレッジの結果を比較します。
シミュレーション データ インスペクターが自動的に開き、対話的な表示や結果の解析を行うことができます。[比較] ペインおよび [検査] ペインを使用して、SIL モードおよびノーマル モードで記録された信号が両方の実行で同一であることを確認します。
この例では次を行います。
ノーマル モードのシミュレーション中、モデル カバレッジ メトリクスの収集。
SIL シミュレーション中、コード カバレッジ メトリクスの収集。
コード カバレッジ レポートとモデル カバレッジ レポート間の移動。
両方のレポートのメトリクスを相互に確認。