最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
ヒント
Simulink® は信号を結合して合成信号にするさまざまな技術を提供します。技術の比較については、合成信号のタイプを参照してください。
非バーチャル バス配列とは、要素がバスである配列のことです。各 Bus
オブジェクトは、そのバス要素として同じ信号名、階層および属性をもちます。
バス配列の使用例としては、多チャネルのシステム (通信システムなど) のモデル化があります。同じ Bus
オブジェクトを使用してすべてのチャネルをモデル化できますが、チャネルはそれぞれ異なる値をもつ場合があります。
バス配列を使用するには、以下を実行します。
Bus
オブジェクトをデータ型として使用する (バス オブジェクト データ型の指定を参照)。
バスおよびバス要素の次元を指定する。
バス配列を使用するモデルの例については、sldemo_bus_arrays
のモデルを開いてください。この例で、非バーチャル バス入力信号は、バスの配列を作成する Vector
Concatenate ブロックまたは Matrix Concatenate ブロックに接続されます。更新後に、ブロック線図が表示されます。
モデルは、以下でバス配列を使用します。
Assignment ブロック。配列内のバスを割り当てます。
For Each Subsystem ブロック。配列内の各バスで反復処理を実行します。
Memory ブロック。前のタイム ステップからのバス配列の入力を出力します。
バス配列を使用すると、以下を実現できます。
構造化データをコンパクトに表現する。
モデルの複雑度を軽減する。
複数のバスの処理に使用するアルゴリズムを集中管理することで保守作業を軽減する。
バス配列と共に For Each Subsystem を使用するなどにより、同じタイプの複数のバスの反復処理を効率化する。
モデルの残りを再構成したり、モデルのさまざまな箇所に更新を加える必要がなく、バスの数の変更が簡略化される。
Assignment ブロックや Selector ブロックなどの組み込みブロックを使用して、その他の型の配列のようにバス配列を操作する。バス配列を使用すると、構造体信号のパックおよびアンパックを管理するカスタム S-Function を作成する必要がなくなります。
サブシステムの境界およびモデル参照の境界を超えて統合されたバス データを使用します。また、MATLAB Function ブロックのステップ イン/アウトを使用します。
ロジックを C コードと Simulink モデルに分割せずに、すべてのロジックを Simulink モデル内に保持する。このアプローチによって、統合化された整合性と正確性のチェックおよびモデル内でのメタデータの維持がサポートされるため、2 つの異なる環境でモデル コンポーネントを管理する必要がなくなります。
C 構造体の配列をもつコードが生成され、構造体の配列を使用するレガシ C コードと統合できる。このアプローチによって、インデックス構造体で for
ループを使用することで、Simulink 計算のための配列へのインデックス付けが簡略化されます。
バス配列に統合できるバスの種類の詳細については、バスの要件を参照してください。
バス配列を定義するには、Concatenate ブロックを使用します。次の表は、バス配列の入力の要件、および Concatenate ブロックの Vector Concatenate および Matrix Concatenate バージョンのそれぞれの出力を示しています。
ブロック | バス信号の入力要件 | 出力 |
---|---|---|
Vector Concatenate | ベクトル、行ベクトル、または列ベクトル | 入力のいずれかが行ベクトルまたは列ベクトルの場合、出力は行ベクトルまたは列ベクトルです。 |
Matrix Concatenate | 任意の次元の信号 (スカラー、ベクトル、行列) | 低次元の入力の場合、後の次元は 1 とみなされます。 連結は、[連結の次元] パラメーターで指定した次元に対して実行されます。 |
メモ
バス配列の定義には Mux ブロックまたは Bus Creator ブロックを使用しないでください。代わりに Bus Creator ブロックを使用してスカラー バスを作成してください。
バス配列に統合する "すべての" バスのための Bus
オブジェクトを "1 つ" 定義します。Bus
オブジェクトの定義の詳細については、Simulink.Bus オブジェクトでのバス プロパティの指定を参照してください。
sldemo_bus_arrays
のモデルでは、両方の Bus Creator ブロックでバス配列の入力バス (Scalar Bus
) に使用する sldemo_bus_arrays_busobject
Bus
オブジェクトを定義します。
モデルに Vector Concatenate ブロックまたは Matrix Concatenate ブロックを追加し、ブロック パラメーター ダイアログ ボックスを開きます。
入力がスカラーであるため、sldemo_bus_arrays_busobject
モデルでは Vector Concatenate ブロックを使用します。
[入力の数] パラメーターを、バス配列に含めるバスの数に設定します。
指定した入力端子の数がブロック アイコンに表示されます。
入力バス データのタイプと一致するように [モード] パラメーターを設定します。
sldemo_bus_arrays
のモデルでは、入力バス データはスカラーであるため、[モード] 設定は [ベクトル]
です。
Matrix Concatenation ブロックを使用する場合、入力配列を連結する出力次元を指定するように [連結の次元] パラメーターを設定します。以下のいずれかの値を入力します。
1
— 入力配列を垂直に連結
2
— 入力配列を水平に連結
2 より上の次元 — 入力に対して多次元連結を実行
バス配列に含めるすべてのバスを Concatenate ブロックに接続します。
Constant ブロックを使用して、複数の定数値信号をバス配列として簡潔に表すことができます。この手法を使用すると、特にモデルがさまざまなパラメーター値でアルゴリズムを繰り返す場合、モデル内の信号線の数およびモデルが使用する変数の数を削減できます。
バスの定数値配列を生成するには、Constant ブロックで MATLAB® 構造体の配列を使用します。ブロック出力はバス配列で、構造体の配列の各フィールドが、対応する信号要素のシミュレーション値を提供します。
構造体の配列を使用して、Simulink.Parameter
オブジェクトの Value
プロパティを指定し、Constant ブロックのパラメーター オブジェクトを使用します。
モデル例 ex_constantbus_array
を開きます。
変数 ParamBus
と const_param_struct
がベース ワークスペースに表示されます。変数 const_param_struct
に含まれる構造体のフィールド名は、ParamBus
で定義されたバス型の要素と一致します。
ブロック線図を更新して信号線の幅を表示します。
Constant ブロックの出力は、ParamBus
の単一のスカラー バス型です。構造体変数 const_param_struct
は、ブロックの定数値を指定します。
コマンド プロンプトで、構造体 const_param_struct
をコピーして 2 つの構造体をもつ配列を作成します。配列の個々の構造体のインデックスを作成してフィールド値をカスタマイズします。
const_struct_array =...
[const_param_struct const_param_struct];
const_struct_array(2).Offset = 158;
const_struct_array(2).Gain = 3.83;
const_struct_array(2).Threshold = 1039.77
const_struct_array = 1x2 struct array with fields: Offset Gain Threshold
Constant ブロックのダイアログ ボックスで、[定数値] を const_struct_array
に設定します。
2 つの Selector ブロックをモデルに追加し、表示されているように Constant ブロックを接続します。
Selector ブロックのダイアログ ボックスで、[インデックス] を 1
に設定し、[入力の端子サイズ] を 2
に設定します。
Selector1 ブロックのダイアログ ボックスで、[インデックス] を 2
に設定し、[入力の端子サイズ] を 2
に設定します。
モデルのブロック アルゴリズムをコピーし、表示されているようにブロックを接続します。
ブロック線図を更新します。信号線の幅とスタイルは、Constant ブロックの出力がバス配列であることを示します。Selector ブロックはそれぞれ配列内のバスのいずれか 1 つを抽出します。
アルゴリズムの各コピーは、変数 const_struct_array
の対応する構造体で提供される定数値を使用します。
信号要素の大きな階層を使用するバスに、構造体の配列を作成する場合は、関数 Simulink.Bus.createMATLABStruct
の使用を検討してください。コピーできるスカラー構造体がない場合、この手法を使用して構造体の配列を作成することもできます。