Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

バリアント ブロックを含むモデルの削減

メモ

モデルを削減するためには、Simulink® Design Verifier™ ライセンスが必要です。

バリアント コンフィギュレーションの概要

モデルの階層構造にはいくつかのバリアント ブロックが含まれていることがあり、それぞれに多くのバリアントの選択があります。モデル内の各バリアントの選択は、その選択がアクティブか非アクティブかを決定するために使用される "バリアント制御" に関連付ける必要があります。これらのバリアントの選択の組み合わせは、モデル化するシステムの特定の実装を表します。また、モデル内の特定のバリアント パスに対応しています。

このようなバリアントの選択の組み合わせは、"バリアント コンフィギュレーション" を使用して表されます。一連のバリアント制御変数とその値が含まれ、それを使用してモデル内の特定のバリアント パスをアクティブにできます。モデル内で使用されているバリアント制御変数の数によっては、モデルのバリアント コンフィギュレーションの数が多くなることがあります。バリアント マネージャーを使用して、このようなバリアント コンフィギュレーションを作成および管理できます。

バリアント リデューサー

バリアント マネージャーの "バリアント リデューサー ツール" を使用して、入力モデルから選択したバリアント パスのみを含む簡略化されたスタンドアロン モデルを自動的に生成できます。生成されたモデルのことを "削減されたモデル" と呼びます。

削減されたモデルでは、親バリアント モデルから選択したバリアント コンフィギュレーションが保持されます。ツールの [削減モード] を使用して、保持するコンフィギュレーションを複数の方法で指定できます。以下に基づいてコンフィギュレーションを選択できます。

  • グローバル ワークスペースにおけるバリアント制御変数の現在の値。

  • モデル用に作成した名前付きバリアント コンフィギュレーション。

  • バリアント制御変数の指定値。

[コンパイル モード] オプションを使用して、入力モデルをシミュレーション モードでコンパイルするか、削減プロセスの一環としてコード生成モードでコンパイルするかを選択できます。

ツールによって以下の処理が実行されます。

  • 削減されたモデルで保持するように選択されたバリアント コンフィギュレーションについて、非アクティブなバリアント パスにあるモデル コンポーネントを削除する。

  • 入力モデル内のブロック、マスク、モデル参照、サブシステム参照、ライブラリ、依存ファイル (MAT ファイルや .sldd ファイルなど)、変数などのモデル コンポーネントを削除または変更して削減されたモデルを作成する。詳細については、考慮事項および制限事項を参照してください。

  • 削減されたアーティファクトをユーザー指定の出力フォルダーにパッケージ化する。

  • これらの変更の解析に役立つ削減プロセスの詳細な概要を生成する。

このツールの使用例はベンダーとサプライヤーのワークフロー向けです。

それぞれ 2 つのバリアントの選択をもつ Variant Source ブロックと Variant Subsystem ブロックを含むモデルについて考えます。条件は V==1V==2 です。次の図は、V=1 に対応するバリアント コンフィギュレーションの削減されたモデルを示しています。

Example of reducing a model with a Variant Source and Variant Subsystem block

バリアント マネージャーを使用したバリアント モデルの削減

モデルのバリアント リデューサーについて考えます。モデルには次のバリアントの選択をもつ Variant Source ブロック、Variant Sink ブロックおよび Variant Subsystem ブロックが含まれています。

  • Variant Source: V==1 および V==2

  • Variant Sink: W==1W==2 および W==3

  • Variant Subsystem: V==1 および V==2

モデルには config1 (V==1 && W==2) および config2 (V==2 && W==2) という名前の事前定義された 2 つのバリアント コンフィギュレーションがあります。これらのコンフィギュレーションは、バリアント コンフィギュレーション データ オブジェクト slexVariantReducer_config に保存されています。

Model with Variant Source, Variant Sink, and Variant Subsystem.

