Main Content

readall

データ ストアのすべてのデータの読み取り

説明

data = readall(dst) は、データストア dst 内のすべてのデータを返します。関数 readall は、データストアによって参照される信号がメモリに収まる場合のみ使用してください。

すべて折りたたむ

matlab.io.datastore.sdidatastore オブジェクトは、シミュレーション データ インスペクター リポジトリ内の信号データを参照します。信号が大きすぎてメモリに入りきらない場合、sdidatastore オブジェクトを使用して手動でデータをインクリメンタルに処理するか、インクリメンタル処理をユーザーに代わって実行する、信号の tall timetable を作成します。

信号の sdidatastore の作成

sldemo_fuelsys モデルのシミュレーションを実行します。このモデルは、複数の信号をログに記録して、シミュレーション データ インスペクター リポジトリ内にデータを作成するよう構成されています。

mdl = "sldemo_fuelsys";
sim(mdl);

ログに記録された信号データは、sldemo_fuelsys_output という名前の Simulink.SimulationData.Dataset オブジェクトに返されます。

sldemo_fuelsys_output
sldemo_fuelsys_output = 
Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements

                         Name            BlockPath                                
                         ______________  ________________________________________ 
    1  [1x1 Signal]      ''              sldemo_fuelsys/EGO Fault Switch         
    2  [1x1 Signal]      air_fuel_ratio  sldemo_fuelsys/Engine Gas Dynamics      
    3  [1x1 Signal]      ''              sldemo_fuelsys/Engine Speed Fault Switch
    4  [1x1 Signal]      speed           sldemo_fuelsys/Engine_Speed_Selector    
    5  [1x1 Signal]      ''              sldemo_fuelsys/MAP Fault Switch         
    6  [1x1 Signal]      map             sldemo_fuelsys/MAP_Selector             
    7  [1x1 Signal]      ego             sldemo_fuelsys/O2_Voltage_Selector      
    8  [1x1 Signal]      ''              ...o_fuelsys/Throttle Angle Fault Switch
    9  [1x1 Signal]      throttle        sldemo_fuelsys/Throttle_Angle_Selector  
   10  [1x1 Signal]      fuel            sldemo_fuelsys/To Plant                 

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

シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、speed という名前の信号の信号 ID を取得します。

runCount = Simulink.sdi.getRunCount;
latestRunID = Simulink.sdi.getRunIDByIndex(runCount);
latestRun = Simulink.sdi.getRun(latestRunID);
speedSigID = getSignalIDsByName(latestRun,"speed");

信号 ID を使用して、speed 信号の sdidatastore オブジェクトを作成します。

speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);

データストアの内容の確認

sdidatastore オブジェクトの Name プロパティをチェックして、想定のとおりの内容であることを確認します。

speedSDIds.Name
ans = 
'speed'

また、関数 preview を使用して、信号内の最初の 10 個のサンプルを確認することもできます。

preview(speedSDIds)
ans=10×1 timetable
         Time         Data
    ______________    ____

    0 sec             300 
    0.00056199 sec    300 
    0.0033719 sec     300 
    0.01 sec          300 
    0.02 sec          300 
    0.03 sec          300 
    0.04 sec          300 
    0.05 sec          300 
    0.055328 sec      300 
    0.055328 sec      300 

sdidatastore オブジェクトによる信号データの処理

信号が大きすぎてメモリに入りきらない場合、関数 read を使用して、シミュレーション データ インスペクター リポジトリからデータのチャンクを読み取り、データをインクリメンタルに処理することができます。関数 hasdata を、信号全体をインクリメンタルに処理する際の while ループの条件として使用します。たとえば、信号の最大値を見つけます。

latestMax = [];

while hasdata(speedSDIds)
    speedChunk = read(speedSDIds);
    speedChunkData = speedChunk.Data;
    latestMax = max([speedChunkData; latestMax]);
end

latestMax
latestMax = 300

各読み取り操作で、関数 read は、読み取り位置を次の読み取り操作の開始位置に更新します。sdidatastore オブジェクトの一部またはすべてを読み取った後、読み取り位置をリセットして、信号の先頭から再度開始できます。

reset(speedSDIds)

メモリ内の信号データの処理

sdidatastore オブジェクトで参照された信号がメモリに収まる場合、関数 read でデータをインクリメンタルに読み取って処理する代わりに、関数 readall を使用してすべての信号データをメモリに読み取って処理することができます。関数 readall は、すべての信号データを含む timetable を返します。

speedTimetable = readall(speedSDIds);
speedMax = max(speedTimetable.Data)
speedMax = 300

シミュレーションからのビッグ データをログに記録し、matlab.io.datastore.SimulationDatastore オブジェクトを操作してそのデータの一部を検査および解析できます。

モデルからのビッグ データのログ記録

モデル sldemo_fuelsys を開きます。

mdl = "sldemo_fuelsys";
open_system(mdl)

[コンフィギュレーション パラメーター]、[データのインポート/エクスポート]、[データセットのデータをファイルにログ] を選択して、データを永続ストレージに記録します。あるいは、Dataset 形式を使用して、ワークスペースの代わりに MAT ファイルにプログラムによってデータを記録することができます。

set_param(mdl,"LoggingToFile","on")

モデルのシミュレーションを実行します。

sim(mdl);

現在のフォルダーに MAT ファイル out.mat が表示されます。ログに記録された信号データは、変数名 sldemo_fuelsys_out を使用して MAT ファイルに格納されます。

ログに記録された信号データを参照する DatasetRef オブジェクトを作成します。

