Main Content

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

バリアント ソースおよびバリアント シンクによるバリアント条件の伝播

Variant Source ブロックおよび Variant Sink ブロックを含むモデルでバリアント条件を指定すると、Simulink® はこれらの条件を伝播し、シミュレーション中にアクティブになるモデルのコンポーネントを決定します。

バリアント条件の注釈の表示

Variant Source ブロックまたは Variant Sink ブロックを含むモデルを作成するときに、バリアントのそれぞれの選択を有効にする条件を可視化できます。Simulink は、対応するバリアント条件の注釈をモデル内のこれらのブロックに加えます。

Variant Source ブロックに接続されている複数のバリアントの選択を含むこのモデルについて検討します。特定のバリアント条件によって、バリアントのそれぞれの選択が有効になります。

バリアント条件を可視化するには、ツールストリップの [デバッグ] タブで、[情報のオーバーレイ][バリアント条件]を選択します。

[バリアント条件の凡例] ダイアログ ボックスが表示されます。ブロックのバリアント条件は、v:C のように注釈されます。ここで v はバリアント セマンティクス インジケーターで、C はバリアント条件のインデックスを表します。また、このダイアログ ボックスには、それぞれの条件に関連付けられている式も表示されます。

[バリアント条件の凡例] ダイアログ ボックスでは、ハイパーリンクされたバリアントの注釈をクリックして、それぞれの条件によって有効になるモデルの部分を表示できます。たとえば、v:3 をクリックすると、Simulink では、条件 V==3true に評価される場合に有効になるモデルの部分が強調表示されます。

バリアント条件の注釈には次の特性があります。

  • 無条件のブロックには注釈はありません。このため、Out ブロックには注釈は付きません。

  • 煩雑にならないように、凡例では最終的に計算された条件のみが表示されます。たとえば、Variant Source ブロックにバリアント条件を入力した場合、その条件は変更を適用したときにのみ注釈に表示されます。

  • 凡例内の条件は表示する際に並べ替えられます。

  • 条件に関連付けられているブロックがアクティブになることはないと Simulink が評価した場合、凡例では条件は false に設定されます。

    たとえば、Inport4 ブロックは Variant Source1 ブロックに接続されており、その条件は V==1 です。Variant Source1Variant Source2 ブロックに接続されており、V==4 の場合にのみ Variant Source1 が有効になります。したがって、Inport4V==1 && V==4 の場合にのみアクティブになりますが、この条件は常に false です。

  • 凡例では、(default) キーワードは否定の条件として表示されます。

バリアント条件の伝播の動作方法

Variant Source ブロックまたは Variant Sink ブロックを含むモデルをコンパイルする際、Simulink が、どのバリアント制御が true に評価されるかを決定します。アクティブなバリアントの決定はコンパイルの早い段階で行われます。Simulink は true であるバリアント制御に結び付けられていないブロックを非アクティブにし、アクティブな接続を可視化します。

入力と出力の相互干渉

このモデルでは 2 つの入力が Variant Source ブロックに接続されています。1 番目の入力は Var == 1 のときにアクティブになります。また、Variant Source ブロックに接続する前に 2 番目の入力に分岐します。2 番目の入力は既定のバリアントの選択です。

シミュレーション中に、このモデルは 3 つの動作モードを示します。

  • Var == 1 の場合、1 番目の入力がアクティブになり、2 番目の入力への分岐は非アクティブになります。

  • Var == 1 || Var == 2 の場合、2 番目の入力がアクティブになり、1 番目の入力の分岐もアクティブになります。

  • Var == 2 の場合、2 番目の入力がアクティブになり、出力もアクティブになります。

カスケード ブロックと複合条件

このモデルでは、それぞれ 2 つの入力端子によって接続される 2 つの Variant Source ブロックが、カスケード接続されています。Variant Source への入力は Var1 == 1 または Var1 == 2 の場合にアクティブになります。Variant Source の出力は、Variant Source1 の一方の入力に分岐します。Variant Source1 への入力は Var2 == 1 または Var2 == 2 の場合にアクティブになります。

シミュレーション中に、このモデルは 8 つの動作モードを示します。

  • Var1 == 1 && Var2 == 1 の場合、Variant Source の 1 番目の入力と Variant Source がアクティブになります。

  • Var1 == 1 && Var2 == 2 の場合、Variant Source の 1 番目の入力と Variant Source1 の 2 番目の入力がアクティブになります。

  • Var1 == 2 && Var2 == 1 の場合、Variant Source の 2 番目の入力と Variant Source1 の 1 番目の入力がアクティブになります。

  • Var1 == 2 && Var2 == 2 の場合、Variant Source の 2 番目の入力と Variant Source1 がアクティブになります。

  • Var1 == 1 && Var2 != (1,2) の場合、Variant Source の 1 番目の入力のみがアクティブになります。

  • Var1 == 2 && Var2 != (1,2) の場合、Variant Source の 2 番目の入力のみがアクティブになります。

  • Var1 != (1,2) && Var2 == 1 の場合、入力または出力のいずれもアクティブになりません。

  • Var1 != (1,2) && Var2 == 2 の場合、Variant Source1 の 2 番目の入力のみがアクティブになります。

  • Var1 != (1,2) && Var2 != (1,2) の場合、入力または出力のいずれもアクティブになりません。

