Main Content

Simulink.SimulationData.createStructOfTimeseries

timeseries データの構造体を作成して、バスのシミュレーション入力として読み込む

説明

tsStruct = Simulink.SimulationData.createStructOfTimeseries(busObj,tsStructIn) は、Simulink.Bus オブジェクト busObj によって指定された属性に一致する属性と、timeseries オブジェクト tsStructIn の構造体によって指定されたデータを使用して、構造体を作成します。

入力構造体に含まれる名前がバス オブジェクトによって指定された名前と一致しない場合、関数はバス オブジェクトの仕様と一致するように出力構造体のフィールド名を変更します。データ型や実数/複素数といったその他の属性が一致しない場合、関数はエラーを返します。

この構文を使用して、バスのデータを完全もしくは部分的に指定するシミュレーション入力を作成できます。この構文を使用して、Simulink.Bus オブジェクトの名前と一致するように構造体要素の名前を変更することもできます。

tsStruct = Simulink.SimulationData.createStructOfTimeseries(busObj,tsCellArray) は、Simulink.Bus オブジェクト busObj によって指定された属性と一致する属性と、timeseries オブジェクト tsCellArray の cell 配列によって指定されたデータを使用して、timeseries オブジェクトの構造体を作成します。

入力構造体に含まれる名前がバス オブジェクトによって指定された名前と一致しない場合、関数はバス オブジェクトの仕様と一致するように出力構造体のフィールド名を変更します。データ型や実数/複素数といったその他の属性が一致しない場合、関数はエラーを返します。

この構文によって、timeseries オブジェクトのフラット リストを使用してバスのデータを完全もしくは部分的に指定するシミュレーション入力を作成できます。関数は、深さ優先探索を使用して Simulink.Bus オブジェクトによって指定された階層に timeseries オブジェクトをマッピングします。

tsStructArray = Simulink.SimulationData.createStructOfTimeseries(busObj,tsCellArray,dims) は、各構造体の属性が Simulink.Bus オブジェクト busObj によって定義された属性に一致する timeseries 構造体の配列を、timeseries オブジェクト tsCellArray の cell 配列によって指定されたデータを使用して作成します。入力 dims は、配列の次元を指定します。

tsStruct = Simulink.SimulationData.createStructOfTimeseries(tsArray) は、Simulink.TsArray オブジェクト tsArray に格納されているバス データから timeseries オブジェクトの構造体を作成します。R2016a より前のバージョンでは、信号ログによって、ログ記録されたバス データを保存するための Simulink.TsArray オブジェクトが作成されます。R2016a より前のリリースで ModelDataLogs 形式を使用してログ記録されたバス データをシミュレーション入力として使用する場合は、この構文を使用します。

すべて折りたたむ

関数 Simulink.Simulationdata.createStructOfTimeseries を使用して、timeseries オブジェクトの構造体を作成し、バス信号のシミュレーション入力として使用することができます。この例では、異なるシミュレーションでログ記録された時系列データを使用して、モデルに読み込む時系列構造体を作成する方法を示します。

時系列構造体の作成

ex_log_structtimeseries モデルを開きます。

open_system('ex_log_structtimeseries')

モデルは Constant ブロックと Bus Creator ブロックを使用して、信号 abc、および d をもつ 2 つのバス bus1bus2 をビルドします。モデルは信号ログを使用してバス データをログ記録します。モデルをシミュレートしてバス データを作成します。

out = sim('ex_log_structtimeseries');

ログ変数 logsout のデータを表示します。信号ログによって、Simulink.SimulationData.Signal オブジェクトを要素としてもつ Simulink.SimulationData.Dataset オブジェクトが作成されます。

logsout = out.logsout
logsout = 

Simulink.SimulationData.Dataset 'logsout' with 2 elements

                         Name  BlockPath                            
                         ____  ____________________________________ 
    1  [1x1 Signal]      bus1  ex_log_structtimeseries/Bus Creator 
    2  [1x1 Signal]      bus2  ex_log_structtimeseries/Bus Creator1

  - Use braces { } to access, modify, or add elements using index.

関数 get を使用して、bus2Simulink.SimulationData.Signal オブジェクトを選択できます。バス データは Simulink.SimulationData.Signal オブジェクトの Values プロパティにあります。bus2 を表すデータは、c および d という名前の timeseries オブジェクトを含む構造体にログ記録されます。

logsout.get(2).Values
ans = 

  struct with fields:

    c: [1x1 timeseries]
    d: [1x1 timeseries]

