メインコンテンツ

Merge

R2026b

複数の信号を単一の信号に結合

  • Merge block

ライブラリ:
Simulink / Signal Routing
HDL Coder / Ports & Subsystems

説明

Merge ブロックは、入力を単一の出力に結合します。どの時点の出力値も、駆動ブロックの最新の計算出力と等しくなります。[入力数] パラメーターを設定して、入力の数を指定します。

Merge ブロックは、異なるときに更新される入力信号を、インターリーブされた値が別の ID と時間を保持する統合信号にインターリーブする場合に使用します。同時に更新する信号を、配列または行列信号に統合するには、Vector Concatenate ブロックを使用します。

Merge ブロック使用の際のガイドライン

Merge ブロックを使用するときは、以下のガイドラインに従ってください。

  • ブロックを介在させずに Merge ブロックを駆動するときは、常に条件付き実行サブシステムを使用してください。

  • 任意のタイム ステップで実行される駆動側の条件付き実行サブシステムは多くても 1 つとなるようにしてください。

  • すべての入力信号が同じサンプル時間をもつことを確認してください。

  • Merge ブロックへの入力となる信号は分岐しないでください。

  • Merge ブロックへの入力となる信号はログに記録しないでください。

  • Merge ブロックのブロックの実行優先順位は指定しないでください。詳細については、ブロックの実行順序、実行優先順位、およびタグの指定を参照してください。

  • Merge ブロックを駆動するすべての条件付き実行サブシステムの Outport ブロックに対して、[ディセーブル時の出力] を [保持] に設定してください。

  • Model ブロックの出力が MATLAB Function ブロックまたは Stateflow® チャートからのものである場合は、その出力端子を Merge ブロックの入力端子に接続しないでください。

  • Merge ブロックでは、さまざまなタスクの信号をルートの Outport ブロックにマージすることがサポートされます。

Merge ブロックの各入力として、最上位の非バーチャルなソースは、条件付き実行サブシステム (For Iterator Subsystem または While Iterator Subsystem を含まない) でなければなりません。

次のブロック線図に示すのは、Merge ブロックの有効な使い方で、2 つの条件付き実行サブシステムから信号をマージします。

Simulink block diagram showing valid Merge block usage. In3 signal enables one of two Enabled Subsystem blocks at a time using a NOT block to invert the enable signal. The In1 signal feeds Enabled Subsystem, and the In2 signal feeds Enabled Subsystem1. The outputs of both enabled subsystems connect to a Merge block, whose output connects to Out1.

バス サポート

Merge ブロックはバス対応ブロックです。入力はバーチャルまたは非バーチャルなバス信号で次の制約があります。

  • 入力数は 1 よりも大きい

  • [初期出力] は、ゼロ、非ゼロのスカラー、または有限数値構造体でなければなりません。

  • [異なる端子幅を許可] チェック ボックスはオフにしなければなりません。

  • すべての入力は、バスで、等価でなければなりません (すべての要素について同名で同じ属性をもつ同じ階層にある)。

Merge ブロックへの非バーチャル バス入力のすべての信号で同じサンプル時間を使用しなければなりません。Rate Transition ブロックを使って個々の信号のサンプル時間、またはバス内のすべての信号のサンプル時間を変更することができます。

S-Function 出力のマージ

Merge ブロックは、S-Function ブロックの出力を保存するためのメモリが再利用可能な場合に限り S-Function ブロックからの信号をマージできます。S-Function ブロックの再利用不可能な端子を Merge ブロックに接続するモデルを更新またはシミュレートしようとすると、Simulink® はエラー メッセージを表示します。ssSetOutputPortOptimOpts を参照してください。

マルチタスク ルート出力

ルートの Outport ブロックに接続されている Merge ブロックでは、さまざまなタスクの信号をルートの Outport ブロックに同時に書き込むことで、これらの信号をマージできます。Merge ブロックにはソースの union サンプル時間が割り当てられます。

同じタスクに含まれる Merge ブロックのすべてのソースが、同じタイム ステップで同時に出力しない条件付き実行サブシステム内にある必要があります。

例

すべて展開する

この例では、2 つの Atomic Subsystem の入力をもつ Merge ブロックを示します。

