モデルの見た目の複雑さを減らすために、信号を合成信号に結合できます。合成信号に含まれる信号を "要素" と呼びます。要素はそれぞれ別の ID を保持しているため、合成信号からそれらを抽出できます。
合成信号の要素には、合成信号のタイプに応じて、名前またはインデックでアクセスできます。
名前ベースの合成信号では、信号階層が可能です。これらの信号は一般的に "バス" と呼ばれます。
インデックスベースの合成信号は、段階的に作成したかどうかに関係なく、フラットです。すべての入力信号が同じデータ型をもつようにします。
信号を合成信号にグループ化する場合に、シミュレーションおよびコードの生成に影響するかどうかを決定できます。
"バーチャル" 合成信号は、2 つ以上の信号線を 1 つの信号線に結合して、モデルの外観を簡素化します。バーチャル合成信号は機能的な意味ではグループ化されないため、シミュレーションやコードの生成には影響しません。バーチャル合成信号は、要素に直接アクセスすることで、シミュレーションや生成されたコードで非バーチャル合成信号よりも迅速に実行されます。
"非バーチャル" 合成信号は、外観および機能的に信号をグループ化して、シミュレーションとコードの生成両方に影響します。
モデルは、これらの合成信号のタイプを組み合わせて使用できます。
モデルをコンパイルまたはシミュレーションすると、合成信号のタイプをライン スタイルで識別できます。
ライン スタイル | 合成信号のタイプ |
---|---|
![]() | バーチャル バス |
![]() | 非バーチャル バス |
![]() | [非スカラー信号] 情報のオーバーレイが有効な場合の非スカラー信号 (インデックスベースの合成信号を含む) |
![]() | 非バーチャル バスを含むインデックスベースの合成信号 |
モデルには、信号 a
、b
、および c
を含むバーチャル バスが表示されます。
Bus Creator ブロックは、サブシステムまたはモデル内にバスを作成します。Bus Selector ブロックは、バスの指定された要素を抽出します。
このモデルは、サブシステムの境界を通過する等価のバーチャル バスを示しています。
Out Bus Element ブロックは、サブシステムまたはモデル インターフェイスでバスを作成します。In Bus Element ブロックは、サブシステムまたはモデル インターフェイスでバスの指定された要素を抽出します。
バーチャル バスは次の目的で使用できます。
サンプル レートの異なるバス要素を含めること
モデル参照の境界を超えること。
バーチャル バスのプロパティを指定および検証するには、Simulink.Bus
オブジェクトを指定できます。
バーチャル バスを作成するには、バーチャル バスへの信号線のグループ化を参照してください。
モデルには、信号 a
、b
、および c
を含む非バーチャル バスが表示されます。
Bus Creator ブロックは、サブシステムまたはモデル内にバスを作成します。Bus Selector ブロックは、バスの指定された要素を抽出します。
非バーチャル バスは次の目的で使用できます。
バス データを生成された C コードの構造体としてパッケージ化。
バス配列の構成。
S-Function を介した外部コードとのインターフェイス接続。
バス データが MATLAB Function ブロックまたは Stateflow® チャートの境界を越えるように設定。
Scope ブロックを含むバスを表示し、ログに記録。
非バーチャル バスのすべての要素は、同じサンプル時間を使用しなければなりません。Rate Transition ブロックを使って個々の信号のサンプル時間、またはバス内のすべての信号のサンプル時間を変更することができます。
Simulink.Bus
オブジェクトでは、非バーチャルにするバスを定義しなければなりません。[非バーチャル バスとして出力] パラメーターを選択すると、バスは非バーチャルになります。このパラメーターを選択すると、シミュレーションとコード生成で Bus
オブジェクトによって定義された構造体が適用されます。このパラメーターをオフにすると、Bus
オブジェクトはバスのプロパティのみを検証します。
バスのタイプによって、生成されたコードの効率性、サイズおよび可読性に大きな違いが生じる可能性があります。生成されたコードにバスを表示するには、バスは非バーチャルでなければなりません。生成されたコードにはバーチャル バスの要素だけが表示されます。
たとえば、バスは Unit Delay ブロックを介して渡されるとします。簡単にするために、バスに含まれている要素は a
、b
、c
のみです。次の表は、生成されたコードでの [非バーチャル バスとして出力] パラメーターの影響を示します。
生成コード | バーチャル バス | 非バーチャル バス |
---|---|---|
| バーチャル バスには、型定義は必要ありません。 |
typedef struct { real_T a; real_T b; real_T c; } BusObject; |
| 生成コードは、バーチャル バスの要素につき 1 つの Unit Delay ブロックを定義します。
typedef struct { real_T UnitDelay_1_DSTATE; /* '<Root>/Unit Delay' */ real_T UnitDelay_2_DSTATE; /* '<Root>/Unit Delay' */ real_T UnitDelay_3_DSTATE; /* '<Root>/Unit Delay' */ } DW_model_T; | 生成コードでは
typedef struct { BusObject UnitDelay_DSTATE; /* '<Root>/Unit Delay' */ } DW_model_T; |
非バーチャル バスを作成するには、非バーチャル バスの作成を参照してください。
バスを使用するモデルのコードを生成する場合は、Generate Efficient Code for Bus Signals (Simulink Coder)を参照してください。非バーチャル バスのコードを生成すると、いくつかのバスの複数のコピーが生成される場合があります。
このモデルは、入力行列を並べて配置する連結された信号を示しています。
Matrix Concatenate ブロックは、連結された信号を作成します。要素は、このブロックの設定方法に応じて、ベクトルまたは行列になります。Selector ブロックは、指定されたインデックスに基づいて信号を抽出します。抽出された信号は、入力信号とは異なる方法でグループ化できます。
連結された信号を数学演算で使用できます。
Vector Concatenate ブロックまたは Matrix
Concatenate ブロックで信号をグループ化するには、信号のデータ型が同じでなければなりません。データ型が Bus
オブジェクトの場合、入力は非バーチャル バスでなければなりません。
連結された非バーチャル バスは、"バス配列" とも呼ばれます。バス配列では、すべての要素が、同じ Bus
オブジェクトを使用してプロパティを指定する非バーチャル バスです。バス配列は MATLAB® の構造体の配列と同等です。バス配列を使用して、マルチチャネル システムをモデル化することができます。すべてのチャネルは同じプロパティをもちますが、各チャネルの値は異なる場合があります。
このモデルでは、Vector Concatenate ブロックがバス配列を作成しています。
バス配列の詳細については、バス配列へのバスの統合を参照してください。
このモデルは、3 つの入力信号を並べて配置する Mux 信号を示しています。
Mux ブロックは、Mux 信号を作成します。Demux ブロックはすべての信号を抽出し、入力信号と異なる方法でグループ化できます。Selector ブロックは、指定されたインデックスに基づいて信号を抽出します。抽出された信号は、入力信号とは異なる方法でグループ化できます。
Mux 信号を使用して、複数のベクトルに対して計算を実行できます。Mux ブロックを使用して、関数呼び出しのベクトルを作成することもできます。
Mux ブロックの入力信号は、スカラー、ベクトル、Mux 信号の任意の組み合わせにできますが、データ型と数値型は同じでなければなりません。出力 Mux の信号は、Mux ブロックの入力信号と同じ順序で表示されます。段階的に複数の Mux ブロックを使用して Mux 信号を作成できますが、単一の Mux ブロックを使用するときと同様に結果はフラットになります。