生成された C++ コードのシミュレーションと検証
チュートリアルのこのステップでは、生成コードによって提供される結果が、Simulink® でモデル化されたアルゴリズムの結果と数値的に等価であることを検証します。テスト ハーネス モデルを作成してノーマル モードおよびソフトウェアインザループ モードで CppClassWorkflowKeyIgnition のシミュレーションを実行してから、シミュレーション データ インスペクターを使用してシミュレーションを比較します。
一般的に、生成されたコードをテストするには、ソフトウェアインザループ (SIL) シミュレーションとプロセッサインザループ (PIL) シミュレーションを実行します。SIL シミュレーションでは、生成されたコードを開発用コンピューターでコンパイルおよび実行します。PIL シミュレーションでは、ソース コードを開発用コンピューターでクロスコンパイルします。その後、PIL シミュレーションではターゲット プロセッサまたは同等の命令セット シミュレーターでオブジェクト コードをダウンロードして実行します。SIL および PIL シミュレーションで次を行うことができます。
コードの数値動作を検証する。
コード カバレッジと実行時メトリクスを収集する。
IEC 61508、IEC 62304、ISO 26262、EN 50128、または DO-178 認証の達成を目指して進める。
テスト ハーネスの作成
このセクションでは、テスト対象モデルである CppClassWorkflowKeyIgnition を参照するために、空の Simulink モデルからテスト ハーネス CppClassHarness を作成します。Simulink Test™ ライセンスをお持ちの場合は、簡略化されたワークフローを使用して、コンポーネント モデルからテスト ハーネスを作成できます。詳細については、Create or Import Test Harnesses and Select Properties (Simulink Test)を参照してください。
ハーネス モデルにより、参照モデルに対するテスト入力が生成されます。
モデル
CppClassWorkflowKeyIgnitionを開きます。openExample("CppClassWorkflowKeyIgnition.slx");モデル エクスプローラーを開きます。[モデル化] タブの [設計] で [モデル エクスプローラー] をクリックします。
モデル エクスプローラーで、モデル
CppClassWorkflowKeyIgnitionのコンフィギュレーションをエクスポートします。[モデルの階層構造] の下で [Simulink Root] を展開し、[CppClassWorkflowKeyIgnition] を右クリックして、[コンフィギュレーション]、[アクティブなコンフィギュレーション セットのエクスポート] を選択します。
[エクスポート] ダイアログ ボックスで、コンフィギュレーションを
cpp_sil_configurationとして保存します。
モデル エクスプローラーのツール バーで、
をクリックして新しいモデルを作成します。新しい無題のモデルを
CppClassHarnessとして保存します。保存したコンフィギュレーションをハーネス モデル
CppClassHarnessにインポートします。[モデルの階層構造] の下で [CppClassHarness] を右クリックし、[コンフィギュレーション]、[インポート] を選択します。
[インポート] ダイアログ ボックスで
cpp_sil_configurationを選択し、[開く] をクリックします。確認のダイアログ ボックスが開いた場合は、[OK] をクリックしてコンフィギュレーションを保存します。次に、モデル エクスプローラーで [CppClassHarness] を右クリックし、モデルを保存します。
モデル エクスプローラーを閉じます。
この時点で、ハーネス モデルはテスト対象モデル (
CppClassWorkflowKeyIgnition) と同じコンフィギュレーション パラメーターを使用するように構成されています。各モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスを開いて設定を比較することで、コンフィギュレーション パラメーターがインポートされていることを確認できます。ハーネス モデル
CppClassHarnessの Simulink キャンバスで、出力端子とパルス発生器の間にPulse Generatorブロックを 1 つ、Outportブロックを 2 つ、Modelブロックを 1 つ追加します。Model ブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスで、以下を行います。
[モデル名] の下で [参照] をクリックし、
CppClassWorkflowKeyIgnitionを選択します。[開く] をクリックし、[OK] をクリックします。
Pulse Generator ブロックを Model ブロック
CppClassWorkflowKeyIgnitionのkeyState入力端子に接続し、2 つの Outport ブロックを Model ブロックCppClassWorkflowKeyIgnitionのengineState出力端子およびcycleTime出力端子に接続します。
Pulse Generator ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。[ブロック パラメーター] ダイアログ ボックスで、以下を行います。
[パルス タイプ] を
[サンプル ベース]に設定する。[振幅] を
2に設定する。[周期 (サンプル数)] を
200に設定する。[パルス幅 (サンプル数)] を
2に設定する。[位相遅延 (サンプル数)] を
200に設定する。[サンプル時間] を
0.01に設定する。その他のオプションは既定の設定のままにする。
[OK] をクリックします。
最上位の入力および出力の信号線にラベルを追加します。
パルス発生器を Model ブロックに接続する信号線をダブルクリックし、「
input」と入力する。Model ブロックを
engineState出力端子に接続する信号線をダブルクリックし、「outputState」と入力する。

