Main Content

Variant Source ブロックを使用したシミュレーションとコード生成のための関数呼び出し信号の受信または出力

この例では、Variant Source ブロックの入力端子で関数呼び出し信号を受け取り、その信号を出力端子で条件付きでマージする方法を示します。このようなバリアント信号を使用して、条件付き実行サブシステムの実行を制御できます。

モデルの確認

モデル slexVariantSourceFunctionCall.slx を開きます。

open_system('slexVariantSourceFunctionCall.slx');

モデルには、入力端子における条件 A==1 および A==2 をもつ Variant Source ブロックが含まれます。A は、PreLoadFcn モデル コールバックに定義されているバリアント制御変数です。Variant Source ブロックの入力端子と出力端子におけるバリアント条件によって、それに接続されたブロックのアクティベーションおよびアクティベーション停止が決定されます。

Sine Wave ブロックが 2 つの MATLAB® Function ブロック Filter Positive inputs および Filter Negative inputs に接続されています。Sine Wave ブロックの値が正の場合、Filter Positive inputs ブロックで関数呼び出しが生成されます。Sine Wave ブロックの値が 0 または負の場合、Filter Negative inputs ブロックで関数呼び出しが生成されます。Variant Source ブロックは、これらの関数呼び出し信号を入力端子で受け取ります。Variant Source ブロックの出力端子は、Counter という名前の Function-Call Subsystem ブロックに接続されます。A==1 で、かつ Sine Wave ブロックが正の値を出力する場合、および A==2 で、かつ Sine Wave ブロックが負の値を出力する場合に、サブシステムがトリガーされます。

Variant Source1 ブロックの [関数呼び出しの出力] パラメーターは on に設定されています。これにより、ブロックで関数呼び出し信号を受信および出力できます。このオプションをプログラムにより有効にするには、以下のコマンドを使用します。

set_param('slexVariantSourceFunctionCall/Variant Source','OutputFunctionCall','on')

Variant Source1 ブロックの [ゼロ アクティブ バリアント制御を許可] パラメーターは on に設定されています。このオプションが選択され、アクティブなバリアントの選択がない場合、Simulink は Variant Source ブロックの入力ストリームおよび出力ストリームに接続されているすべてのブロックを無効にします。

モデルのシミュレーション

モデルをシミュレーションするには、[シミュレーション] タブで [実行] をクリックします。バリアント条件の伝播によって、アクティブおよび非アクティブなバリアントの選択が決まります。

  • A==1 の場合は、Filter Positive inputs がアクティブです。

  • A==2 の場合は、Filter Negative inputs がアクティブです。

どちらの場合も、Function-Call Subsystem Counter のカウント値はインクリメントされます。A~=1 および A~=2 の場合は、Sine Wave ブロックが非アクティブであるため、Counter は実行されません。