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 для каждого члена и добавления его. 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, чтобы Сгенерировать Данные об Отказе.

Создайте datastore ансамбля файла для данных, хранимых в файлах MATLAB, и сконфигурируйте их с функциями, которые говорят программное обеспечение, как читать из и записать в datastore. (Для получения дополнительной информации о хранилищах данных ансамбля файла конфигурирования, смотрите Datastore Ансамбля Файла С Результатами измерений.)

% 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/BR2020bd_1459859_105924/mlx_to_docbook3/tp802d1e52/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

hasdata команда возвращает false когда каждый член ансамбля был считан. Теперь каждый файл данных в ансамбле включает gsMean переменная вывела из данных gs в том файле. Можно использовать методы как этот цикл, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирующего обслуживания. Для примера, иллюстрирующего более подробно использование 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

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

свернуть все

Datastore ансамбля, чтобы добавить переменные данных в в виде a:

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

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

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

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

Ограничения

  • Когда вы используете simulationEnsembleDatastore чтобы управлять данными в удаленном местоположении, таком как "облачное" хранилище с помощью Amazon S3™ (Простой Сервис Устройства хранения данных), Устройство хранения данных Windows Azure® Blob и Hadoop® Distributed File System (HDFS™), вы не можете использовать writeToLastMemberRead добавить данные в datastore ансамбля.

Введенный в R2018a