Main Content

Variant Subsystem ブロックでのバリアントの選択の定義、設定、有効化

Variant Subsystem でのバリアントの選択の表現

バリアントの選択には、モデルの 2 つ以上のコンポーネントのコンフィギュレーションがあります。次の例は、Variant Subsystem ブロック内のバリアント選択を表現する方法を示しています。Variant Subsystem ブロックでは、SubsystemModel、または Subsystem Reference ブロックの組み合わせをバリアントの選択として使用できます。設計バリアントを表現する他の方法については、Simulink のバリアントのタイプを参照してください。

  1. Variant Subsystem ブロックをモデルに追加し、ブロックに名前を付けます。

    このブロックはバリアントの選択のコンテナーとして使用します。

  2. Variant Subsystem ブロックをダブルクリックします。Variant Subsystem ブロックの入力および出力と一致するように、Inport ブロックと Outport ブロックを追加します。

  3. [ブロック パラメーター] ダイアログ ボックスを開きます。Variant Subsystem ブロック上のバッジを右クリックし、[ブロック パラメーター (Subsystem)] を選択します。

    ヒント

    Variant Subsystem ブロックのすべてのパラメーターの詳細については、Variant Subsystem, Variant Model を参照してください。

    [ブロック パラメーター] ダイアログ ボックスの [バリアントの選択肢] テーブルに、Variant Subsystem に含まれているバリアントの選択が表示されます。テーブルの左にあるボタンを使用して、テーブルの要素を追加したり変更したりできます。

    操作ボタン
    新しいサブシステムの選択を作成して追加:新規の Subsystem ブロックをバリアント選択として作成し、その新規の選択肢のエントリをテーブルに追加します。the Create and add a new subsystem choice button
    新しいモデル バリアントの選択を作成して追加します: 新規の Model ブロックをバリアント選択として作成し、その新規の選択肢のエントリをテーブルに追加します。the Create and add a new model variant choice button

    選択されている Variant オブジェクトを作成/編集: グローバル ワークスペースに Simulink.Variant オブジェクトを作成、または編集し、Simulink.Variant オブジェクトのパラメーター ダイアログ ボックスを使用してバリアントの条件を指定します。

    メモ

    ベース ワークスペースを使用するモデルの場合、この操作によって Simulink.Variant オブジェクトがベース ワークスペースに作成されます。このオブジェクトは現在の MATLAB セッションに対してのみ使用できます。データを永続的に保存するには、オブジェクトを MAT ファイルまたは MATLAB スクリプトに保存します。

    the Create or Edit selected variant object button
    選択されているバリアントの選択ブロックを開きます: 選択した行の Subsystem ブロックを開きます。the Open selected variant choice block button
    Variant Subsystem の内容のダイアログ情報を更新:バリアント選択およびグローバル ワークスペースのバリアント制御の値に応じて [バリアントの選択肢] テーブルを更新します。the Refresh dialog information from Variant Subsystem contents button

バリアントの選択として Subsystem ブロックを含める

Subsystem ブロックをバリアントの選択として Variant Subsystem ブロック内に含めるには、次の手順に従います。

  1. [ブロック パラメーター] ダイアログ ボックスで、追加するバリアント サブシステムの選択ごとに ボタンをクリックします。

    Simulink® により空の Subsystem ブロックが Variant Subsystem ブロック内に作成されます。新しいブロックには、含んでいる Variant Subsystem ブロックと同じ数の入力端子および出力端子があります

    ヒント

    バリアントの選択で入力端子と出力端子の数が異なる場合は、Variant Subsystem でのバリアントの選択の入力端子と出力端子のマッピングを参照してください。

  2. Subsystem ブロックを開き、バリアントの選択を表すモデルを作成します。

  3. バリアントのプロトタイプを作成する場合、入力または出力がない Subsystem ブロックを Variant Subsystem ブロック内に作成できます。空のサブシステムによって、バリアントの完全なモデル化の必要がない、サブシステムが非アクティブな状況が再現されます。空のバリアントの選択では、バリアントのアクティブ化条件を指定するか、条件の前に % 記号を付けてバリアント条件をコメント アウトします。

    空のバリアントの選択がコンパイル中にアクティブである場合、Simulink はそれを無視します。

バリアントの選択として Simulink モデルを含める

Simulink モデルをバリアントの選択として Variant Subsystem ブロック内に含めることができます。

  1. バリアントの選択として含めるモデルを作成します。含んでいる Variant Subsystem ブロックと同じ数の入力端子と出力端子がモデルにあることを確認します。

    メモ

    モデルに含まれる入力端子と出力端子の数が異なる場合は、Variant Subsystem でのバリアントの選択の入力端子と出力端子のマッピングを参照してください。

  2. モデルで、バリアントの選択を含む Variant Subsystem ブロックを右クリックし、[ブロック パラメーター (Subsystem)] を選択します。

  3. [ブロック パラメーター] ダイアログ ボックスで ボタンをクリックし、Model ブロックをバリアントの選択として追加します。

    Simulink により関連付けられていない Model ブロックが Variant Subsystem ブロックに作成されます。

  4. 関連付けられていない Model ブロックをダブルクリックします。[モデル名] ボックスにモデル バリアントの選択として使用するモデル名を入力し、[OK] をクリックします。

バリアント制御の設定

バリアント制御を使用して、バリアントの選択をアクティブ化する条件を指定できます。モデル内のそれぞれのバリアントの選択がバリアント制御に関連付けられますが、1 つのバリアント制御のみが true として評価されます。また、最大で 1 つのバリアントの選択を既定として指定できます。

