マスク パラメーターを使用してロックされたカスタム ライブラリのバリアント サブシステムのアクティブな選択肢を制御
この例では、マスク パラメーターをバリアント制御変数として使用することで、ロックされたカスタム ライブラリに属する 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 サブシステムにおいて、異なる値を保持する変数に対して同じ名前を使用することができます。
アクティブな選択肢間での切り替え
モデルをシミュレーションするには、[シミュレーション] タブで [実行] をクリックします。Engine サブシステムのマスク ダイアログでは、[Engine type] パラメーターは
[Non Turbo]
に設定され、[Fidelity type for non turbo engine] は[Medium]
に設定されています。これらのパラメーターはマスク パラメーターengine
およびengineType
のインデックスにマッピングされているため、engine
の値は2
に設定され、engineType
の値は1
に設定されています。ここで、2
はNon Turbo
オプションのインデックスを指定し、1
はHigh
オプションのインデックスを指定します。マスク ダイアログ ボックスのパラメーターが、基となるマスク パラメーターにどのようにマッピングされるかの詳細については、簡単なマスクの作成を参照してください。シミュレーション中、条件式
engine == Engine.NONTURBO
およびengineType == EngineFidelity.MEDIUM
はtrue
に評価されます。ここで、Engine
およびEngineFidelity
は、1
および2
として指定されるEngine.TURBO
およびEngine.NONTURBO
の値と、1
、2
、および3
として指定されるEngineFidelity.HIGH
、EngineFidelity.MEDIUM
、およびEngineFidelity.LOW
の値をもつ、Engine.m
ファイルとEngineFidelity.m
ファイルで定義された整数ベースの列挙クラスです。NonTurbo Engine サブシステムがアクティブになり、Turbo Engine サブシステムが非アクティブになります。
アクティブな選択肢を変更するには、マスク ダイアログ ボックスで
[Turbo]
を選択してからモデルを再度シミュレーションします。シミュレーション中、engine
の値は1
に設定され、バリアント条件engine == Engine.TURBO
をtrue
として評価します。Turbo Engine サブシステムがアクティブになり、Non Turbo Engine サブシステムが非アクティブになります。