writeToLastMemberRead

Запись данных в представитель ансамбля datastore

Описание

пример

writeToLastMemberRead(ensemble,Name,Value) запишет указанные данные один или несколько Name,Value сопоставить аргументы с последним читаемым представителем ансамбля datastore. Последний считанный представитель является представителем, к которой последний раз обращался с помощью read команда. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.) Каждый Name должен совпадать с записью в свойстве ensemble.DataVariables. Функция запишет соответствующее Value в ансамбль datastore.

  • Если ensemble является simulationEnsembleDatastore объект, затем writeToLastMemberRead записывает данные в MAT-файл, соответствующий последнему считанному представителю ансамбля (ensemble.LastMemberRead).

  • Если ensemble является fileEnsembleDatastore объект, затем writeToLastMemberRead использует функцию, идентифицированную свойством ensemble.WriteToMemberFcn для записи данных. Если это свойство не определено, то writeToLastMemberRead генерирует ошибку.

Этот синтаксис недоступен, когда ReadSize свойство ensemble больше 1. Использование writeToLastMemberRead(ensemble,data) вместо этого.

writeToLastMemberRead(ensemble,data) записывает данные в таблицу в последний считанный представитель ансамбля. Значение табличных переменных должно совпадать с значениями в свойстве ensemble.DataVariables.

Примеры

свернуть все

Можно обработать данные в ансамблевом datastore и добавить производные переменные к представителям ансамбля. В данном примере обрабатывайте значение переменных, чтобы вычислить метку, которая указывает, содержит ли представитель ансамбля данные, полученные с присутствующим отказом. Затем вы добавляете эту метку в ансамбль.

В данном примере используйте следующий код для создания simulationEnsembleDatastore объект использует данные, ранее сгенерированные запуском модели Simulink ® при различных значениях отказа. (См. generateSimulationEnsemble.) Ансамбль включает данные моделирования для пяти различных значений параметра модели, ToothFaultGain. Модель была сконфигурирована, чтобы записать данные моделирования в переменную с именем logsout в MAT-файлах, которые хранятся в данном примере в simEnsData.zip. Из-за объема данных 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]