各 Atomic Subsystem ブロックは Enabled Subsystem を含みます。これによって、Merge ブロックへの入力は条件付きで実行されたサブシステムからの入力という要件が満たされます。

R2026b 以降

この例では、MergeブロックおよびVector Concatenateブロックを使用して、複数の信号を、幅が異なる単一の出力信号にマージするための推奨される手法を示します。この手法は、クラシック初期化モードと簡易初期化モードの両方と互換性があります。

この例では、モデル MergeSigUnequaInputlWidth を使用して、幅 1 の複数の信号を幅 3 の出力信号にマージする方法を示します。

モデルを開きます。

mdlName = "MergeSigUnequaInputlWidth.slx";
open_system(mdlName)

モデルの動作

Enabled Subsystem は、Pulse Generator ブロックを使用して生成されたパルス信号に基づいて実行されます。サブシステムからの信号は、Merge ブロックと Vector Concatenate ブロックを組み合わせて使用してマージされます。サブシステム SS1 および SS2 は、幅 1 の信号を出力します。信号 v2 および v3 は、Merge ブロックに入力されます。Merge ブロックの出力は、信号 v1 および v4 と共に Vector Concatenate ブロックに入力され、幅 3 のマージされた出力信号 vout が生成されます。

Model using a combination of Merge and Vector Concatenate blocks to partially merge signals.

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

モデルのシミュレーションを実行して、Scope ブロックで出力を確認します。分岐 v1 および v4 はマージされないままになります。信号 v2 および v3 はマージされ、それらの値は 2 と 3 に交互に切り替わります。

out = sim(mdlName);

メモ: [異なる端子幅を許可] パラメーターを使用するには、モデルはクラシック初期化モードを使用する必要があります。R2026b 以降、クラシック モードを使用するモデルではコンパイル時の警告が出されます。代わりに簡易モードを使用してください。簡易モードを使用するモデルにおいて、互いに次元が異なる入力信号、または出力信号と次元が異なる入力信号をマージするには、Merge ブロックおよび Vector Concatenate ブロックを使用した、入力と出力の幅が異なる信号のマージの例に示されているように、Merge ブロックとVector Concatenateブロックを組み合わせて使用します。

クラシック初期化モードは推奨されませんが、この例では [異なる端子幅を許可] パラメーターの使用方法を示します。

[異なる端子幅を許可] パラメーターを選択すると、ブロックは、要素数が異なるスカラー入力およびベクトル入力を受け入れます。出力信号の先頭に対する各入力信号のオフセットを指定できます。出力信号の幅は $max(w1+o1, w2+o2, ... wn+on)$ です。ここで、$wn$ は入力信号の幅、$on$ はオフセットです。Merge ブロックの出力幅は $max(2+0,2+1)=3$ です。この例では、$v1$ のオフセットは 0、$v2$ のオフセットは 1 です。この例では、指定不足の初期化の検出パラメーターに Classic オプションを使用します。

Merge ブロックは、$v1$ の要素を $v3$ の最初の 2 つの要素にマッピングし、$v2$ の要素を $v3$ の最後の 2 つの要素にマッピングします。Scope の出力で示されているように $v3$ の 2 つ目の要素のみが実際にマージされます。

拡張例

制限

  • Merge ブロックに接続するすべての信号は、機能的には同じ信号です。このため、信号には制限があり、特定の信号は最大 1 つの信号オブジェクトに関連付けられます。詳細については、Simulink.Signal を参照してください。

  • Merge ブロックへの入力が単一のイニシエーターからである場合、実行時診断は実行されません。単一のイニシエーターの例としては、Merge ブロックに接続された Function-Call Subsystem を実行する Stateflow チャートなどがあります。

  • ディセーブルのとき、マージ対象の条件付き実行サブシステムの出力端子をリセットに設定しないでください。このアクションにより、複数のサブシステムがブロックを同時に更新する可能性があります。より詳しく述べると、ディセーブル状態のサブシステムはその出力をリセットすることで Merge ブロックを更新します。一方、Enabled Subsystem はその出力を計算することにより、ブロックを更新するからです。

    この動作を防ぐには、マージ対象の各条件付き実行サブシステムに対して Outport ブロックの [ディセーブル時の出力] パラメーターを [保持] に設定します。

  • Merge ブロックは、次のブロック線図に示すように、要素が並べ替えられていたり、部分的に選択されていたりするような入力信号を受け入れません。

    Simulink block diagram including 2 enabled subsystems, each of whose outputs is connected to a Selector block. The outputs of both Selector blocks are connected to a Merge block. One Selector block reorders its input signal before passing it to the Merge block, and the other Selector block selects a subset of its input signal before passing it to the Merge block.

  • 条件付き実行サブシステムの外側で結合されたブロックには入力信号を接続しないでください。

