这个例子展示了如何通过在改变故障参数的同时模拟一个机器的Simulink®模型来生成用于预测-维护算法设计的数据集成。万博1manbetx然后,该示例说明了与模拟集成数据存储交互的一些方法。该示例展示了如何从数据存储读取数据到MATLAB®工作空间,处理数据来计算派生变量,并将新变量写回数据存储。
本例中的模型是中所述齿轮箱模型的简化版本利用Simu万博1manbetxlink生成故障数据。加载Simulink万博1manbetx模型。
mdl =“TransmissionCasingSimplified”;open_system (mdl)
对于本例,只建模了一种故障模式。齿轮齿面故障被建模为一种扰动轮齿故障
子系统。扰动的大小由模型变量控制ToothFaultGain
,在那里增益=0
对应无齿轮齿故障(正常运行)。
要生成故障数据的模拟集成数据存储,请使用generateSimulationEnsemble
以不同的值模拟模型ToothFaultGain
,范围从-2到0。这个函数为数组中的每个条目模拟一次模型万博1manbetx仿真软件。SimulationInput
您提供的对象。每个模拟生成集合中的一个独立成员。创建这样一个数组,并使用setVariable
为每次运行指定一个齿错增益值。
toothFaultValues = 2:0.5:0;% 5 ToothFaultGain值为ct = numel(toothFaultValues):-1:1 tmp = 万博1manbetxSimulink.SimulationInput(mdl);tmp = setVariable (tmp,“ToothFaultGain”toothFaultValues (ct));思敏(ct) = tmp;结束
对于本例,模型已配置为记录某些信号值,振动
和测速仪
(见使用信号记录导出信号数据(万博1manbetx模型)).这个generateSimulationEnsemble
函数进一步配置模型为:
将记录的数据保存到指定文件夹中的文件中
使用时间表
信号测井格式
存储每个万博1manbetx仿真软件。SimulationInput
对象中的对应日志数据
为生成的数据指定一个位置。对于本例,将数据保存到一个名为数据
在当前文件夹中。如果所有的模拟都没有错误,函数返回真正的
在指示器输出中,状态
.
mkdir数据位置=完整文件(pwd,“数据”);(地位、E) = generateSimulationEnsemble(思敏、位置);
[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文件:
SimulationInput
-万博1manbetx仿真软件。SimulationInput
对象,该对象用于配置模型以生成文件中的数据。您可以使用它来提取有关运行此模拟的条件(如故障或正常)的信息。
logsout
——一个数据集
对象,该对象包含Simulink模型配置为记录的所有数据。万博1manbetx
PMSignalLogName
-包含记录数据的变量的名称(“logsout”
在本例中)。这个模拟训练数据存储
命令使用此名称解析文件中的数据。
SimulationMetadata
-有关生成文件中记录的数据的模拟的其他信息。
现在您可以使用生成的数据创建模拟集成数据存储。由此产生的模拟训练数据存储
对象指向生成的数据。该对象列出集合中的数据变量,默认情况下,所有变量都被选中进行读取。
合奏= 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]
合奏。数据变量
ans =4 x1字符串“SimulationInput”“SimulationMetadata”“Tacho”“振动”
集合.SelectedVariables
ans =4 x1字符串“SimulationInput”“SimulationMetadata”“Tacho”“振动”
假设对于您想要进行的分析,您只需要振动
数据和万博1manbetx仿真软件。SimulationInput
对象,该对象描述模拟每个成员所处的条件。集集合.SelectedVariables
指定要读取的变量。这个读
命令然后从软件确定的第一个集合成员中提取这些变量。
集合.SelectedVariables= [“振动”;“模拟输入”];data1 =阅读(整体)
data1 =1×2表振动模拟输入{1x1模拟输入}万博1manbetx
数据.振动
单元格数组是否包含一个时间表
行,存储仿真次数和相应的振动信号。您现在可以根据需要处理这些数据。例如,从表中提取振动数据并绘图。
vibdata1 = data1.Vibration {1};情节(vibdata1.Time vibdata1.Data)标题(“振动-第一乐团成员”)
这个LastMemberRead
集合的属性包含最近读取的成员的文件名。下次你打电话的时候读
在这个集合上,软件向前推进到集合的下一个成员。(见用于状态监测和预测性维护的数据集成为更多的信息。)从集合的下一个成员读取选定的变量。
data2 =阅读(整体)
data2 =1×2表振动SimulationInput _________________ ______________________________ { 592年x1时间表}{1 x1仿真软件。万博1manbetxSimulationInput}
确认数据1
和数据2
包含来自不同集合成员的数据,检查不同模型参数的值,ToothFaultGain
。对于每个集合,此值存储在变量
场的SimulationInput
变量
SimInput1 = data1.SimulationInput {1};SimInput1。变量
ans =带有属性的变量:名称:'ToothFaultGain'值:-2 Workspace: 'global-workspace' Description: ""
SimInput2=data2.simulationput{1};SimInput2.变量
ans =带有属性的变量:名称:“ToothFaultGain”值:-1.5000工作区:“global-workspace”描述:“”
这个结果证实了数据1
是和谁在一起的ToothFaultGain
= 2,数据2
是和谁在一起的ToothFaultGain
= –1.5.
假设你想转换ToothFaultGain
将每个集合成员的值转换为一个二进制指示器,指示是否存在齿故障。进一步假设,根据您使用该系统的经验,您知道大小小于0.1的牙齿故障增益值足够小,可以认为是正常操作。将刚刚读取的集成成员的增益值转换为-0.1<增益<0.1时为0(无故障),否则为1(故障)。
sT=(abs(SimInput2.Variables.Value)<0.1);
要将新的牙齿故障指示器附加到相应的集成数据中,首先展开集成中的数据变量列表。
ensemble.DataVariables=[ensemble.DataVariables;“ToothFault”]; 数据变量集合
ans =5x1字符串“SimulationInput”“SimulationMetadata”“转速计”“振动”“齿故障”
然后,用WriteLastMemberRead
将新变量的值写入集合的最后一个读取成员。
WriteLastMemberRead(集成,“ToothFault”、圣);
在实践中,您希望将牙齿故障指示符附加到集合中的每个成员。为此,将集合重置为未读状态,以便下一个读取从第一个集合成员开始。然后,循环所有的集合成员,计算牙断层
,并将其附加。
重置(套装);圣= false;而Hasdata (ensemble) data = read(ensemble);SimInputVars = data.SimulationInput {1} .Variables;TFGain = SimInputVars.Value;sT = (abs(TFGain) < 0.1);WriteLastMemberRead(集成,“ToothFault”、圣);结束
最后,将新的牙齿故障指示器指定为集合中的条件变量。可以使用此指定来跟踪和引用集合数据中的变量,这些变量表示生成成员数据的条件。
合奏。ConditionVariables =“ToothFault”; 集合.条件变量
ans = " ToothFault "
现在,每个集合成员都包含原始未处理的数据和一个附加变量,该变量指示收集数据时的故障条件。实际上,您可以计算并附加从原始振动数据中导出的其他值,以识别可用于故障检测和诊断的潜在条件指示器。有关显示更多操作和分析存储在数据库中的数据的方法的更详细示例,请参见模拟训练数据存储
对象,请参见利用Simu万博1manbetxlink生成故障数据.
如果它对您想要进行的处理是有效的或有用的,那么您可以将集成配置为一次从多个成员读取数据。要做到这一点,使用ReadSize
财产。这个读
命令使用此属性确定一次读取多少集成成员。例如,将集成配置为一次读取两个成员。
合奏。ReadSize= 2;
更改ReadSize
还将集成重置为未读状态。因此,下一个read操作读取前两个集合成员。读
返回一个行数等于的表ReadSize
.
集合.SelectedVariables= [“振动”;“ToothFault”]; 数据3=读取(集成)
data3 =2×2表振动齿故障{580x1时刻表}假{592x1时刻表}假
这个LastMemberRead
集合的属性包含在此操作中读取的所有集合成员的文件名。
employee.LastMemberRead
ans =2 x1字符串“/tmp/Bdoc21a_1606923_187194/tpcc96bd37/predmaint-ex54897023/Data/TransmissionCasingSimplified_log_1.mat”“/tmp/Bdoc21a_1606923_187194/tpcc96bd37/predmaint-ex54897023/Data/TransmissionCasingSimplified_log_2.mat”
当您将数据追加到具有ReadSize
>1,您必须写入与读取相同数量的集合成员。因此,例如ReadSize
=2,提供一个两行表格给WriteLastMemberRead
.
generateSimulationEnsemble
|读
|模拟训练数据存储
|WriteLastMemberRead