ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Merge

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

ライブラリ

Signal Routing

説明

Merge ブロックは、そのブロックの入力を任意時間における値が直前に計算された駆動側ブロックの出力に等しい単一の出力ラインに結合します。このブロックの [入力数] パラメーターを設定して任意個数の入力を指定できます。

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

Merge ブロックは、すべての駆動信号が同じ信号メモリを共有することを仮定します。共有の信号メモリへのアクセスは、互いに排他的な方法で行われることが必要です。したがって、Merge ブロックを駆動するには、常に交代で実行するサブシステムを使用します。例は、「交互に実行されるサブシステムの作成」を参照してください。

Merge ブロックに接続するすべての信号、または Merge ブロックのネットワーク内の任意の場所に存在するすべての信号は、機能的には同じ信号で、そのため、特定の信号がもてる関連する信号オブジェクトは最大 1 つであるという制約を受けます。詳細は、Simulink.Signalを参照してください。

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

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

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

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

  • Merge ブロックの 2 つ以上の入力に同じ条件付き実行サブシステムに接続しないでください。

  • Merge ブロックは少なくとも 2 つの入力信号に接続してください。

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

  • Merge ブロックの出力端子が他の Merge ブロックに接続されていない場合は、Merge ブロックの [初期出力] パラメーターを必ず設定してください。

  • [モデル コンフィギュレーション パラメーター][診断][指定不足の初期化の検出] パラメーター用に [クラシック] の既定の設定を使用する場合は、Merge ブロックに入力する信号を分岐しないでください。分岐する信号に関連する追加の使用ガイドラインについては、「Merge ブロックの使用方法」の最後の例を参照してください。

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

Merge ブロックの使用方法

Merge ブロックの各入力として、最上位の非アトミックで非バーチャルなソースは、Iterator サブシステムではなく、条件付き実行サブシステムでなければなりません。

モデルにおける Merge ブロックの使用方法は、モデル アドバイザーを使用して確認できます。詳細は、「Merge ブロックの使用方法のチェック」を参照してください。

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

次の例も、条件付き実行サブシステムである最上位の非アトミックで非バーチャルなソースを利用したもので、有効な Merge ブロックの使い方です。

各 Atomic Subsystem ブロックは Enabled Subsystem を含みます。

モデルの階層構造の異なるレベルにおける Merge ブロックを使用することもできます。以下の例は、モデル ルートでの Merge ブロックを含んでいます。

Merge ブロックは 1 レベル下の Enabled Subsystem ブロックの内部にもあります。

Merge ブロックは Sine Wave ブロックには接続 "できません"。これは Sine Wave ブロックが条件付き実行サブシステムでないためです。

Merge ブロックは For Iterator Subsystem には接続 "できません"。

Merge ブロックは分岐された信号には接続 "できません"。

次のモデルで、参照先モデルには分岐する信号があります。サブシステム Subsys1referenced_model を参照する Model ブロックを含んでいます。これは参照モデル内のブロックへの入力を行うブロックを含んでおり、参照モデルの外部にある Merge ブロックへの入力も行います。

参照先モデルには Gain ブロックと Out1 Outport ブロックに誤って分岐する信号が含まれ、これが参照先モデルの外側にある Merge ブロックに接続されます。

次の例も Merge ブロックに接続するサブシステムに分岐された信号を表示します。これは、[モデル コンフィギュレーション パラメーター][診断][指定不足の初期化の検出] パラメーターに既定の設定の [クラシック] を使用する場合、"許可されません"。

[指定不足の初期化の検出] パラメーターを [簡易] に設定した場合、次の例はエラーを生成 "しません"。簡易初期化モードの詳細は、「指定不足の初期化の検出」を参照してください。

初期出力値

ブロックの [初期出力] パラメーターを設定することで、Merge ブロックの初期出力値を指定できます。

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

  • 2 つの入力をもつ Merge ブロックを含むモデル。1 つは Stateflow® チャートにより駆動され、もう 1 つは条件付きで実行されるサブシステム (Enable Subsystem など) により実行されます。

  • Merge ブロックの [初期出力] パラメーターが未指定であり (つまり、空の行列 ([]) として指定されている)、モデルが従来の初期化モードを使用している。

  • Stateflow チャートは、出力を val1 にマージして初期化します。

  • 条件付き実行サブシステムは、出力を別の値 val2 にマージして初期化します。

  • Stateflow チャートと条件付き実行サブシステムが、どちらも最初のタイム ステップでは実行されない。

初期化順は異なる可能性があり、最初のタイム ステップでの Merge ブロックの出力は、Stateflow チャートが最後に初期化された場合は val1 であり、条件付き実行サブシステムが最後に初期化された場合は val2 です。初期化順はシミュレーションとコード生成では異なります。

この問題に対処するには、次のいずれかの方法を使用します。

  • Merge ブロックの出力端子に別の Merge ブロックが接続されていない場合は、Merge ブロックの [初期出力] パラメーターを設定します。

  • 簡易初期化モードをオンにします。[モデル コンフィギュレーション パラメーター][診断][データ有効性][指定不足の初期化の検出] パラメーターを [簡易] に設定します。

    [簡易] 初期化設定を使用するには、すべての "ルート" Merge ブロックに [初期出力] 値を指定します。ルートの Merge ブロックとは、出力端子が他の Merge ブロックに接続されていない Merge ブロックです。

    モデルを簡易初期化モードにアップグレードするには、モデル アドバイザーの [Outport と Merge ブロックに対する初期化パラメーターの整合性をチェック] チェックを使用します。

    簡易初期化モードの詳細は、「指定不足の初期化の検出」を参照してください。

