Main Content

simulationEnsembleDatastore

generateSimulationEnsemble または Simulink でのシミュレーション データのログ記録によって生成されるアンサンブル データの管理

説明

simulationEnsembleDatastore オブジェクトは、シミュレーション データを使用した状態監視と予知保全のアルゴリズム開発に特化したデータストアです。

このオブジェクトは、MATLAB® データ ファイル (MAT ファイル) のコレクションに格納されたデータ変数、独立変数、および状態変数を指定します。データ ファイルには、Simulink® モデルのシミュレーション中に記録された結果のログ データを格納する Simulink.SimulationData.Dataset 変数が含まれています。

シミュレートされたアンサンブル データストアの使用の詳細な例については、シミュレーション データ アンサンブルの生成と使用を参照してください。Predictive Maintenance Toolbox™ におけるデータ アンサンブルの一般的な情報については、状態監視と予知保全のためのデータ アンサンブルを参照してください。

作成

simulationEnsembleDatastore オブジェクトを作成するには、次のようにします。

  1. Simulink モデルからシミュレーション データを生成してログを記録します。これは、generateSimulationEnsemble のほか、シミュレーションのログをディスクに記録する任意の方法で実行できます。

  2. 生成されたシミュレーション データを指す simulationEnsembleDatastore オブジェクトを simulationEnsembleDatastore コマンドを使用して作成します (以下で説明します)。

以前に generateSimulationEnsemble または他の方法で生成されたシミュレーション データがある場合は、作成関数 simulationEnsembleDatastore を使用して新しいシミュレーション アンサンブル データストア オブジェクトをいつでも作成できます。

説明

ensemble = simulationEnsembleDatastore(location) は、以前に generateSimulationEnsemble を使用して生成されたデータから location で指定されたフォルダーにシミュレーション アンサンブルを作成します。生成された MAT ファイルに格納されている情報から、生成されたデータ内のアンサンブル変数が識別されます。それらのアンサンブル変数の名前が ensembleDataVariables プロパティと SelectedVariables プロパティに取り込まれます。

ensemble = simulationEnsembleDatastore(location,signallog) は、MAT ファイル内のどの変数にログ信号が格納されているかを signallog を使用して判別します。データの生成元である Simulink モデルの Signal logging コンフィギュレーション パラメーターで指定されている変数名を使用します。この変数を指定すると、signallog 変数自体ではなく、それらの信号がアンサンブルでアンサンブル データ変数として扱われるようになります。MAT ファイル内の他の変数もアンサンブル データ変数として返されます。

