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 コールバックを使用して以下を実行します。

  • 変数 simin に格納される timeseries データを作成する。

  • 変数 busin に格納される timeseries オブジェクトの構造体を作成する。

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

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

時間と信号データの作成

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

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

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

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

関数 sin を使用して信号データを作成します。

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

timeseries データの読み込み

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

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(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 に格納することもできます。名前が表しているように、データは table として書式設定されます。timetable を使用してデータを読み込む場合、timetable では 1 つの信号のデータが 1 つの列にのみ含まれている必要があります。

Create timetable data to load というラベルの Callback Button ブロックのコードは、時間と信号のデータを作成し、そのデータを timetable オブジェクトとして書式設定して、timetable を読み込み変数 simin に代入します。From Workspace ブロックを使用して timetable を読み込むには、入力時間が duration ベクトルでなければなりません。この例では、関数 seconds を使用して duration ベクトル secs を作成します。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(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 形式と一致するデータの作成方法を示します。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;
sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(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 は行ベクトルの要素の数です。各信号値が M 行 N 列の行列の場合は、次元フィールドの値を [M N] に指定します。

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

配列データの読み込み

From Workspace ブロックを使用して、配列として書式設定された信号データを読み込むことができます。配列の最初の列には時間データが含まれ、以降の列には信号データが含まれます。データを配列形式で読み込む場合、サンプル値はスカラーまたはベクトルでなければなりません。

Create array data to load というラベルの Callback Button ブロックのコードは、時間と信号のデータを作成し、2 つの行ベクトルを配列に連結して、その配列を simin 読み込み変数に代入します。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(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 ブロックは、バスの入力データが timeseries オブジェクトまたは timetable として格納された構造体の読み込みをサポートします。それぞれの timeseries オブジェクトまたは timetable に、単一の timeseries オブジェクトまたは timetable からのデータの読み込みでサポートされる任意の種類のデータを格納できます。

From Workspace ブロックを使用してバスの入力データを読み込む場合は、[出力データ型] 設定に、バスを定義する Simulink.Bus オブジェクトを指定しなければなりません。バス データを格納する構造体の階層およびフィールド名は、出力データ型を定義する 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 オブジェクトを使用したバスの定義の詳細については、バス オブジェクトでのバス プロパティの指定を参照してください。

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

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;

clear busin;
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 バス要素のデータは指定しません。

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

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

clear busin;
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 つ下にシフトされます。

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;

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 ブロックに表示します。

参考

ブロック

オブジェクト

関連するトピック