writeToLastMemberRead
アンサンブル データストアのメンバーにデータを書き込み
説明
writeToLastMemberRead(
は、1 つ以上の ensemble
,Name,Value
)Name,Value
のペアの引数で指定されたデータをアンサンブル データストアの最後に読み取られたメンバーに書き込みます。最後に読み取られたメンバーは、read
コマンドを使用して最後にアクセスしたメンバーです。(状態監視と予知保全のためのデータ アンサンブルを参照)。Name
はそれぞれ ensemble.DataVariables
プロパティのエントリと一致していなければなりません。関数は対応する Value
をアンサンブル データストアに書き込みます。
ensemble
がsimulationEnsembleDatastore
オブジェクトの場合、writeToLastMemberRead
は、最後に読み取られたアンサンブル メンバー (ensemble.LastMemberRead
) に対応する MAT ファイルにデータを書き込みます。ensemble
がfileEnsembleDatastore
オブジェクトの場合、writeToLastMemberRead
は、ensemble.WriteToMemberFcn
プロパティで識別される関数を使用してデータを書き込みます。そのプロパティが定義されていない場合、writeToLastMemberRead
はエラーを生成します。
この構文は、ensemble
の ReadSize
プロパティが 1 より大きい場合は使用できません。代わりに writeToLastMemberRead(ensemble,data)
を使用してください。
例
アンサンブル メンバーへの派生データの追加
アンサンブル データストアのデータを処理し、派生した変数をアンサンブル メンバーに追加できます。この例では、変数の値を処理して、アンサンブル メンバーに故障ありで取得されたデータが含まれているかどうかを示すラベルを計算します。その後、そのラベルをアンサンブルに追加します。
この例では、次のコードを使用して、前に 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 を使用した故障データの生成を参照してください。
ファイル アンサンブル データストアへの読み取りと書き込み
MATLAB ファイルに保存されたデータ用にファイル アンサンブル データストアを作成し、データストアからの読み取りとデータストアへの書き込み方法をソフトウェアに指示する関数で構成します。(ファイル アンサンブル データストアの構成の詳細については、測定データを含むファイル アンサンブル データストアを参照してください。)
% Create ensemble datastore that points to datafiles in current folder unzip fileEnsData.zip % extract compressed files location = pwd; extension = '.mat'; fensemble = fileEnsembleDatastore(location,extension); % Specify data and condition variables fensemble.DataVariables = ["gs";"sr";"load";"rate"]; fensemble.ConditionVariables = "label"; % Configure with functions for reading and writing variable data fensemble.ReadFcn = @readBearingData; fensemble.WriteToMemberFcn = @writeBearingData;
関数は、アンサンブルを構成するデータ ファイルの操作方法を read
コマンドと writeToLastMemberRead
コマンドに指示します。したがって、read
コマンドを呼び出すと、コマンドは readBearingData
を使用して fensemble.SelectedVariables
内のすべての変数を読み取ります。この例では、readBearingData
が、要求された変数を構造体 bearing
から抽出し、ファイルに保存されている他の変数を抽出します。また、データの故障状態についてファイル名の解析も行います。
読み取る変数を指定して、アンサンブルの最初のメンバーからそれらを読み取ります。
fensemble.SelectedVariables = ["gs";"load";"label"]; data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 0
これで、メンバーからのデータを必要に応じて処理できます。この例では、変数 gs
に保存されている信号の平均値を計算します。read
によって返された table からデータを抽出します。
gsdata = data.gs{1}; gsmean = mean(gsdata);
平均値 gsmean
は、新しい変数としてデータ ファイルに書き戻すことができます。これを行うには、まずアンサンブルのデータ変数のリストを拡張して、新しい値の変数を含めます。新しい変数 gsMean
を呼び出します。
fensemble.DataVariables = [fensemble.DataVariables;"gsMean"]
fensemble = fileEnsembleDatastore with properties: ReadFcn: @readBearingData WriteToMemberFcn: @writeBearingData DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: "label" SelectedVariables: [3x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: "/tmp/Bdoc24a_2528353_1096756/tpfe6adf35/predmaint-ex34165887/FaultData_01.mat" Files: [5x1 string]
次に、派生した平均値を、最後に読み取られたアンサンブル メンバーに対応するファイルに書き込みます。(状態監視と予知保全のためのデータ アンサンブルを参照してください。)writeToLastMemberRead
を呼び出すと、これはデータを構造体に変換し、fensemble.WriteToMemberFcn
を呼び出してデータをファイルに書き込みます。
writeToLastMemberRead(fensemble,'gsMean',gsmean);
read
を再度呼び出すと、最後に読み取られたメンバーのインジケーターがアンサンブルの次のファイルに進み、そのファイルからデータが読み取られます。
data = read(fensemble)
data=1×3 table
label gs load
________ _______________ ____
"Faulty" {5000x1 double} 50
これが別のメンバーからのデータであることは、table 内の load
変数を調べることによって確認できます。ここでの値は 50 ですが、前に読み取られたメンバーでは 0 でした。
処理手順を繰り返してこのアンサンブル メンバーの平均を計算し追加することは可能です。実際には、データの読み取り、処理、および書き込みのプロセスを自動化するとさらに便利です。これを行うには、アンサンブルをデータが読み取られていない状態にリセットします。その後、アンサンブルをループ処理して、各メンバーの読み取り、処理、および書き込みの手順を実行します。
reset(fensemble) while hasdata(fensemble) data = read(fensemble); gsdata = data.gs{1}; gsmean = mean(gsdata); writeToLastMemberRead(fensemble,'gsMean',gsmean); end
アンサンブルのすべてのメンバーが読み取られると、hasdata
コマンドは false
を返します。ここで、アンサンブル内の各データ ファイルには、そのファイルのデータ gs
から求められた変数 gsMean
が含まれています。予知保全アルゴリズムを開発する際、このループのような手法を使ってアンサンブル ファイルからデータを抽出し処理することができます。アルゴリズム開発のプロセスにおけるファイル アンサンブル データストアの使用をさらに詳しく説明する例は、転動体ベアリングの故障診断を参照してください。また、この例には Parallel Computing Toolbox™ を使って大規模なデータ アンサンブルの処理を高速化する方法も示されています。
派生した変数がファイル アンサンブル データストアに存在することを確認するには、最初と 2 番目のアンサンブル メンバーからこれらを読み取ります。そのためには、アンサンブルを再びリセットし、選択した変数に新しい変数を追加します。実際には、派生値を計算した後はその値のみを読み取り、かなりのメモリ空間をとる可能性のある未処理データは読み取らないようにするのが有益です。この例では、新しい変数 gsMean
を含み、未処理のデータ gs
は含まない、選択した変数を読み取ります。
reset(fensemble) fensemble.SelectedVariables = ["label";"load";"gsMean"]; data1 = read(fensemble)
data1=1×3 table
label load gsMean
________ ____ ________
"Faulty" 0 -0.22648
data2 = read(fensemble)
data2=1×3 table
label load gsMean
________ ____ ________
"Faulty" 50 -0.22937
入力引数
ensemble
— アンサンブル データストア
simulationEnsembleDatastore
オブジェクト | fileEnsembleDatastore
オブジェクト
データ変数を追加するアンサンブル データストア。以下として指定します。
simulationEnsembleDatastore
オブジェクトfileEnsembleDatastore
オブジェクト
writeToLastMemberRead
は、指定されたアンサンブルの最後に読み取られたメンバーにデータを書き込みます。これは、アンサンブルの LastMemberRead
プロパティで識別されます。最後に読み取られたアンサンブル メンバーは、read
コマンドを使用して最後にアクセスしたメンバーです。(状態監視と予知保全のためのデータ アンサンブルを参照)。
data
— 新しいデータ
table
現在のアンサンブル メンバーに書き込む新しいデータ。table
として指定します。たとえば、計算した 2 つの値を現在のメンバーに追加するとします。MATLAB® ワークスペース変数 Afilt
として格納されたベクトルと Amean
として格納されたスカラーです。data
を構成するには次のコマンドを使用します。
data = table(Afilt,Amean,'VariableNames',{'Afilt','Amean'});
table の行数は ensemble
の ReadSize
プロパティと一致していなければなりません。既定では ReadSize
= 1 であり、1 行の table を 1 つのアンサンブル メンバーに書き込みます。複数のメンバーを一度に読み取るように ensemble
を構成している場合は、同じ数のメンバーに書き込む必要があります。たとえば、ReadSize
= 3 の場合、data
は 3 行の table になります。
制限
Amazon S3™ (Simple Storage Service)、Windows Azure® Blob Storage、Hadoop® 分散ファイル システム (HDFS™) を使用するクラウド ストレージなど、リモートの場所にあるデータを
simulationEnsembleDatastore
を使用して管理している場合、アンサンブル データストアにwriteToLastMemberRead
を使用してデータを追加することはできません。
バージョン履歴
R2018a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)