这个例子展示了如何通过模拟机的一个的Simulink模型,同时改变故障参数生成预测维护算法设计数据合奏。金宝app然后,该示例说明了一些你一个模拟合奏数据存储交互的方式。该示例示出了如何从数据存储到工作区MATLAB®读取数据,处理所述数据来计算导出的变量,并写入新的变量回数据存储区。
该示例中的模型是简化版本的齿轮箱模型中描述的简化版本使用Simu金宝applink生成故障数据。加载Simulin金宝appk模型。
mdl ='TransmissionCasingSimplified';Open_System(MDL)
对于这个例子中,只有一个故障模式被建模。齿轮齿故障建模为干扰齿轮牙齿故障
子系统。干扰的大小由模型变量控制ToothFaultGain
, 在哪里牙齿凹陷= 0.
对应无齿轮齿故障(正常运行)。
要生成故障数据的模拟集合数据存储,请使用generateSimulationEnsemble
以不同的值模拟模型ToothFaultGain
,范围从-2到0。这个函数为数组中的每个条目模拟一次模型金宝appSimulink.SimulationInput
您提供的对象。每个模拟生成集合中的一个独立成员。创建这样一个数组,并使用setVariable
分配每次运行一个齿故障增益值。
toothFaultValues = 2:0.5:0;%5个ToothFaultGain值为了CT = numel(toothFaultValues): - 1:1 TMP金宝app = Simulink.SimulationInput(MDL);TMP = setVariable(TMP,'ToothFaultGain',toothFaultValues(CT));四民(CT)= TMP;结尾
对于此示例,该模型已被配置为记录某些信号值,振动
和Tacho.
(看输出信号数据使用信号记录(金宝appSimulink))。这generateSimulationEnsemble
函数进一步配置模型为:
将记录的数据保存到您指定的文件夹中的文件中
使用时间表
信号日志记录格式
储存各金宝appSimulink.SimulationInput
对象中所保存的文件与相应的记录的数据
指定生成的数据的位置。在这个例子中,将数据保存到一个文件夹,名为数据
在您的当前文件夹。如果所有的模拟完成没有错误,函数返回真正的
在指示器输出,地位
。
MKDIR.数据位置= fullfile(pwd,“数据”);[状态,E] = generateSimulationEnsemble(四民,位置);
[01九月2021 11点○○分27秒]运行模拟... [01九月2021 11点01分02秒]已完成1 5的模拟运行。[01九月2021 11点01分17秒]完成25个模拟运行[01九月2021 11点01分31秒]已完成3 5的模拟运行。[01九月2021 11点01分45秒]已完成4 5的模拟运行。[01九月2021 11点02分06秒]已完成5模拟运行
地位
状态=逻辑1
在 - 的里面数据
文件夹,检查文件之一。每个文件是包含以下MATLAB®变量MAT文件:
SimulationInput
- 这金宝appSimulink.SimulationInput
用于配置用于生成文件中数据的模型的对象。您可以使用它来提取有关运行此模拟的条件(例如故障或健康)的信息。
logsout
- 一种数据集
对象,该对象包含Simulink模型配置为记录的所有数据。金宝app
PMSignalLogName
-包含记录数据的变量的名称('logsout'
在本例中)。这SimulationEneMbledAtastore.
命令使用该名称的文件中分析数据。
SimulationMetadata
- 有关生成文件中记录的数据的模拟的其他信息。
现在,您可以使用生成的数据创建模拟集合数据存储。所结果的SimulationEneMbledAtastore.
对象指向生成的数据。该对象列出了集合中的数据变量,默认选择所有变量进行读取。
合奏= simulationEnsembleDatastore(位置)
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]
Ensemble.datavariables.
ans =.4X1线“仿真”“Simulation MetaData”“Tacho”“振动”
合奏.SelectedVariables.
ans =.4X1线“仿真”“Simulation MetaData”“Tacho”“振动”
假设对于您想要做的分析,您只需要振动
数据和金宝appSimulink.SimulationInput
对象,该对象描述模拟每个成员所处的条件。集合奏.SelectedVariables.
指定要读取的变量。这读
然后,命令从第一集合成员中提取那些变量,如软件所确定的。
ensemble.SelectedVariables = [“振动”;“模拟input”];DATA1 =读(合奏)
数据1 =1×2表振动模拟_________________ ____________________________________1时间} {1x1 simulink.simulationInput}金宝app
data.vibration.
是含细胞阵列的一个时间表
行存储所述仿真时间和相应的振动信号。现在,您可以根据需要处理这些数据。例如,提取从表中的振动数据和绘制。
vibdata1 = data1.Vibration {1};图(vibdata1.Time,vibdata1.Data)称号('振动 - 第一集合会员')
这莱特曼弗雷德
合奏的属性包含最近读取成员的文件名。下次你打电话的时候读
在这个集合上,软件向前推进到集合的下一个成员。(见数据合奏状态监测和预测性维护为更多的信息。)从集合的下一个成员读取选定的变量。
DATA2 =读(合奏)
数据2 =1×2表振动SimulationInput _________________ ______________________________ { 592年x1时间表}{1 x1仿真软件。金宝appSimulationInput}
要确认data1.
和data2.
包含来自不同集合成员数据,检查变化模型参数的值,ToothFaultGain
。对于每个合奏,该值存储在变量
领域SimulationInput
多变的。
SimInput1 = data1.SimulationInput {1};SimInput1.Variables
ANS =变量与属性:名称:“ToothFaultGain”值:-2工作区:“全局工作区”说明:“”
siminput2 = data2.simulationInput {1};siminput2.variables.
ans =带有属性的变量:名称:“ToothFaultGain”值:-1.5000工作区:“global-workspace”描述:“”
这个结果证实了data1.
是和谁在一起的ToothFaultGain
= -2,和data2.
是和谁在一起的ToothFaultGain
= -1.5.。
假设你要转换的ToothFaultGain
每个集合构件到存在牙齿故障的二进制指示器的值。进一步假设您从您的体验中知道,系统的牙齿故障增益值小于0.1的幅度幅度足够小,以便被认为是健康的操作。将刚刚读取的集合成员的增益值转换为0(无故障)对于-0.1 <增益<0.1和1(故障)否则。
st =(abs(siminput2.variables.value)<0.1);
要将新的牙齿故障指示器附加到相应的集成数据中,首先展开集成中的数据变量列表。
Ensemble.Datavariables = [Ensemble.Datavariables;“ToothFault”];Ensemble.datavariables.
ans =.5x1字符串“仿真普查”“Simulation MetaData”“Tacho”“振动”“牙齿”
然后,使用WriteTolastmemberread.
将新变量的值写入集合的最后一个读取成员。
WriteTolastmemberRead(合奏,“ToothFault”、圣);
在实践中,您希望将牙齿故障指示符附加到集合中的每个成员。为此,将集合重置为未读状态,以便下一个读取从第一个集合成员开始。然后,循环所有的集合成员,计算牙齿
针对每个成员并将其附加。
复位(合奏);ST = FALSE;而hasdata(合奏)数据=读(合奏);SimInputVars = data.SimulationInput {1} .Variables;TFGain = SimInputVars.Value;ST =(ABS(TFGain)<0.1);WriteTolastmemberRead(合奏,“ToothFault”、圣);结尾
最后,将新的牙齿故障指示器指定为集合中的条件变量。您可以使用此名称来跟踪并在集合数据中引用变量,该数据表示在生成成员数据的情况下表示的条件。
ensemble.ConditionVariables =“ToothFault”;Ensemble.ConditionVariables.
ANS = “ToothFault”
现在,每个集合成员包含原始未处理的数据和一个附加变量,指示收集数据的故障条件。在实践中,您可能会计算和追加从原始振动数据的其他值,以识别您可以用于故障检测和诊断的潜在条件指示器。有关更详细的示例,该示例显示了更多方法来操纵和分析存储在a中的数据SimulationEneMbledAtastore.
对象,参见使用Simu金宝applink生成故障数据。
如果它是有效的或有用的,你想要做的处理,可以配置合奏一次读取多个成员的数据。要做到这一点,使用READSIZE
财产。这读
命令使用此属性确定一次读取多少集成成员。例如,将集成配置为一次读取两个成员。
ensemble.ReadSize = 2;
改变价值READSIZE
还重置合奏的未读状态。因此,下一个读取操作读取前两个集合成员。读
返回一个行数等于的表READSIZE
。
ensemble.SelectedVariables = [“振动”;“ToothFault”];data3 =读取(集合)
data3 =2×2表振动牙齿_________________ __________ {580x1时间表}假{592x1时间表}假
这莱特曼弗雷德
合奏的属性包含在此操作中读取的所有合奏成员的文件名。
Ensemble.LastmemberRead.
ans =.2×1线“/ tmp / Bdoc21b_1757077_245075 / tpd52f98df / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_1。垫”“/ tmp / Bdoc21b_1757077_245075 / tpd52f98df / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_2.mat”
当您将数据追加到具有整体数据存储READSIZE
> 1,您必须按照阅读时写入相同数量的集合成员。因此,例如,何时READSIZE
= 2,提供双排表WriteTolastmemberread.
。
SimulationEneMbledAtastore.
|generateSimulationEnsemble
|读
|WriteTolastmemberread.