主要内容

生成和使用模拟数据集合

这个例子展示了如何通过模拟机的一个的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.

也可以看看

|||

相关的话题