このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ルート レベルの入力端子へのバス データの読み込み
[入力] コンフィギュレーション パラメーターでデータを手動で指定するか、ルート 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 ブロックにマッピングすることはできません。
エクスターナル モードで入力端子を使用してバスをインポートすることはできません。ラピッド アクセラレータ モードでバス データをインポートするには、[データセット]
形式を使用します。
サンプル マテリアルを開く
この例では次のファイルを使用します。
InportLoadingBus
:バスの入力データを読み込むように構成された最上位の Inport ブロックを含むモデルLoadPartialAOB
:バス配列の部分入力データを読み込むモデルpartialAOBData.m
:モデルLoadPartialAOB
で読み込むSimulink.Bus
オブジェクトとデータを作成する関数BasicColors.m
:この例のSimulink.Bus
オブジェクトで使用するデータ型を定義する列挙クラス定義
これらのファイルにアクセスするには、[Open Live Script] をクリックします。次に、必要なファイルを開くコードを実行します。
モデル InportLoadingBus
を開きます。
open_system("InportLoadingBus")
モデル LoadPartialAOB
を開きます。
open_system("LoadPartialAOB")
MATLAB® ファイル partialAOBData.m
を開きます。
edit("partialAOBData.m")
列挙クラス定義ファイル BasicColors.m
を開きます。
edit("BasicColors.m")
最上位の Inport へのバス データのインポート
このモデルには、Scope ブロックに接続された 2 つの Inport ブロックがあります。In1
ブロックのデータ型は継承 (非バス データ) であり、In2
ブロックのデータ型はバス オブジェクト BusObject
によって定義されます。モデルには BusObject
とそのサブバス BusObject1
を読み込むコールバックがあります。
BusObject
バス オブジェクトには以下の 2 つの要素があります。
c
s1
。次の 2 つの要素を含む入れ子にされたバスです。a
b
モデル
InportLoadingBus
を開きます。1 つ目の入力端子で読み込むデータを格納する
timeseries
オブジェクトを作成します。この入力端子では非バス データを読み込みます。t1 = (1:10)'; d1 = sin(t1); in1 = timeseries(d1,t1);
timeseries
オブジェクト、timetable
オブジェクト、またはこれらのオブジェクトのタイプの組み合わせで構成できる入力構造体を作成します。グラウンド値を使用しないリーフ バス要素ごとに 1 つのtimeseries
またはtimetable
オブジェクトを作成します。この例ではb
バス要素のグラウンド値を使用するため、この要素のtimeseries
またはtimetable
オブジェクトは必要ありません。t2 = (1:5)'; d2 = cos(t2); in2.c = timeseries(d1,t1); in2.s1.a = timetable(seconds(t2),d2);
作成した
timeseries
オブジェクトは、インポートされたバス データの要件で説明されているように、対応するバス要素と一致しなければなりません。Dataset
オブジェクトを作成し、in1
およびin2
をオブジェクトに追加します。ds = Simulink.SimulationData.Dataset; ds = ds.addElement(in1,'in1_signal'); ds = ds.addElement(in2,'in2_signal');
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[モデル化] タブで、[モデル設定] をクリックします。
[データのインポート/エクスポート] ペインで [入力] を選択します。
[入力] フィールドに
Dataset
オブジェクトds
の名前を入力します。モデルをシミュレートします。2 つ目の入力端子に接続された Scope ブロックは、インポートされたバス データを表示します。
バス オブジェクトの情報の取得
バスから timeseries
オブジェクトの構造体を作成するために必要な timeseries
オブジェクトの数とデータ型、実数/複素数、次元を判断するには、以下のメソッドを使用します。
たとえば、バス オブジェクト BusObject
の場合、以下のようにします。
numElem = getNumLeafBusElements(BusObject)
numElem = 3
elemList = getLeafBusElements(BusObject)
elemList = 3x1 BusElement array with properties: Min Max DimensionsMode SampleTime Description Units Name DataType Complexity Dimensions
elemList(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 ブロックを使用してバス配列のデータを読み込むには、timeseries
オブジェクトの構造体の配列を使用します。
メモ
Enable、Trigger、または From File ブロックを使用して、バス配列のデータをインポートすることはできません。
データのフル仕様
以前のシミュレーションで取得したバス配列のログ データを後続のシミュレーションで最上位の Inport ブロックへのラウンド トリップ入力として使用できます。ログ データは、バス配列のデータのフル仕様に該当します。
timeseries
オブジェクトの構造体の配列を作成して、インポートするデータを指定する場合、以下のようにします。
バス内の信号と同じ順序で構造体のフィールドを指定してください。
バス内の信号よりも多くのフィールドを構造体に含めないでください。
リーフ フィールドについては、バス内の対応する信号のデータ型、次元および複雑度と正確に一致させてください。
データの部分的仕様
バス配列の部分データを指定するには、リーフ ノードで timeseries
オブジェクトを使用して構造体の配列を作成します。
部分データを指定する目的で作成する構造体は、以下のルールに従わなければなりません。
リーフ ノードやサブ分岐など、フィールドを省略できます。次元も省略できます。フィールドを指定しない場合、そのフィールドのグラウンド値が使用されます。
入れ子にされたバスのノードについては、バス配列の対応するノードの次元以下に各フィールドの次元を設定します。
この例では、データ型が Simulink.Bus
オブジェクト MyBus
として定義された最上位の Inport ブロックを使用して、インポート対象の部分データを指定する方法を示します。モデル LoadPartialAOB
と、インポートするデータを定義する MATLAB コード partialAOBData.m
を開くことができます。
モデルをシミュレートすると、バス配列の要素に接続されたいくつかの Display ブロックでバスのグラウンド値 DefaultColor
が表示されることがわかります。バス配列の他の要素に接続されたそれ以外の Display ブロックでは、バス配列の部分データで定義された値が表示されます。
Inport ブロックは、MyBus
バス オブジェクトをデータ型として使用します。
バスの MyBus
配列には、MyBus(1)
と MyBus(2)
が含まれます。バス配列に含まれる 2 つのバスを反映するため、端子の次元は 2 に設定されて、[非バーチャル バスとして出力] が有効になります。
MyBus(1)
と MyBus(2)
を含む、バス配列の要素を以下に示します。強調色は、データがインポートされるバス配列のノードを強調表示します。
インポートするデータを定義する MATLAB コードを以下に示します。コードを強調表示する色は、バス配列の対応するノードの色と一致します。このモデルで使用されたコードを表示するには、MATLAB コード ファイル partialAOBData.m
を開きます。
インポート データを定義するコードは、以下のように規定されます。
timeseries
オブジェクトMyBusValue
は、強調表示されたノードのデータを指定します。MyBus(2)
のtimeseries
オブジェクトBT
は、BT
がリーフ ノードに該当するので、対応するバス要素の次元、データ型および複雑度と正確に一致しなければなりません。構造体は、
Y(2)
のデータを指定します。Y
の入れ子にされた最初のバスと最後のバス (つまり、Y(1)
とY(3)
) は省略できます。
この例では、Y(2)
のデータを指定します。Y
の入れ子にされた最初のバスと最後のバス (つまり、Y(1)
と Y(3)
) は省略できます。
インポート データの MyBusValue
変数を指定したら、[コンフィギュレーション パラメーター] 、 [データのインポート/エクスポート] 、 [入力] パラメーターを MyBusValue
に設定します。