主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

バス配列の操作

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

  1. バス配列を定義します(非バーチャルバスからのバス配列の作成を参照)。

  2. バス配列の各要素に対して反復処理を実行するためにサブシステムを追加します。たとえば,为每个子系统ブロックまたは迭代器ブロックを使用します。バスの配列を连接ブロックから反復処理サブシステムに接続します。反復処理の実行を参照してください。

  3. 反復処理サブシステム内で,スカラーアルゴリズムをモデル化します(たとえば,每个サブシステムなど)。

    1. バス配列を操作します(选择器ブロックおよび赋值ブロックを使用)。

    2. 总线选择器ブロックおよび总线分配ブロックを使用して,サブシステム内の非バーチャルバスから要素を選択するか,非バーチャルバスに要素を割り当てます。

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

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

結果として得られるモデルには,次のコンポーネントが含まれています。

反復処理の実行

为每个子系统而迭代器子系统对迭代器子系统などのブロックを使用して,バス配列のバスデータで反復処理を実行することができます。これらのブロックを1つ使用して,以下に対して同じ種類の処理を実行できます。

  • バス配列内の各バス

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

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

バス配列内の信号に値を代入するには,以下を使用します。

  1. 总线分配ブロックを使用して,値をバス要素に代入します。

  2. 赋值ブロックを使用して,バスをバス配列に代入します。

バス配列内の指定された要素に値を割り当てるには,赋值ブロックを使用します。

たとえば,sldemo_bus_arraysのモデルでは,赋值ブロックはバス配列の最初の要素に値を割り当てます。

バス内でバス要素を割り当てるには,总线分配を使用します。总线分配ブロックの入力は,バスでなければなりません。

バス配列への割り当て

总线分配ブロックを使用して,バス配列である入れ子にされたバスを割り当てたり,完全に置き換えたりすることができます。バス配列内に入れ子されたバスにデータを割り当てるか,バス配列を含む特定の要素に部分的な割り当てを行うには,MATLAB函数ブロックを使用できます。

たとえば,次のバス構造があるとします。

バスには,サブバス配列である孩子们要素があります。この例では,要素cおよび要素一个に割り当てる方法を示します。轮廓尺寸ブロックと外港ブロックは,公共汽车オブジェクトを使用します。割り当てを定義するために,この例ではMATLAB函数ブロックを使用しています。总线分配ブロックまたは赋值ブロックを使用して要素一个に割り当てることはできないためです。

MATLAB函数ブロックは,割り当てを行うためにこの関数コードを使用します。

函数Y = fcn(u);y.c = false;= 1:length(y.children)。A = int32(0 (5,1));结束

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

バス配列からバス要素を選択するには,以下を使用します。

  1. バス配列内の適切なバスを選択する选择器ブロック。

  2. バス内でバス要素を選択する总线选择器ブロック。

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

たとえば,sldemo_bus_arraysのモデルでは,选择器ブロックを使用して,赋值ブロックおよび为每个子系统ブロックが出力するバスの配列から要素を選択します。この例で以下に示すのは,最初の要素を選択する选择器ブロックの[ブロックパラメーター]ダイアログボックスです。

バス内でバス要素を選択するには,总线选择器を使用します。总线选择器ブロックの入力は,バスでなければなりません。

バス配列のデータのインポート

ルート轮廓尺寸ブロックを使用して,バス配列に対するMATLAB®timeseriesオブジェクトの構造体の配列をインポート(読み込み)します。部分データをバス配列にインポートできます。

詳細については,バス配列のデータのインポートを参照してください。

从工作空间ブロックまたは从文件ブロックを使用して,バスデータの配列をインポートすることはできません。

バス配列のログ記録

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

メモ

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

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

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

バスまたはバス配列に対する信号ログを为每个子系统内から直接使用しないでください。总线选择器ブロックを使用して,ログを記録するバス要素信号を選択するか,子系统外に外港ブロックを追加してその信号のログを記録します。詳細については,为每个子系统における信号のログ記録を参照してください。

バス配列の初期化

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

次の例では,バス配列を初期化する方法を示します。バス型MyDataPressureBusを定義するとします。

信号要素温度のデータ型をint16、要素s1およびs2のデータ型をに設定するとします。

バス配列に対する初期条件を指定するには,初期条件構造体の配列を値としてもつ変数を作成することができます。

initValues(1)。温度= int16(5); initValues(1).pressure.s1 = 9.87; initValues(1).pressure.s2 = 8.71; initValues(2).temperature = int16(20); initValues(2).pressure.s1 = 10.21; initValues(2).pressure.s2 = 9.56; initValues(3).temperature = int16(35); initValues(3).pressure.s1 = 8.98; initValues(3).pressure.s2 = 9.17;

変数initValuesは3つのバス配列である信号に対する初期条件を提供します。initValuesを使用すると,单位延迟などのブロックの[初期条件]パラメーターを指定できます。

あるいは,単一のスカラー構造体を使用して,配列内のすべてのバスに対して同じ初期条件を指定することもできます。

initStruct。温度= int16 (15);initStruct.pressure。s1 = 10.32;initStruct.pressure。s2 = 9.46;

ブロックの[初期条件]パラメーターでinitStructを指定した場合,配列内の各バスは信号要素温度に対して同じ初期値15を使用します。同様に,バスは要素pressure.s1に対しては初期値10.32、要素pressure.s2に対しては値9.46を使用します。

信号要素の大きな階層を使用するバスに,構造体の配列を作成する場合は,関数金宝appSimulink.Bus.createMATLABStructの使用を検討してください。

この例では,入れ子にされたバス配列を初期化する方法を示します。バスの入れ子配列を含む複雑な信号階層の初期条件構造体を作成します。

  1. バスエディターで,公共汽车オブジェクトMyDataPressureBusを作成します。

  2. [階層]ペインで,バス要素压力を選択します。[次元]プロパティを3 [1]に設定します。

  3. 関数金宝appSimulink.Bus.createMATLABStructを使用して4つの初期化構造体の配列を作成します。その配列を変数initStructに保存します。個々の信号をすべて初期化してグラウンド値0にします。

    initStruct 金宝app= Simulink.Bus.createMATLABStruct (“MyData”[], [1 - 4]);

  4. ベースワークスペースで変数initStructをダブルクリックして変数エディターに表示します。

    配列内の4つの構造体にはそれぞれ,フィールド温度压力があります。

  5. 压力を検証するには,フィールドのうちの1つをダブルクリックします。

    4つの压力フィールドそれぞれの値は3つのサブ構造体の配列です。各サブ構造体にはフィールドs1s2があります。

  6. バス配列内の信号に対して固有の初期化値を提供するには,変数エディターを使用して手動で値を指定することができます。

    あるいは,スクリプトを記述することもできます。たとえば,initStructの3番目の構造体にある2番目のサブ構造体压力のフィールドs1にアクセスするには,次のコードを使用します。

    initStruct (3) .pressure(2)。s1 = 15.35;

構造体パラメーターの要件

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

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

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

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

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

    • フィールド名

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

    • 実数/複素数

    • 次元

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

コード生成

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

関連するトピック