モデル コンフィギュレーションを読み込む

ログに記録されたシミュレーション データを入力として使用する ex_load_structtimeseries モデルを開きます。

open_system('ex_load_structtimeseries')

モデルは InBus Inport ブロックを使用して入力バス データを読み込みます。Bus Selector ブロックはバスから信号を選択して、Display ブロック上に表示します。

InBus ブロックをダブルクリックして、ダイアログの [信号属性] タブでその [データ型] をチェックします。データ型は bus と呼ばれる Simulink.Bus オブジェクトによって指定されます。

ダイアログを閉じて、モデル エクスプローラーを開きます。[コールバック] タブでは、モデルが PreLoadFcn を使用して、Inport ブロックのデータ型を定義する Simulink.Bus オブジェクトを定義していることがわかります。

コンフィギュレーション パラメーターを開き、[データのインポート/エクスポート] ペインの [入力] パラメーターの指定を表示します。モデルは [入力] に変数 inputBus を使用します。

timeseries データの構造体からシミュレーション入力を作成

bus1 に関してログ記録されたデータを読み込むには、構造体データをモデルの入力変数に割り当てるだけです。

inputBus = logsout.get(1).Values
inputBus = 

  struct with fields:

    a: [1x1 timeseries]
    b: [1x1 timeseries]

モデルをシミュレートするときに、Display ブロックには、bus1 にログ記録され、モデルに読み込まれた値 12 が表示されます。

bus2 に関してログ記録されたデータを読み込むには、Inport ブロックのデータ型を定義する Simulink.Bus オブジェクトと Simulink.SimulationData.createStructOfTimeseries を使用して、Simulink.Bus オブジェクトで指定された名前をもつ timeseries の構造体を作成する必要があります。

inputBus = Simulink.SimulationData.createStructOfTimeseries('bus',...
    logsout.get(2).Values)
inputBus = 

  struct with fields:

    a: [1x1 timeseries]
    b: [1x1 timeseries]

モデルをシミュレートするときに、Display ブロックには、bus2 にログ記録され、モデルに読み込まれた値 34 が表示されます。

この例では、関数 Simulink.SimulationData.createStructOfTimeseries を使用してバスに対する部分的に指定されたシミュレーション入力を作成する方法を示します。この例では、ex_log_structtimeseries からのデータをログ記録してから、そのデータを ex_load_structtimeseries に読み込みます。

timeseries データの作成

最初に ex_log_structtimeseries モデルを開いてシミュレートします。モデルは、Constant ブロックと Bus Creator ブロックを使用して作成された 2 つのバス信号 bus1bus2 をログ記録します。Simulink.SimulationOutput オブジェクト outlogsout Dataset にアクセスします。

open_system('ex_log_structtimeseries')
out = sim('ex_log_structtimeseries');

logsout = out.logsout;

timeseries データの構造体または timeseries データの cell 配列を使用して、バスのシミュレーション入力を部分的に指定できます。

timeseries データの構造体を使用したバス データの部分指定

前のセクションでログ記録したデータの一部を読み込むモデル ex_load_structtimeseries を開きます。

open_system('ex_load_structtimeseries')

関数 get を使用して bus1 に対してログ記録された timeseries データの構造体にアクセスします。

bus1 = logsout.get(1).Values;

次に、b データを [] で置き換えます。

bus1.b = [];

ex_load_structtimeseries モデルは変数 inputBus をその [入力] として使用します。Inport ブロックのデータ型を定義する Simulink.Bus オブジェクト busex_load_structtimeseries モデルの PreLoadFcn コールバックで定義されます。bus1 の信号名は ex_load_structtimeseries モデルの Inport ブロックに対する Simulink.Bus オブジェクトの指定と一致するため、変更せずにログ記録した構造体を使用できます。bus1 のデータを読み込むには、bus1 を変数 inputBus に割り当てます。

inputBus = bus1;

モデルのシミュレーションを実行します。Display ブロックに、ログ記録された値 (a に対する 1b に対する 0) が表示されます。シミュレーションは、信号のデータを指定しない場合、グラウンド値を使用します。

loadOut = sim('ex_load_structtimeseries');

次に、bus2 に対してログ記録されたデータを読み込みます。bus2 の信号名は ex_load_structtimeseries モデルの Inport ブロックに対する Simulink.Bus オブジェクトの指定と一致しません。構造体内のデータを変更して、バスの入力データを部分的に指定します。次に、関数 Simulink.SimulationData.createStructOfTimeseries を使用して、バスの指定と一致するように構造体内の名前を変更します。

