exponenta event banner

читать

Считывание данных участников из хранилища данных ансамбля

Описание

Эта функция используется для считывания данных из хранилищ данных ансамбля для контроля состояния и прогностического ведения.

пример

data = read(ensemble) считывает данные из члена хранилища данных ансамбля ensemble. Функция считывает переменные, указанные в SelectedVariables свойство хранилища данных ансамбля и возвращает их в таблице.

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

[data,info] = read(ensemble) также возвращает информацию о местоположении, из которого считываются данные, и о размере данных.

Примеры

свернуть все

В общем, вы используете read команда для извлечения данных из simulationEnsembleDatastore в рабочую область MATLAB ®. Часто ансамбль содержит больше переменных, чем требуется для конкретного анализа. Используйте SelectedVariables имущества simulationEnsembleDatastore для выбора подмножества переменных для чтения.

В этом примере используйте следующий код для создания simulationEnsembleDatastore с использованием данных, ранее сгенерированных при запуске модели Simulink ® с различными значениями отказов ( см.generateSimulationEnsemble.). Ансамбль включает в себя данные моделирования для пяти различных значений параметра модели, ToothFaultGain. Из-за объема данных, 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 является массивом ячеек, содержащим один timetable сохраняет время моделирования и соответствующий вибросигнал. Теперь эти данные можно обработать по мере необходимости. Например, извлеките данные вибрации из таблицы и постройте ее график.

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

Figure contains an axes. The axes 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}

Чтобы подтвердить, что data1 и data2 содержат данные от разных членов ансамбля, исследуют значения параметра изменяемой модели, ToothFaultGain. Для каждого ансамбля это значение хранится в Variables области SimulationInput переменная.

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

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

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

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

Этот результат подтверждает, что data1 от участника ансамбля с ToothFaultGain = -2, и data2 из элемента с ToothFaultGain = –1.5.

Создайте хранилище данных ансамбля файлов для данных, хранящихся в файлах 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
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

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

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

Считывание данных от нескольких участников ансамбля за один вызов read используйте команду ReadSize свойство хранилища данных ансамбля. В этом примере используется simulationEnsembleDatastore, но вы можете использовать ту же технику для fileEnsembleDatastore.

Используйте следующий код для создания simulationEnsembleDatastore с использованием данных, ранее сгенерированных при запуске модели Simulink с различными значениями отказов (см. generateSimulationEnsemble). Ансамбль включает в себя данные моделирования для пяти различных значений параметра модели, ToothFaultGain. (Из-за объема данных, unzip операция может занять минуту или две.) Укажите некоторые переменные данных для чтения.

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

По умолчанию вызов read в этом хранилище данных ансамбля возвращается однострочная таблица, содержащая значения Vibration и SimulationInput переменные для первого участника ансамбля. Изменить 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 возвращает таблицу из трех строк, в которой каждая строка содержит данные одного из первого, второго и третьего участников ансамбля. read также обновляет LastReadMember свойство хранилища данных ансамбля на строковый массив, содержащий пути к трем соответствующим файлам. Избегайте настройки ReadSize значение настолько велико, что при загрузке данных может оказаться недостаточно памяти.

Если ансамбль содержит три или более дополнительных участников, следующий read возвращает данные из четвертого, пятого и шестого элементов. Поскольку ансамбль этого примера содержит всего пять участников, следующий read возвращает только две строки.

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

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

Входные аргументы

свернуть все

Хранилище данных ансамбля для чтения, указанное как:

  • simulationEnsembleDatastore объект - read читает следующий участник ансамбля.

  • fileEnsembleDatastore объект - read использует функцию, указанную в ensemble.ReadFcn свойство для чтения следующего участника ансамбля. (Дополнительные сведения о работе с хранилищами данных файлового ансамбля см. в разделе fileEnsembleDatastore.)

В любом случае read возвращает таблицу, содержащую все переменные, указанные в ensemble.SelectedVariables.

Выходные аргументы

свернуть все

Выбранные переменные от участника ансамбля, возвращенные как table. Переменные таблицы являются выбранными переменными, а данные таблицы - значениями, считанными из данных ансамбля. По умолчанию read считывает одного участника ансамбля за раз и возвращает одну строку таблицы.

Чтобы прочитать несколько участников ансамбля одновременно, установите ReadSize имущество ensemble до значения больше 1. Например, если задать ReadSize до 3, затем read считывает следующие 3 участника ансамбля и возвращает таблицу с 3 строками. Если меньше, чем ReadSize члены не прочитаны, затем read возвращает таблицу, содержащую столько строк, сколько осталось элементов. Пример см. в разделе Чтение нескольких участников ансамбля в одной операции. Избегайте настройки ReadSize к такому большому значению, чтобы рисковать исчерпанием памяти при загрузке данных.

Данные и информация об участниках ансамбля, возвращенные в виде структуры с полями:

  • Size - Размеры стола data, возвращено как вектор. Например, если ансамбль имеет четыре переменные, указанные в ensemble.SelectedVariables, то Info.Size = [1 4].

  • FileName - путь к файлу данных, соответствующему члену ансамбля, к которому осуществляется доступ, возвращаемый в виде строки. Например, "C:\Data\Experiment1\fault1.mat". Запрос read также устанавливает LastMemberRead свойство ансамбля к этому значению. Если ReadSize имущество ensemble больше 1, это значение представляет собой строковый вектор, содержащий пути ко всем доступным файлам.

Представлен в R2018a