Main Content

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

この例では、マスク パラメーターをバリアント制御変数として使用することで、ロックされたカスタム ライブラリに属する Variant Subsystem のアクティブな選択肢を制御する方法を示します。マスク パラメーターによって変数のスコープが制限されるため、異なるスコープ内の制御変数に対して同じ名前を使用できます。この例には、プロモート済みパラメーターと列挙型クラスを使用した制御式が含まれており、マスク ダイアログのインターフェイスと列挙型クラスを使用した制御式を簡略化して、バリアント条件式の可読性を向上させます。Variant Subsystem の詳細については、Variant Subsystem を使用した個別の階層でのバリエーションの実装を参照してください。

モデル

MATLAB® コマンド ウィンドウで以下のコマンドを入力して、Simulink® モデルを開きます。

openExample("simulink_variants/SimulinkVariantsExample",...
"supportingFile","slexVariantSubsystemUsingMaskAndEnums.slx")

ロックされているカスタム ライブラリ slexVarEngineLibrary の Engine サブシステム ブロックについて考えます。

サブシステムのマスク ダイアログ ボックスには以下のパラメーターが含まれます。

  • Engine type: このパラメーターの値を選択すると、Simulink はその値のインデックスをマスク パラメーター engine に割り当てます。シミュレーション中、engine の値を使用してバリアント条件式が評価され、基盤となる Turbo Engine サブシステムおよび Non Turbo Engine サブシステムがアクティブ化または非アクティブ化されます。

  • Fidelity type for turbo engine: このパラメーターは、[Engine type] パラメーターが [Turbo] に設定されている場合にのみ利用可能になります。このパラメーターは、Turbo Engine サブシステムの基盤となる層から Engine サブシステムのマスク ダイアログにプロモートされます。このパラメーターの値を選択すると、Simulink はその値のインデックスを Turbofan Engine サブシステムのマスク パラメーター enginetype に割り当てます。シミュレーション中、enginetype の値を使用してバリアント条件式が評価され、基盤となる High、Medium、および Low サブシステムがアクティブ化または非アクティブ化されます。

  • Fidelity type for non turbo engine: このパラメーターは、[Engine type] パラメーターが [Non Turbo] に設定されている場合にのみ利用可能になります。このパラメーターは、Non Turbo Engine サブシステムの基盤となる層から Engine サブシステムのマスク ダイアログにプロモートされます。このパラメーターの値を選択すると、Simulink はその値のインデックスを Non Turbo Engine サブシステムのマスク パラメーター enginetype に割り当てます。シミュレーション中、enginetype の値を使用してバリアント条件式が評価され、基盤となる High、Medium、および Low サブシステムがアクティブ化または非アクティブ化されます。

Turbo Engine サブシステムでの enginetype のスコープは Non Turbo Engine サブシステムでの enginetype のスコープと異なります。Turbo Engine の enginetype は、Turbo Engine サブシステムの基となる層からのみ参照できます。同様に、Non Turbo Engine の enginetype は Non Turbo Engine サブシステムの基盤となる層からのみ参照できます。バリアント制御変数としてマスク パラメーターを使用してスコープを制限することで、Turbo Engine サブシステムと Non Turbo Engine サブシステムにおいて、異なる値を保持する変数に対して同じ名前を使用することができます。

アクティブな選択肢間での切り替え

  1. モデルをシミュレーションするには、[シミュレーション] タブで [実行] をクリックします。Engine サブシステムのマスク ダイアログでは、[Engine type] パラメーターは [Non Turbo] に設定され、[Fidelity type for non turbo engine][Medium] に設定されています。これらのパラメーターはマスク パラメーター engine および engineType のインデックスにマッピングされているため、engine の値は 2 に設定され、engineType の値は 1 に設定されています。ここで、2Non Turbo オプションのインデックスを指定し、1High オプションのインデックスを指定します。マスク ダイアログ ボックスのパラメーターが、基となるマスク パラメーターにどのようにマッピングされるかの詳細については、簡単なマスクの作成を参照してください。

    シミュレーション中、条件式 engine == Engine.NONTURBO および engineType == EngineFidelity.MEDIUMtrue に評価されます。ここで、Engine および EngineFidelity は、1 および 2 として指定される Engine.TURBO および Engine.NONTURBO の値と、12、および 3 として指定される EngineFidelity.HIGHEngineFidelity.MEDIUM、および EngineFidelity.LOW の値をもつ、Engine.m ファイルと EngineFidelity.m ファイルで定義された整数ベースの列挙クラスです。

    NonTurbo Engine サブシステムがアクティブになり、Turbo Engine サブシステムが非アクティブになります。

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

関連するトピック