信号のマージ
この例では、条件付き実行サブシステムとMergeブロックを使用して、2 つの入力を単一の出力に結合する方法を示します。Merge ブロックのどの時点の出力値も、駆動ブロックの最新の計算出力と等しくなります。
Merge ブロックは、異なるときに更新される入力信号を、インターリーブされた値が別の ID と時間を保持する統合信号にインターリーブする場合に使用します。同時に更新する信号を、配列または行列信号に統合するには、Vector Concatenateブロックを使用します。
このモデルの左側には、Simulink Sources ライブラリからの 2 つのブロック (Repeating Sequenceブロック) が含まれています。各ブロックは、そのブロック アイコンに表示されている形式のスカラー出力信号を生成します。
この 2 つの信号は、異なるEnabled Subsystemブロックに入力されます。これらのブロックは太線で縁取られています。
これらの Enabled Subsystem (つまり、条件付き実行サブシステム) は、Pulse Generatorブロックが生成する信号によって制御されます。
このブロック出力は、5 秒ごとに交互に値 0 と値 1 に切り替わります。Discrete Pulse Generator ブロックの出力が正のときは、上の Enabled Subsystem がシミュレーションを実行しています。Discrete Pulse Generator ブロックの出力が 0 のときは、下の Enabled Subsystem がシミュレーションを実行しています。
Discrete Pulse Generator ブロック出力が 0 のときに下の Enabled Subsystem にシミュレーションを実行させるために、出力は NOT 演算子に設定されたLogical Operatorブロックを通されます。NOT ブロックは、入力が 0 のときに値 1 を出力します。
この 2 つの Enabled Subsystem の出力は、Merge ブロックに入力されます。
Scopeブロックに Merge ブロックの出力が表示されます。
シミュレーションを実行して、Scope で Merge ブロックの出力を確認します。Scope に表示される波形のタイプが 5 秒ごとに変化することを確認してください。Merge ブロックの動作により、Scope に表示される波形のタイプは 5 秒ごとに変化します。
条件付き実行サブシステム
この Merge ブロックの例には、条件付き実行サブシステムが 2 つ含まれています。
条件付き実行サブシステムとは、シミュレーション中に特定の条件が満たされた時点にのみ実行される Subsystem のことです。この場合は Enabled Subsystem で、それぞれのアイコンと、ブロックの上部または下部に表示される追加の入力端子によって識別されます。
追加の端子に入る信号は、制御信号と呼ばれます。この信号の値によって、その Subsystem が任意のタイム ステップで実行されるかどうかを決定する条件が与えられます。Enabled Subsystem は、制御信号が厳密に正であるときに実行されます。
この例では、制御信号が正のときに一方の Enabled Subsystem を実行し、制御信号が 0 のときにもう一方の Enabled Subsystem を実行する必要があります。これは、Logical Operator ブロックを使用して実行できます。
Logical Operator ブロック
Logical Operatorブロックを使用すると、モデルに論理演算子と boolean 信号を組み込むことができます。
Logical Operator ブロックを開いて、さまざまなタイプの演算子を確認します。NOT の現在の設定では、入力信号が非ゼロのときは 1 (TRUE) が返され、入力信号が厳密にゼロのときは 0 (FALSE) が返されます。
この例では、この機能を使用して、制御信号がゼロになったときに正の値を生成します。そのためには、NOT の現在の演算子設定をそのまま維持して、ダイアログを閉じます。
メモ: Simulink エディターの [デバッグ] タブで、[情報のオーバーレイ] メニューにブロック線図の信号と端子のプロパティを表示するオプションが提供されます。
boolean 信号
次の手順に従って、Simulink が Logical Operator ブロックの入出力にブール値または double 値を使用するようにすることもできます。
1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開くには、Simulink エディターの [モデル化] タブで、[モデル設定] を選択します。
2. [コンフィギュレーション パラメーター] ダイアログの [最適化] ページに移動します。
3. [boolean データ (対 double) として論理信号を処理] パラメーターが有効になっていることを確認します。この最適化によって、boolean データ型をサポートするブロックにデータ型が double の信号を入出力できるようにするかどうかを Simulink に示します。
4. [コンフィギュレーション パラメーター] ダイアログ で [OK] をクリックします。
Data Type Conversionブロックを Discrete Pulse Generator ブロックの後ろに配置することにより、Logical Operator ブロックに boolean 入力信号が必要であることを示すエラーを回避します。
Merge ブロックおよび交互に有効になる Subsystem
Merge ブロックを使用して、現在実行されている方の Enabled Subsystem の出力と等しい単一の信号を作成します。
1. Merge ブロックをダブルクリックして、このブロックのダイアログ ボックスを開きます。
2. マージ対象の出力をもつ Enabled Subsystem の数として [入力数] を指定します。この場合、*[入力数] * は 2 に設定する必要があります。
3. Merge ブロックが初期出力を入力信号のいずれかの開始値に設定することを指定するため、[初期出力] フィールドは空のままにします。この場合、出力は、シミュレーションの開始時に有効になっている Subsystem の開始値になります。
4. Merge ブロック ダイアログ ボックスを閉じます。
5. 2 つの条件付き実行サブシステムの出力を Merge ブロックの入力に接続します。
シミュレーションを実行すると、これまでどおり、Merge ブロックの出力は、2 つの条件付き実行サブシステムのうち、その時点で実行されている方の Subsystem の値となります。
ブロックの背景色のプログラムによる変更
シミュレーションを実行すると、条件付き実行サブシステムのうち、現在実行されている方の色が変化します。これは、条件付き実行サブシステムのすべてに対して自動的に行われることではありません。この例では、S-Function と MATLAB® コードを使用してブロックの背景色を変更します。
コードを表示するには、いずれかの Enabled Subsystem をダブルクリックして開きます。
1. Enable ブロックが、これを条件付き実行サブシステムにして、制御信号の入力端子を追加します。
2. Level-2 MATLAB-file S-Function ブロックが、MATLAB ファイル S-Function である mergefcn.m を実行します。
各タイム ステップで、S-Function のサブ関数 mdlUpdate
が実行されます。このサブ関数は次のコマンドを使用して、Subsystem が現在実行されているかどうかに基づいて、Subsystem の BackgroundColor プロパティを設定します。
参考
Merge | Level-2 MATLAB S-Function