Запись данных в хранилище данных ансамбля
writeToLastMemberRead( записывает указанные данные ensemble,Name,Value)Name,Value связать аргументы с последним прочитанным членом хранилища данных ансамбля. Последний прочитанный член - это член, к которому последний раз обращался с помощью read команда. (См. раздел Ансамбли данных для мониторинга состояния и предиктивного технического обслуживания.) Каждый Name должен соответствовать записи в свойстве ensemble.DataVariables. Функция записывает соответствующее Value в хранилище данных ансамбля.
Если ensemble является simulationEnsembleDatastore объект, затем writeToLastMemberRead записывает данные в MAT-файл, соответствующий последнему читаемому члену ансамбля (ensemble.LastMemberRead).
Если ensemble является fileEnsembleDatastore объект, затем writeToLastMemberRead использует функцию, идентифицированную свойством ensemble.WriteToMemberFcn для записи данных. Если это свойство не определено, то writeToLastMemberRead создает ошибку.
Этот синтаксис недоступен, если ReadSize имущество ensemble больше 1. Использовать writeToLastMemberRead(ensemble,data) вместо этого.
В этом примере используются:
Можно обрабатывать данные в хранилище данных ансамбля и добавлять производные переменные к членам ансамбля. В этом примере обрабатывается значение переменной для вычисления метки, которая указывает, содержит ли элемент ансамбля данные, полученные при наличии неисправности. Затем вы добавляете этот лейбл в ансамбль.
В этом примере используйте следующий код для создания 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.Nameans = '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.DataVariablesans = 6x1 string
"PMSignalLogName"
"SimulationInput"
"SimulationMetadata"
"Tacho"
"Vibration"
"ToothFault"
Эта операция концептуально эквивалентна добавлению столбца в таблицу данных ансамбля. Теперь это DataVariables содержит новое имя переменной, присвойте производное значение этому столбцу элемента с помощью writeToLastMemberRead.
writeToLastMemberRead(ensemble,'ToothFault',sT);На практике необходимо добавить индикатор отказа зуба к каждому члену ансамбля. Для этого необходимо сбросить хранилище данных ансамбля в непрочитанное состояние, чтобы следующая операция чтения началась у первого участника ансамбля. Затем, петля через всех участников ансамбля, вычисления 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
Наконец, обозначьте новый индикатор отказа зуба как переменную условия в хранилище данных ансамбля. Это обозначение можно использовать для отслеживания и ссылки на переменные в данных ансамбля, которые представляют условия, при которых были созданы данные элемента.
ensemble.ConditionVariables = {"ToothFault"};
ensemble.ConditionVariablesans = "ToothFault"
Можно добавить новую переменную в ensemble.SelectedVariables когда вы хотите прочитать его для дальнейшего анализа. Пример, показывающий дополнительные способы управления и анализа данных, хранящихся в simulationEnsembleDatastore см. раздел Использование Simulink для формирования данных об отказах.
Создайте хранилище данных ансамбля файлов для данных, хранящихся в файлах 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
ensemble - Хранилище данных ансамбляsimulationEnsembleDatastore объект | fileEnsembleDatastore объектEnsemble datastore для добавления переменных данных, указанных как:
simulationEnsembleDatastore объект
fileEnsembleDatastore объект
writeToLastMemberRead записывает данные на последнего считанного участника указанного ансамбля, идентифицированного LastMemberRead собственность ансамбля. Последний прочитанный участник ансамбля - это участник, к которому последний раз обращался с помощью read команда. (См. раздел Ансамбли данных для мониторинга состояния и предиктивного технического обслуживания.)
data - Новые данныеtableНовые данные для записи текущему участнику ансамбля, указанные как 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 ® Blob Storage и Hadoop ® Distributed File System (HDFS™), нельзя использоватьwriteToLastMemberRead для добавления данных в хранилище данных ансамбля.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.