Main Content

古いリリースのモデルのモデル カバレッジの拡張

古いリリースで作成したモデルのモデル カバレッジを拡張するには、テスト生成ワークフロー、またはコード生成ワークフローを使用します。Simulink® Design Verifier™ の最新リリースの機能を活用して、モデルベース デザインのテスト ケースを生成できます。

これらのワークフローはモデル カバレッジを拡張します。

古いリリースのモデルのテスト ケースの生成によるモデル カバレッジの拡張

この例では、R2015b で作成されたモデルのモデル カバレッジのアップグレード方法を説明します。最新リリースで利用可能な、サポートされている S-Function のテスト生成を使用します。

モデル例 sldvexSFunctionHandlingExample には、ルックアップ テーブルのアルゴリズムを実装する手書きの S-Function が含まれています。手書きの S-Function は、ファイル sldvexSFunctionHandlingSFcn.c に用意されています。ルックアップ テーブルのユーザー ソース コードは、ファイル sldvexSFunctionHandlingSource.c に用意されています。

  1. MATLAB R2015b で、sldvexSFunctionHandlingExample モデルを開きます。

    open_system('sldvexSFunctionHandlingExample');
    

  2. Simulink エディターで [実行] ボタンをクリックして、モデルをシミュレートし、カバレッジ レポートを生成します。Simulink キャンバスでのモデルのカバレッジ結果の表示 (Simulink Coverage)を参照してください。

    シミュレーション後、カバレッジ レポートには sldvexSFunctionHandlingExample モデルがフル カバレッジを達成していないことが示されます。

  3. MATLAB R2018b 以降のリリースで、sldvexSFunctionHandlingExample モデルを開きます。モデル例 sldvexSFunctionHandlingExample は R2015b 以降のリリースで利用可能であるため、テスト生成のワークフローに同じモデルを使用できます。

    open_system('sldvexSFunctionHandlingExample');

    モデルに変更が加えられる可能性を回避するため、現在の作業フォルダーに古いリリースのモデルのコピーを作成した後、R2018b 以降のリリースでモデルを開きます。upgradeadvisorを使用して、現在のリリースで使用するモデルをアップグレードおよび改善できます。

  4. Simulink Design Verifier と互換性をもたせ、テスト ケースの生成が可能になるよう、slcovmex (Simulink Coverage)を使用して S-Function をコンパイルします。詳細については、テスト ケース生成のための S-Function の構成を参照してください。

    slcovmex('-sldv', ...
            '-output', 'sldvexSFunctionHandlingSFcn',...
            ['-I', fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src')], ...
            fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src',...
            'sldvexSFunctionHandlingSource.c'),...
            fullfile(matlabroot, 'toolbox', 'sldv', 'sldvdemos', 'src',...
             'sldvexSFunctionHandlingSFcn.c'));
  5. sldvexSFunctionHandlingExample モデルの opts オプションを作成します。

    opts = sldvoptions;
    opts.Mode = 'TestGeneration';
    opts.ModelCoverageObjectives = 'Condition';
    opts.SaveHarnessModel = 'off';
    opts.SaveReport = 'off';
    opts.SFcnSupport = 'on';
    
  6. 指定された opts オプションを使用してテスト ケースを生成するために、sldvrun を使用してモデルを解析します。

    [status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts);

    解析後、Simulink Design Verifier データ ファイルが生成され、既定の場所 <current_folder>\sldv_output\sldvexSFunctionHandlingExample_sldvdata.mat に格納されます。

  7. R2015b でモデルを開きます。

    open_system('sldvexSFunctionHandlingExample');
  8. R2018b 以降のリリースで作成した sldvData ファイルを読み込みます。

    1. [Design Verifier] タブで、[以前の結果の読み込み] をクリックし、R2018b 以降のリリースで生成された sldvData MAT ファイルを参照します。

    2. [開く] をクリックします。

  9. Simulink Design Verifier の [検証結果の概要] ウィンドウで、[テストをシミュレートしてモデル カバレッジ レポートを生成] をクリックします。レポートには、sldvexSFunctionHandlingExample モデルが 100% カバレッジを達成したことが示されます。

詳細については、Simulink Design Verifier データ ファイルSimulate Tests and Produce Model Coverage Reportを参照してください。

古いリリースからの生成コードを使用したモデル カバレッジの拡張

この例では、コード生成ワークフローを使用して、R2015b で作成されたモデルのモデル カバレッジをアップグレードする方法について説明します。

このワークフローには、Simulink Coder™ および Embedded Coder® がなければなりません。

モデル例 sldvCrossReleaseExample には、関係演算子の境界アルゴリズムを実装する手書きの S-Function が含まれています。手書きの S-Function は、ファイル rel_sfcn.c に用意されています。ユーザー ソース コードは、ファイル rel_comp.c に用意されています。