ensemble = simulationEnsembleDatastore(location,signallog,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して、オブジェクトの追加のプロパティを指定します。たとえば、'IndependentVariables',["Age";"ID"] を使用して、オブジェクトを作成するときに独立変数を指定します。

入力引数

すべて展開する

シミュレーション データを格納する場所のファイル パス。string または文字ベクトルとして指定します。ファイル パスは、リモート ロケーションを指す IRI パスを含む、MATLAB データストアによってサポートされている任意の場所に指定できます。ただし、リモート データを simulationEnsembleDatastore を使用して管理している場合、アンサンブル データストアに writeToLastMemberRead を使用してデータを追加することはできません。MATLAB におけるリモート データの操作の詳細については、リモート データの操作を参照してください。

例: pwd + "\simResults"

ログ信号の変数名。string または文字ベクトルとして指定します。この入力引数は、simulationEnsembleDatastore に対して、格納された MAT ファイル内のどのデータ変数にシミュレーション データのログが格納されているかを示します。この変数名は、データの生成元である Simulink モデルの Signal logging コンフィギュレーション パラメーターで指定されます。generateSimulationEnsemble を使用してアンサンブルのシミュレーション データを生成する場合、生成される各 MAT ファイルに、ログ信号の変数名を指定する変数 PMSignalLogName が含まれます。

例: "logsout"

プロパティ

すべて展開する

アンサンブル内のデータ変数。string 配列として指定します。データ変数とは、アンサンブルのメンバーの主な内容です。データ変数には、予知保全アルゴリズムの解析と開発用の測定データまたは派生データが含まれます。たとえば、データ変数には、測定またはシミュレーションされた振動信号と、平均振動値または振動ピーク周波数などの派生値が含まれる場合があります。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

simulationEnsembleDatastore は、DataVariables の初期値を generateSimulationEnsemble で生成されたデータ内のすべてのログ信号の名前に設定します。さらに、simulationEnsembleDatastore は、変数 SimulationInputSimulationMetadataDataVariables に追加します。これらの変数には、シミュレーションが実行された方法に関する情報が格納されます。

DataVariables{'Vibration';'Tacho'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Vibration";"Tacho"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル内の独立変数。string 配列として指定します。通常、アンサンブルのメンバーに順序を付けるには、独立変数を使用します。たとえば、タイムスタンプ、操作時間数、走行距離などです。このプロパティには、アンサンブル内のこのような変数の名前を設定します。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

IndependentVariables{'Time';'Age'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Time";"Age"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル内の状態変数。string 配列として指定します。状態変数を使用して、アンサンブルのメンバーが収集された故障状態または他の動作状態に従って、アンサンブルのメンバーにラベルを付けます。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

ConditionVariables{'GearFault';'Temperature'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["GearFault";"Temperature"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブルから読み取る変数。string 配列として指定します。このプロパティを使用して、read コマンドでアンサンブルからデータを読み取る際に、どの変数を MATLAB ワークスペースに抽出するかを指定します。read は、SelectedVariables で指定された各名前の table 変数を含む table 行を返します。たとえば、6 つの変数を含むアンサンブル ensemble があり、そのうちの 2 つ、VibrationFaultState のみを読み取るとします。SelectedVariables プロパティを設定し、read を呼び出します。

ensemble.SelectedVariables = ["Vibration";"FaultState"];
data = read(ensemble)

SelectedVariablesは、DataVariablesConditionVariablesIndependentVariablesの各プロパティに含まれる変数の任意の組み合わせにできます。SelectedVariables が空の場合は、read にエラーが発生します。

simulationEnsembleDatastore は、SelectedVariables の初期値を generateSimulationEnsemble で生成されたデータ内のすべてのログ信号の名前に設定します。

SelectedVariables{'Vibration';'Tacho'} のように文字ベクトルの cell 配列で指定できますが、変数名は常に string 配列 ["Vibration";"Tacho"] として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル データストアから一度に読み取るメンバーの数。アンサンブル内のメンバーの合計数よりも小さい正の整数として指定します。既定では、read コマンドは、1 つのアンサンブル メンバーからのデータを含む 1 行の table を返します。1 回の read 操作で複数のメンバーからデータを読み取る場合は、このプロパティに 1 より大きい整数値を設定します。たとえば、ReadSize = 3 の場合は、read は 3 行の table を返し、各行には異なるアンサンブル メンバーからのデータが含まれます。未読のメンバーが ReadSize より少ない場合は、read は残りのメンバーの数だけ行を持つ table を返します。

アンサンブル データストアの LastMemberRead プロパティは、直近の read 操作で読み取られたすべてのファイル名を含んでいます。したがって、たとえば、ReadSize = 3 の場合は、read の操作で、LastMemberRead に 3 つのファイル名を含む string ベクトルが設定されます。

writeToLastMemberRead を使用する場合は、書き込むデータを ReadSize と等しい行数をもつ table として指定します。writeToLastMemberRead コマンドは、LastMemberRead で指定されたメンバーを更新し、指定された各ファイルに 1 つの table 行を書き込みます。

また、ReadSize プロパティを変更すると、アンサンブルは未読の状態にリセットされます。たとえば、一部のアンサンブル メンバーを一度に 1 つずつ読み取り (ReadSize = 1)、ReadSize を 3 に変更したとします。次の read 操作により、最初の 3 つのアンサンブル メンバーからのデータが返されます。

この プロパティ は読み取り専用です。

アンサンブル内のメンバー数。正の整数で指定します。

この プロパティ は読み取り専用です。

MATLAB ワークスペースに最後に読み取られたアンサンブル メンバーのファイル名。string として指定されます。read コマンドを使用してアンサンブル・データストアからデータを読み取ると、次に読み取るアンサンブル メンバーがソフトウェアによって決定され、対応するファイルからデータが読み取られます。LastMemberRead プロパティは、最後に読み取られたファイルのパスを含んでいます。アンサンブル データストアがまだ読み取られていない場合や、リセットされている場合は、LastMemberRead は空の string になります。

アンサンブル データストアにデータを戻すために writeToLastMemberRead を呼び出すと、その関数は LastMemberRead で指定されたファイルに書き込まれます。

既定では、read 一度に 1 つのアンサンブル メンバーからデータを読み取ります (アンサンブル データストアの ReadSize プロパティは 1)。ReadSize > 1 のとき、LastMemberRead は、直近の read 操作で読み取った全ファイルのパスを含む string 配列です。

この プロパティ は読み取り専用です。

アンサンブル データストア内のファイルのリスト。長さ NumMembers の列 string ベクトルとして指定します。各エントリには、データストア内のファイルへの絶対パスが含まれます。ファイルは、read コマンドがアンサンブル メンバーを読み取った順番に並んでいます。

例: ["C:\Data\Data_01.csv"; "C:\Data\Data_02.csv"; "C:\Data\Data_03.csv"]

オブジェクト関数

関数 read および writeToLastMemberRead は、Predictive Maintenance Toolbox アンサンブル データに特化しています。reset および hasdata など、その他の関数は、MATLAB の datastore オブジェクトで使用される関数と同一です。特定のアンサンブル メンバーを、より小規模か、より特化したアンサンブル データストアに抽出するには、subset を使用します。1 つのコマンドですべてのメンバー データを table または cell 配列に転送するには、readall を使用します。アンサンブル データストアを分割するには、関数 partitionpartition(ds,n,index) 構文を使用します。

readアンサンブル データストアからメンバー データを読み取り
writeToLastMemberReadアンサンブル データストアのメンバーにデータを書き込み
subset既存のアンサンブル データストアのサブセットから新しいアンサンブル データストアを作成
resetデータストアの初期状態へのリセット
hasdataデータが読み取り可能かどうかを判別
progress 読み取ったデータ量の判定
readallデータストアのすべてのデータの読み取り
numpartitionsデータストアの区画数
partitionデータストアを分割する
talltall 配列の作成
transformデータストアの変換
isPartitionableデータストアが分割可能かどうかを判別
isShuffleableデータストアがシャッフル可能かどうかを判別

すべて折りたたむ

故障パラメーターを変化させながら機械の Simulink® モデルをシミュレートすることにより、故障状態下での機械の動作を表すデータのシミュレーション アンサンブル データストアを生成します。

Simulink モデルを読み込みます。このモデルは、Simulink を使用した故障データの生成で説明されているギアボックス モデルの簡易版です。この例では、故障モードがギア歯の故障の 1 つだけモデル化されています。

mdl = 'TransmissionCasingSimplified';
open_system(mdl)

ギア歯の故障は Gear Tooth fault サブシステムでの外乱としてモデル化されます。外乱の大きさは、モデル変数 ToothFaultGain によって制御されます。ここで、ToothFaultGain = 0 はギア歯の故障がない状態 (健全動作) に対応します。故障データのアンサンブルを生成するには、generateSimulationEnsemble を使用して、モデルを -2 ~ 0 の範囲にある異なる ToothFaultGain 値でシミュレートします。この関数は、Simulink.SimulationInput オブジェクトの配列を使用してアンサンブルの各メンバーの Simulink モデルを構成します。各シミュレーションで別個のアンサンブル メンバーがそれぞれのデータ ファイルに生成されます。こうした配列を作成し、setVariable を使用して実行ごとにギア歯の故障のゲイン値を割り当てます。

toothFaultValues  = -2:0.5:0; % 5 ToothFaultGain values 

for ct = numel(toothFaultValues):-1:1
    simin(ct) = Simulink.SimulationInput(mdl);
    simin(ct) = setVariable(simin(ct),'ToothFaultGain',toothFaultValues(ct));
end

この例では、モデルが VibrationTacho の特定の信号値をログに記録するよう既に構成されています (信号ログを使用した信号データの保存 (Simulink)を参照)。generateSimulationEnsemble は、モデルをさらに次のように構成します。

  • ログ データを指定のフォルダー内のファイルに保存する。

  • 信号のログに timetable 形式を使用する。

  • Simulink.SimulationInput オブジェクトを対応するログ データとともに保存ファイル内に格納する。

生成されるデータの場所を指定します。この例では、現在のフォルダー内の Data というフォルダーにデータを保存します。シミュレーションがすべてエラーなしで完了した場合、インジケーター status が 1 (true) になります。

mkdir Data
location = fullfile(pwd,'Data');
[status,E] = generateSimulationEnsemble(simin,location);
[21-Jul-2024 12:10:30] Running simulations...
[21-Jul-2024 12:10:34] Completed 1 of 5 simulation runs
[21-Jul-2024 12:10:36] Completed 2 of 5 simulation runs
[21-Jul-2024 12:10:38] Completed 3 of 5 simulation runs
[21-Jul-2024 12:10:40] Completed 4 of 5 simulation runs
[21-Jul-2024 12:10:42] Completed 5 of 5 simulation runs

Data フォルダー内でファイルの 1 つを確認します。各ファイルは次の MATLAB® 変数を含む MAT ファイルです。

  • SimulationInput — ファイル内のデータを生成するためにモデルの構成に使用された Simulink.SimulationInput オブジェクト。これを使用して、このシミュレーションが実行された状態 (故障か健全かなど) に関する情報を抽出できます。

  • logsout — Simulink モデルがログに記録するよう構成されている対象データをすべて含む Dataset オブジェクト。

  • PMSignalLogName — ログ データを含む変数の名前 (この例では 'logsout')。simulationEnsembleDatastore コマンドはこの名前を使用してファイル内のデータを解析します。

  • SimulationMetadata — ファイル内に記録されたデータを生成したシミュレーションに関するその他の情報。

これで、生成されたデータを使ってシミュレーション アンサンブル データストアを作成することができます。結果の simulationEnsembleDatastore オブジェクトは生成されたデータを指します。オブジェクトはアンサンブル内のデータ変数をリストし、既定ではすべての変数が読み取り対象として選択されています。アンサンブルの DataVariables プロパティと SelectedVariables プロパティを確認して、それらの指定を確定します。

ensemble = simulationEnsembleDatastore(location)
ensemble = 
  simulationEnsembleDatastore with properties:

           DataVariables: [4x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [0x0 string]
       SelectedVariables: [4x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

ensemble.DataVariables
ans = 4x1 string
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

ensemble.SelectedVariables
ans = 4x1 string
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

これで、アンサンブル データストア内の生成データを ensemble を使用して読み取り、解析することができます。詳細については、simulationEnsembleDatastoreを参照してください。

一般に、read コマンドは、simulationEnsembleDatastore オブジェクトから MATLAB® ワークスペースにデータを抽出するために使用します。多くの場合、アンサンブルには特定の解析に使用する必要がある変数よりも多くの変数が格納されています。読み取る変数のサブセットを選択するには、 simulationEnsembleDatastore オブジェクトの SelectedVariables プロパティを使用します。

この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore オブジェクトを作成します (generateSimulationEnsembleを参照)。アンサンブルには、モデル パラメーター ToothFaultGain の 5 つの異なる値についてのシミュレーション データが含まれます。データのボリュームにより、unzip 操作には数分かかります。

unzip simEnsData.zip  % extract compressed files
ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble = 
  simulationEnsembleDatastore with properties:

           DataVariables: [5x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [0x0 string]
       SelectedVariables: [5x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

データの生成元のモデル TransmissionCasingSimplified では、結果のアンサンブルに加速度計データ Vibration やタコメーター データ Tacho などの変数を格納するように構成していました。既定では、それらのすべての変数が simulationEnsembleDatastore オブジェクトでデータ変数および選択された変数の両方として指定され、DataVariables プロパティと SelectedVariables プロパティに表示されます。

ensemble.DataVariables
ans = 5x1 string
    "PMSignalLogName"
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

ensemble.SelectedVariables
ans = 5x1 string
    "PMSignalLogName"
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

目的の解析を行うには、Vibration データと、このメンバー データがシミュレートされた状態を記述する Simulink.SimulationInput オブジェクトのみが必要であると仮定します。ensemble.SelectedVariables を設定して読み取る変数を指定します。これにより、read コマンドで現在のアンサンブル メンバーからそれらの変数が抽出されます。

ensemble.SelectedVariables = ["Vibration";"SimulationInput"];
data1 = read(ensemble)
data1=1×2 table
         Vibration                SimulationInput        
    ___________________    ______________________________

    {20202x1 timetable}    {1x1 Simulink.SimulationInput}

data.Vibration は、シミュレーション時間を格納する 1 つの timetable とそれに対応する振動信号を含む cell 配列です。これで、このデータを必要に応じて処理することができます。たとえば、table から振動データを抽出してプロットします。

vibdata1 = data1.Vibration{1};
plot(vibdata1.Time,vibdata1.Data)
title('Vibration - First Ensemble Member')

Figure contains an axes object. The axes object with title Vibration - First Ensemble Member contains an object of type line.

このアンサンブルに対して read を次に呼び出すと、最後に読み取られたメンバーの指定がアンサンブルの次のメンバーに進みます (状態監視と予知保全のためのデータ アンサンブルを参照)。選択した変数をアンサンブルの次のメンバーから読み取ります。

data2 = read(ensemble)
data2=1×2 table
         Vibration                SimulationInput        
    ___________________    ______________________________

    {20215x1 timetable}    {1x1 Simulink.SimulationInput}

data1data2 に異なるアンサンブル メンバーからのデータが含まれることを確認するため、変化するモデル パラメーター ToothFaultGain の値を調べます。各アンサンブルで、この値は SimulationInput 変数の Variables フィールドに格納されています。

data1.SimulationInput{1}.Variables
ans = 
  Variable with properties:

           Name: 'ToothFaultGain'
          Value: -2
      Workspace: 'global-workspace'
        Context: ''
    Description: ""

data2.SimulationInput{1}.Variables
ans = 
  Variable with properties:

           Name: 'ToothFaultGain'
          Value: -1.5000
      Workspace: 'global-workspace'
        Context: ''
    Description: ""

この結果から、data1ToothFaultGain = –2 のアンサンブル メンバーから、data2ToothFaultGain = –1.5 のメンバーからのものであることが確認されます。

アンサンブル データストアのデータを処理し、派生した変数をアンサンブル メンバーに追加できます。この例では、変数の値を処理して、アンサンブル メンバーに故障ありで取得されたデータが含まれているかどうかを示すラベルを計算します。その後、そのラベルをアンサンブルに追加します。

この例では、次のコードを使用して、前に Simulink® モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore オブジェクトを作成します。(generateSimulationEnsembleを参照。)アンサンブルには、モデル パラメーター ToothFaultGain の 5 つの異なる値についてのシミュレーション データが含まれます。モデルは、この例のために simEnsData.zip に格納されている MAT ファイルの logsout という名前の変数にシミュレーション データを記録するように構成されています。データのボリュームにより、unzip 操作に 1 ~ 2 分かかることがあります。

unzip simEnsData.zip  % extract compressed files
ensemble = simulationEnsembleDatastore(pwd,'logsout')
ensemble = 
  simulationEnsembleDatastore with properties:

           DataVariables: [5x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: [0x0 string]
       SelectedVariables: [5x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

アンサンブルの最初のメンバーからデータを読み取ります。最初のメンバーであるアンサンブルがソフトウェアで判定され、対応するファイルの名前を反映するように ensemble.LastMemberRead プロパティが更新されます。

data = read(ensemble)
data=1×5 table
    PMSignalLogName           SimulationInput                   SimulationMetadata                   Tacho                Vibration     
    _______________    ______________________________    _________________________________    ___________________    ___________________

      {'logsout'}      {1x1 Simulink.SimulationInput}    {1x1 Simulink.SimulationMetadata}    {20202x1 timetable}    {20202x1 timetable}

既定では、アンサンブル データに格納されているすべての変数が SelectedVariables として指定されます。そのため、返される table の行には、すべてのアンサンブル変数が含まれます。これには、このアンサンブル メンバーのシミュレーションについて構成した Simulink.SimulationInput オブジェクトを格納する変数 SimulationInput も含まれます。そのオブジェクトの Variables プロパティに、アンサンブル メンバーに使用される ToothFaultGain の値がデータ構造体として格納されています。その値を調べます。(シミュレーションの構成の格納方法の詳細については、Simulink.SimulationInput (Simulink)を参照してください。)

data.SimulationInput{1}
ans = 
  SimulationInput with properties:

               ModelName: 'TransmissionCasingSimplified'
            InitialState: [0x0 Simulink.op.ModelOperatingPoint]
           ExternalInput: []
         ModelParameters: [0x0 Simulink.Simulation.ModelParameter]
         BlockParameters: [0x0 Simulink.Simulation.BlockParameter]
               Variables: [1x1 Simulink.Simulation.Variable]
               PreSimFcn: []
              PostSimFcn: []
              UserString: ''
    VariantConfiguration: ''

Inputvars = data.SimulationInput{1}.Variables;
Inputvars.Name
ans = 
'ToothFaultGain'
Inputvars.Value
ans = 
-2

各アンサンブル メンバー内の ToothFaultGain 値を、ギア故障の有無を示すバイナリ インジケーターに変換すると仮定します。さらに、システムの使用経験から、ギア歯故障のゲイン値の大きさが 0.1 より小さい場合は健全動作と見なすのに十分であることがわかっているとします。このアンサンブルのゲイン値を、–0.1 < ゲイン < 0.1 の場合は 0 (故障なし)、そうでない場合は 1 (故障あり) のインジケーターに変換します。

sT = abs(Inputvars.Value) < 0.1;

新しい歯の故障インジケーターを対応するアンサンブル データに追加するには、まずアンサンブルのデータ変数のリストを拡張して、インジケーターの変数を含めます。

ensemble.DataVariables = [ensemble.DataVariables; "ToothFault"];
ensemble.DataVariables
ans = 6x1 string
    "PMSignalLogName"
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"
    "ToothFault"

この操作は、概念的にはアンサンブル データの table に列を追加することと同じです。新しい変数の名前が DataVariables に格納されたので、メンバーのその列に writeToLastMemberRead を使用して派生値を代入します。

writeToLastMemberRead(ensemble,'ToothFault',sT);

実際には、歯の故障インジケーターをアンサンブルのすべてのメンバーに追加することが望まれます。そのためには、アンサンブル データストアを未読の状態にリセットして、次回の読み取り操作が最初のアンサンブル メンバーから開始されるようにします。その後、すべてのアンサンブル メンバーをループ処理して各メンバーの ToothFault を計算し、これを追加します。reset 操作では ensemble.DataVariables は変更されないため、"ToothFault" はそのリストに存在したままになります。

reset(ensemble);

sT = false; 
while hasdata(ensemble)
    data = read(ensemble);
    InputVars = data.SimulationInput{1}.Variables;
    TFGain = InputVars.Value;
    sT = abs(TFGain) < 0.1;
    writeToLastMemberRead(ensemble,'ToothFault',sT);
end

最後に、新しい歯の故障インジケーターをアンサンブル データストア内に状態変数として指定します。この指定を使用して、メンバー データが生成された状態を表す変数をアンサンブル データ内で追跡および参照することができます。

ensemble.ConditionVariables = {"ToothFault"};
ensemble.ConditionVariables
ans = 
"ToothFault"

新しい変数をさらなる解析のために読み取る場合は ensemble.SelectedVariables に追加できます。simulationEnsembleDatastore オブジェクトに格納されているデータを操作し解析するための他の方法を示す例については、Simulink を使用した故障データの生成を参照してください。

read コマンドの 1 回の呼び出しで複数のアンサンブル メンバーからデータを読み取るには、アンサンブル データストアの ReadSize プロパティを使用します。この例では simulationEnsembleDatastore を使用しますが、fileEnsembleDatastore にも同じ手法を使用できます。

次のコードを使用して、前に Simulink モデルをさまざまな故障値で実行して生成されたデータを使って simulationEnsembleDatastore オブジェクトを作成します (generateSimulationEnsembleを参照)。アンサンブルには、モデル パラメーター ToothFaultGain の 5 つの異なる値についてのシミュレーション データが含まれます。(データのボリュームにより、unzip 操作に 1 ~ 2 分かかることがあります。)一部のデータ変数を読み取るように指定します。

unzip simEnsData.zip  % extract compressed files
ensemble = simulationEnsembleDatastore(pwd,'logsout');
ensemble.SelectedVariables = ["Vibration";"SimulationInput"];

既定では、このアンサンブル データストアに対して read を呼び出すと、最初のアンサンブル メンバーの Vibration 変数と SimulationInput 変数の値を含む単一行の table が返されます。3 つのメンバーを一度に読み取るように ReadSize プロパティを変更します。

ensemble.ReadSize = 3;
data1 = read(ensemble)
data1=3×2 table
         Vibration                SimulationInput        
    ___________________    ______________________________

    {20202x1 timetable}    {1x1 Simulink.SimulationInput}
    {20215x1 timetable}    {1x1 Simulink.SimulationInput}
    {20204x1 timetable}    {1x1 Simulink.SimulationInput}

read は、1 番目、2 番目、および 3 番目の各アンサンブル メンバーからのデータを各行に含む 3 行の table を返します。さらに、read は、アンサンブル データストアの LastReadMember プロパティを 3 つの対応するファイルのパスを含む string 配列に更新します。データの読み込み中にメモリ不足になるリスクがあるため、ReadSize をあまり大きい値に設定することは避けてください。

アンサンブルに追加のメンバーが 3 つ以上含まれている場合は、次の read 操作で 4 番目、5 番目、および 6 番目のメンバーからのデータが返されます。この例のアンサンブルに含まれるメンバーは全部で 5 つだけであるため、次の read 操作では 2 行のみが返されます。

data2 = read(ensemble)
data2=2×2 table
         Vibration                SimulationInput        
    ___________________    ______________________________

    {20213x1 timetable}    {1x1 Simulink.SimulationInput}
    {20224x1 timetable}    {1x1 Simulink.SimulationInput}

バージョン履歴

R2018a で導入