Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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

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

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

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

open_system('sldvexSFunctionHandlingExample');

cross_release_model.png

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

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

coverage_report_15a.png

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',...
        'sldvexSFunctionHandlingSource.c','sldvexSFunctionHandlingSFcn.c');
mex /tmp/Bdoc23b_2463843_1093130/tp3e0f720a_5df8_4dc0_ac6f_f1456f81f527/tpd9054d4f_9c0e_45cd_be6a_1dbfc2b45b88.c /tmp/Bdoc23b_2463843_1093130/tp3e0f720a_5df8_4dc0_ac6f_f1456f81f527/tp7541faa4_3408_4668_a5bb_71d219fa28d0.c -L/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.
mex sldvexSFunctionHandlingSource.c /tmp/Bdoc23b_2463843_1093130/tp3e0f720a_5df8_4dc0_ac6f_f1456f81f527/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc23b_2463843_1093130/tp3e0f720a_5df8_4dc0_ac6f_f1456f81f527/tp9aaa6376_f28f_4c39_9c27_1c6d6d704237.c /tmp/Bdoc23b_2463843_1093130/tp3e0f720a_5df8_4dc0_ac6f_f1456f81f527/tp6008ceaa_15a5_4fa3_9f72_d5eb90b17e4d.c -L/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.

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);
04-Dec-2023 13:00:21
Checking compatibility for test generation: model 'sldvexSFunctionHandlingExample'
Compiling model...done
Building model representation...done

04-Dec-2023 13:00:35

'sldvexSFunctionHandlingExample' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 04-Dec-2023 13:00:35...


Generating output files:

04-Dec-2023 13:00:53
Results generation completed.

    Data file:
    /tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex67693772/sldv_output/sldvexSFunctionHandlingExample/sldvexSFunctionHandlingExample_sldvdata.mat

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

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

open_system('sldvexSFunctionHandlingExample');

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

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

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

cross_release_sldv_results_summary.png

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

coverage_report_15a_full.png

詳細については、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 ファイルを使用します。詳細については、TLC での S-Function のインライン化 (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 として、現在の作業フォルダーに保存します。詳細については、Export Model to Previous Version of 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% カバレッジを達成したことが示されます。

関連するトピック