bus2 = logsout.get(2).Values;
bus2.d = [];
inputBus = bus2;
inputBus = Simulink.SimulationData.createStructOfTimeseries('bus',inputBus);

モデルのシミュレーションを実行します。Display ブロックに、ログ記録された値 (a に対する 3b に対する 0) が表示されます。

loadOut = sim('ex_load_structtimeseries');

時系列データの cell 配列を使用したバス データの部分指定

timeseries データがある場合、Simulink.SimulationData.createStructOfTimeseries を使用して timeseries データの cell 配列を使用するバスのシミュレーション入力を部分的に指定できます。ex_load_structtimeseries モデルの Inport ブロックに対するバスの部分指定の一部として、bus2 の信号 dtimeseries データを読み込みます。ex_load_structtimeseries モデルの PreLoadFcn コールバックは Inport ブロックのデータ型を定義する Simulink.Bus オブジェクト bus を定義します。

d = logsout.get(2).Values.d;

inputBus = Simulink.SimulationData.createStructOfTimeseries('bus',...
    {d,[]});

モデルのシミュレーションを実行します。ex_load_structtimeseries モデルの信号 a の Display ブロックに、ex_log_structtimeseries モデルから信号 d にログ記録されたデータが表示されます。信号 b の Display ブロックに 0 が表示されます。

loadOut = sim('ex_load_structtimeseries');

この例では、関数 Simulink.SimulationData.createStructOfTimeseries を使用してバスの配列に対するシミュレーション入力を生成する方法を示します。1 つのモデルをシミュレートして timeseries を作成します。次に、ログ記録されたデータを使用して入力構造体を作成し、別のモデルのバスの配列に読み込みます。

timeseries データの作成

開始するには、ex_log_structtimeseries モデルを開きます。

open_system('ex_log_structtimeseries')

モデルは Constant ブロックと Bus Creator ブロックを使用して、bus1bus2 の 2 つのバスを作成します。信号には abcd という名前が付けられます。モデルをシミュレートしてログ記録されたバス データを作成します。

out = sim('ex_log_structtimeseries');

出力 out には、ログ記録されたデータをもつ Simulink.SimulationData.Dataset オブジェクト logsout が含まれます。関数 get を使用して bus1 信号と bus2 信号にアクセスできます。各信号のデータは Simulink.SimulationData.Signal オブジェクトの Values パラメーターにあります。ドットの後に続けて信号名を使用することで、バス要素にアクセスできます。bus1Dataset オブジェクトの最初の信号であり、信号 ab が含まれます。bus2 には信号 cd が含まれます。

logsout = out.logsout;

a = logsout.get(1).Values.a;
b = logsout.get(1).Values.b;
c = logsout.get(2).Values.c;
d = logsout.get(2).Values.d;

モデル コンフィギュレーションを読み込む

バスの配列を入力として使用するモデル ex_structtimeseries_aob を開きます。

open_system('ex_load_structtimeseries_aob')

モデルは InAoB Inport ブロックを使用して、シミュレーション入力を読み込みます。Selector ブロックはバスの配列からバスを選択し、Bus Selector ブロックは信号を選択し、Display ブロックに表示します。

InAoB ブロックをダブルクリックして、ダイアログの [信号属性] ペインを確認します。ブロックの [データ型]Simulink.Bus オブジェクト bus で定義された型をもつ [バス] に設定されます。[端子の次元] パラメーターは [2 1] に設定されます。

Simulink.Bus オブジェクト bus の定義は、モデル エクスプローラーで [コールバック] タブに表示できます。このモデルは PreLoadFcn を使用してバス オブジェクトを定義します。

コンフィギュレーション パラメーターを開いて、[入力] パラメーターを確認します。このモデルは変数 inputAoB を入力として使用します。

バスの配列のシミュレーション入力の作成

Simulink.SimulationData.createStructOfTimeseries および最初のセクションでログ記録したデータを使用して、バスの配列に対するシミュレーション入力として読み込む構造体を作成します。次元を InAoB ブロックの次元と一致する [2 1] として指定します。

inputAoB = Simulink.SimulationData.createStructOfTimeseries('bus',...
    {a,b,c,d},[2 1]);