ソースまたはシンクの階層的な入れ子

このモデルでは、複数の Variant Source ブロックを使用して、バリアントの選択の階層的な入れ子が作成されています。選択肢は最初はシリーズ A SeriesB Series および C Series によってグループ化されています。デバイス モデルへの入力として 1 つ以上のシリーズの組み合わせが提供されています。そのデバイス モデルは、センサーの選択を含むか含まないかによってベンダーへの入力として提供されます。

Simulink は複雑なバリアント制御条件を伝播し、コンパイル中にどのモデル コンポーネントがアクティブであるかを判断します。

詳細については、バリアント センサーを参照してください。

サブシステムの条件伝播

サブシステムは、[ブロック パラメーター] ダイアログ ボックスで行った選択に応じて、バーチャル (グループまたは非グループ) または Atomic サブシステムのいずれかになります。各サブシステムについては次のとおりです。

  • グループ化されたバーチャル: [バリアント条件の伝播時にはグループとして処理] チェック ボックスをオンにします。グループ化されたバーチャル サブシステムには連続した線があります。

  • グループ化されていないバーチャル: [バリアント条件の伝播時にはグループとして処理] チェック ボックスをオフにします。グループ化されていないバーチャル サブシステムには点線があります。

  • Atomic: [Atomic サブシステムとして扱う] チェック ボックスをオンにします。Atomic バーチャル サブシステムには実線があります。

Simulink は、これらのサブシステム タイプに対して異なる方法でバリアント条件を伝播します。

このモデルには、Variant Source2 ブロックへの入力として 3 種類のサブシステムが提供されています。

  • グループ化されたバーチャル サブシステムは、V == 1 の場合に有効になります。Simulink はバリアントのアクティブ化条件をサブシステム内のすべてのブロックに伝播します。

  • グループ化されていないバーチャル サブシステムは V == 2 の場合に有効になります。Simulink は、サブシステムがバーチャルとマーキングされている間にサブシステム内で利用可能であったブロックに対して、バリアントのアクティブ化条件を伝播します。

  • Atomic サブシステムは、V == 3 の場合に有効になります。Simulink はバリアントのアクティブ化条件をこのサブシステムに伝播しません。

詳細については、サブシステムへのバリアント条件の伝播を参照してください。

他の 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 ブロックのバリアント条件の伝播

InitializeReset および Terminate Function ブロックは、モデルの初期化、リセット、終了イベント中に実行される事前構成されたサブシステム ブロックです。Simulink Function ブロックと同じように、これらのブロックもバリアント条件の伝播をサポートします。Reset Event 端子をもつ Model ブロックで、バリアント条件を伝播することができます。これにより、Reset Event 端子に接続されたブロックの存在が最適化されます。非アクティブな Variant Reset Event の関数 (参照モデル内) をもつモデルも、バリアント条件の伝播をサポートしています。

メモ

  • Initialize および Terminate イベント端子は、参照モデルの初期化イベントおよび終了イベントを、モデルの既定値とブロック固有値両方について制御しているため、常に無条件です。参照モデルに Initialize/Terminate Function ブロックを定義した場合、それは明示的な初期化/終了イベントに対応します。

  • 参照モデルの Initialize/Terminate Function ブロックでバリアントを有効にし、バリアント条件を定義している場合、そのバリアント条件はモデル参照ブロック インスタンスのバリアント条件の対象となりません。

この例では、Init ブロック、Reset ブロック、Term ブロック内の Event Listener ブロックで、[バリアント条件を有効にする] オプションが選択されています。Event Listener ブロックの [バリアント制御] パラメーターは V==0 に指定されています。V の値を 0 以外の任意の値に変更すると、Init ブロック、Reset ブロック、Term ブロックは非アクティブになります。

Subsystem ブロックのバリアント条件の伝播

バリアント条件によって Subsystem ブロックをアクティブにしたり非アクティブにしたりできますが、バリアント条件をサブシステム内に伝播させることはできません。バリアント条件がサブシステム内の端子で発生する場合、Subsystem ブロックは出力端子からバリアント条件を伝播できます。

詳細については、サブシステムへのバリアント条件の伝播を参照してください。

Bus のバリアント条件の伝播

Variant Source ブロックは、バーチャル バス入力と非バーチャル バス入力のどちらも受け入れることができます。プリプロセッサ条件を含むコードを生成する場合、すべてのバス入力のバスの種類と階層は同じでなければなりません。

ただし、Mux ブロック信号、Demux ブロック信号または Vector Concatenate ブロック信号のすべての要素が、同じバリアント条件をもたなければなりません。

詳細については、バスを使用したバリアント条件の伝播を参照してください。

既知の制限事項

  • Stateflow ブロック内の Simulink Function からのバリアント条件の伝播はサポートされません。

  • Simscape™ ブロックを使用してインライン バリアント モデルをシミュレートすると、Simscape ブロックは無条件になります。

  • 伝播されたバリアント条件を含むモデルに対して C++ コード生成はサポートされません。

  • バリアント条件の伝播は、ルートのバス要素端子ではサポートされていません。

関連する例

詳細