バス配列を Merge ブロックの入力信号として使用できますが、次の制限があります。

  • [異なる端子幅を許可] — このパラメーターはクリアします。

  • 初期条件 — このパラメーターは次を使用して指定できます。

    • 値 0。この場合、バス配列内にある個々の各信号は初期値 0 を使用します。

    • バス配列内にある個々の信号に対して初期条件を指定する構造体の配列。

    • バス型で定義される各要素の初期条件を指定するスカラー構造体。この手法を使用して配列の各バスに同じ初期条件を指定します。

端子

入力

すべて展開する

他の入力信号とマージされる 1 番目の入力信号

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

他の入力信号とマージされる n 番目の入力信号。

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

出力

すべて展開する

入力信号からマージされた出力信号。

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

パラメーター

すべて展開する

マージする入力信号の数を指定します。ブロックは各入力信号に対して端子を作成します。

プログラムでの使用

ブロック パラメーター: Inputs
型: 文字ベクトル
値: 整数
既定の設定: '2'

出力信号の初期値を指定します。初期出力値を指定しない場合、初期出力は初期化モードと駆動ブロックに依存します。

簡易初期化モードでは、[初期出力] の未指定 (空行列 []) の値に関して、出力データ型の既定の初期値が使用されます。既定の初期値の詳細は、信号値の初期化を参照してください。クラシック初期化モードでは、[初期出力] の未指定 (空行列 []) の値に関して、そのブロックの初期出力は最後に評価された駆動ブロックの初期出力と等しくなります。これらのソースの初期化の順序は変化する可能性があるため、初期化はモデルのシミュレーションとコード生成で一致しない可能性があります。

プログラムでの使用

ブロック パラメーター: InitialOutput
型: 文字ベクトル
値: スカラー | ベクトル
既定の設定: '[ ]'

このパラメーターを選択して、要素の数が相互に異なる入力、または出力と異なる入力をブロックが受け入れるようにします。このブロックでは、出力信号の先頭に対する各入力信号のオフセットを指定できます。出力信号の幅は次のようになります。

max(w1+o1, w2+o2, ... wn+on)

ここで、w1, ... wn は入力信号の幅、o1, ... on は入力信号のオフセットです。

このパラメーターをオフにすると、Merge ブロックは同じ次元の入力のみを受け入れ、入力と同じ次元の信号を出力します。

メモ

モデルで [指定不足の初期化の検出] コンフィギュレーション パラメーターに [クラシック] オプションを使用している場合以外は、このパラメーターを選択しないでください。

R2026b 以降、[指定不足の初期化の検出] コンフィギュレーション パラメーターに [クラシック] オプションを使用すると、Simulink はコンパイル時の警告を出します。代わりに [簡易] オプションを使用してください。このようなモデル化のシナリオでは、互いに次元が異なる入力、または出力と次元が異なる入力をマージするには、Merge ブロックと Vector Concatenate ブロックを組み合わせて使用します。詳細については、Merge ブロックおよび Vector Concatenate ブロックを使用した、入力と出力の幅が異なる信号のマージを参照してください。

A combination of Merge block and Vector Concatenate blocks is used when the input signal width is different from the output signal width.

プログラムでの使用

ブロック パラメーター: AllowUnequalInputPortWidths
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

ベクトルを入力して、出力信号の先頭に対する各入力信号のオフセットを指定します。

依存関係

このパラメーターを有効にするには、[異なる端子幅を許可] を選択します。

プログラムでの使用

ブロック パラメーター: InputPortOffsets
型: 文字ベクトル
値: スカラー | ベクトル
既定の設定: '[ ]'

ブロックの特性

データ型

Boolean | bus | double | enumerated | fixed point | half | image | integer | single | string

直達

はい

多次元信号

はい

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

拡張機能

すべて展開する

固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。

バージョン履歴

R2006a より前に導入

すべて展開する