Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hasdata

クラス: matlab.io.datastore.sdidatastore
名前空間: matlab.io.datastore

データが読み取り可能かどうかを判別

構文

tf = sdi_ds.hasdata

説明

matlab.io.datastore.sdidatastoresdi_ds に読み取り可能なデータがある場合、tf = sdi_ds.hasdata は logical 1 を返します。sdi_ds に読み取り可能なデータがない場合、hasdata0 を返します。

出力引数

すべて展開する

matlab.io.datastore.sdidatastore に読み取り可能なデータがあるかどうかの論理インジケーター。データが利用できる場合、tf1 になります。データが利用できない場合、tf0 になります。

すべて展開する

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

信号の matlab.io.datastore.sdidatastore の作成

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

sim('sldemo_fuelsys')

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

runCount = Simulink.sdi.getRunCount;

latestRunID = Simulink.sdi.getRunIDByIndex(runCount);

latestRun = Simulink.sdi.getRun(latestRunID);

speedSigID = latestRun.getSignalIDByIndex(4);

信号 ID を使用して、speed 信号の matlab.io.datastore.sdidatastore を作成します。

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

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

matlab.io.datastore.sdidatastoreName プロパティをチェックして、想定のとおりの内容であることを確認します。

speedSDIds.Name
ans = 
'map'

また、preview メソッドを使用して、信号内の最初の 10 個のサンプルが正しく見えることを確認することもできます。

speedSDIds.preview
ans=10×1 timetable
         Time          Data  
    ______________    _______

    0 sec               0.589
    0.00056199 sec    0.58772
    0.0033719 sec     0.58148
    0.01 sec          0.56765
    0.02 sec          0.54897
    0.03 sec          0.53264
    0.04 sec          0.51837
    0.05 sec          0.50594
    0.055328 sec          0.5
    0.055328 sec          0.5

matlab.io.datastore.sdidatastore による信号データの処理

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

latestMax = [];

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

latestMax
latestMax = 0.8897

各読み取り操作で、read メソッドは、読み取り位置を次の読み取り操作の開始位置に更新します。matlab.io.datastore.sdidatastore の一部またはすべてを読み取った後、読み取り位置をリセットして、信号の先頭から再度開始することができます。

speedSDIds.reset

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

matlab.io.datastore.sdidatastore で参照された信号がメモリに収まる場合、read メソッドでデータをインクリメンタルに読み込んで処理する代わりに、readall メソッドを使用してすべての信号データをメモリに読み込んで処理することができます。readall メソッドは、すべての信号データを含む timetable を返します。

speedTimetable = speedSDIds.readall;

speedMax = max(speedTimetable.Data)
speedMax = 0.8897

バージョン履歴

R2017b で導入