чтение

Считайте членские данные из datastore ансамбля

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

Синтаксис

data = read(ensemble)
[data,info] = read(ensemble)

Описание

пример

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

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

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

Примеры

свернуть все

В целом вы используете команду read, чтобы извлечь данные из объекта simulationEnsembleDatastore в рабочую область MATLAB®. Часто, ваш ансамбль содержит больше переменных, чем необходимо использовать для конкретного анализа. Используйте свойство SelectedVariables объекта the 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 array
    "PMSignalLogName"
    "SimulationInput"
    "SimulationMetadata"
    "Tacho"
    "Vibration"

ensemble.SelectedVariables
ans = 5x1 string array
    "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')

В следующий раз, когда вы вызываете 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'

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

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

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

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

% 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"    [146484x1 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/BR2019ad_1062519_57051/mlx_to_docbook2/tp69f316d9/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"    [146484x1 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.23 

data2 = read(fensemble)
data2=1×3 table
     label      load     gsMean 
    ________    ____    ________

    "Faulty"     50     -0.22352

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

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

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

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

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

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

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

    [20213x1 timetable]    [1x1 Simulink.SimulationInput]
    [20224x1 timetable]    [1x1 Simulink.SimulationInput]

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

свернуть все

Datastore ансамбля, чтобы читать, заданный как a:

  • Объект simulationEnsembleDatastoreread читает следующего члена ансамбля.

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

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

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

свернуть все

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

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

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

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

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

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте