このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
古いリリースのモデルのモデル カバレッジの拡張
古いリリースで作成したモデルのモデル カバレッジを拡張するには、テスト生成ワークフロー、またはコード生成ワークフローを使用します。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',... '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. [開く] をクリックします。
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
ファイルを使用します。詳細については、TLC での S-Function のインライン化 (Embedded Coder)を参照してください。
ディレクトリから例のフォルダーに移動し、モデル例
sldvCrossReleaseExample
と S-Function ファイルrel_sfcn.c
、rel_comp.c
、およびrel_sfcn.tlc
を現在の作業フォルダーにコピーします。ヘッダー ファイルrel_comp.h
を現在の作業フォルダーにコピーします。R2015b のモデル例およびサポート ファイルを使用して、リリース間のコード統合 (Embedded Coder)ワークフローを行います。メモ
モデル例
sldvCrossReleaseExample
は、サンプル目的として作成されています。このモデル例を使用してコード生成のワークフローを実行するには、sldvCrossReleaseExample
モデルを 15b にエクスポートします。モデルをsldvCrossReleaseExample_15b
として、現在の作業フォルダーに保存します。詳細については、Export Model to Previous Version of Simulinkを参照してください。MATLAB R2015b で、現在の作業フォルダーから
sldvCrossReleaseExample_15b
モデルを開きます。open_system('sldvCrossReleaseExample_15b');
関数
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);
Simulink エディターで [実行] ボタンをクリックして、モデルをシミュレートし、カバレッジ レポートを生成します。Simulink キャンバスでのモデルのカバレッジ結果の表示 (Simulink Coverage)を参照してください。
シミュレーション後、カバレッジ レポートには
sldvCrossReleaseExample_15b
モデルが 50% カバレッジを達成したことが示されます。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
に保存されます。モデルのコンフィギュレーション セット
sldvCrossReleaseExample_15b
を MAT ファイルに保存します。このConfigSet
は、モデルのコンフィギュレーション セットに設定するために、R2018b 以降のリリースで使用されます。config_set = getActiveConfigSet('sldvCrossReleaseExample_15b'); copiedConfig = config_set.copy; save('copiedConfig.mat','copiedConfig');
MATLAB R2018b 以降のリリースで、R2015b からエクスポートされたコンポーネントをインポートします。
コンポーネントを現在のリリースにインポートする前に、フォルダー
<current_folder>\sldvCrossReleaseExample_15b_ert_rtw
にあるrtwtypes.h
ファイルの名前の変更または削除を行います。リリース間のインポート時、MATLAB は同じ名前のファイルを再生成しようとします。ファイルrtwtypes.h
の削除または名前の変更を行わない場合、MATLAB はエラーを表示します。R2015b から生成されたコンポーネント コードをソフトウェアインザループ (SIL) ブロックとしてインポートします。
crossReleaseImport('sldvCrossReleaseExample_15b_ert_rtw',... 'sldvCrossReleaseExample_15b', 'SimulationMode','SIL');
関数
crossReleaseImport
は、ソフトウェアインザループ (SIL) ブロックsldvCrossReleaseExample_15b_R2015b_sil
が含まれる無名のモデルを作成します。
sldvCrossReleaseExample_15b_R2015b_sil
ブロックに Inport 端子と Outport 端子を追加し、モデルをsldvCrossReleaseExample_sil_18b
として保存します。R2015b モデルと同様のモデル コンフィギュレーション セットを適用します。
load('copiedConfig.mat'); attachConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig, true); setActiveConfigSet('sldvCrossReleaseExample_sil_18b', copiedConfig.Name);
シミュレーション モードを
Software-in-the-Loop (SIL)
に設定します。Simulink エディターで [実行] ボタンをクリックして、モデルをシミュレートします。Embedded Coder で生成されたコード用のテスト ケースを生成するには、[Design Verifier] タブで、[ターゲット] 、 [最上位モデルとして生成されたコード] を選択し、[テストの生成] をクリックします。詳細については、Embedded Coder で生成されたコードのテスト ケースの生成を参照してください。
Simulink Design Verifier の解析後、テスト ケースが生成され、
sldvData
が既定の場所のフォルダー<current_folder>\sldv_output\sldvCrossReleaseExample_sil_18b
に保存されます。R2015b でモデルを開きます。
open_system('sldvCrossReleaseExample_15b');
sldvData
のsldvData.ModelInfomation.Name
フィールドを、古いリリースのモデルと同じ名前に更新します。たとえば、sldvCrossReleaseExample_15b.slx
です。R2018b 以降のリリースで作成した
sldvData
を使用してハーネス モデルを作成します。このデータは、Embedded Coder の生成コードから生成されたテスト ケースで構成されます。dataFile
で、sldvCrossReleaseExample_sil_18b
モデルに対して生成されたsldvData
の場所を入力します。sldvmakeharness('sldvCrossReleaseExample_15b.slx','dataFile')
すべてのテスト ケースを使用してモデルをシミュレートするには、[すべて実行] ボタン をクリックします。
すべてのテスト ケースがシミュレートされ、カバレッジ レポートが生成されます。レポートには、
sldvCrossReleaseExample_15b
モデルが 100% カバレッジを達成したことが示されます。