Main Content

バリアント パラメーターのアクティブな値とアクティベーションのタイミングの変更

この例では、Simulink® モデルでバリアント パラメーターのアクティブな値とアクティベーションのタイミングを変更する方法を示します。

この例では、次の方法について説明します。

  • バリアント条件式を使用してバリアント パラメーターのアクティブな値を変更する。

  • バリアントのアクティベーションのタイミングを使用してアクティブな値を決定するタイミングを変更する。

バリアント パラメーターの概要

バリアント パラメーターは複数の値をもつ場合があります。バリアント パラメーターのそれぞれの値は、1 つのバリアント制御式に関連付けられます。シミュレーション中、true と評価される条件に関連付けられるバリアント パラメーターの値は、そのバリアント パラメーターのアクティブな値です。false と評価される条件に関連付けられる値は、パラメーターの非アクティブな値です。アクティブな値の間で切り替えを行うには、バリアント制御変数の値を変更します。詳細については、バリアント パラメーターを使用した値が異なるブロック パラメーターの再利用を参照してください。

前提条件

この例を開始する前に、単純なバリアント パラメーター モデルの作成を完了することを推奨します。

モデルの確認

1. モデルを開きます。

open_system('slexVariantParameters')

このモデルで、Gain ブロックの Gain パラメーターは、Simulink.VariantVariableオブジェクト K1 および K2 として指定されているバリアント パラメーターです。オブジェクトは slexVariantParameterData.m ファイルで定義されています。

2. slexVariantParameterData.m ファイルを開きます。このファイルは、[モデル化][モデル設定][モデル プロパティ]PostLoadFcn コールバックで読み込まれます。

このファイルで、オブジェクト K1 および K2 は、バリアント制御式 V==1 および V==2 に関連付けられた複数の値をもちます。オブジェクトのSpecificationパラメーターを使用して、それぞれのオブジェクトについて、値の他に、次元、データ型などの属性を指定できます。

  • バリアント制御変数: Simulink.VariantControlオブジェクト V の値により、シミュレーション中に K1 および K2 のどちらの値がアクティブであるかが決定されます。V==1true と評価される場合、V==1 に関連付けられた値がアクティブに、V==2 に関連付けられたすべての値が非アクティブになります。K1 のアクティブな値は Gain1 ブロックの "Gain" パラメーターに代入され、K2 のアクティブな値は Gain2 ブロックの "Gain" パラメーターに代入されます。同様に、V==2true と評価される場合、V==1 に関連付けられたすべての値が非アクティブに、V==2 に関連付けられたすべての値がアクティブになります。バリアントの制御の詳細については、バリアント制御の紹介を参照してください。

  • バリアントのアクティベーションのタイミング: Simulink では、バリアント パラメーター [ゲイン] のアクティブな値を、シミュレーションおよびコード生成ワークフローのさまざまな段階で設定できます。バリアントのアクティベーションのタイミングとして指定する段階に基づいて、Simulink は、生成されたコードに、K1 および K2 のアクティブな値のみ、またはアクティブな値と非アクティブな値の両方が含まれていなければならないかを決定します。バリアントのアクティベーションのタイミングは、K1 および K2 のすべての値を、信号の属性の非互換性について解析するかどうかについても決定します。

この例では、V の値が 1 として指定され、バリアントのアクティベーションのタイミングが update diagram として指定されています。このモデルをシミュレーションするときに、V==1true として評価されます。K1 の値は 3.5 に設定されており、K2 の値は 4.5 に設定されています。Simulink はブロック線図の更新中にアクティブな値を決定します。このモデルからコードを生成すると、コードには K1 および K2 のアクティブな値のみが含まれます。

バリアント パラメーターのアクティブな選択の設定

バリアント制御変数の値により、シミュレーション中にバリアント パラメーターのアクティブな値が決定されます。アクティブな値を切り替えるには、バリアント制御変数の値を変更します。

1. Simulink ツールストリップで [実行] をクリックします。シミュレーション中に、V==1true として評価されます。値 3.5 および 4.5V==1 に関連付けられているため、これらの値がそれぞれ K1 および K2 に代入されます。結果として、値は Gain ブロックの Gain パラメーターに代入されます。

2. Gain パラメーターの値を変更するには、V の値を 2 に変更し、再度モデルのシミュレーションを行います。

V.Value = 2;

シミュレーション中に、V==2 に関連付けられているすべての値が K1 および K2 に代入されます。結果として、値は Gain ブロックの Gain パラメーターに代入されます。

バリアント パラメーターのアクティブな値を決定するタイミングの設定

Simulink では、バリアント パラメーターのアクティブな値を、シミュレーションおよびコード生成ワークフローのさまざまな段階で設定できます。バリアントのアクティベーションのタイミングとして指定する段階に基づいて、Simulink は、生成されたコードに、バリアント パラメーターのアクティブな値のみ、またはアクティブな値と非アクティブな値の両方が含まれていなければならないかを決定します。バリアントのアクティベーションのタイミングは、バリアント パラメーターのすべての値を、信号の属性の非互換性について解析するかどうかについても決定します。

たとえば、V のアクティベーションのタイミングを update diagram として指定するには、MATLAB® コマンド ウィンドウで次のコマンドを入力します。次に、モデルのシミュレーションを再度実行します。

V.ActivationTime = 'update diagram';

Simulink は、信号属性を伝播する前に、ブロック線図の更新中に K1 および K2 のアクティブな値を設定します。次元やデータ型などの信号属性は、モデル全体にわたって一貫性について解析されるわけではありません。生成されたコードには K1 および K2 のアクティブな値のみが含まれます。その他のアクティベーション タイミングの詳細については、Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

参考