Main Content

From File ブロックを使用したデータの読み込み

この例では、From File ブロックを使用して MAT ファイルからシミュレーション入力データを読み込む方法について、入力データを作成および書式設定する方法も含めて説明します。読み込むデータをプログラムにより作成するか、別のシミュレーションからログに記録されたデータを読み込むか、センサーからまたはラボ内で収集された実際のデータを読み込むことができます。各形式セクションからのコードをテンプレートとして使用すると、独自のシミュレーション入力データを書式設定する方法を理解できます。

モデルの確認

この例では、シンプルなモデルを使用します。2 つの From File ブロックが 2 つの異なる MAT ファイルからデータを読み込み、2 つの Outport ブロックに接続される信号を作成します。一方の From File ブロックはスカラー信号のデータを読み込みます。このブロックについては、[ファイル名] パラメーターのみが既定値から変更されています。もう一方の From File ブロックはバスのデータを読み込むように構成されています。2 つの Dashboard Scope ブロックは、各 From File ブロックで作成される出力信号を表示します。モデルには、From File ブロックでサポートされる各形式を使用して入力データからファイルを生成するために使用できる 3 つの Callback Button ブロックも含まれています。

モデルは PreLoadFcn コールバックを使用して以下を実行します。

  • timeseries データを作成してファイル inputData.mat に保存する。

  • バスの入力データを作成してファイル busData.mat に保存する。

  • バスのデータを読み込む From File ブロックの出力データ型を定義する Simulink.Bus オブジェクトを作成する。

Callback Button ブロックを使用して、モデルをシミュレートする前に必要な形式のデータを作成します。データを作成するには、Callback Button ブロックをクリックして選択し、もう一度クリックしてコードを実行します。ブロック ダイアログまたはプロパティ インスペクターで各 Callback Button ブロックのコードを表示できます。

時間と信号データの作成

From File ブロックは、timeseries オブジェクトに格納されたデータと配列に格納されたデータの読み込みをサポートします。From File ブロックを使用して読み込むデータには、それぞれのサンプル値に対応する時間値が含まれていなければなりません。この例では、正弦波を表す 10 秒のデータを作成し、読み込みます。

まず、時間ベクトルを作成します。From File ブロックを使用してデータを読み込む場合、時間値のデータ型は double でなければならず、時間値は単調に増加しなければなりません。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(0:numSteps-1);

この例では、入力信号の等間隔の時間ベクトルを式を使用して作成します。これは、特に離散入力信号をモデル化する場合を想定したものです。MATLAB® は、他にも等間隔の時間ベクトルを作成する方法をいくつかサポートしますが、他の方法では時間データに倍精度の丸め誤差が生じ、予期しないシミュレーション結果になる場合があります。

関数 sin を使用して信号データを作成します。From File ブロックを使用して読み込むサンプル値に NaNInf、または -Inf の値を含めてはなりません。

data = sin(2*pi/3*time);

timeseries データの読み込み

Simulink® の読み込みとログはどちらも一般的に timeseries オブジェクトを使用して、時系列データをシミュレーションとの間で受け渡します。データを timeseries オブジェクトとして MAT ファイルに保存すると、さまざまな入力データの読み込みが From File ブロックでサポートされます。次の信号値を読み込むことができます。

  • halfint64、および uint64 以外の組み込みの数値データ型、最大 32 ビットの語長をもつ固定小数点データ型、または列挙データ型。

  • 実数または複素数。

  • スカラー、ベクトル、または多次元。

From File ブロックを使用して timeseries オブジェクトのデータを読み込む場合、timeseries データを Version 7.3 の MAT ファイルに保存する必要があります。To File ブロックはデータを Version 7.3 の MAT ファイルに保存します。To File ブロックを使用して作成されたファイルからデータを読み込む場合は、ファイルのバージョンを変換する必要はありません。

Create file with timeseries data to load というラベルの Callback Button ブロックのコードは以下を実行します。

  1. 時間と信号のデータを行ベクトルとして作成します。

  2. 行ベクトルを列ベクトルに転置します (スカラーのデータ値をもつ timeseries オブジェクトを作成するために必要)。

  3. timeseries オブジェクトを作成してデータを格納します。

  4. timeseries オブジェクトを Version 7.3 の MAT ファイルに保存します。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
data = sin(2*pi/3*time);
time = time';
data = data';
inputData = timeseries(data,time);
save("inputData.mat","inputData","-v7.3");

