Запишите данные члену datastore ансамбля
writeToLastMemberRead(ensemble,Name,Value)
writeToLastMemberRead(ensemble,data)
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)
вместо этого.
Можно обработать данные в 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
.)
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 array
"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 Ансамбля Файла С Результатами измерений.) Из-за объема данных операция 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
ensemble
— Datastore ансамбляsimulationEnsembleDatastore
| объект fileEnsembleDatastore
Datastore ансамбля, чтобы добавить переменные данных в, заданный как a:
Объект simulationEnsembleDatastore
Объект fileEnsembleDatastore
writeToLastMemberRead
пишет данные считанному в последний раз члену заданного ансамбля, идентифицированного свойством LastMemberRead
ансамбля. Считанный в последний раз член ансамбля является участником, последний раз получил доступ к использованию команды read
. (См. Ансамбли Данных для Мониторинга состояния и Прогнозирующего Обслуживания.)
данные
Новые данныеtable
Новые данные, чтобы записать в текущего члена ансамбля, заданного как 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 ансамбля.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.