CppClassHarnessの [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[データのインポート/エクスポート] ペインで、[信号のログ] を選択します。[OK] をクリックします。
モデルを保存します。
ノーマル モードでのモデルのシミュレーション
ハーネス モデルをノーマル モードで実行し、シミュレーション データ インスペクターで結果を取得します。
ハーネス モデルで、[モデル化] タブを選択して [モデル データ エディター] をクリックし、モデル データ エディターを開きます。
モデル データ エディターで、[信号] タブを選択します。
ドロップダウン リストの設定を
[設計]から[インストルメンテーション]に変更します。データ テーブルの [名前] 列で
input信号およびoutputState信号を見つけ、[ログ データ] 列の対応するチェック ボックスをオンにします。
[ログ データ] 列のチェック ボックスをオンにすることで、シミュレーション データがシミュレーション データ インスペクターに記録される信号が指定されます。
Model ブロック
CppClassWorkflowKeyIgnitionを右クリックし、続いて [ブロック パラメーター] ボタン
をクリックします。[ブロック パラメーター] ダイアログ ボックスで、[シミュレーション モード] が
[ノーマル]に設定されていることを確認します。[OK] をクリックします。[実行] をクリックして
CppClassHarnessのシミュレーションを実行します。シミュレーションが完了したら、シミュレーション データ インスペクターでシミュレーション結果を確認します。シミュレーション データ インスペクターがまだ開いていない場合、[シミュレーション] タブの [結果の確認] で [データ インスペクター] をクリックします。
最新 (現在) の実行について、実行名フィールドをダブルクリックし、実行の名前を
CppClassHarness: Normal modeに変更します。inputおよびoutputStateを選択して信号をプロットします。
SIL モードでのモデルのシミュレーション
次に、ハーネス モデルを SIL モードで実行します。SIL シミュレーションでは、開発用コンピューターでコードを生成、コンパイル、実行します。シミュレーション データ インスペクターは結果をログに記録します。
CppClassHarnessモデル ウィンドウで、CppClassWorkflowKeyIgnitionモデル ブロックを右クリックし、[ブロック パラメーター] ボタン
をクリックします。[ブロック パラメーター] ダイアログ ボックスで、[シミュレーション モード] を
Software-in-the-loop (SIL)に、[コード インターフェイス] をTop modelに設定します。[OK] をクリックします。Model ブロックで、最上位モデルでシミュレーションが SIL モードで実行されることが示されます。
CppClassHarnessモデルのシミュレーションを実行します。[診断ビューアー] パネルが開き、ビルドとコード生成のステータスが表示されます。コード生成レポートのウィンドウが開いた場合は、このチュートリアルの後半で調査するためにそのウィンドウを最小化します。
シミュレーションが完了したら、シミュレーション データ インスペクターで実行名フィールドをダブルクリックし、新しい実行の名前を
CppClassHarness: SIL modeに変更します。inputおよびoutputStateを選択して信号をプロットします。
シミュレーション結果の比較
シミュレーション データ インスペクターを使用して、シミュレーション結果を比較します。
シミュレーション データ インスペクターで、[比較] タブをクリックします。
[ベースライン] フィールドで、
CppClassHarness: Normal modeを選択します。[比較対象] フィールドで、
CppClassHarness: SIL modeを選択します。[比較] をクリックします。
シミュレーション データ インスペクターに、ノーマル モードと SIL モードの結果が一致することが示されます。同様の方法で、ノーマル モードと PIL モードの結果を比較できます。ノーマル モード シミュレーションと SIL シミュレーションおよび PIL シミュレーションの結果を比較すると、生成されたアプリケーションが想定どおりに実行されることを確認するのに役立ちます。

あるいは、SIL/PIL マネージャーアプリを使用して、生成されたモデル コードを検証する簡略化されたワークフローを実行することもできます。
次は、生成されたコードの展開方法を確認します。