Main Content

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

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

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

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

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

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

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

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

前提条件

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

モデルの確認

1. モデルを開きます。

open_system([matlabroot '/examples/simulink_variants/main/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 に関連付けられたすべての値がアクティブになります。バリアントの制御の詳細については、Variant Controls in Variant Parametersを参照してください。

  • バリアントのアクティベーションのタイミング: バリアントのアクティベーションのタイミングは、ブロック線図の更新中、またはコードのコンパイル中に、Simulink がバリアント パラメーター Gain のアクティブな値を設定するかを決定します。アクティベーションのタイミングは、生成されたコードに、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 がバリアント パラメーターのアクティブな値を選択するタイミングを決定します。アクティベーションのタイミングは、生成されたコードに、バリアント パラメーターのアクティブな値のみ、またはアクティブな値と非アクティブな値の両方が含まれていなければならないかを決定します。詳細については、ActivationTimeを参照してください。

アクティベーションのタイミングは以下のいずれかとして指定できます。

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

V.ActivationTime = 'update diagram';

Simulink は、信号属性を伝播する前に、ブロック線図の更新中に K1 および K2 のアクティブな値を設定します。次元やデータ型などの信号属性は、モデル全体にわたって一貫性について解析されるわけではありません。生成されたコードには K1 および K2 のアクティブな値のみが含まれます。

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

V.ActivationTime = 'update diagram analyze all choices';

Simulink は、信号属性を伝播した後に、ブロック線図の更新中に K1 および K2 のアクティブな値を設定します。信号属性は、アクティブな値と非アクティブな値の両方に伝播されます。次元やデータ型などの信号属性は、モデル全体にわたって一貫性について解析されます。生成されたコードには K1 および K2 のアクティブな値のみが含まれます。

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

V.ActivationTime = 'code compile';

Simulink はコードのコンパイル中にアクティブな選択を設定します。信号属性は、アクティブな値と非アクティブな値の両方に伝播されます。次元やデータ型などの信号属性は、モデル全体にわたって一貫性について解析されます。生成されたコードには K1 および K2 のアクティブな値と非アクティブな値の両方が含まれます。値がプリプロセッサ条件 #if および #elif 内で囲まれます。

参考