メインコンテンツ

バリアントの選択の取り扱い

R2026b

モデル内のバリアントのそれぞれの選択は、バリアント制御と呼ばれる条件式に関連付けられます。バリアント制御を指定する方法によって、アクティブなバリアントの選択が決まります。[ブロック パラメーター] ダイアログ ボックスの [バリアント制御モード] パラメーターを使用すると、バリアント ブロックのモデル化に使用するモードを [式] にするか [ラベル] にするかを選択できます。

次のイメージは、4 つのバリアントの選択を含む Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスを示しています。

  • 最初の選択肢は、バリアント制御の前に % 記号を追加することによってコメント アウトされています。

  • 2 番目の選択肢は (default) で、どのバリアント制御も true に評価されない場合に有効になります。

  • 3 番目の選択肢は式 mode==3 && version==2 が true に評価される場合に有効になります。

  • 4 番目の選択肢は式 mode==2 && version==1 が true に評価される場合に有効になります。

Block Parameters dialog box of Variant Subsystem block showing variant choices

既定のバリアントの選択

少なくとも 1 つのバリアントの選択をモデルの既定として指定できます。上記の図に示すように、Linear Controller サブシステムは既定のバリアントの選択として定義されます。モデルのコンパイル中に、どのバリアント制御も true に評価されないことが Simulink® によって検出された場合、既定の選択が使用されます。既定のバリアントの選択がアクティブにならない場合は Simulink で警告が発行され、意図と異なる可能性がある構成をモデル内で特定するのに役立ちます。

バリアント条件は、そのバリアント条件に関連付けられたブロックがアクティブにならない場合、false に設定されます。

ダイアログ ボックスでバリアントの選択を選択して、その [バリアント制御] プロパティを (default) に変更します。

アクティブなバリアント選択

バリアントのそれぞれの選択がバリアント制御に関連付けられますが、一度に 1 つのバリアント制御のみが true に評価されます。バリアント制御が true に評価された場合、Simulink はそのバリアント制御に対応するバリアント選択を有効にします。最大で 1 つのバリアント選択をアクティブにすることができます。アクティブなバリアントは、モデルがコンパイルされた後は変更できません。

この例では、mode と version に適切な値を指定することによって、バリアントの選択の Model または Nonlinear Controller のいずれかを有効にできます。

mode の値version の値アクティブなバリアント選択
21Nonlinear Controller
32Model

mode と version の値は MATLAB® コマンド ウィンドウで指定できます。

非アクティブなバリアント選択

バリアント制御によって 1 つのバリアントの選択が有効になった場合、Simulink は他のバリアントの選択を非アクティブにする必要があると判断します。Simulink はシミュレーション中に非アクティブなバリアントの選択を無視します。ただし、Simulink は非アクティブなバリアントの選択の中にあるブロックのコールバックの実行は継続します。

非アクティブな選択肢の色は既定で薄くなります。[バリアント フェージング] オプションを使用することで、退色効果を無効にすることを選択できます。[バリアント フェージング] オプションは、Simulink エディターの [デバッグ] タブにある [情報のオーバーレイ] メニューで選択可能です。get_param コマンドと set_param コマンドを使用して、非アクティブな選択肢の退色状態をプログラムによって表示または変更できます。以下に例を示します。

  • 非アクティブな選択肢の退色状態を表示するには、以下を使用します。

    get_param("bdroot","VariantFading")

  • 非アクティブな選択肢の退色効果をオンにするには、以下を使用します。

    set_param("bdroot","VariantFading","on")

空のバリアント選択

バリアントの選択のプロトタイプを作成しているときに、Variant Subsystem ブロック内の入力または出力がない、空の Subsystem ブロックを作成できます。空のサブシステムによって、バリアントの選択の完全なモデル化を必要とせずに、サブシステムが非アクティブな状況が再現されます。

Variant Subsystem ブロックで空のバリアントを選択した場合、バリアントのアクティブ化条件を指定することも、条件の前に % 記号を付けてバリアント条件をコメント アウトすることもできます。

このバリアントの選択がシミュレーション中にアクティブである場合、Simulink は空のバリアントの選択を無視します。ただし、Simulink は空のバリアントの選択の中にあるブロックのコールバックの実行は継続します。

バリアント選択肢のリスト

読み取り専用パラメーター VariantChoices を使用して Variant Subsystem ブロックでバリアント選択肢のリストを取得できます。

varchoices = get_param(gcb, "VariantChoices");

この例では、VariantChoices パラメーターは以下を返します。

List of variant choices in the variant subsystem

バリアントの選択肢の名前変更

バリアントの選択肢の名前を変更して、より説明的で意味のある名前を提供できます。

バリアントの選択肢の名前を変更するには、次のいずれかの方法を使用します。

  • [ブロック パラメーター] ダイアログ ボックスの [バリアントの選択肢] テーブルでバリアントの選択肢の名前をダブルクリックし、新しい名前を入力する。

  • Variant Subsystem ブロックを右クリックし、[開く] を選択する。次に、バリアントの選択肢の下にある名前のラベルをダブルクリックし、新しい名前を入力する。[バリアントの選択肢] テーブルの [名前] 列が自動的に更新され、新しい名前が反映されます。

  • Variant Subsystem ブロックを選択し、次のコマンドを使用する:

    set_param(gcb+"/choiceName","Name","newChoiceName")

    ここで、choiceName は、newChoiceName に置き換える既存のバリアントの選択肢の名前です。

アクティブなバリアントを開く

モデルを開くと、最後にモデルを保存したときにアクティブだったバリアントの名前がバリアント ブロックに表示されます。

アクティブなバリアントを開くには、以下のオプションのいずれかに従います。

  • Variant Subsystem ブロックをダブルクリックして、アクティブなバリアントをブロック内で直接開く。

    Model ブロックをバリアントの選択肢としてもつ Variant Subsystem ブロックでは、アクティブな Model ブロックへのダブルクリックによる移動の動作が Model ブロックの読み込み状況に応じて異なります。Model ブロックが読み込まれていない場合、Variant Subsystem ブロックをダブルクリックすると Variant Subsystem のレイヤーが開き、基になるバリアントの選択肢が表示されます。その後、Model ブロックをダブルクリックすると、その中にあるブロックが表示されます。Model ブロックが既に読み込まれている場合は、Variant Subsystem ブロックをダブルクリックしたときに Variant Subsystem のレイヤーはスキップされます。アクティブな Model ブロックが直接開き、その中にあるブロックが表示されます。

  • Variant Subsystem ブロックを右クリックして、[バリアントに移動] 、 [(アクティブなバリアント)] を選択します。

  • Variant Subsystem ブロックのバッジを右クリックして [開く] を選択し、アクティブなバリアントを選択する。

現在アクティブな選択を見つけるには、次のコマンドを使用します。

get_param(gcb,"CompiledActiveChoiceControl")

現在アクティブな選択へのパスを見つけるには、次のコマンドを使用します。

get_param(gcb,"CompiledActiveChoiceBlock")

メモ

  • CompiledActiveChoiceBlock パラメーターは、Variant Subsystem ブロックでのみサポートされています。

  • アクティブなバリアントは、モデルがコンパイルされた後は変更できません。

参考

トピック