生成和使用模拟数据集成
本示例展示了如何通过模拟机器的Simulink®模型,同时改变故障参数,来生成用于预测维护算法设计的数据集成。万博1manbetx然后,该示例说明了与模拟集成数据存储交互的一些方式。该示例演示如何从数据存储读取数据到MATLAB®工作空间,处理数据以计算派生变量,并将新变量写回数据存储。
中描述的齿轮箱模型的简化版本利用Simu万博1manbetxlink生成故障数据.加载Simulin万博1manbetxk模型。
mdl =“TransmissionCasingSimplified”;open_system (mdl)
对于本例,只建模了一种故障模式。将齿轮-齿故障建模为系统中的扰动齿轮故障
子系统。扰动的大小由模型变量控制ToothFaultGain
,在那里ToothFaultGain = 0
对应于无齿轮齿故障(正常运行)。
生成模拟数据的集成
要生成故障数据的模拟集成数据存储,可以使用generateSimulationEnsemble
对不同值下的模型进行模拟ToothFaultGain
,范围从-2到0。的数组中的每个项,此函数模拟一次模型万博1manbetx仿真软件。SimulationInput
您提供的对象。每个模拟生成集成的一个独立成员。创建这样一个数组,并使用setVariable
为每次运行分配齿故障增益值。
toothFaultValues = -2:0.5:0;% 5牙faultgain值为tmp = Simulink.SimulationInput(mdl);万博1manbetxtmp = setVariable(tmp,“ToothFaultGain”toothFaultValues (ct));Simin (ct) = tmp;结束
对于这个例子,模型已经配置为记录某些信号值,振动
而且转速计
(见使用信号日志导出信号数据(万博1manbetx模型))。的generateSimulationEnsemble
函数进一步将模型配置为:
将记录的数据保存到指定文件夹中的文件中
使用
时间表
信号测井格式存储每个
万博1manbetx仿真软件。SimulationInput
对象中添加相应的日志数据
为生成的数据指定一个位置。对于本例,将数据保存到名为数据
在当前文件夹中。如果所有模拟都完成且没有错误,则函数返回真正的
在指标输出中,状态
.
mkdir数据位置= fullfile(pwd,“数据”);[status,E] = generateSimulationEnsemble(simin,location);
运行模拟…[31-Aug-2022 04:49:26]完成5次模拟运行中的1次[31-Aug-2022 04:49:33]完成5次模拟运行中的4次[31-Aug-2022 04:49:37]完成5次模拟运行中的5次
状态
状态=逻辑1
在数据
文件夹,检查其中一个文件。每个文件都是一个mat文件,包含以下MATLAB®变量:
SimulationInput
- - -万博1manbetx仿真软件。SimulationInput
对象,该对象用于配置用于生成文件中的数据的模型。您可以使用它来提取有关运行模拟的条件(例如故障或正常)的信息。logsout
——一个数据集
对象,其中包含Simulink模型配置为记录的所有数据。万博1manbetxPMSignalLogName
—包含日志数据的变量的名称(“logsout”
在这个例子中)。的simulationEnsembleDatastore
命令使用此名称解析文件中的数据。SimulationMetadata
-关于生成数据的模拟的其他信息记录在文件中。
现在可以使用生成的数据创建模拟集成数据存储。由此产生的simulationEnsembleDatastore
对象指向生成的数据。对象列出集成中的数据变量,默认情况下选择所有变量进行读取。
ensemble = simulationEnsembleDatastore(location)
ensemble = simulationEnsembleDatastore with properties: DataVariables: [4x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [4x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]
合奏。数据变量
ans =4 x1字符串SimulationInput SimulationMetadata Tacho振动
合奏。SelectedVariables
ans =4 x1字符串SimulationInput SimulationMetadata Tacho振动
从集成成员中读取数据
假设对于您想做的分析,您只需要振动
数据和万博1manbetx仿真软件。SimulationInput
对象,该对象描述模拟每个成员的条件。集合奏。SelectedVariables
来指定要读取的变量。的读
命令然后从软件确定的第一个集成成员中提取这些变量。
合奏。SelectedVariables = [“振动”;“SimulationInput”];Data1 = read(集合)
data1 =1×2表振动SimulationInput _________________ ______________________________ { 589年x1时间表}{1 x1仿真软件。万博1manbetxSimulationInput}
数据。振动
单元格数组是否包含一个时间表
行,存储仿真次数和相应的振动信号。现在可以根据需要处理这些数据。例如,从表中提取振动数据并绘制它。
vibdata1 = data1.振动{1};情节(vibdata1.Time vibdata1.Data)标题(“振动-乐团第一成员”)
的LastMemberRead
属性包含最近读取成员的文件名。下次你打电话的时候读
在这个集成上,软件将进入集成的下一个成员。(见用于状态监测和预测性维护的数据集成以获取更多信息。)从集合的下一个成员中读取所选变量。
Data2 = read(集合)
data2 =1×2表振动SimulationInput _________________ ______________________________ { 603年x1时间表}{1 x1仿真软件。万博1manbetxSimulationInput}
为了证实这一点data1
而且data2
包含来自不同集成成员的数据,检查不同模型参数的值,ToothFaultGain
.对于每个集成,此值存储在变量
字段SimulationInput
变量。
simminput1 = data1.SimulationInput{1};SimInput1。变量
ans =带属性的变量:名称:'ToothFaultGain'值:-2工作空间:'global-workspace'上下文:"描述:""
simminput2 = data2.SimulationInput{1};SimInput2。变量
ans =带属性的变量:名称:'ToothFaultGain'值:-1.5000工作空间:'global-workspace'上下文:"描述:""
这个结果证实了data1
是来自合奏组的ToothFaultGain
= -2,和data2
是来自合奏组的ToothFaultGain
= -1.5.
将数据追加到集成成员
假设你想转换ToothFaultGain
将每个集成成员的值转换为一个二进制指示器,以指示是否存在齿故障。进一步假设,根据您对系统的经验,您知道小于0.1量级的齿故障增益值足够小,可以认为是健康的运行。将您刚刚读取的集成成员的增益值转换为一个指示器,如果是-0.1 <增益< 0.1则为0(无故障),否则为1(故障)。
sT = (abs(simminput2 . variables . value) < 0.1);
要将新的牙齿故障指示器附加到相应的集成数据,首先展开集成中的数据变量列表。
合奏。数据变量= [ensemble.DataVariables;“ToothFault”];合奏。数据变量
ans =5 x1字符串"SimulationInput" "SimulationMetadata" "Tacho" "Vibration" " teeth fault "
然后,用writeToLastMemberRead
将new变量的值写入集合的最后读成员。
writeToLastMemberRead(合奏,“ToothFault”、圣);
批处理来自所有集成成员的数据
在实践中,您希望将牙齿故障指示器附加到集合中的每个成员。为此,将集合重置为未读状态,以便下一次读取从第一个集合成员开始。然后,循环遍历所有集成成员,计算ToothFault
为每个成员并附加它。
重置(套装);sT = false;而Hasdata (ensemble) data = read(ensemble);simminputvars = data.SimulationInput{1}.Variables;TFGain = simminputvars . value;sT = (abs(TFGain) < 0.1);writeToLastMemberRead(合奏,“ToothFault”、圣);结束
最后,将新的牙齿故障指示器作为集合中的一个条件变量。您可以使用此名称跟踪和引用集成数据中的变量,这些变量表示生成成员数据的条件。
合奏。ConditionVariables =“ToothFault”;合奏。ConditionVariables
ans = "牙齿缺陷"
现在,每个集成成员都包含原始的未处理数据和一个附加变量,该变量指示收集数据时的故障条件。在实践中,您可以计算并附加来自原始振动数据的其他值,以确定可用于故障检测和诊断的潜在条件指标。类中存储的数据的更多操作和分析方法,以获取更详细的示例simulationEnsembleDatastore
对象,看到利用Simu万博1manbetxlink生成故障数据.
一次读取多个成员
如果它对您想要执行的处理有效或有用,您可以将集成配置为一次从多个成员读取数据。要做到这一点,请使用ReadSize
财产。的读
命令使用此属性确定一次读取多少集成成员。例如,将集成配置为一次读取两个成员。
合奏。ReadSize= 2;
更改的值ReadSize
还将集合重置为未读状态。因此,下一个读取操作读取前两个集成成员。读
返回行数为的表ReadSize
.
合奏。SelectedVariables = [“振动”;“ToothFault”];Data3 = read(集合)
data3 =2×2表振动ToothFault _________________ __________ { 589年x1时间表}假{603}x1时间表假
的LastMemberRead
属性包含在此操作中读取的所有集成成员的文件名。
合奏。LastMemberRead
ans =2 x1字符串“/ tmp / Bdoc22b_2054784_2420937 / tp7e1079c3 / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_1。垫”“/ tmp / Bdoc22b_2054784_2420937 / tp7e1079c3 / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_2.mat”
将数据追加到集成数据存储时ReadSize
> 1,你必须写与你读的相同数量的集合成员。例如,当ReadSize
= 2,提供一个两行表writeToLastMemberRead
.
另请参阅
simulationEnsembleDatastore
|generateSimulationEnsemble
|读
|writeToLastMemberRead