モデルをシミュレートすると、ex_log_structtimeseries モデルからログ記録された信号 abcd が Display ブロックに表示されます。バスの配列には信号 ab をもつ 2 つのバスが含まれます。Simulink.SimulationData.createStructOfTimeseries によって、信号 cd の名前がバスの配列で使用される Simulink.Bus の指定と一致するように変更されます。

inputAoB(2)
ans = 

  struct with fields:

    a: [1x1 timeseries]
    b: [1x1 timeseries]

モデルのシミュレーションを実行します。Display ブロックにログ記録された値が表示されます。

aob_out = sim('ex_load_structtimeseries_aob');

R2016a より前のリリースでは、ModelDataLogs 形式を使用してシミュレーション データをログに記録する場合、バス データは Simulink.TSArray オブジェクトとして格納されます。R2016a より後のリリースを使用する ModelDataLogs 形式を使用してデータをログ記録することはできません。この例のログ記録されたデータ logsout は、R2016a より前のリリースを使用して ModelDataLogs 形式でログ記録されました。変数 logsout には信号バス bus1 に対するデータが含まれます。

logsout
logsout =
 
Simulink.ModelDataLogs (log_modeldatalogs):
  Name                   Elements  Simulink Class

  bus1                      2      TsArray

ログ記録されたデータをバスのシミュレーション入力として読み込むには、bus1 内のデータから timeseries オブジェクトの構造体を作成します。

struct_of_ts = ...
Simulink.SimulationData.createStructOfTimeseries(logsout.bus1)
struct_of_ts = 

    const1_sig: [1x1 timeseries]
    const2_sig: [1x1 timeseries]

入力引数

すべて折りたたむ

timeseries オブジェクトの出力構造体でデータの属性を指定する Simulink.Bus オブジェクトの名前。timeseries オブジェクトの構造体をバスのシミュレーション入力として読み込む場合、busObj はルートレベルの Inport ブロックのデータ型を定義するバスです。

Simulink.SimulationData.createStructOfTimeseries は、Simulink.Bus オブジェクトの指定に対するデータ型と実数/複素数を含めて入力 timeseries 属性を検証します。要素名が Simulink.Bus の指定と入力 timeseries データ間で一致しない場合、Simulink.SimulationData.createStructOfTimeseries はバスの指定と一致するように timeseries データの名前を変更します。その他の属性が一致しない場合、関数はエラーを返します。

例: 'MyInputBus'

Simulink.Bus オブジェクトに従って timeseries オブジェクトの出力構造体の作成に使用される timeseries データの構造体。この構造体は、Simulink.Bus オブジェクトと同じ階層をもたなければなりません。

バスのデータを部分的に指定するには、グラウンド値を使用するバス要素の代わりに [] を使用します。

timeseries オブジェクトの出力構造体のデータを指定する timeseries オブジェクトの cell 配列。

バスのデータを部分的に指定するには、グラウンド値を使用するバス要素の代わりに [] を使用します。

関数 Simulink.SimulationData.createStructOfTimeseries は深さ優先検索を使用して cell 配列の timeseries 要素を Simulink.Bus オブジェクトで指定した階層にマッピングします。

例: {ts1,ts2,ts3}

例: {ts1,[],ts3}

依存関係

dims 引数を指定する場合、cell 配列の cell 数は、指定した次元の積で乗算した Simulink.Bus オブジェクトの個々の信号要素の数と一致しなければなりません。

timeseries 構造体の配列の次元。ベクトルとして指定します。

次元をスカラー n として指定する場合、関数は 1n 列の配列を作成します。

例: [2,1]

依存関係

dims 引数を指定する場合、cell 配列の cell 数は、指定した次元の積で乗算した Simulink.Bus オブジェクトの個々の信号要素の数と一致しなければなりません。

データ型: double

Simulink.TsArray オブジェクト。

R2016a より前のバージョンでは、信号をログ記録すると、ログ記録されたバス データを格納する Simulink.TsArray オブジェクトが作成されます。R2016a より前のバージョンで ModelDataLogs 形式を使用してログ記録されたデータを使用する場合は、この構文を使用してバスのシミュレーション入力を作成します。

例: myTsArrayObj

出力引数

すべて折りたたむ

Simulink.TsArray または Simulink.Bus 入力で指定された属性をもつ timeseries オブジェクトの構造体。timeseries オブジェクトの構造体をバスのシミュレーション入力として読み込むことができます。

dims 入力で指定された次元をもつ timeseries オブジェクトの構造体の配列。

R2013a で導入