モデルを削減するには、次の手順を実行します。

  1. バリアント マネージャーを開きます。[モデル化] タブで、[設計] セクションを開き、[バリアント マネージャー] をクリックします。あるいは、いずれかのバリアント ブロックのバリアントのバッジを右クリックして [バリアント マネージャーで開く] を選択します。

    variant badge on variant block

    バリアント マネージャーが開き、事前定義されたコンフィギュレーションが表示されます。

    Variant Manager window.

  2. [モデルの削減] をクリックします。[バリアント リデューサー] ダイアログ ボックスが開きます。

    Variant reducer dialog box.

  3. [削減モード] セクションで、次を選択します。

    • [現在のバリアント制御値]: グローバル ワークスペースのバリアント制御変数の値に基づいてモデルを削減する場合。

      Variant Reducer dialog box with reduction mode selected as current variant control values.

    • [バリアント コンフィギュレーションの指定]: モデルに関連付けられたバリアント コンフィギュレーション データ オブジェクトで定義されている [名前付きコンフィギュレーション] についてモデルを削減する場合。

      Variant Reducer dialog box with reduction mode selected as specify variant configurations.

      メモ

      削減中に、最後に選択されたコンフィギュレーションの制御変数の値がグローバル ワークスペースに保存されます。

    • [バリアント制御値の指定]: バリアント制御変数の値を指定してモデルを削減する場合。削減されたモデルで保持するバリアント コンフィギュレーション別に、それぞれに対応する複数の変数グループを作成できます。それぞれの変数グループで、バリアント制御変数と各変数で考慮する値を指定する必要があります。

      [新しい変数グループ] をクリックします。バリアント制御値を指定するか、[値] リストから [Full-range] または [Ignored] を選択できます。

      バリアント制御値をベクトルとして指定すると、その変数のすべての組み合わせについてモデルを削減できます。たとえば、値 V = 1W = [1,2] を指定した場合、モデルは {V==1, W==1}{V==1, W==2} のコンフィギュレーションについて削減されます。

      バリアント制御値として [Full-range] を選択した場合、[参照値] 列が有効になり、モデルのコンパイルを成功させるために必要な参照値を入力できます。モデルは指定したバリアント制御変数のすべての有効な値について削減されます。バリアント制御値として [Ignored] を選択した場合、そのバリアント制御変数はモデル削減時に考慮されません。

      メモ

      全範囲のバリアント制御変数を使用するには、そのバリアント制御変数を使用するブロックの [ブロック パラメーター] ダイアログ ボックスの [バリアントのアクティベーションのタイミング][コードのコンパイル] に設定しなければなりません。

      変数グループを指定してバリアント削減を呼び出すと、削減されたモデルには、関連付けられている変数グループに対応するバリアント コンフィギュレーションが含まれます。これにより、元のモデルにある既存のバリアント コンフィギュレーションが上書きされます。

      Variant Reducer dialog box with reduction mode selected as specify variant control values.

  4. [コンパイル モード] から、シミュレーションのためにモデルをコンパイルする場合は sim、モデルの削減の一環としてコード生成モードでモデルをコンパイルする場合は codegen を選択します。モデルに [バリアント制御モード] パラメーターが sim codegen switching に設定されたバリアント ブロックが含まれている場合は、codegen を選択し、削減されたモデルでブロックのコード生成の分岐を保持できます。既定値が sim の場合、バリアント リデューサーは最上位モデルでシミュレーションの分岐をコンパイルして保持します。

  5. [信号属性を保持] を選択し、コンパイル済みの信号属性を元のモデルと削減されたモデル間で保持します。このオプションを選択すると、削減されたモデル内の適切なブロック端子に信号指定ブロックを追加することで、バリアント リデューサーはコンパイル済みの信号属性を元のモデルと削減されたモデル間で保持しようとします。コンパイル済み信号属性には、信号のデータ型、信号の次元、コンパイル済みサンプル時間などが含まれます。

  6. [詳細な概要の生成] を選択して、バリアント リデューサーの概要を出力フォルダーに生成します。バリアント リデューサーの概要には、[バリアント リデューサーのオプション][元のモデルと削減されたモデルの相違][依存アーティファクト][コールバック] および [警告] の概要が含まれます。詳細については、バリアント リデューサーの概要の生成を参照してください。

    メモ

    詳細な概要を生成するには、[Simulink Report Generator] のライセンスが必要です。

  7. [モデルの接尾辞] フィールドで値を接尾辞として指定します。モデルの接尾辞の値が、削減されたモデル、データ ディクショナリおよび関連するアーティファクトに追加されます。既定では、接尾辞は _r です。

  8. 削減されたモデルを保存する出力フォルダーを指定します。

    メモ

    [削減されたモデルを開く] チェック ボックスをオンにすると、現在作業中のフォルダーが出力フォルダーに変更されます。

  9. [削減] をクリックします。これで、必要なコンフィギュレーションに対して削減されたモデルが作成されました。関連付けられたライブラリ リンクまたは参照モデルがモデルに含まれている場合、指定されたコンフィギュレーションに対応する親が削減され、モデル内で参照されます。削減されたモデル、削減された参照モデル、削減されたライブラリは、対応するモデル、参照モデルまたはライブラリから _r ([モデルの接尾辞]) が追加された名前を取得します。

    Reduced model