1 入力のマージ

1 入力のマージはサポートされておらず、各 Merge ブロックは少なくとも 2 つの入力が必要です。

Merge ブロックは、マージが必要な信号に対してのみ使用します。既に Merge ブロックの入力を Mux ブロックに接続しているときには、代わりに複数入力の Merge ブロックを使用します。

入力次元と Merge オフセット

[異なる端子幅を許可] パラメーターを選択しない場合は、 Merge ブロックは同じ次元の入力のみを受け入れ、入力と同じ次元の信号を出力します。

[異なる端子幅を許可] を選択した場合、ブロックはスカラーと要素数の異なるベクトルを受け入れます。ただし、行列は受け入れません。さらにこのブロックでは、出力信号の先頭に対する各入力信号のオフセットを指定できます。出力信号の幅は次のようになります。

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

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

次のブロック線図があるとします。

Merge ブロックには次の出力幅があります。

max(2+0,2+1)=3

この例では、オフセット v10 であり、オフセット v21 です。Merge ブロックは、v1 の要素を v3 の最初の 2 つの要素にマップし、v2 の要素を v3 の最後の 2 つの要素にマップします。Scope ブロックの出力で示されているように v3 の 2 つ目の要素のみがマージされます。

簡易初期化モードを使用している場合、[異なる端子幅を許可] をクリアする必要があります。すべての入力信号に対する入力端子のオフセットは、0 でなければなりません。

本当にマージを必要とする信号要素に対してのみ Merge ブロックを使用することを検討してください。次の例に示すように、他の要素は Concatenate ブロックを使って結合された要素とマージすることができます。

簡易初期化モードの詳細は、「指定不足の初期化の検出」を参照してください。

入力信号の結合と並べ替え

Merge ブロックは、要素が並べ替えられていたり、部分的に選択されていたりするような入力信号を受け入れません。また、条件付き実行サブシステムの外側で結合された Merge ブロックには入力信号を接続しないでください。

たとえばブロック線図では、Selector ブロックがベクトル信号の最初の要素と最後の要素を入れ替えるため、Merge ブロックは最初の Selector ブロックの出力を受け入れません。同様に、Selector ブロックは初めの 3 つの要素のみを選択するので、Merge ブロックは 2 番目の Selector ブロックの出力を受け入れません。

簡易初期化モードを使用している場合、条件付き実行サブシステムの外側で 2 つの信号が結合されているので、次の配置は適切では "ありません"。

ただし、条件付き実行サブシステム内で Merge ブロックの入力信号の結合や並べ替えができます。たとえば、次のモデルは適切です。

各 Enabled Subsystem には次のブロックが含まれています。

簡易初期化モードの詳細は、「指定不足の初期化の検出」を参照してください。

条件付き実行サブシステムの出力端子のリセット

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

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

    メモ:   簡易初期化モードを使用している場合、Outport ブロックの [ディセーブル時の出力] パラメーターは [保持] に設定する必要があります。

ディセーブル状態のサブシステムの出力をリセットする代わりに、既定のケースにサブシステムを追加し、他に実行しているサブシステムがない場合に、このサブシステムを実行する制御ロジックを使ってください。例として、次のブロック レイアウトを参照してください。

簡易初期化モードの詳細は、「指定不足の初期化の検出」を参照してください。

S-Function 出力のマージ

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

サポートするデータ型

Merge ブロックは、Simulink がサポートするすべてのデータ型 (固定小数点データ型および列挙型データを含む) の実数および複素数信号を受け入れます。すべての入力は、同じデータ型と数値タイプでなければなりません。

詳細は、Simulink ドキュメンテーションの「 Simulink でサポートされているデータ型」を参照してください。

パラメーターとダイアログ ボックス

入力数

マージする入力端子の数を指定します。

初期出力

出力の初期値を指定します。詳細は、「初期出力値」を参照してください。

異なる端子幅を許可

このチェック ボックスを選択して、ブロックが異なる数をもつ要素の入力を受け入れるようにします。

入力端子オフセット

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

バス サポート

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

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

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

  • [異なる端子幅を許可] は無効にしなければなりません。

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

初期条件構造体の指定方法の詳細は、「バス信号の初期条件の指定」を参照してください。

Merge ブロックへの非バーチャル バス入力のすべての信号は、関連するバス オブジェクトの要素が継承されたサンプル時間を指定する場合でも、同じサンプル時間をもつ必要があります。個々の信号またはバスの中のすべての信号のサンプル時間の変更に Rate Transition ブロックを使用できます。詳細は、「合成信号」「バス対応ブロック」を参照してください。

バスの配列は、Merge ブロックへの入力信号として使用できます。バス配列の定義と使用方法の詳細は、「バス配列へのバスの統合」を参照してください。バスの配列を Merge ブロックと共に使用する場合、次の制限事項があります。

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

  • [入力数] — 2 よりも大きい値に設定します。

  • [初期条件]— このパラメーター (構造体の場合がありますが、そうである必要はありません) のみがバスの配列の次元に一致するようにスカラー拡張されます。

特性

バス対応

あり、上記の制約付き

直接フィードスルー

あり

サンプル時間

駆動ブロックから継承

スカラー拡張

なし

離散化

あり

多次元化

あり

ゼロクロッシング検出

いいえ

この情報は役に立ちましたか?