Main Content

マスク ワークスペースまたはモデル ワークスペースを使用してバリアント ブロックのアクティブなバリアントの選択肢を制御する方法

この例では、インライン バリアント ブロックおよび Variant Subsystem ブロックのアクティブな選択肢をマスク ワークスペースまたはモデル ワークスペースから制御するさまざまな方法を示します。バリアント ブロックの詳細については、バリアントとは、およびどのような場合にそれを使用するかを参照してください。

モデル

この例では、4 つの Simulink® モデルが緑色で強調表示され、1 つのモデルが赤色で強調表示されています。緑色のモデルは、バリアント ブロックのアクティブな選択肢を制御するための推奨方法を表しています。これらの方法では、バリアント制御変数のスコープを制限したり、名前の競合を回避したり、Variant ブロック間での変数の所有権を明確にすることができます。異なるスコープの変数に対して同じ名前を使用することもできます。

推奨方法の制限

  • [バリアント制御モード] パラメーターが [expression] に設定され、[バリアントのアクティベーションのタイミング] パラメーターが [update diagram] または [update diagram analyze all choices] に設定されている場合にのみ機能します。update diagram を使用する場合、バリアント選択肢の信号属性の整合性は Simulink で解析されず、アクティブな選択肢についてのみコードの生成が行われます。update diagram analyze all choices を使用する場合は、アクティブな選択肢と非アクティブな選択肢の信号属性が Simulink で解析されます。ただし、コードの生成はアクティブな選択肢についてのみ行われます。

  • Simulink.VariantExpressionオブジェクトまたはSimulink.Parameterをバリアント制御変数として使用することはサポートされません。

  • モデル引数変数をバリアント制御変数として使用することはサポートされません。

  • バリアント制御変数は 40 文字を超えてはなりません。

  • マスク ワークスペースから生じるバリアント制御変数は SLMASK で始めてはなりません。

方法 1: マスク パラメーターをバリアント制御変数として使用

この節では、マスク パラメーターを使用して Variant Subsystem ブロックおよびインライン バリアント ブロックのアクティブなバリアントの選択肢を制御する方法を説明します。

マスク パラメーターを使用した Variant Subsystem ブロックのアクティブな選択肢の制御

Variant Subsystem ブロック VSS1 をもつモデルについて考えます。VSS1 サブシステムで、可能なバリアントが 2 つ (x2 と x3) 指定されます。x2 の制御式は B == 1 で、x3 の制御式は B == 2 です。変数 B はマスク パラメーターです。B のプロパティを表示するには、以下を行います。

1. VSS1 サブシステムを右クリックします。

2. [マスク][マスクの編集] を選択します。[パラメーターとダイアログ] ペインの [パラメーター] の下の [プロンプト] 列では、マスク ダイアログ ボックスに表示されるパラメーターのラベルを指定し、[名前] 列ではマスク パラメーターの名前を指定します。この例では、[プロンプト]Enter the choice として指定され、[名前]B として指定されています。

3. マスク ダイアログ ボックスを開くには、VSS1 サブシステムをダブルクリックします。シミュレーション中、ここで指定した値のインデックスは基となる変数 B にマッピングされ、ブロックに関連付けられたバリアント条件式を評価するために使用されます。この例では、[Enter the choice] の既定値は 2 です。このモデルをシミュレーションするときに、バリアント条件 B == 2true として評価されます。x2 サブシステムが非アクティブになり、x3 サブシステムがアクティブになります。

4. アクティブな選択肢を変更するには、マスク ダイアログ ボックスで値 1 を指定して、モデルを再度シミュレーションします。シミュレーション中、B の値は 1 に設定され、バリアント条件 B == 1true として評価されます。x2 サブシステムがアクティブになり、x3 サブシステムが非アクティブになります。

マスク パラメーターを使用したインライン バリアント ブロックのアクティブな選択肢の制御

マスク Subsystem ブロック SS1 をもつモデルについて考えます。SS1 サブシステムはマスク パラメーター VC を持ち、これは基となる Variant Source ブロック Vsrc でバリアント制御変数として使用されています。1 番目の入力端子は制御式 VC == 1 に関連付けられ、2 番目の入力端子は制御式 VC == 2 に関連付けられています。VC のプロパティを表示するには、以下を行います。

1. SS1 サブシステムを右クリックします。

2. [マスクの編集] を選択します。[パラメーターとダイアログ] ペインの [パラメーター] の下の [プロンプト] 列では、マスク ダイアログ ボックスに表示されるパラメーターのラベルを指定し、[名前] 列ではマスク パラメーターの名前を指定します。この例では、[プロンプト]Choose the signal として指定され、[名前]VC として指定されています。