S-Function をインライン化するには、rel_sfcn.tlc ファイルを使用します。詳細については、Inline S-Functions with TLC (Embedded Coder)を参照してください。

  1. モデル例 sldvCrossReleaseExample および S-Function ファイル、rel_sfcn.crel_comp.c、および rel_sfcn.tlc を現在の作業フォルダーにコピーします。ヘッダー ファイル rel_comp.h を現在の作業フォルダーにコピーします。R2015b のモデル例およびサポート ファイルを使用して、リリース間のコード統合 (Embedded Coder)ワークフローを行います。

    メモ

    モデル例 sldvCrossReleaseExample は、サンプル目的として作成されています。このモデル例を使用してコード生成のワークフローを実行するには、sldvCrossReleaseExample モデルを 15b にエクスポートします。モデルを sldvCrossReleaseExample_15b として、現在の作業フォルダーに保存します。詳細については、モデルを前の Simulink バージョンにエクスポートするを参照してください。

  2. MATLAB R2015b で、現在の作業フォルダーから sldvCrossReleaseExample_15b モデルを開きます。

    open_system('sldvCrossReleaseExample_15b');
    

  3. 関数legacy_codeを使用して S-Function をコンパイルします。

    def = legacy_code('initialize');
       def.SFunctionName = 'rel_sfcn';
       def.OutputFcnSpec = 'uint8 y1 = relational_bound(uint8 u1)';
       def.HeaderFiles = {'rel_comp.h'};
       def.SourceFiles = {'rel_comp.c'};
       def.IncPaths = {pwd};
       def.SrcPaths = {pwd};
       def.Options.supportCoverageAndDesignVerifier = true;
       legacy_code('sfcn_cmex_generate', def);
       legacy_code('compile', def);
  4. Simulink エディターで [実行] ボタンをクリックして、モデルをシミュレートし、カバレッジ レポートを生成します。Simulink キャンバスでのモデルのカバレッジ結果の表示 (Simulink Coverage)を参照してください。

    シミュレーション後、カバレッジ レポートには sldvCrossReleaseExample_15b モデルが 50% カバレッジを達成したことが示されます。

  5. Embedded Coder を使用してコードを生成するには、[アプリ] タブで [Embedded Coder] を選択します。詳細については、Embedded Coder を使用したコード生成 (Embedded Coder)を参照してください。

    [C コード] タブで、[コード生成] をクリックします。

    モデルはあらかじめ、次のようにコード生成が設定されています。

    set_param(sldvCrossReleaseExample_15b,'SystemTargetFile','ert.tlc');
    set_param(sldvCrossReleaseExample_15b,'PortableWordSizes','on');
    set_param(sldvCrossReleaseExample_15b,'SupportNonFinite','off');
    set_param(sldvCrossReleaseExample_15b,'GenCodeOnly','on');
    set_param(sldvCrossReleaseExample_15b,'SolverMode','SingleTasking');
    set_param(sldvCrossReleaseExample_15b,'ProdEqTarget','on');
    

    モデルの C コードが生成され、ファイルが既定のフォルダーの場所 <current_folder>\sldvCrossReleaseExample_15b_ert_rtw に保存されます。

  6. モデルのコンフィギュレーション セット sldvCrossReleaseExample_15b を MAT ファイルに保存します。この ConfigSet は、モデルのコンフィギュレーション セットに設定するために、R2018b 以降のリリースで使用されます。

    config_set = getActiveConfigSet('sldvCrossReleaseExample_15b');
    copiedConfig = config_set.copy;
    save('copiedConfig.mat','copiedConfig');
            
  7. MATLAB R2018b 以降のリリースで、R2015b からエクスポートされたコンポーネントをインポートします。

    1. コンポーネントを現在のリリースにインポートする前に、フォルダー <current_folder>\sldvCrossReleaseExample_15b_ert_rtw にある rtwtypes.h ファイルの名前の変更または削除を行います。リリース間のインポート時、MATLAB は同じ名前のファイルを再生成しようとします。ファイル rtwtypes.h の削除または名前の変更を行わない場合、MATLAB はエラーを表示します。

    2. R2015b から生成されたコンポーネント コードをソフトウェアインザループ (SIL) ブロックとしてインポートします。

       crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',...
      'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');

      関数 crossReleaseImport は、ソフトウェアインザループ (SIL) ブロック sldvCrossReleaseExample_15b_R2015b_sil が含まれる無名のモデルを作成します。

  8. sldvCrossReleaseExample_15b_R2015b_sil ブロックに Inport 端子と Outport 端子を追加し、モデルを sldvCrossReleaseExample_sil_18b として保存します。

  9. R2015b モデルと同様のモデル コンフィギュレーション セットを適用します。

    load('copiedConfig.mat');
    attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true);
    setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
  10. シミュレーション モードを Software-in-the-Loop (SIL) に設定します。Simulink エディターで [実行] ボタンをクリックして、モデルをシミュレートします。

  11. Embedded Coder で生成されたコード用のテスト ケースを生成するには、[Design Verifier] タブで、[ターゲット][最上位モデルとして生成されたコード] を選択し、[テスト生成] をクリックします。詳細については、Embedded Coder で生成されたコードのテスト ケースの生成を参照してください。

    Simulink Design Verifier の解析後、テスト ケースが生成され、sldvData が既定の場所のフォルダー <current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b に保存されます。

  12. R2015b でモデルを開きます。

    open_system('sldvCrossReleaseExample_15b');
  13. sldvDatasldvData.ModelInfomation.Name フィールドを、古いリリースのモデルと同じ名前に更新します。たとえば、sldvCrossReleaseExample_15b.slx です。

  14. R2018b 以降のリリースで作成した sldvData を使用してハーネス モデルを作成します。このデータは、Embedded Coder の生成コードから生成されたテスト ケースで構成されます。dataFile で、sldvCrossReleaseExample_sil_18b モデルに対して生成された sldvData の場所を入力します。

    sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')

  15. すべてのテスト ケースを使用してモデルをシミュレートするには、[すべて実行] ボタン をクリックします。

    すべてのテスト ケースがシミュレートされ、カバレッジ レポートが生成されます。レポートには、sldvCrossReleaseExample_15b モデルが 100% カバレッジを達成したことが示されます。

関連するトピック