バリアント リデューサーの概要の生成

バリアント リデューサーでは、削減プロセスの詳細レポートを HTML ファイルとして生成するオプションが提供されます。レポートは、削減されたアーティファクトが保存される出力フォルダーに保存されます。

メモ

バリアント リデューサーの概要を生成するには Simulink Report Generator™ のライセンスが必要です。

バリアント リデューサーの概要を使用して、次のことを実行できます。

  • 入力バリアント コンフィギュレーションおよび出力フォルダーの場所など、削減に使用される入出力オプションを検証する。

  • 次の例のように、元のモデルと削減されたモデルの差を解析する。

    • 挿入、削除、変更されたブロック。

    • 変更されたマスク。

    • 変更された依存データ ファイルまたは Simulink キャッシュ ファイル。

  • 警告を特定する。

  • コード生成の分岐のためにモデルが削減されたかどうかを特定する。

  • 削減されなかったコンポーネントを特定し、コールバック コードや Stateflow® バリアント遷移など、必要とされる可能性のある手動更新を決定する。

  • 元のモデルと削減されたモデルの対話型ビューをナビゲートする。

[バリアント リデューサー] ダイアログ ボックスからレポートを生成するには、削減中に [詳細な概要の生成] チェック ボックスをオンにします。プログラムによるモデルの削減中にレポートを生成するには、'GenerateSummary' の名前と値の引数を true に設定します。たとえば、次のコマンドは概要を生成し、それをパス L:\Models\variantReducerRpt に保存します。

addpath(fullfile(matlabroot,'examples','simulink_variants','main'));
open_system('slexVariantReducer');
Simulink.VariantManager.reduceModel...
('slexVariantReducer','NamedConfigurations', {'config1'},'GenerateSummary',true,'OutputFolder','L:\Models');

variant reducer summary

削減後の Simulink Function ブロックのバリアント条件

Simulink Function ブロックを含むモデルをブロックで利用可能ないずれかのバリアント条件またはその組み合わせについて削減した場合、削減されたモデル内の Simulink Function ブロックは無条件になります。

Variant control パラメーターの値が V==1 || V==2 || V==3 || V==4 に設定された Simulink Function ブロックを含むバリアント モデルについて考えます。このモデルをバリアント制御値 V=1, V=2, and V=3 について削減した場合、削減されたモデル内の Simulink Function ブロックは無条件になります。モデルをバリアント制御値 V=1, V=2, and V=5 について削減した場合は、削減されたモデル内の Simulink Function ブロックは条件付きのままになり、Variant control の値は V==1 || V==2 になります。

プログラムによるモデルの削減

プログラムでモデルを削減するには、以下の構文を使用します。

Simulink.VariantManager.reduceModel(model,<Name>,<Value>)

