バリアント ソースおよびバリアント シンクによるバリアント条件の伝播
バリアント条件の伝播の動作方法
Variant Source ブロックおよび Variant Sink ブロックを含むモデルでバリアント条件を指定すると、Simulink® はバリアント ブロックで指定されたバリアント制御を評価し、接続しているブロックにバリアント条件を自動的に伝播して、シミュレーション中にアクティブになるモデルのコンポーネントを決定します。Simulink は次に非アクティブな選択肢に関連付けられているモデル コンポーネントのアクティベーションを停止して、アクティブな接続を可視化します。Simulink は [バリアントのアクティベーションのタイミング] ブロック パラメーターを使用して、アクティブなバリアントの選択を選択する際に時間枠を決定します。バリアントのアクティベーションのタイミングの詳細については、Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。
メモ
モデル コンポーネントに表示されるバリアント条件の注釈を使用すると、伝播された条件を可視化できます。
バリアント条件の注釈を表示するには、[デバッグ] タブで、[情報のオーバーレイ] 、 [バリアント凡例]を選択します。
[バリアント凡例] が使用できない場合、[デバッグ] タブで、[情報のオーバーレイ] 、 [バリアント条件]を選択します。
入力と出力の相互干渉
このモデルでは、Variant Source ブロックにバリアント条件 Var == 1
と Var==2
をそれぞれもつ入力が 2 つあります。Variant Source ブロックへの 1 番目の入力はブロックに接続する前に 2 番目の入力に分岐します。バリアント条件 Var==2
をもつ 2 番目の入力は既定のバリアントの選択です。
シミュレーション中に、このモデルは 3 つの動作モードを示します。
バリアント条件 | アクティブな選択肢 |
---|---|
Var == 1 |
|
Var == 1 || Var == 2 | Variant Source の 2 番目の入力と 1 番目の入力の分岐。 |
Var == 2 | Variant Source の 2 番目の入力。 |
カスケード ブロックと複合条件
このモデルでは、Variant Source A
と Variant Source B
はそれぞれ 2 つの入力端子によってカスケード接続されている 2 つの Variant Source ブロックです。Variant Source A
への入力は VarA == 1
または VarA == 2
の場合にアクティブになります。Variant Source A
の出力は、Variant SourceB
の一方の入力に分岐します。Variant SourceB
への入力は VarB == 1
または VarB == 2
の場合にアクティブになります。
シミュレーション中に、このモデルは 8 つの動作モードを示します。
バリアント条件 | アクティブな選択肢 |
---|---|
VarA == 1 && VarB == 1 |
|
VarA == 1 && VarB == 2 | Variant Source A の 1 番目の入力と Variant Source B の 2 番目の入力。 |
VarA == 2 && VarB == 1 | Variant Source A の 2 番目の入力と Variant Source B の 1 番目の入力。 |
VarA == 2 && VarB == 2 | Variant Source A と Variant Source B の 2 番目の入力。 |
VarA == 1 && VarB != (1,2) | Variant Source A の 1 番目の入力。 |
VarA == 2 && VarB != (1,2) | Variant Source B の 2 番目の入力。 |
VarA != (1,2) && VarB == 1 | なし |
VarA != (1,2) && VarB == 2 | Variant Source B の 2 番目の入力。 |
VarA != (1,2) && VarB != (1,2) | なし |
ソースまたはシンクの階層的な入れ子
このモデルでは、複数の Variant Source ブロックを使用してバリアントの選択の階層的な入れ子を作成し、センター入力に変化を提供します。センサーの複数の選択肢は最初はシリーズ A Series
、B Series
および C Series
によってグループ化されています。Variant Source ブロック Device Model
はいずれかのシリーズからセンサーを選択します。次に Vendor
は Device Model
および XSensor
によって提供されるセンサーの選択肢から選択します。
Simulink は複雑なバリアント制御条件を伝播し、コンパイル中にどのモデル コンポーネントがアクティブであるかを判断します。
詳細については、バリアント ソースとバリアント シンクの階層的な入れ子を参照してください。
正味のバリアント条件
正味のバリアント条件は、ローカル条件とその祖先条件の合計です。
このモデルでは、Variant Source
と Variant Source1
はバリアント条件 V==1
と W==1
をそれぞれもつ 2 つの単入力/単出力 Variant Source ブロックです。[ゼロ アクティブ バリアント制御を許可] パラメーターは両方のバリアント ブロックに対して on
に設定されています。このオプションが選択され、アクティブなバリアントの選択がない場合、Simulink は Variant Source ブロックの入力ストリームおよび出力ストリームに接続されているすべてのブロックを無効にします。
このモデルをシミュレーションする場合、Variant Source1
ブロックおよび Subsystem ブロック内の他のブロックは、Variant Source1
ブロックから伝播されたローカル条件 W==1
を受信します。祖先条件 V==1
は、Variant Source
ブロックから Subsystem ブロックに伝播されます。そのため、Variant Source1
ブロックおよび Subsystem ブロック内の他のブロックの正味バリアント条件は V==1 && W==1
となります。[ゼロ アクティブ バリアント制御を許可] パラメーターが Variant Source ブロックに対して off
に設定されている場合、Subsystem ブロックの条件は W==1
です。
サブシステムの条件伝播
バリアント条件によって Subsystem ブロックをアクティブにしたり非アクティブにしたりできますが、バリアント条件をサブシステム内に伝播させることはできません。バリアント条件がサブシステム内の端子で発生する場合、Subsystem ブロックは出力端子からバリアント条件を伝播できます。
サブシステムは、[ブロック パラメーター] ダイアログ ボックスで行った選択に応じて、バーチャル (グループまたは非グループ) または Atomic サブシステムのいずれかになります。
グループ化されたバーチャル: [バリアント条件の伝播時にはグループとして処理] チェック ボックスをオンにします。グループ化されたバーチャル サブシステムには連続した線があります。
グループ化されていないバーチャル: [バリアント条件の伝播時にはグループとして処理] チェック ボックスをオフにします。グループ化されていないバーチャル サブシステムには点線があります。
Atomic: [Atomic サブシステムとして扱う] チェック ボックスをオンにします。Atomic バーチャル サブシステムには実線があります。
Simulink は、これらのサブシステム タイプに対して異なる方法でバリアント条件を伝播します。
このモデルには、Variant Source2
ブロックへの入力として 3 種類のサブシステムが提供されています。
グループ化されたバーチャル サブシステムは、
V == 1
の場合に有効になります。Simulink はバリアントのアクティブ化条件をサブシステム内のすべてのブロックに伝播します。グループ化されていないバーチャル サブシステムは
V == 2
の場合に有効になります。Simulink は、サブシステムがバーチャルとマーキングされている間にサブシステム内で利用可能であったブロックに対して、バリアントのアクティブ化条件を伝播します。Atomic サブシステムは、
V == 3
の場合に有効になります。Simulink はバリアントのアクティブ化条件をこのサブシステムに伝播しません。
詳細については、Variant Source ブロックから Subsystem ブロックへのバリアント条件の伝播を参照してください。
他の Simulink ブロックの条件の伝播
Model ブロックのバリアント条件の伝播
Simulink では、バリアント条件を伝播する前に参照モデルがコンパイルされます。バリアント条件によって Model ブロックをアクティブにしたり非アクティブにしたりできますが、バリアント条件を参照モデル内に伝播させることはできません。バリアント条件がモデル内の端子で発生する場合、Model ブロックはインターフェイス (入力端子、出力端子、または制御端子) からバリアント条件を伝播できます。
次の例では、バリアント条件 V==1
によって Model ブロック iv_20_model_reference_sub
を有効にします。ただし、ブロックによって参照されるモデルにはこの条件は伝播しません。Model ブロック iv_20_model_reference_sub2
は、その出力端子から同じバリアント条件を伝播します。
Simulink Function ブロックのバリアント条件の伝播
Simulink Function ブロックとのインターフェイスをもつ Argument Inport ブロックおよび Argument Outport ブロックは、Variant Source ブロックまたは Variant Sink ブロックに接続できません。1 つのバリアント条件によって Simulink Function 全体を制御しなければなりません。
slexVariantSimulinkFunctionInherit
モデルについて考えます。
次の例では、Simulink Function ブロックの中の関数呼び出し端子ブロックで、[バリアント条件を有効にする] オプションがオンになっています。(inherit)
キーワードは [バリアント制御] パラメーターの値を指定するために使用します。その結果、Simulink Function ブロックはモデル内の対応する Function Caller ブロックからバリアント条件を継承します。[プリプロセッサの条件を生成] パラメーターの値も継承されます。
メモ
[C ステップ関数インターフェイスを設定] ダイアログ ボックスを使用して、モデルに対して生成された C エントリポイント ステップ関数インターフェイスをカスタマイズします。入力端子と出力端子が引数名を共有し、伝播されたバリアント条件がある場合、このレベルのインターフェイス コントロールはサポートされません。
Initialize ブロック、Reset ブロック、Terminate ブロックのバリアント条件の伝播
Initialize、Reset および Terminate Function ブロックは、モデルの初期化、リセット、終了イベント中に実行される事前構成されたサブシステム ブロックです。Simulink Function ブロックと同じように、これらのブロックもバリアント条件の伝播をサポートします。Reset Event 端子をもつ Model ブロックで、バリアント条件を伝播できます。これにより、Reset Event 端子に接続されたブロックの存在が最適化されます。非アクティブな Variant Reset Event の関数 (参照モデル内) をもつモデルも、バリアント条件の伝播をサポートしています。
メモ
Initialize および Terminate イベント端子は、参照モデルの初期化イベントおよび終了イベントを、モデルの既定値とブロック固有値両方について制御しているため、常に無条件です。参照モデルに Initialize Function または Terminate Function ブロックを定義すると、これは明示的な初期化または終了イベントに対応します。
参照モデルの Initialize Function または Terminate Function ブロックでバリアントを有効にし、バリアント条件を定義している場合、そのバリアント条件は Model ブロック インスタンスのバリアント条件の対象となりません。
この例では、Init
ブロック、Reset
ブロック、Term
ブロック内の Event Listener
ブロックで、[バリアント条件を有効にする] オプションが選択されています。Event Listener
ブロックの [バリアント制御] パラメーターは V==0
に指定されています。V
の値を 0
以外の任意の値に変更すると、Init
ブロック、Reset
ブロック、Term
ブロックは非アクティブになります。
Bus のバリアント条件の伝播
Variant Source ブロックは、バーチャル バス入力と非バーチャル バス入力のどちらも受け入れることができます。プリプロセッサ条件を含むコードを生成する場合、すべてのバス入力のバスの種類と階層は同じでなければなりません。
ただし、Mux ブロック信号、Demux ブロック信号または Vector Concatenate ブロック信号のすべての要素が、同じバリアント条件をもたなければなりません。
詳細については、バスを使用したバリアント条件の伝播を参照してください。
Variant Connector ブロックのバリアント条件の伝播
Variant Connector ブロックは物理ネットワーク内の接続されているすべてのコンポーネントにバリアント条件を伝播します。Variant Connector (Simscape) を参照してください。
制限
Stateflow ブロック内の Simulink Function からのバリアント条件の伝播はサポートされません。
Variant Connector ブロックは Simscape™ 物理ネットワークとそれに接続されている Simulink ブロック間の境界を越えてバリアント条件を伝播しません。