このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
バス配列を使用するようにモデルを設定するには,通常,以下の基本的なタスクを実行しなければなりません。
バス配列を定義します(非バーチャルバスからのバス配列の作成を参照)。
バス配列の各要素に対して反復処理を実行するためにサブシステムを追加します。たとえば,为每个子系统ブロックまたは迭代器ブロックを使用します。バスの配列を连接ブロックから反復処理サブシステムに接続します。反復処理の実行を参照してください。
反復処理サブシステム内で,スカラーアルゴリズムをモデル化します(たとえば,每个サブシステムなど)。
バス配列を操作します(选择器ブロックおよび赋值ブロックを使用)。
总线选择器ブロックおよび总线分配ブロックを使用して,サブシステム内の非バーチャルバスから要素を選択するか,非バーチャルバスに要素を割り当てます。
バス配列への値の割り当ておよびバス配列からのバス要素の選択を参照してください。
オプションで,バス配列のデータをインポートまたはログ作成します。バス配列のデータのインポートおよびバス配列のログ記録を参照してください。
結果として得られるモデルには,次のコンポーネントが含まれています。
为每个子系统、而迭代器子系统、对迭代器子系统などのブロックを使用して,バス配列のバスデータで反復処理を実行することができます。これらのブロックを1つ使用して,以下に対して同じ種類の処理を実行できます。
バス配列内の各バス
バス配列内の選択されたバスのサブセット
バス配列内の信号に値を代入するには,以下を使用します。
总线分配ブロックを使用して,値をバス要素に代入します。
赋值ブロックを使用して,バスをバス配列に代入します。
バス配列内の指定された要素に値を割り当てるには,赋值ブロックを使用します。
たとえば,sldemo_bus_arrays
のモデルでは,赋值ブロックはバス配列の最初の要素に値を割り当てます。
バス内でバス要素を割り当てるには,总线分配を使用します。总线分配ブロックの入力は,バスでなければなりません。
总线分配ブロックを使用して,バス配列である入れ子にされたバスを割り当てたり,完全に置き換えたりすることができます。バス配列内に入れ子されたバスにデータを割り当てるか,バス配列を含む特定の要素に部分的な割り当てを行うには,MATLAB函数ブロックを使用できます。
たとえば,次のバス構造があるとします。
バスには,サブバス配列である孩子们
要素があります。この例では,要素c
および要素一个
に割り当てる方法を示します。轮廓尺寸ブロックと外港ブロックは,父
公共汽车
オブジェクトを使用します。割り当てを定義するために,この例ではMATLAB函数ブロックを使用しています。总线分配ブロックまたは赋值ブロックを使用して要素一个
に割り当てることはできないためです。
MATLAB函数ブロックは,割り当てを行うためにこの関数コードを使用します。
函数Y = fcn(u);y.c = false;为= 1:length(y.children)。A = int32(0 (5,1));结束
バス配列からバス要素を選択するには,以下を使用します。
バス配列内の適切なバスを選択する选择器ブロック。
バス内でバス要素を選択する总线选择器ブロック。
バス配列の要素を選択するには,选择器ブロックを使用します。バスの入力配列は,どの次元でもかまいません。选择器ブロックの出力バスは,バスの入力配列から選択されたまたは並べ替えられた要素のセットです。
たとえば,sldemo_bus_arrays
のモデルでは,选择器ブロックを使用して,赋值ブロックおよび为每个子系统ブロックが出力するバスの配列から要素を選択します。この例で以下に示すのは,最初の要素を選択する选择器ブロックの[ブロックパラメーター]ダイアログボックスです。
バス内でバス要素を選択するには,总线选择器を使用します。总线选择器ブロックの入力は,バスでなければなりません。
ルート轮廓尺寸ブロックを使用して,バス配列に対するMATLAB®timeseries
オブジェクトの構造体の配列をインポート(読み込み)します。部分データをバス配列にインポートできます。
詳細については,バス配列のデータのインポートを参照してください。
从工作空间ブロックまたは从文件ブロックを使用して,バスデータの配列をインポートすることはできません。
バスの配列をエクスポートするには,信号のログ用に信号をマークします。詳細については,シミュレーションのランタイムデータの保存を参照してください。
メモ
金宝app®は,ラピッドアクセラレータモードでは参照モデル内の信号を記録しません。
バス配列に含まれる特定の信号のログデータにアクセスするには,構造体の階層を移動して,特定の信号に対するインデックスを指定します。詳細については,バス配列の信号ログデータへのアクセスを参照してください。
ルートレベルのバス出力は,[出力]コンフィギュレーションパラメーターを選択している場合はログに記録されません。代わりに,信号ログを使用して,信号データをエクスポートで説明されているように,標準の信号ログを使用してください。
バスまたはバス配列に対する信号ログを为每个子系统内から直接使用しないでください。总线选择器ブロックを使用して,ログを記録するバス要素信号を選択するか,子系统外に外港ブロックを追加してその信号のログを記録します。詳細については,为每个子系统における信号のログ記録を参照してください。
バス配列内にある個々の信号それぞれに対して固有の初期値を指定するには,初期条件構造体の配列を使用することができます。配列内の各構造体は,バスのいずれかを初期化します。
次の例では,バス配列を初期化する方法を示します。バス型MyData
とPressureBus
を定義するとします。
信号要素温度
のデータ型を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
の使用を検討してください。
この例では,入れ子にされたバス配列を初期化する方法を示します。バスの入れ子配列を含む複雑な信号階層の初期条件構造体を作成します。
バスエディターで,公共汽车
オブジェクトMyData
とPressureBus
を作成します。
[階層]ペインで,バス要素压力
を選択します。[次元]プロパティを3 [1]
に設定します。
関数金宝appSimulink.Bus.createMATLABStruct
を使用して4つの初期化構造体の配列を作成します。その配列を変数initStruct
に保存します。個々の信号をすべて初期化してグラウンド値0
にします。
initStruct 金宝app= Simulink.Bus.createMATLABStruct (“MyData”[], [1 - 4]);
ベースワークスペースで変数initStruct
をダブルクリックして変数エディターに表示します。
配列内の4つの構造体にはそれぞれ,フィールド温度
と压力
があります。
压力
を検証するには,フィールドのうちの1つをダブルクリックします。
4つの压力
フィールドそれぞれの値は3つのサブ構造体の配列です。各サブ構造体にはフィールドs1
とs2
があります。
バス配列内の信号に対して固有の初期化値を提供するには,変数エディターを使用して手動で値を指定することができます。
あるいは,スクリプトを記述することもできます。たとえば,initStruct
の3番目の構造体にある2番目のサブ構造体压力
のフィールドs1
にアクセスするには,次のコードを使用します。
initStruct (3) .pressure(2)。s1 = 15.35;
構造体パラメーターを使用してバス配列を初期化するには,次のものを使用できます。
数値0
。この場合,バス配列内にある個々の信号はすべて初期値0
を使用します。
バス型と同じフィールド階層およびフィールド名を表すスカラー値结构体
。この場合,スカラー構造体が拡張され,バス配列内にある個々の信号がそれぞれ初期化されます。
バス配列内にある個々の信号それぞれに対して初期値を指定する構造体の配列。
構造体の配列を使用する場合,配列内の構造体はすべて同じフィールド階層をもっていなければなりません。また,階層内の各フィールドは,配列全体で次の特性が同一でなければなりません。
フィールド名
数値データ型(单
やint32
など)
実数/複素数
次元
部分構造体は使用できません。
バス配列のコード生成では,特定の形式をもつ構造体が作成されます。バス配列のコード生成を参照してください。