Считайте данные от первого представителя ансамбля. Программа определяет, какой ансамбль является первым представителем, и обновляет свойство 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. Поэтому строка возвращаемой таблицы включает все переменные ансамбля, включая переменную SimulationInput, который содержит Simulink.SimulationInput объект, который сконфигурировал симуляцию для этого представителя ансамбля. Этот объект включает в себя ToothFaultGain значение, используемое для представителя ансамбля, сохраненное в структуре данных в его Variables свойство. Исследуйте это значение. (Для получения дополнительной информации о том, как сохранено строение симуляции, см. 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: ''

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

Предположим, что вы хотите преобразовать ToothFaultGain значения для каждого ансамбля представителя в двоичный индикатор наличия или отсутствия отказа зуба. Предположим далее, что вы знаете из своего опыта работы с системой, что значения усиления при отказе зуба менее 0,1 в величину достаточно малы, чтобы считаться здоровыми операциями. Преобразуйте значение усиления для этого ансамбля в индикатор 0 (без отказа) для -0,1 < коэффициент усиления < 0,1 и 1 (отказ) в противном случае.

sT = abs(Inputvars.Value) < 0.1;

Чтобы добавить новый индикатор отказа зуба к соответствующим данным ансамбля, сначала разверните список переменных данных в ансамбле, чтобы включить переменную для индикатора.

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

Эта операция концептуально эквивалентна добавлению столбца в таблицу данных ансамбля. Теперь это DataVariables содержит новое имя переменной, присвойте производное значение этому столбцу представителя с помощью writeToLastMemberRead.

writeToLastMemberRead(ensemble,'ToothFault',sT);

На практике вы хотите добавить индикатор зубного разлома каждому представителю ансамбля. Для этого сбросьте ансамбль datastore в непрочитанное состояние, чтобы следующая операция чтения началась у первого представителя ансамбля. Затем прокрутите все представители ансамбля, вычисляя ToothFault для каждого представителя и добавления его. The 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

Наконец, определите новый индикатор отказа зуба как переменную условия в ансамбле datastore. Вы можете использовать это обозначение для отслеживания и обращения к переменным в данных ансамбля, которые представляют условия, при которых были сгенерированы данные представителя.

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

Можно добавить новую переменную в ensemble.SelectedVariables когда вы хотите прочитать его для последующего анализа. Для примера, который показывает больше способов манипулировать и анализировать данные, хранящиеся в simulationEnsembleDatastore объект, см. Использование Simulink для генерации данных о отказе.

Создайте file ensemble datastore для данных, хранящихся в файлах MATLAB, и сконфигурируйте его с функциями, которые говорят программному обеспечению, как читать и записывать в datastore. (Для получения дополнительной информации о настройке файловых ансамблевых хранилищ данных смотрите File Ensemble Datastore With Measured Data.)

% 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
addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path
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.

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/BR2021ad_1657350_6935/mlx_to_docbook3/tpb00852e4/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 

Можно подтвердить, что эти данные получены от другого представителя, рассмотрев load переменная в таблице. Здесь его значение составляет 50, в то время как в ранее прочитанном представителе оно составляло 0.

Можно повторить шаги обработки, чтобы вычислить и добавить среднее значение для этого представителя ансамбля. На практике более полезно автоматизировать процесс чтения, обработки и записи данных. Для этого сбросьте ансамбль в состояние, в котором данные не были считаны. Затем выполните цикл через ансамбль и выполните чтение, обработку и запись шагов для каждого представителя.

reset(fensemble)
while hasdata(fensemble)
    data = read(fensemble);
    gsdata = data.gs{1};
    gsmean = mean(gsdata);
    writeToLastMemberRead(fensemble,'gsMean',gsmean);
end

The hasdata команда возвращает false когда каждый представитель ансамбля был прочитан. Теперь каждый файл данных в ансамбле включает gsMean переменная, выведенная из gs данных в этом файле. Можно использовать методы, подобные этому циклу, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирования-обслуживания. Для примера, более подробно иллюстрирующего использование file ensemble datastore в процессе разработки алгоритмов, см. Раздел «Диагностика отказа подшипника качения». В примере также показано, как использовать Parallel Computing Toolbox™ для ускорения обработки больших ансамблей данных.

Чтобы подтвердить, что производная переменная присутствует в файле datastore ансамбля, прочитайте ее с первых и вторых представителей ансамбля. Для этого снова сбросьте ансамбль и добавьте новую переменную к выбранным переменным. На практике, после того, как вы вычислили производные значения, может быть полезно считать только эти значения, не перечитывая необработанные данные, которые могут занимать значительное пространство в памяти. В данном примере считайте выбранные переменные, которые включают новую переменную, 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

rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path

Входные параметры

свернуть все

Ensemble datastore, к которому добавляются переменные данных, заданные как:

writeToLastMemberRead записывает данные в последний считанный представитель указанного ансамбля, идентифицированный LastMemberRead свойство ансамбля. Последний читаемый представитель ансамбля является участником, к которому последний раз обращался с помощью read команда. (См. «Ансамбли данных» для мониторинга условия и прогнозирующего обслуживания.)

Новые данные для записи в текущий представитель ансамбля, заданные как table. Например, предположим, что вы вычислили два значения, которые вы хотите добавить к текущему представителю: вектор, сохраненный в качестве MATLAB® переменная рабочей области Afilt, и скаляр, сохраненный как Amean. Используйте следующую команду для создания data.

data = table(Afilt,Amean,'VariableNames',{'Afilt','Amean'});

Количество строк в таблице должно совпадать с ReadSize свойство ensemble. По умолчанию ReadSize = 1, и вы записываете одну строку таблицы в один представитель ансамбля. Когда вы конфигурируете ensemble чтобы считать несколько представителей одновременно, необходимо записать на одно и то же число представителей. Для образца, если ReadSize = 3, затем data представляет собой трехрядную таблицу.

Ограничения

  • Когда вы используете simulationEnsembleDatastore управлять данными в удаленном местоположении, например облачным хранилищем с помощью Amazon S3™ (Simple Storage Service), Windows Azure® Хранилище больших двоичных объектов и Hadoop® Распределенная файловая система (HDFS™), вы не можете использовать writeToLastMemberRead для добавления данных в ансамбль datastore.

Введенный в R2018a