Main Content

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

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

この例では、From Workspace ブロックを使用してベース ワークスペースから読み取るデータを作成および書式設定する方法を示します。From Workspace ブロックを使用してデータを読み込むには、From Workspace ブロックがベース ワークスペース、モデル ワークスペース、またはマスク ワークスペースでサポートする形式を使用してデータを作成または保存しなければなりません。読み込むデータをプログラムにより作成するか、別のシミュレーションでログに記録されたデータを読み込むか、センサーからまたはラボ内で収集された実際のデータを読み込むことができます。各形式セクションからのコードをテンプレートとして使用すると、独自のシミュレーション入力データを書式設定する方法を理解できます。

モデルの確認

この例では、シンプルなモデルを使用します。2 つの From Workspace ブロックがベース ワークスペースからデータを読み込み、そのデータを 2 つの Outport ブロックに送信します。一方の From Workspace ブロックではすべてのブロック設定に既定値を使用し、もう一方はバスのデータを読み込むように設定されます。モデル内の 2 つの Dashboard Scope ブロックは、各 From Workspace ブロックで読み込まれたデータを表示します。モデルには、From Workspace ブロックでサポートされるさまざまな形式を使用してデータをベース ワークスペースに生成するために使用できるいくつかの Callback Button ブロックも含まれます。

モデルを開くときに、モデルは PreLoadFcn コールバックを使用して、timeseries 形式を使用する変数 simintimeseries オブジェクトの構造体を使用する変数 busin を定義します。Callback Button ブロックの 1 つを使用して、モデルをシミュレートする前に必要な形式のデータを作成します。データを作成するには、Callback Button ブロックをクリックして選択し、もう一度クリックしてコードを実行します。ブロック ダイアログまたはプロパティ インスペクターで各 Callback Button ブロックのコードを表示できます。

時間と信号データの作成

From Workspace ブロックでサポートされるほとんどのデータ形式は、基本的に時間ベクトルと信号値の組み合わせで構成されます。Structure without time 形式を使用して、対応する時間値を含めずに入力データ値のみを読み込むことができます。これは離散シミュレーションで必要になることがあります (詳細については、離散アルゴリズムをテストするデータの読み込みを参照)。この例では、正弦波を表す 10 秒のデータを作成し、読み込みます。

等間隔の時間ベクトルを作成するには、ゼロから目標のタイムステップ数から 1 を引いた値 (既に定義されている最初のタイム ステップの場合) までカウントされる配列から開始します。配列に必要なサンプリング間隔を乗算します。最後に、結果の時間変数を転置して、行ベクトルではなく、列ベクトルになるようにします。

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

メモ

MATLAB® は、他にも等間隔の時間ベクトルを作成する方法をいくつかサポートしますが、他の方法では時間データに倍精度の丸め誤差が生じ、予期しないシミュレーション結果になる場合があります。たとえば、シミュレーション入力データの等間隔の時間ベクトルを作成するために、関数 linspsace または次の形式の MATLAB 式は使用しません。

time = [startTime:stepSize:endTime]';
結果の時間ベクトルは、次の式を使用して作成されたベクトルと等価に "なりません"
time = stepSize*[startTime:(numSteps-1)]

時間ベクトルが等間隔でない時間値で構成される場合は、任意の有効な MATLAB 式を使用して時間データを作成できます。

関数 sin を使用して信号データを作成します。この例では、周期 3 の正弦波が作成されます。

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

timeseries データの読み込み

Simulink® の読み込みとログはどちらも一般的に MATLAB timeseries オブジェクトを使用して、時系列データをシミュレーションとの間で受け渡します。Create timeseries data to load というラベルの Callback Button ブロックのコードは時間と信号データを作成し、そのデータを使用して timeseries オブジェクトを作成して、timeseries オブジェクトを読み込み変数 simin に代入します。

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = timeseries(data,time);

timeseries データを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで simin 読み込み変数を作成するか、Create timeseries data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

timetable データの読み込み

MATLAB timetable オブジェクトは、時系列データを保存するもう 1 つの形式です。名前が表しているように、データは table として書式設定されます。timetable オブジェクトを使用してデータを読み込む場合、timetable オブジェクトには 1 つの信号の 1 つの列のデータのみ含めることができます。

Create timetable data to load というラベルの Callback Button ブロックのコードは時間と信号データを作成し、そのデータを使用して timetable オブジェクトを作成して、timetable オブジェクトを読み込み変数 simin に代入します。timetable オブジェクトでは、入力時間が datetime または duration ベクトルであることが必要です。この例では、関数 seconds を使用して duration ベクトル secs を作成します。

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
secs = seconds(time);
simin = timetable(secs,data);

timetable データを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで simin 読み込み変数を作成するか、Create timetable data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

構造体データの読み込み

From Workspace ブロックは、Structure または Structure with time 読み込み形式と一致する構造体を使用して信号のデータ読み込みをサポートします。モデルには、Structure with time 形式と一致するデータを作成する Callback Button ブロックが含まれます。Structure 形式は、Structure 形式に time フィールドが含まれない場合を除き、Structure with time 形式に一致します。