次に例を示します。

  • グローバル ワークスペースのバリアント制御変数の値に基づいてモデルを削減する場合:

    Simulink.VariantManager.reduceModel('sldemo_variant_subsystems')
  • グローバル ワークスペースのバリアント制御変数の値に基いてモデルを削減し、指定したフォルダーに格納する場合:

    Simulink.VariantManager.reduceModel('sldemo_variant_subsystems', 'OutputFolder', 'outdir')
  • 名前付きバリアント コンフィギュレーションに基づいてモデルを削減する場合:

    Simulink.VariantManager.reduceModel('sldemo_variant_subsystems'...
    ,'NamedConfigurations', {'LinInterStd','NonLinExterHighFid'})
  • バリアント制御変数の構造体の形式でコンフィギュレーションを指定してモデルを削減する場合:

    Simulink.VariantManager.reduceModel('iv_model', 'VariableConfigurations', {'V',1,'W',[1 2]})

    ここでは、{V=1, W=1}{V=1, W=2} それぞれに対応する 2 つのコンフィギュレーションが指定されます。

  • バリアント制御値 ('W' は全範囲のバリアント制御値) を指定してモデルを削減する場合:

    Simulink.VariantManager.reduceModel('slexVariantReducer',...
    'VariableConfigurations',{'V',1},'FullRangeVariables',{'W',1});

    ここでは、{V==1, W==1}, {V==1, W==2}, {V==1, W==3}、および {V==1, W==0} のそれぞれに対応する 4 つのコンフィギュレーションが計算されます。

プログラムによるモデルの削減の詳細については、reduceModelを参照してください。

考慮事項および制限事項

  • Variant Connector ブロックを含むモデルの削減はサポートされていません。

  • [バリアントのアクティベーションのタイミング] パラメーターが startup に設定されたバリアント ブロックを含むモデルの削減はサポートされていません。

  • 削減されたモデルを保存する出力フォルダーは matlabroot の下に存在してはなりません。

  • 出力フォルダーに前のモデル削減からの variant_reducer.log ファイルが含まれている場合、リデューサーは後続の削減のためにその出力内で利用可能なすべてのファイルを上書きします。

  • シミュレーション セマンティクスの一貫性を確保するために、削減されたモデルにさらなるブロックが自動的に追加されます。追加のブロックには、一貫した信号属性 (データ型、次元、実数/複素数) を実現するための Signal Specification ブロック、または接続されていない信号のために Ground ブロックと Terminator ブロックを含めることができます。

  • モデルの削減中、アクティブ パス上に存在するコメント化されたブロックは保持されますが、非アクティブ パス上に存在するコメント化されたブロックは削除されます。

  • Stateflow チャートの非アクティブな要素からのデータ型、実数/複素数、次元などの信号属性は、削減されたモデルでは保持されない可能性があります。

削減されないモデルのコンポーネント

自動的に削減されないモデルのコンポーネントには、手動での介入が必要となる場合があります。このようなアーティファクトを特定するには、モデルの削減中に [バリアント リデューサー] ダイアログ ボックスで [詳細な概要の生成] チェック ボックスをオンにしてバリアント リデューサーの概要を生成します。

  • コールバック コード:

    • InitFcnPreLoadPostLoad などのコールバック、マスク初期化コード、およびマスク パラメーターのコールバック コードは手動で変更しなければなりません。

    • 非アクティブなバリアント コンポーネントのコールバック コードは削除されます。削減されたモデルで、これは予期しない動作の原因になります。

  • モデルの削減中、バリアント遷移を含む Stateflow キャンバス内の要素は変更されません。

  • モデルが matlabroot (Simulink ライブラリ、.m ファイル、.mat ファイル、または .sldd ファイル) の下に配置されているファイルに依存している場合、モデルの削減中にこれらのファイルが変更されたり、出力フォルダーにコピーされたりすることはありません。

  • バリアント パラメーター オブジェクト (Simulink.VariantVariable クラスのインスタンス) は削減されません。

参考

関連する例

詳細