DSRef = Simulink.SimulationData.DatasetRef("out.mat","sldemo_fuelsys_output");

ビッグ データのプレビュー

中かっこを使用して、fuel 信号の SimulationDatastore 表現を返します。これは、DatasetRef オブジェクト DSRef の 10 番目の要素になります。SimulationDatastore オブジェクトは、返される Signal オブジェクトの Values プロパティに存在します。

SimDataSig = DSRef{10};
DStore = SimDataSig.Values;

関数 preview を使用して、fuel 信号のログに記録されたデータの最初の 10 個のサンプルを検査します。

preview(DStore)
ans=10×1 timetable
         Time          Data 
    ______________    ______

    0 sec              1.209
    0.00056199 sec     1.209
    0.0033719 sec      1.209
    0.01 sec          1.1729
    0.02 sec          1.1409
    0.03 sec          1.1124
    0.04 sec          1.0873
    0.05 sec          1.0652
    0.055328 sec      1.0652
    0.055328 sec      1.0652

特定のサンプルの検査

ログに記録された fuel データの 603 番目のサンプルを検査するとします。DStoreReadSize プロパティを、メモリ リソースを考慮して、コンピューターで許容できる数値に設定します。たとえば、ReadSize200 に設定します。

DStore.ReadSize = 200;

データ ストアから 3 回読み取りを実行します。各読み取り操作で、読み取り位置は 200 サンプル進みます。

read(DStore);
read(DStore);
read(DStore);

603 番目のサンプルに近くなったため、ReadSize を小さい数値に設定して、ターゲット サンプルを見つけやすくします。たとえば、ReadSize5 に設定します。

DStore.ReadSize = 5;

データ ストアからの読み込みを再度実行します。読み取られたデータの 3 番目のサンプルは、データ ストアの 603 番目のサンプルになります。

read(DStore)
ans=5×1 timetable
      Time       Data 
    ________    ______

    5.79 sec    1.6097
    5.8 sec     1.6136
    5.81 sec    1.6003
    5.82 sec    1.5904
    5.83 sec    1.5832

以前のサンプルの検査

以前のサンプルを検査することもできます。たとえば、ログに記録された fuel データの 403 番目のサンプルを検査します。前の読み取り操作により、データストアは 606 番目のサンプルから読み取りを開始します。

関数 reset を使用して、DStore をリセットします。その後、最初のサンプルから 403 番目のサンプルまでを読み取ります。

reset(DStore);

ReadSize200 に設定します。

DStore.ReadSize = 200;

データ ストアから 2 回読み取り、読み取り位置を 401 番目のサンプルに進めます。

read(DStore);
read(DStore);

ReadSize5 に設定してデータストアから読み取ります。ここで、読み取られたデータの 3 番目のサンプルが、データストアの 403 番目のサンプルになります。

DStore.ReadSize = 5;
read(DStore)
ans=5×1 timetable
      Time       Data  
    ________    _______

    3.85 sec      0.999
    3.86 sec    0.99219
    3.87 sec    0.98538
    3.88 sec    0.97858
    3.89 sec    0.97179

複数のサンプルの抽出

関数 read を使用して、複数のサンプルを抽出することもできます。たとえば、サンプル 1001 ~ 1020 を抽出します。

データ ストアをリセットします。次に、ReadSize プロパティを 200 に設定してデータストアを 5 回読み取り、サンプル 1001 に進みます。

reset(DStore)

DStore.ReadSize = 200;
for i = 1:5
    read(DStore);
end

ReadSize20 に設定して、データストアから 20 サンプルを抽出します。

DStore.ReadSize = 20;

サンプル 1001 ~ 1020 を抽出します。抽出したデータを targetSamples という名前の変数に格納します。

targetSamples = read(DStore)
targetSamples=20×1 timetable
      Time       Data 
    ________    ______

    9.7 sec     1.5828
    9.71 sec    1.5733
    9.72 sec    1.5664
    9.73 sec    1.5614
    9.74 sec    1.5579
    9.75 sec    1.5553
    9.76 sec    1.5703
    9.77 sec     1.582
    9.78 sec    1.5913
    9.79 sec    1.5988
    9.8 sec      1.605
    9.81 sec    1.6101
    9.82 sec    1.6145
    9.83 sec    1.6184
    9.84 sec    1.6049
    9.85 sec     1.595
      ⋮

データ ストア内のデータの最大値の検出

関数 hasdatawhile ループの条件として使用し、200 サンプルのチャンク単位でデータをインクリメンタルに解析します。

reset(DStore);
DStore.ReadSize = 200;
runningMax = [];
while hasdata(DStore)
    tt = read(DStore);
    rawChunk = tt.Data;
    runningMax = max([rawChunk; runningMax]);
end

変数 runningMax にはデータストア全体における最大値が格納されます。

runningMax
runningMax = 1.6423

入力引数

すべて折りたたむ

読み取るデータストア。matlab.io.datastore.sdidatastore オブジェクトまたは matlab.io.datastore.SimulationDatastore オブジェクトとして指定します。

出力引数

すべて折りたたむ

データストア内のすべてのデータ。timetable オブジェクトとして返されます。timetable オブジェクトの詳細については、timetableを参照してください。

代替方法

信号がメモリに収まる場合、Simulink.sdi.Signal オブジェクトや Simulink.SimulationData.Signal オブジェクトなど、他のオブジェクトや関数を使用して、シミュレーション データにアクセスし、処理することができます。

バージョン履歴

R2017b で導入