メインコンテンツ

バス配列の操作

バス配列を使用するようにモデルを設定するには、通常、以下のタスクを実行しなければなりません。

  1. バス配列を定義します。非バーチャル バスからのバス配列の作成を参照してください。

  2. バス配列の各要素に対して反復処理を実行するためにサブシステムを追加します。反復処理の実行を参照してください。

  3. 反復処理サブシステム内で、スカラー アルゴリズムをモデル化します。

    1. バス配列を操作します (Selector ブロックおよび Assignment ブロックを使用)。

    2. Bus Selector ブロックおよび Bus Assignment ブロックを使用して、サブシステム内の非バーチャル バスから要素を選択するか、非バーチャル バスに要素を割り当てます。

    バス配列への値の割り当ておよびバス配列からのバス要素の選択を参照してください。

  4. オプションで、バス配列のデータをインポートまたはログ作成します。バス配列のデータの読み込みおよびバス配列のログ記録を参照してください。

得られるモデルは、バス配列を作成し、サブシステムを使用して配列の要素を反復処理します。

Nonvirtual buses are grouped in an array of buses that is input to a subsystem that provides iterative processing.

反復処理の実行

For Each Subsystem ブロック、While Iterator Subsystem ブロック、For Iterator Subsystem ブロックなどのブロックを使用して、バス配列のバス データで反復処理を実行できます。これらのブロックを 1 つ使用して、以下に対して同じ種類の処理を実行できます。

  • バス配列内の各バス

  • バス配列内の選択されたバスのサブセット

バス配列への値の割り当て

バス配列内の 1 つ以上の要素に値を割り当てる方法は、モデル化要件によって異なります。

  • バス配列内の指定したバスに値を割り当てるには、Assignment ブロックを使用します。例については、バス配列のモデル化を参照してください。

  • バス内の指定した要素に値を割り当てるには、Bus Assignment ブロックを使用します。For Each Subsystem などのサブシステム内のバスにアクセスする場合や、バス配列からバスを選択するには、Selector ブロックを使用します。例については、バス要素への値の代入を参照してください。

    Bus Assignment ブロックは、バスの要素であるバス配列を割り当てたり、完全に置き換えたりできます。

  • バス配列内のバスの要素に値を割り当てるには、MATLAB Function ブロックを使用できます。例については、バス配列の要素への代入を参照してください。

バス配列からのバス要素の選択

バス配列からバス要素を選択するには、次のようにします。

  1. バス配列からバスを選択するには、Selector ブロックを使用します。バスの入力配列は、どの次元でもかまいません。Selector ブロックの出力バスは、バスの入力配列から選択されたまたは並べ替えられた要素のセットです。

  2. バスからバス要素を選択するには、Bus Selector ブロックを使用します。Bus Selector ブロックの入力は、バスでなければなりません。

例については、バス配列のモデル化を参照してください。

バス配列のデータの読み込み

シミュレーション用に、いくつかのブロックでバス配列の外部入力データのモデルへの読み込みがサポートされています。次の表は、読み込みブロックのバス配列のサポートについてまとめたものです。

ブロックバス配列のサポート

Inport

サポートあり。

詳細については、ルート レベルの入力端子へのバス データの読み込みを参照してください。

In Bus Element

サポートあり。

バス配列の要素は選択できません。バス配列全体を読み込む必要があります。詳細については、In Bus Element を参照してください。

Signal Editor

サポートあり。

From Workspace

サポートあり。

詳細については、From Workspace ブロックを使用したデータの読み込みを参照してください。

Playback

サポートあり。

バス データを読み込むと、Playback ブロックはバスの各要素に端子を割り当てます。

From File

サポートなし。

From Spreadsheet

サポートなし。

バス配列のログ記録

バスの配列をエクスポートするには、信号のログ用に信号をマークします。詳細については、シミュレーションのランタイム データの保存を参照してください。

メモ

Simulink® は、ラピッド アクセラレータ モードでは参照モデル内の信号を記録しません。

バス配列に含まれる特定の信号のログ データにアクセスするには、構造体の階層を移動して、特定の信号に対するインデックスを指定します。詳細については、Dataset 形式を使用してログ記録されたバス データへのアクセスを参照してください。

ルート レベルのバス出力は、[出力] コンフィギュレーション パラメーターを選択している場合はログに記録されません。代わりに、信号ログを使用した信号データの保存で説明されているように、標準の信号ログを使用してください。

バスまたはバス配列に対して For Each Subsystem 内から直接信号ログを使用しないでください。Bus Selector ブロックを使用して、ログを記録するバス要素信号を選択するか、Subsytem 外に Outport ブロックを追加してその信号のログを記録します。詳細については、For Each Subsystem における信号のログ記録を参照してください。

メモ

可変サイズの信号をもつバス配列については、信号ログはシミュレーションをノーマル モードで実行する場合にのみサポートされます。 (R2023a 以降)

バス配列の初期化

バス配列内にある個々の信号それぞれに対して固有の初期値を指定するには、初期条件構造体の配列を使用することができます。配列内の各構造体は、バスのいずれかを初期化します。

構造体パラメーターを使用してバス配列を初期化するには、次のものを使用できます。

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

  • バス型と同じフィールド階層およびフィールド名を表すスカラー値 struct。この場合、スカラー構造体が拡張され、バス配列内にある個々の信号がそれぞれ初期化されます。

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

    構造体の配列を使用する場合、配列内の構造体はすべて同じフィールド階層をもっていなければなりません。また、階層内の各フィールドは、配列全体で次の特性が同一でなければなりません。

    • フィールド名

    • 数値データ型 (singleint32 など)

    • 実数/複素数

    • 次元

部分構造体は使用できません。

例については、Initialize Buses and Arrays of Buses Using MATLAB Structure from Type EditorProgrammatically Initialize Arrays of Busesを参照してください。

コード生成

バス配列のコード生成では、特定の形式をもつ構造体が作成されます。バス配列のコード生成を参照してください。

メモ

可変サイズの信号をもつバス配列については、コード生成はサポートされていません。

参考

トピック