3. マスク ダイアログ ボックスを開くには、SS1 サブシステムをダブルクリックします。シミュレーション中、ここで選択した値のインデックスは基となる変数 VC にマッピングされ、Vsrc ブロックに関連付けられたバリアント条件式を評価するために使用されます。この例では、[Choose the signal] の既定値は Sine Wave です。このモデルをシミュレーションするとき、Sine Wave のインデックスである 2VC にマッピングされます。バリアント条件 VC == 2true として評価されます。その結果、VC == 1 に関連付けられている Vsrc ブロックの 1 番目の入力端子は非アクティブになり、VC == 2 に関連付けられている 2 番目の入力端子がアクティブになります。

4. アクティブな選択肢を変更するには、マスク ダイアログ ボックスで値 Constant を選択して、モデルを再度シミュレーションします。シミュレーション中、VC の値は 1 に設定され、バリアント条件 VC == 1true として評価されます。Vsrc ブロックの 1 番目の入力端子がアクティブになり、2 番目の入力端子が非アクティブになります。

方法 2: マスク初期化変数をバリアント制御変数として使用

この節では、マスク初期化変数を使用して Variant Subsystem ブロックのアクティブなバリアントの選択肢を制御する方法を説明します。この方法は、インライン バリアント ブロックのアクティブなバリアントの選択肢を制御する場合にも使用できます。

Variant Subsystem ブロック VSS2 をもつモデルについて考えます。1. VSS2 サブシステムでは、x2 の制御式は A == 1 で、x3 の制御式は A == 2 です。制御式で使用されている変数 A は、マスク ワークスペースの [コード] タブで関数を使用して定義される通常の MATLAB® 変数です。A のプロパティを表示するには、以下を行います。

a. VSS2 サブシステムを右クリックします。

b. [マスク][マスクの編集] を選択します。[コード] タブの [初期化コード] セクションで、関数 initialization() を使用して A の値を 1 に設定します。

シミュレーション中、この値はブロックに関連付けられたバリアント条件式を評価するために使用されます。このモデルをシミュレーションするときに、バリアント条件 A == 1true として評価されます。x2 サブシステムがアクティブになり、x3 サブシステムが非アクティブになります。

3. アクティブな選択肢を変更するには、[コード] タブの関数 initialization()A の値を 2 として指定してから、モデルを再度シミュレーションします。シミュレーション中に、A == 2true として評価されます。x2 サブシステムがアクティブになり、x3 サブシステムが非アクティブになります。

方法 3: モデル ワークスペース変数を Variant Subsystem ブロックのバリアント制御変数として使用

この節では、モデル ワークスペース変数を使用して Variant Subsystem ブロックのアクティブなバリアントの選択肢を制御する方法を説明します。この方法は、インライン バリアント ブロックのアクティブなバリアントの選択肢を制御する場合にも使用できます。

Variant Subsystem ブロック VSS3 をもつモデルについて考えます。1. VSS3 サブシステムでは、x2 の制御式は C == 1 で、x3 の制御式は C == 2 です。条件式で使用されている変数 C は、モデル ワークスペースで定義される通常の MATLAB® 変数です。C のプロパティを表示するには、以下を行います。

a. [モデル化] タブで [モデル エクスプローラー] をクリックします。

b. [モデルの階層構造] ペインで [モデル ワークスペース] をクリックします。C の値が 1 に設定されます。

シミュレーション中、この値はブロックに関連付けられたバリアント条件式を評価するために使用されます。このモデルをシミュレーションするときに、バリアント条件 C == 1true として評価されます。x2 サブシステムがアクティブになり、x3 サブシステムが非アクティブになります。アクティブな選択肢を変更するには、C の値を 2 として指定してから、モデルを再度シミュレーションします。シミュレーション中、バリアント条件 C == 2true として評価されます。x2 サブシステムがアクティブになり、x3 サブシステムが非アクティブになります。

方法 4: マスク初期化スクリプトを使用した Variant Subsystem ブロックのアクティブな選択肢の制御

この方法は、Variant Subsystem のアクティブなバリアントの選択肢の制御には推奨されません。ただし、サブシステムの [バリアント制御モード][Label] モードに設定されている場合、この方法を使用できます。詳細については、バリアント サブシステムのマスクを参照してください。

参考

マスク パラメーターを使用してロックされたカスタム ライブラリのバリアント サブシステムのアクティブな選択肢を制御