[バリアント制御モード] パラメーターを使用してバリアント制御を指定するモードを選択できます。この例では [式] モードを使用します。ここでは、バリアント制御として、モデルのベース ワークスペースで定義されている通常の MATLAB® 変数を含む boolean の条件式を指定します。

ヒント

各種のバリアント制御モードの詳細については、バリアント制御の紹介を参照してください。

バリアント条件式でサポートされるバリアント制御変数の種類の詳細については、Types of Variant Control Variables (Operands) in Variant BlocksおよびTypes of Variant Control Variables (Operands) in Variant Parametersを参照してください。

  1. MATLAB コマンド ウィンドウで、組み合わせることでアクティブ化条件を作成するバリアント制御変数を指定します。

    mode = 3;
    version = 2;

  2. モデルのバリアントの選択のコンテナーである Variant Subsystem ブロックを右クリックし、[ブロック パラメーター (Subsystem)] を選択します。

  3. [ブロック パラメーター] ダイアログ ボックスの [バリアント制御] 列で、いずれかの選択の [(既定の設定)] を選択します。

  4. 他の各選択に対してバリアント条件を指定します。空のバリアントの選択を使用している場合、その選択に対してバリアント条件を指定するか、条件の前に % 記号を付けて既存のアクティブ化条件をコメントアウトします。

    Simulink は、バリアント制御を評価し、シミュレーション中に 1 つのバリアントの選択のみがアクティブになることを検証します。true と評価されるバリアント制御がない場合、Simulink はシミュレーションとコード生成に [(既定の設定)] のバリアントを使用します。

    [ゼロ アクティブ バリアント制御を許可] が選択されている場合、Variant Subsystem でアクティブなバリアントの選択をゼロにできます。このオプションを選択すると、アクティブなバリアントの選択がない場合に、Simulink は Variant Subsystem 内のアクティブなバリアントの選択なしでモデルのシミュレーションを行います。このパラメーターは、Variant Subsystem[(既定の設定)] のバリアントの選択がなく、[バリアント制御モード][式] に設定する場合にのみ使用できます。

  5. [適用] をクリックして変更を保存します。

    Block parameter dialog box for a Variant Subsystem with an empty variant choice, a default variant choice, and two other choices

Variant Subsystem でのバリアントの選択の入力端子と出力端子のマッピング

Variant Subsystem ブロックでは、SubsystemModel、または Subsystem Reference ブロックの組み合わせをバリアントの選択として使用できます。Variant Subsystem ブロックが上流のモデル コンポーネントから受信する入力は、バリアントの選択の入力端子と出力端子にマッピングされます。

バリアントの選択を表すブロックは、親の Variant Subsystem ブロックの入力端子および出力端子とは異なる数の入力端子および出力端子をもつことができます。ただし、次の条件を満たさなければなりません。

  • バリアントの選択は、Variant Subsystem コンテナー ブロックと同じ入力端子のセットをもつか、コンテナー ブロックの端子のサブセットでなければなりません。

  • バリアントの選択は、Variant Subsystem コンテナー ブロックと同じ出力端子のセットをもつか、コンテナー ブロックの端子のサブセットでなければなりません。

  • Variant Subsystem コンテナー ブロックに制御端子がある場合は、次のようになります。

    • バリアントの選択すべての制御端子ブロックは、Variant Subsystem ブロックと同じタイプでなければなりません。たとえば、Enabled Subsystem ブロックと Function-Call Subsystem ブロックを Variant Subsystem ブロック内の選択肢として使用することはできません。

    • Variant Subsystem ブロックの制御端子とそのバリアントの選択の対応する制御端子は、同じ名前でなければなりません。たとえば、Variant Subsystem の制御端子の名前が fcn である場合、そのバリアントの選択すべての対応する制御端子の名前も fcn でなければなりません。

Simulink のシミュレーションの実行中は、Variant Subsystem ブロックの非アクティブな端子は無効になります。

Variant Subsystem ブロックへの変換

Simulink エディターでは、次のブロックを Variant Subsystem ブロックに変換できます。

  • Subsystem ブロック

  • Model ブロック

  • Variant Model ブロック (R2017b より前のバージョンで作成されたモデル)

  • 条件付き実行サブシステム

これを行うには、ブロックを右クリックします。その後、コンテキスト メニューで [サブシステムとモデル参照][変換][Variant Subsystem] をクリックします。

これらのブロックはプログラムで Variant Subsystem ブロックに変換することもできます。これを行うには、次のいずれかの構文を使用します。

  • Simulink.VariantManager.convertToVariant(gcb)

  • Simulink.VariantManager.convertToVariant(gcbh)

次に例を示します。

addpath(fullfile(matlabroot,'examples','simulink_variants','main'));
open_system('sldemo_variant_subsystems');
Simulink.VariantManager.convertToVariant('sldemo_variant_subsystems/Controller');

Variant Model を Variant Subsystem に変換する場合、Model ブロックのパラメーター [プリプロセッサの条件を生成] の動作が Variant Subsystem ブロックのパラメーター [バリアントのアクティベーションのタイミング] と異なることに注意してください。バリアント モデルの場合、[プリプロセッサの条件を生成] パラメーターを有効にすると、シミュレーションとブロック線図の更新でコンパイルされるのはアクティブなバリアントのみになります。Variant Subsystem の場合、このパラメーターを有効にするとすべてのバリアントがコンパイルされるため、シミュレーションと更新が低速になる可能性があります。

Variant Model の Variant Subsystem への変換では Variants コマンド ライン パラメーターを使用するスクリプトの更新が必要になる可能性があります。

関連する例

詳細