モデル参照のバリアント
この例では、モデル参照バリアントの使用方法を示します。Model ブロックは、ある Simulink® モデルを別の Simulink モデルから参照するために使用されます。Variant Subsystem ブロックにはバリアントとして Model ブロックを含めることができます。"バリアント" は、1 つの Variant Subsystem ブロックが動作できる N 個のモードのうちの 1 つを表します。各バリアントは、関連付けられているモデル固有の引数を使用して特定のモデルを参照します。シミュレーション中は、任意の Variant Subsystem ブロックについて 1 つのバリアントのみがアクティブになります。アクティブなバリアントは、ベース ワークスペース内の変数の値を変更するか、Variant Subsystem ブロックのダイアログ ボックスを使用してバリアントの選択を手動でオーバーライドして切り替えることができます。
アクティブなバリアントの切り替え
sldemo_mdlref_variants
モデルには、Controller という名前の、2 つのモデルを参照する Variant Subsystem ブロックが含まれています。
open_system('sldemo_mdlref_variants')
バリアントの選択肢を確認するには、Controller という名前の Variant Subsystem ブロックを右クリックし、[ブロック パラメーター (Subsystem)] を選択します。アクティブなバリアントは MATLAB® ベース ワークスペース内の変数 CTRL
によって決定されます。CTRL=1
を定義すると Linear という名前の Model ブロックがアクティブになり、CTRL=2
を定義すると Nonlinear という名前の Model ブロックがアクティブになります。
sldemo_mdlref_variants
モデルを開くと PreLoadFcn モデルのコールバックが実行され、それにより CTRL
が 2
に設定されます。
線形コントローラーを使用してシミュレートするには、ベース ワークスペースで CTRL=1
を定義してからモデルをシミュレートします。
CTRL=1;
sim('sldemo_mdlref_variants');
非線形コントローラーを使用してシミュレートするには、ベース ワークスペースで CTRL=2
を定義してからモデルをシミュレートします。
CTRL=2;
sim('sldemo_mdlref_variants');
列挙と再利用
sldemo_mdlref_variants_enum
モデルは、Simulink.Variant
オブジェクトの以下の機能を示します。
列挙型: MATLAB 列挙型クラスを使用すると、
Variant
オブジェクトの条件を読みやすくすることができます。再利用:
Variant
オブジェクトは、別の Variant Subsystem ブロックで再利用できます。
このモデルの Variant Subsystem ブロックでは、MATLAB ベース ワークスペースで以下の変数を定義する必要があります。
VE_LINEAR_CONTROLLER = Simulink.Variant('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.LINEAR')
VE_NONLINEAR_CONTROLLER = Simulink.Variant('E_CTRL==sldemo_mrv_CONTROLLER_TYPE.NONLINEAR')
E_CTRL = sldemo_mrv_CONTROLLER_TYPE.LINEAR
VE_PROTOTYPE = Simulink.Variant('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PROTOTYPE')
VE_PRODUCTION = Simulink.Variant('E_CURRENT_BUILD==sldemo_mrv_BUILD_TYPE.PRODUCTION')
E_CURRENT_BUILD = sldemo_mrv_BUILD_TYPE.PRODUCTION
各バリアントは、sldemo_mrv_BUILD_TYPE.m
または sldemo_mrv_CONTROLLER_TYPE.m
のいずれかの列挙型クラスを使用する Simulink.Variant
オブジェクトに関連付けられています。
Variant
オブジェクトは、式である Condition
プロパティをもちます。この式はブール値として評価され、アクティブなバリアントを決定します。この式はスカラー変数、列挙値、等式、不等式、&&、||、~ で構成できます。小かっこ () を使用すると、優先順位をグループ化できます。変数は標準の MATLAB 変数または Simulink.Parameter
オブジェクトにすることができます。
モデル sldemo_mdlref_variants_enum
を開くと、PreLoadFcn モデルのコールバックが実行されます。このコールバックは、Variant Subsystem ブロックによって要求される変数をベース ワークスペースに入力するよう設定されています。
open_system('sldemo_mdlref_variants_enum')
Variant
オブジェクト VE_PROTOTYPE
および VE_PRODUCTION
は、Filter1、Filter2 および Filter3 という名前の Variant Subsystem ブロック間で再利用されます。
Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスには、関連する Variant
オブジェクトの Condition プロパティが表示されます。
参考
Subsystem | Model | Variant Subsystem, Variant Model