Main Content

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

Variant Subsystem ブロックの外部でバリアント条件を伝播

Variant Subsystem ブロックに対してバリアント条件を指定すると、Simulink® はこれらの条件を伝播し、シミュレーション中にアクティブになるモデルのコンポーネントを決定します。既定では、これらの条件はバリアント サブシステムの外部に伝播しません。[Variant Subsystem の外部に条件を伝播する] ブロック パラメーターを使用して、条件を Variant Subsystem ブロックの外部の接続しているブロックに伝播できます。

メモ

モデル コンポーネントに表示されるバリアント条件の注釈を使用すると、伝播された条件を可視化できます。

バリアント条件の注釈を表示するには、[デバッグ] タブで、[情報のオーバーレイ][バリアント凡例]を選択します。

[バリアント凡例] が使用できない場合、[デバッグ] タブで、[情報のオーバーレイ][バリアント条件]を選択します。

2 つのバリアント選択 Linear Controller および Nonlinear Controller をもつ Controller という名前の Variant Subsystem ブロックを含むこのモデルについて検討します。特定のバリアント条件によって、各ブロックが有効になります。

Controller ブロック内のバリアント選択は、同じインターフェイスをもっていません。入力端子 sensor1 および sensor3Linear ControllerNonlinear Controller で使用されていますが、sensor2Linear Controller でのみ使用されています。したがって、sensor2 ブロックは Linear Controller がアクティブな場合にのみアクティブであり、その他の選択では実行されません。Variant Subsystem (Controller) の外部のモデル コンポーネントに Variant Subsystem ブロック内のブロックのアクティブまたは非アクティブな状態を認識させるには、ブロックの条件をそのブロックの境界の外側に伝播しなければなりません。

メモ

ブロック内のすべてのバリアント選択が同じインターフェイスをもつ場合、バリアント条件は Variant Subsystem ブロックの外部に伝播しません。

Variant Subsystem の外部での条件の伝播

バリアント サブシステムの外部に条件を伝播するには、Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで [Variant Subsystem の外部に条件を伝播する] を選択します。既定では、このパラメーターは off に設定されます。

[ブロック線図の更新] アクティベーションのタイミングのための Variant Subsystem 外部へのバリアント条件の伝播

Variant Subsystem ブロックの [バリアントのアクティベーションのタイミング] パラメーターが [ブロック線図の更新] に設定されている場合、アクティブな選択肢のみが解析され、バリアント サブシステムの外部に伝播される条件を決定します。

この例では、アクティブなバリアント選択を Nonlinear Controller に設定すると、sensor2 は非アクティブです。条件が false に設定されたバリアントの注釈 v2sensor2 端子上、およびそれに接続されている非アクティブな入力端子ブロック In2 上に表示されます。[バリアント条件の凡例] で、条件に関連付けられているブロックがアクティブになることはない場合、条件は false に設定されます。

アクティブなバリアント選択を Linear Controller に設定すると、sensor2 端子と入力端子ブロック In2 は無条件です。これは、Linear Controller がすべての入力信号を使用しているためです。

生成されるコードには、アクティブな選択肢のみが含まれます。この例では、入力端子 In2 は非アクティブであり、そのため生成されるコードの一部にはなりません。

[コードのコンパイル] アクティベーションのタイミングのための Variant Subsystem 外部へのバリアント条件の伝播

[ブロック線図の更新] 以外のバリアントのアクティベーションのタイミングの場合、すべてのバリアント選択が解析され、バリアント サブシステムの外部に伝播される条件を決定します。

モデル例で、[バリアントのアクティベーションのタイミング] パラメーターを [コードのコンパイル] に設定します。

両方のバリアント選択について、Variant Subsystem ブロックの外部に条件が伝播されます。

生成するコードには、プリプロセッサ条件 #if#elseif で囲まれたアクティブな選択肢と非アクティブな選択肢の両方が含まれます。この例では、入力端子 In2 は必要な条件で保護されます。

メモ

ゼロ アクティブ バリアント制御が指定された Variant Subsystem ブロックの外部にバリアント条件を伝播するには、Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで [ゼロ アクティブ バリアント制御を許可] を選択します。

Inport ブロックと Outport ブロックをもたない Variant Subsystem での条件の伝播

2 つのバリアント選択をもつ Variant Subsystem ブロックを含むこのモデルについて検討します。ブロックには入力端子も出力端子もありません。2 つのバリアント選択にはそれぞれ条件 Var==1 および Var==2 があります。Variant Subsystem ブロックの [Variant Subsystem の外部に条件を伝播する] パラメーターが off に設定されている場合、バリアント条件 Var==1 || Var==2 の論理 "OR"Variant Subsystem ブロックに設定されます。パラメーターが on に設定されると、Variant Subsystem ブロックには条件が適用されません。

Variant Subsystem with no inports and outports

プログラムによる条件の伝播

Variant Subsystem ブロックの外部にプログラムで条件を伝播するには、次のいずれかの構文を使用します。

  • 条件を伝播:

    set_param(VariantSubsystemName, 'PropagateVariantConditions','on')

    以下に例を示します。

    set_param('sldemo_variant_subsystems/Controller','PropagateVariantConditions','on')
  • 条件を伝播してコードでのプリプロセッサ条件を生成:

    set_param(VariantSubsystemName,'PropagateVariantConditions',...
    'on','VariantActivationTime','code compile')

    以下に例を示します。

    set_param('slexVariantSubsystems/Controller','PropagateVariantConditions',...
    'on','VariantActivationTime','code compile')

Variant Subsystem の適応インターフェイス

この例では、Variant Subsystem ブロックの外部へのバリアント条件の伝播によって、ブロックが基となるブロックの状態に従ってインターフェイスを適応させることができるようになることを示します。

モデルの確認

モデル slexVariantSubsystemsAdaptiveInterface を開きます。

Controller ブロックは Linear および Nonlinear の選択を提供する Variant Subsystem です。V = 1 のときは Linear の選択がアクティブになっています。V = 2 のときは Nonlinear の選択がアクティブになっています。VSimulink.Parameter 型のバリアント制御変数であり、モデルの PostLoadFcn コールバックで定義されています。

バリアント制御変数の値を変更するには、MATLAB コマンド ウィンドウで V.Value = 1 または V.Value = 2 を入力します。

Controller ブロックをダブルクリックして、その内容を表示します。Linear の選択と Nonlinear の選択は、類似するインターフェイスをもっていません。Linear の選択は Controller ブロックの sensor1 入力および sensor3 入力を使用しています。Linear の選択は sensor2 入力を使用しておらず、saturate 出力は生成されません。

Controller ブロックの [ブロック パラメーター] ダイアログ ボックスで、[Variant Subsystem の外部に条件を伝播する] チェック ボックスがオンになっています。この設定により、条件がブロックの外部に伝播され、Variant Subsystem ブロックが基となるブロックの状態に従ってインターフェイスを適応させることができます。

モデルのシミュレーション

アクティブな選択を Linear に設定した後、モデルのシミュレーションを実行します。条件 V = 2In2 ブロック、filter ブロックおよび saturation logger ブロックに伝播されます。Linear の選択が sensor2 入力を使用しておらず、Controller ブロックの saturate 出力への書き込みを行っていないため、これらのブロックは非アクティブになります。

制限

バリアント サブシステムから伝播されたバリアント条件は Simscape™ ブロックまたは Stateflow® ブロックで、[ブロック線図の更新] バリアントのアクティベーションのタイミングについてのみ設定できます。

メモ

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

関連するトピック