timeseries データを読み込むには、MATLAB コマンド ウィンドウを使用して inputData.mat ファイルを作成するコードを実行するか、Create file with timeseries data to load Callback Button ブロックを選択してクリックします。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

配列データの読み込み

From File ブロックを使用して、配列として書式設定されたスカラーまたはベクトルの信号データを読み込むことができます。最初の行には時間データが含まれ、以降の行にはサンプル値が含まれます。From File ブロックを使用して配列データを読み込む場合、サンプル値は実数の double でなければなりません。From File ブロックは任意のバージョンの MAT ファイルから配列データを読み込むことができます。

Create file with array data to load というラベルの Callback Button ブロックのコードは、時間と信号のデータを作成し、行ベクトルを配列に連結して、その配列を Version 7 の MAT ファイルに保存します。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
data = sin(2*pi/3*time);
inputData = [time;data];
save("inputData.mat","inputData")

配列データを読み込むには、MATLAB コマンド ウィンドウを使用して inputData.mat ファイルを作成するコードを実行するか、Create file with array data to load Callback Button ブロックを選択してクリックします。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

バス データの読み込み

From File ブロックは、バスの入力データが timeseries オブジェクトとして格納された構造体の読み込みをサポートします。構造体のそれぞれの timeseries オブジェクトに、単一の timeseries オブジェクトからのデータの読み込みでサポートされる任意の種類のデータを格納できます。

From File ブロックを使用してバス データを読み込む場合は、[出力データ型] パラメーターに、バスを定義する Simulink.Bus オブジェクトを指定しなければなりません。バス データを格納する構造体の階層およびフィールド名は、出力データ型を定義する Bus オブジェクトの階層および要素名と一致する必要があります。

バス データを読み込む From File ブロックの [出力データ型] 設定は、Bus: SinusoidBus として構成されています。モデルの PreLoadFcn コールバックと Create file with bus data to load Callback Button ブロックのコードの両方が SinusoidBus オブジェクトを定義します。

Bus オブジェクトは、バスの階層に加え、名前やデータ型などバス内の要素のプロパティを定義します。この例の Bus オブジェクトは、バス階層、バス内に含まれる信号の名前、および入れ子にされたバスのデータ型を定義します。バス SinusoidBus には 1 つの信号 Cosine と、SineBus という名前の入れ子にされたバスが含まれます。このバスには 2 つの信号 SineBigSine が含まれます。

elems(1) = Simulink.BusElement;
elems(1).Name = 'Sine';
elems(2) = Simulink.BusElement;
elems(2).Name = 'BigSine';
SineBus = Simulink.Bus;
SineBus.Elements = elems;

clear elems;
elems(1) = Simulink.BusElement;
elems(1).Name = 'SineBus';
elems(1).DataType = 'Bus: SineBus';
elems(2) = Simulink.BusElement;
elems(2).Name = 'Cosine';
SinusoidBus = Simulink.Bus;
SinusoidBus.Elements = elems;

Simulink.Bus オブジェクトを使用したバスの定義の詳細については、Simulink.Bus オブジェクト データ型でのバス プロパティの指定を参照してください。

Create bus data to load Callback Button ブロックは、SinusoidBus オブジェクトの階層および要素名に一致する階層およびフィールド名をもつ timeseries オブジェクトの構造体を作成し、その構造体を Version 7.3 の MAT ファイルに保存します。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
time = time';

data = sin(2*pi/3*time);
cosdata = cos(2*pi/3*time);
ampdata = 2*data;

busData.Cosine = timeseries(cosdata,time);
busData.SineBus.Sine = timeseries(data,time);
busData.SineBus.BigSine = timeseries(ampdata,time);

save("busData.mat","busData","-v7.3");

バス データを読み込むには、MATLAB コマンド ウィンドウを使用して busData.mat ファイルを作成するコードを実行するか、Create bus data to load Callback Button ブロックを選択してクリックします。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

From File ブロックを使用してバスの入力データを読み込む場合は、バスの全要素のデータを指定する必要はありません。バスの入力データを一部だけ指定するには、構造体の対応するフィールドを省略するか、その値を [] に指定できます。入れ子にされたバスを含むバスのデータを部分指定する場合は、入れ子にされたバス全体を [] として指定します。From File ブロックは、入れ子にされたバスのすべての要素のグラウンド値を提供します。

参考

ブロック

オブジェクト

関数

関連するトピック