此示例显示了如何通过在改变故障参数的同时模拟机器的Simulink®模型来生成用于预测性维护算法设计的数据集成。然后,此示例说明了与模拟集成数据存储交互的一些方法。此示例显示了如何将数据存储中的数据读取到MATLAB®wo金宝apprksp中ace,处理数据以计算派生变量,并将新变量写回数据存储。
在此实例中的模型是在齿轮箱模型的简化版本中描述采用Simu金宝applink生成故障数据。加载Simulin金宝appk模型。
mdl=“变速箱箱简化”;开放式系统(mdl)
在本例中,仅对一种故障模式进行建模。将轮齿故障建模为系统中的扰动轮齿断裂
干扰的大小由模型变量控制牙缝增益
哪里ToothFaultGain = 0
对应于无齿轮齿故障(正常运行)。
要生成故障数据的模拟合奏数据存储,您可以使用生成模拟集成
以模拟在不同的值的模型牙缝增益
,范围从-2到零。此函数为数组中的每个条目模拟一次模型金宝app模拟输入
您提供的对象。每个模拟生成集合的一个单独成员。创建这样一个数组,然后使用设置变量
为每次运行分配齿故障增益值。
齿形故障值=-2:0.5:0;%5.1增益值对于ct=numel(toothFaultValues):-1:1 tmp=Simu金宝applink.SIMULATIONPUT(mdl);tmp=设置变量(tmp,“牙缝增益”,牙错值(ct);simin(ct)=tmp;终止
对于这个例子,模型已经配置为记录某些信号值,振动
和测速
(见使用信号记录导出信号数据(金宝appSimulink))。这生成模拟集成
函数进一步将模型配置为:
保存记录在数据文件的文件夹您指定
使用时间表
信号记录格式
存储每个金宝app模拟输入
对象与相应的记录数据一起保存在保存的文件中
指定生成数据的位置。对于本例,请将数据保存到名为数据
在当前文件夹中。如果所有模拟均无错误完成,则函数返回符合事实的
在指示器输出中,地位
。
MKDIR数据位置=完整文件(PWD,“数据”); [状态,E]=生成模拟集成(simin,位置);
[23-Feb-2021 13:00:30]运行模拟。。。[23-Feb-2021 13:01:23]完成5次模拟运行中的1次[23-Feb-2021 13:01:41]完成5次模拟运行中的2次[23-Feb-2021 13:01:59]完成5次模拟运行中的3次[23-Feb-2021 13:02:12]完成5次模拟运行中的4次[23-Feb-2021 13:02:24]完成5次模拟运行中的5次
地位
地位=逻辑1
内部数据
文件夹中,检查其中一个文件。每个文件都是包含以下MATLAB®变量的MAT文件:
模拟输入
- 这金宝app模拟输入
对象,该对象用于配置模型以生成文件中的数据。您可以使用它来提取有关运行此模拟的条件(如故障或正常)的信息。
罗格苏特
-A数据集
对象,该对象包含Simulink模型配置为记录的所有数据。金宝app
PMSignalLogName
-包含记录数据的变量的名称('logsout'
在本例中)simulationEnsembleDatastore
命令使用此名称解析文件中的数据。
模拟元数据
- 有关生成的文件中的数据记录的模拟其他信息。
现在,您可以使用生成的数据创建仿真集成数据存储。结果simulationEnsembleDatastore
对象指向所生成的数据。对象列表在合奏中的数据的变量,并且默认所有变量被选择用于读取。
集成=模拟集成数据存储(位置)
ensemble=simulationEnsembleDatastore,属性为:DataVariables:[4x1字符串]独立变量:[0x0字符串]条件变量:[0x0字符串]SelectedVariables:[4x1字符串]读取大小:1个成员:5个LastMemberRead:[0x0字符串]文件:[5x1字符串]
ensemble.DataVariables
ans=4x1串“SimulationInput”“SimulationMetadata”“测速”,“震动”
ensemble.SelectedVariables
ans=4x1串“SimulationInput”“SimulationMetadata”“测速”,“震动”
假设你想要做的分析,您只需要振动
数据和金宝app模拟输入
对象,该对象描述模拟每个成员的条件。设置ensemble.SelectedVariables
指定要读的变量。这阅读
命令然后提取从第一集合构件那些变量,如由软件确定。
ensemble.SelectedVariables=[“振动”;“SimulationInput”];数据1=读取(集成)
数据1=1×2表振动SimulationInput _________________ ______________________________ {580x1时间表} {1x1的Simulink.Simula金宝apptionInput}
data.Vibration
是一个单元格数组,包含一个时间表
存储模拟时间和相应振动信号的行。您现在可以根据需要处理这些数据。例如,从表格中提取振动数据并进行绘图。
vibdata1=data1.Vibration{1};绘图(vibdata1.Time,vibdata1.Data)标题(“振动 - 第一集合构件”)
这LastMemberRead
乐团的属性包含最近读件的文件名。你叫下一次阅读
在此集合上,软件前进到集合的下一个成员。(请参阅用于状态监测和预测性维护的数据集成有关详细信息。)请从集合的下一个成员读取所选变量。
数据2=读取(集成)
数据2=1×2表振动模拟输入{1x1模拟输入}金宝app
证实数据1
和DATA2
包含来自不同集合成员的数据,检查不同模型参数的值,牙缝增益
。对于每个集合,该值被存储在变量
领域模拟输入
多变的。
SimInput1=data1.simulationput{1};SimInput1.Variables
ans=具有以下属性的变量:名称:“ToothFaultGain”值:-2工作区:“全局工作区”说明:“
SimInput2 = data2.SimulationInput {1};SimInput2.Variables
ans=具有以下属性的变量:名称:“ToothFaultGain”值:-1.5000工作区:“全局工作区”说明:“
这一结果证实了数据1
这是一个乐队的成员牙缝增益
=-2,以及DATA2
这是一个乐队的成员牙缝增益
= -1.5。
假设您想要转换牙缝增益
对于每个集合构件为是否进行了齿故障的二进制指示符值是存在的。从系统的经验,进一步,你知道假设齿故障增益值小于0.1的幅度小到足以被认为是健康的运行。转换为刚刚读入一个指标,是0(无故障)的合奏构件-0.1 <增益<0.1,和图1(故障),否则的增益值。
ST =(ABS(SimInput2.Variables.Value)<0.1);
要将新的齿故障指示器附加到相应的集合数据,请首先展开集合中的数据变量列表。
ensemble.DataVariables = [ensemble.DataVariables;“牙错”];ensemble.DataVariables
ans=5X1线“SimulationInput” “SimulationMetadata” “测速”, “震动” “ToothFault”
然后,使用writeToLastMemberRead
写为新的变量的集合的最后一个读取构件的值。
writeToLastMemberRead(合奏,“牙错”,sT);
实际上,您希望将牙齿故障指示器附加到集合中的每个成员。为此,请将集合重置为其未读状态,以便下一次读取从第一个集合成员开始。然后,循环所有集合成员,计算ToothFault
用于每个成员并附加它。
重置(集合);sT=错误;虽然hasdata(集成)数据=读取(集成);SimInputVars=data.SimulationInput{1}.Variables;TFGain=SimInputVars.值;sT=(绝对绝对值(TFGain)<0.1);WriteLastMemberRead(集成,“牙错”,sT);终止
最后,指定新的齿故障指示器如在合奏的状态变量。可以使用此标识来跟踪,并且是指变量表示在其下产生的部件的数据条件的数据集合。
集合.条件变量=“牙错”;ensemble.ConditionVariables
ans=“牙齿故障”
现在,每个集合构件包含原始未处理的数据和指示收集数据在其下故障状态的附加变量。在实践中,你可以计算和追加从原始振动数据派生的其他值,以确定潜在的状态指示灯,您可以使用故障检测和诊断。有关更详细的例子,示出了更多的方式来处理和分析存储在数据simulationEnsembleDatastore
对象时,看到采用Simu金宝applink生成故障数据。
如果它对于您想要执行的处理是有效的或有用的,您可以将该集成配置为一次从多个成员读取数据可读大小
所有物这个阅读
命令使用此属性确定一次读取的集合成员数。例如,将集合配置为一次读取两个成员。
ensemble.ReadSize=2;
改变的价值可读大小
还将集合重置为其未读状态。因此,下一个读取操作读取前两个集合成员。阅读
返回行数等于的表可读大小
。
ensemble.SelectedVariables=[“振动”;“牙错”];DATA3 =读(合奏)
数据3=2×2表振动ToothFault _________________ __________ {580x1时间表} {假时间表592x1假}
这LastMemberRead
乐团的属性包含在此操作中读取的所有集合成员的文件名。
ensemble.LastMemberRead
ans=2x1字符串“/tmp/Bdoc21a_1606923_187194/tpcc96bd37/predmaint-ex54897023/Data/TransmissionCasingSimplified_log_1.mat” “/tmp/Bdoc21a_1606923_187194/tpcc96bd37/predmaint-ex54897023/Data/TransmissionCasingSimplified_log_2.mat”
将数据附加到具有可读大小
> 1,则必须如你读写到相同数量的集合成员。因此,例如,当,可读大小
= 2,提供一个两行的表,以writeToLastMemberRead
。
生成模拟集成
|阅读
|simulationEnsembleDatastore
|writeToLastMemberRead