ルート レベルの入力端子へのバス データの読み込み
[入力] コンフィギュレーション パラメーターでデータを手動で指定するか、ルート Inport マッパー ツールを使用することで、バス データを最上位の入力端子にインポートできます。ルート Inport マッパー ツールを使用したバス データのインポートの詳細については、バス データのインポートを参照してください。
インポートされたバス データの要件
バス (バーチャル、非バーチャル、バス配列) データをバス オブジェクトで定義した最上位レベルの入力端子にインポートできます (Simulink.Bus
を参照)。最上位の Inport ブロックで、[データ型] を [バス]
に設定し、バス オブジェクトの名前を指定します。バス信号のデータ値を指定するには、次の構造体を使用します。
MATLAB®
timeseries
オブジェクトMATLAB
timetable
オブジェクトtimeseries
オブジェクトとtimetable
オブジェクトの組み合わせ
構造体のフィールドに含めないバス要素は、グラウンド値を使用します。空行列を使用して、グラウンド値を使用するように指定できます。
メモ
読み込む timetable
データを指定するとき、timetable
には 1 つの信号のみのデータを含めなければなりません。
timeseries
オブジェクトまたは timetable
オブジェクト (または両方) の構造体は、以下についてバス要素と一致しなければなりません。
階層
構造体の名前は、バス要素名と一致しなければなりません。
timeseries
オブジェクトのname
プロパティは、バス要素名と一致する必要はありません。データ型
次元
実数/複素数
構造体フィールドの順序は、バス要素の順序と一致する必要はありません。
構造体を Dataset
オブジェクトの要素として含めることができます。構造体はコンマ区切りのリストで使用できます。コンマ区切りのリストには空の行列を指定できます。空の行列は、バス信号にグラウンド値を使用します。
たとえば、入力端子 in1
および in3
のデータを読み込み、端子 in2
にグラウンド値を使用して、[入力] パラメーターに次を入力します。
in1, [], in3
バス信号の初期化
初期化データの部分仕様の使用を含む、バス信号を初期化できます。詳細については、バス要素の初期条件の指定を参照してください。
バス配列のデータをルートの Inport ブロックにインポートする場合の詳細については、バス配列のデータのインポートを参照してください。
最上位の入力へのバス データのインポートの制限
ルート Inport マッパー ツールを使用した最上位の Inport ブロックへのインポートおよびマッピングを行う信号データには、バス データを含めることができます。このツールを使用して、バス信号を最上位の Enable ブロックまたは Trigger ブロックにマッピングすることはできません。
エクスターナル モードで入力端子を使用してバスをインポートすることはできません。ラピッド アクセラレータ モードでバス データをインポートするには、Dataset
形式を使用します。
最上位の Inport へのバス データのインポート
このモデルには、Scope ブロックに接続された 2 つの Inport ブロックがあります。In1
ブロックのデータ型は継承 (非バス データ) であり、In2
ブロックのデータ型はバス オブジェクト BusObject
によって定義されます。モデルには BusObject
とそのサブバス BusObject1
を読み込むコールバックがあります。
BusObject
バス オブジェクトには以下の 2 つの要素があります。
c
s1
。次の 2 つの要素を含む入れ子にされたバスです。a
b
model
を開きます。非バス データをインポートするための、
In1
の MATLABtimeseries
オブジェクトを作成します。次に例を示します。
t1 = (1:10)'; d1 = sin(t1); in1 = timeseries(d1,t1);
MATLAB
timeseries
オブジェクト、MATLABtimetable
オブジェクト、またはこれらのオブジェクトのタイプの組み合わせで構成できる入力構造体を作成します。グラウンド値を使用しないリーフ バス要素ごとに 1 つのtimeseries
またはtimetable
オブジェクトを作成します。この例ではb
バス要素のグラウンド値を使用するため、この要素のtimeseries
またはtimetable
オブジェクトは必要ありません。t2 = (1:5)'; d2 = cos(t2); in2.c = timeseries(d1,t1); in2.s1.a = timetable(seconds(t2),d2);
作成した MATLAB
timeseries
オブジェクトは、インポートされたバス データの要件で説明されているように、対応するバス要素と一致しなければなりません。Dataset
オブジェクトを作成し、in1
およびin2
をデータセットに追加します。ds = Simulink.SimulationData.Dataset; ds = ds.addElement(in1,'in1_signal'); ds = ds.addElement(in2,'in2_signal');
[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターのエディット ボックスに、
Dataset
オブジェクトds
を入力します。モデルのシミュレーションを実行します。In2 に接続された Scope ブロックは、インポートされたバス データを表示します。
バス オブジェクトの情報の取得
バスから timeseries
オブジェクトの構造体を作成するために必要な MATLAB timeseries
オブジェクトの数とデータ型、実数/複素数、次元を判断するには、以下のメソッドを使用します。
Simulink.Bus.getNumLeafBusElements
Simulink.Bus.getLeafBusElements
たとえば、バス オブジェクト BusObject
の場合、以下のようにします。
num_el = BusObject.getNumLeafBusElements
num_el = 3
el_list = BusObject.getLeafBusElements
el_list = 3x1 BusElement array with properties: Min Max DimensionsMode SampleTime Description Units Name DataType Complexity Dimensions
el_list(1).Dimensions
ans = 1
Timeseries オブジェクトの構造体のバスからの作成
定義された timeseries
オブジェクトがある場合、これを使用して、バス オブジェクトに基づいて timeseries
オブジェクトの構造体を作成できます。関数
を使用します。たとえば、Simulink.SimulationData.createStructOfTimeseries
timeseries
オブジェクト ts1
、ts2
および ts3
を定義して、バス オブジェクト MyBusObject
を定義している場合、次のコマンドを使用して、timeseries
オブジェクトの構造体を作成できます。
input = Simulink.SimulationData.createStructOfTimeseries(... 'MyBusObject',{ts1,ts2,ts3});
cell 配列内の timeseries
オブジェクトの数は、バス オブジェクト内のリーフ要素の数と一致しなければなりません。各 timeseries
オブジェクトのデータ型、次元および実数/複素数は、対応するバス オブジェクトのリーフ ノードの各属性と一致しなければなりません。
バス配列のデータのインポート
ルート Inport ブロックを使用してバス配列のデータをインポート (読み込み) するには、MATLAB timeseries
オブジェクトの構造体の配列を使用します。
メモ
Enable、Trigger、From Workspace または From File ブロックを使用して、バス配列のデータをインポートすることはできません。
データのフル仕様
以前のシミュレーションで取得したバス配列の信号のログ データを後続のシミュレーション実行でルートレベルの Inport へのラウンド トリップ入力として使用できます。ログ データは、Inport ブロックのデータのフル仕様に該当します。
MATLAB timeseries
オブジェクトの構造体の配列を作成して、インポートするデータを完全に指定する場合、以下のようにします。
バス信号内の信号と同じ順序で構造体のフィールドを指定してください。
バス内の信号よりも多くのフィールドを構造体に含めないでください。
リーフ フィールドについては、バス内の対応する信号のデータ型、次元および複雑度と正確に一致させてください。
データの部分的仕様
バス配列の部分データを指定するには、リーフ ノードで MATLAB timeseries
オブジェクトを使用して構造体の MATLAB 配列を作成します。
部分データを指定する目的で作成する構造体は、以下のルールに従わなければなりません。
リーフ ノードやサブ分岐など、フィールドを省略できます。次元も省略できます。フィールドを指定しない場合、Simulink® はそのフィールドのグラウンド値を使用します。
入れ子にされたバスのノードについては、バス配列の対応するノードの次元以下に各フィールドの次元を設定します。
この例は、データ型がバス オブジェクト MyBus
として定義されたルート Inport ブロックを使用して、インポート対象の部分データを指定する方法を示します。モデル (ex_partial_loading_aob_model
) と、インポートするデータを定義する MATLAB コード (ex_partial_loading_aob_data.m) を開くことができます。
ex_partial_loading_aob_model
のシミュレーションを実行すると、以下が表示されます。
input
Inport ブロックは、MyBus
バス オブジェクトをデータ型として使用します。
バスの MyBus
配列には、MyBus(1)
と MyBus(2)
が含まれます。バス配列に含まれる 2 つのバスを反映するため、端子の次元は 2 に設定されて、[非バーチャル バスとして出力] が有効になります。
MyBus(1)
と MyBus(2)
を含む、バス配列の要素を以下に示します。強調色は、データがインポートされるバス配列のノードを強調表示します。
インポートするデータを定義する MATLAB コードを以下に示します。コードを強調表示する色は、バス配列の対応するノードの色と一致します。このモデルで使用されたコードを表示するには、MATLAB コード ファイル ex_partial_loading_aob_data.m を開きます。
インポート データを定義するコードは、以下のように規定されます。
timeseries
オブジェクトMyBusValue
は、強調表示されたノードのデータを指定します。MyBus(2)
のtimeseries
オブジェクトBT
は、BT
がリーフ ノードに該当するので、対応するバス要素の次元、データ型および複雑度と正確に一致しなければなりません。構造体は、
Y(2)
のデータを指定します。Y
の入れ子にされた最初のバスと最後のバス (つまり、Y(1)
とY(3)
) は省略できます。
この例では、Y(2)
のデータを指定します。Y
の入れ子にされた最初のバスと最後のバス (つまり、Y(1)
と Y(3)
) は省略できます。
インポート データの MyBusValue
変数を指定したら、[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターを MyBusValue
に設定します。