構造体には、timesignals の 2 つの上位フィールドがあります。Structure with time 形式を使用してデータをログに記録する場合、signals フィールドは、複数の信号のデータを含む構造体の配列になる可能性があります。Structure with time 形式を使用してデータを読み込む場合、signals フィールドには、1 つの信号のデータを含む 1 つの構造体のみ含めることができます。signals フィールドの構造体は values フィールドを含み、信号がスカラーではない場合は dimensions フィールドを含めなければなりません。

Create structure with time data to load というラベルの Callback Button ブロックのコードは時間と信号データを作成し、そのデータを使用して必須のフィールドと階層を含む構造体を作成します。コードは、構造体のフィールドの名前と一致するプロパティ名をもつオブジェクトとなる可能性のある、simin という名前の既存の変数をクリアすることから開始されます。

clear simin;
sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin.time = time;
simin.signals.values = data;

構造体データを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで simin 読み込み変数を作成するか、Create structure data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

多次元信号のデータを読み込む場合は、コードの行をもう 1 行追加して信号の次元を simin.signals.dimensions に代入します。信号データがスカラーの場合、次元フィールドを含める場合はその値を 1 に設定します。各信号値が行ベクトルの場合は、次元を [1 n] または n として指定できます。ここで n は列数です。各信号値が MN 列の行列の場合は、次元フィールドの値を [M N] に指定します。

時間データを含めずにシミュレーション入力データを読み込む場合は、Structure 形式を使用します。この形式では time フィールドは含まれず、[サンプル時間] パラメーターで目的のサンプル レートを指定します。詳細については、離散アルゴリズムをテストするデータの読み込みを参照してください。

配列データの読み込み

From Workspace ブロックを使用して、配列として書式設定された信号データを読み込むことができます。配列の最初の列には時間データが含まれ、以降の列には信号データが含まれます。データを配列形式で読み込む場合、信号値には 1 つの行のみ含めることができます。

Create array data to load という名前の Callback Button ブロックのコードは時間と信号データを作成し、2 つの行ベクトルを配列に連結します。

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = [time,data];

配列データを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで simin 読み込み変数を作成するか、Create array data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

バス データの読み込み

From Workspace ブロックを使用してバス データを読み込む場合は、[出力データ型] パラメーターに、バスを定義する Simulink.Bus オブジェクトを指定しなければなりません。バス データを読み込む From Workspace ブロックの [出力データ型] 設定は、Bus: SinusoidBus として構成されています。モデルの PreLoadFcn コールバックと Create 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 オブジェクトの構造体を作成します。timetable オブジェクトの構造体を作成してバスに対する入力データとして読み込むこともできます。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

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

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

部分指定されたバス データの読み込み

From Workspace ブロックを使用してバスの入力データを読み込む場合は、すべてのバス要素のデータを指定する必要はありません。バスの入力データを一部だけ指定するには、構造体の対応するフィールドを省略するか、その値を [] に指定できます。

Create partially specified bus data to load Callback Button ブロックは、SinusoidBus オブジェクトの階層および要素名に一致する階層およびフィールド名をもつ timeseries オブジェクトの構造体を作成します。Cosine バス要素のデータは指定しません。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

busin.Cosine = [];
busin.SineBus.Sine = timeseries(data,time);
busin.SineBus.BigSine = timeseries(ampdata,time);

バス データを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで busin 読み込み変数を作成するか、Create partially specified bus data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

入れ子にされたバスまたは入れ子にされたバス配列を含むバスのデータを部分指定する場合は、入れ子にされたバスまたは入れ子にされたバス配列全体を [] として指定します。From Workspace ブロックは、入れ子にされたバスまたは入れ子にされたバス配列のすべての要素のグラウンド値を提供します。バス配列に含まれる 1 つ以上のバスのデータを省略して、バス配列のデータを部分指定することもできます。

バス配列のデータの読み込み

From Workspace ブロックを使用してバス配列のデータを読み込む場合は、[出力データ型] パラメーターを、バス配列に含まれるバスを定義する Simulink.Bus オブジェクトとして指定しなければなりません。バス配列に含まれるすべてのバスは同じ Simulink.Bus オブジェクトで定義されなければなりません。バス配列のデータを読み込む From Workspace ブロックの [出力データ型] は、Bus: SinusoidBus に設定されています。Bus オブジェクトの定義の詳細については、バス データの読み込みを参照してください。

Create array of buses data to load Callback Button ブロックは、SinusoidBus オブジェクトの階層および要素名に一致する階層およびフィールド名をもつ timeseries オブジェクトの 2 つの構造体を含む配列を作成します。2 つ目の構造体 bus2 は 1 つ目と同じデータを使用し、Dashboard Scope ブロック上の 6 つの信号がすべて見えるように、1 つ下にシフトされます。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

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

bus2.Cosine = timeseries((cosdata-1),time);
bus2.SineBus.Sine = timeseries((data-1),time);
bus2.SineBus.BigSine = timeseries((ampdata-1),time);

busin = [bus1,bus2];

バス配列のデータを読み込むには、コードを実行して、MATLAB コマンド ウィンドウで busin 読み込み変数を作成するか、Create array of buses data to load Callback Button ブロックを選択して押します。次に、モデルのシミュレーションを実行して、読み込まれたデータを Dashboard Scope ブロックに表示します。

参考

ブロック

オブジェクト

関連するトピック