主要内容

生成和使用模拟数据集成

这个例子展示了如何通过在改变故障参数的同时模拟一个机器的Simulink®模型来生成用于预测-维护算法设计的数据集成。金宝app然后,该示例说明了与模拟集成数据存储交互的一些方法。该示例展示了如何从数据存储读取数据到MATLAB®工作空间,处理数据来计算派生变量,并将新变量写回数据存储。

本例中的模型是中描述的齿轮箱模型的简化版本使用Simu金宝applink生成故障数据.加载Simulin金宝appk模型。

mdl =“TransmissionCasingSimplified”;open_system (mdl)

对于本例,只建模了一种故障模式。齿轮齿面故障被建模为一种扰动齿的错子系统。扰动的大小由模型变量控制ToothFaultGain,在那里ToothFaultGain = 0对应于无齿轮齿故障(健康操作)。

生成模拟数据集合

要生成故障数据的模拟集成数据存储,可以使用generateSimulationEnsemble来模拟模型在不同的值ToothFaultGain从-2到零。此函数模拟模型一次,每个条目都在数组中金宝app仿真软件。SimulationInput您提供的对象。每个模拟生成集合的单独成员。创建这样的数组,并使用setVariable为每次运行指定一个齿错增益值。

牙齿虚假values = -2:0.5:0;% 5 ToothFaultGain值ct = numel(toothFaultValues):-1:1 tmp = 金宝appSimulink.SimulationInput(mdl);tmp = setVariable (tmp,“ToothFaultGain”toothFaultValues (ct));思敏(ct) = tmp;结束

对于本例,模型已经配置为记录某些信号值,振动转速计(见使用信号记录导出信号数据(金宝app模型)).的generateSimulationEnsemble函数进一步将模型配置为:

  • 将记录的数据保存到指定文件夹中的文件中

  • 使用时间表信号测井格式

  • 存储每个金宝app仿真软件。SimulationInput对象中的对应日志数据

为生成的数据指定一个位置。对于本例,将数据保存到一个名为数据在当前文件夹中。如果所有的模拟都没有错误,函数返回真的在指示器输出中,状态

mkdir数据位置= fullfile (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- - -金宝app仿真软件。SimulationInput对象,该对象用于配置模型以生成文件中的数据。您可以使用它来提取有关运行此模拟的条件(如故障或正常)的信息。

  • logsout——一个数据集包含Simulink模型配置为日志的所有数据的对象。金宝app

  • pmsignallogname.- 包含记录数据的变量的名称(“logsout”在这个例子中)。的simulationEnsembleDatastore命令使用此名称解析文件中的数据。

  • SimulationMetadata—生成记录在文件中的数据的仿真的其他信息。

现在您可以使用生成的数据创建模拟集成数据存储。由此产生的simulationEnsembleDatastore对象指向生成的数据。对象列出了集合中的数据变量,默认情况下,所有变量都被选择用于读取。

合奏= simulationEnsembleDatastore(位置)
senemble = simulationeSembledataStastore,具有属性:Datavariables:[4x1字符串]独立variables:[0x0字符串]条件variables:[0x0字符串] SelectedVariables:[4x1字符串] readsize:1 nummembers:5 lastmemberread:[0x0字符串]文件:[5x1字符串]
合奏。数据变量
ans =4 x1字符串“SimulationInput”“SimulationMetadata”“Tacho”“振动”
合奏。选择edVariables
ans =4 x1字符串“SimulationInput”“SimulationMetadata”“Tacho”“振动”

从集合成员读取数据

假设对于您要进行的分析,您只需要振动数据和金宝app仿真软件。SimulationInput描述模拟每个成员的条件的对象。放合奏。选择edVariables来指定要读取的变量。的命令然后从第一个集成成员中提取这些变量,由软件决定。

合奏。选择edVariables = [“振动”“SimulationInput”];data1 =阅读(整体)
data1 =1×2表振动SimulationInput  _________________ ______________________________ { 580年x1时间表}{1 x1仿真软件。金宝appSimulationInput}

数据。振动单元格数组是否包含一个时间表行,存储仿真次数和相应的振动信号。您现在可以根据需要处理这些数据。例如,从表中提取振动数据并绘图。

vibdata1 = data1.Vibration {1};情节(vibdata1.Time vibdata1.Data)标题(“振动-首个合奏成员”

图中包含一个坐标轴。标题为“振动-第一集合成员”的轴包含一个类型为线的对象。

LastMemberRead属性包含最近读取成员的文件名。下次你再打电话来在这个合奏中,软件进入整个集合的下一个成员。(看用于状态监测和预测性维护的数据集成有关更多信息。)从合奏的下一个成员读取所选变量。

data2 =读取(集合)
data2 =1×2表振动模拟_________________ _____________________________ {592x1时间表} {1x1 simulink.simulationInput}金宝app

确认data1data2包含来自不同集合成员的数据,检查各种模型参数的值,ToothFaultGain.对于每个集成,此值存储在变量场的SimulationInput变量。

SimInput1 = data1.SimulationInput {1};SimInput1。变量
ans =带有属性的变量:名称:'ToothFaultGain'值:-2 Workspace: 'global-workspace' Description: ""
SimInput2 = data2.SimulationInput {1};SimInput2。变量
ANS =具有属性的变量:名称:'toothfultgain'值:-1.5000工作空间:'global-workspace'描述:“”

这个结果证实了这一点data1是来自集合的ToothFaultGain= 2,data2是来自集合的ToothFaultGain= -1.5

添加数据到集合成员

假设你想转换ToothFaultGain将每个集合成员的值转换为是否存在牙齿故障的二元指示器。进一步假设您从使用系统的经验中知道,齿故障增益值小于0.1的量级足够小,可以认为是正常运行。将您刚刚读取的集成成员的增益值转换为指示器,当-0.1 <增益< 0.1时,该指示器为0(无故障),否则为1(故障)。

sT = (abs(SimInput2.Variables.Value) < 0.1);

要将新牙齿故障指示器附加到相应的集合数据,请先展开集合中的数据变量列表。

合奏。数据变量= [ensemble.DataVariables;“ToothFault”];合奏。数据变量
ans =5 x1字符串“SimulationInput”“SimulationMetadata”“Tacho”“Vibration”“ToothFault”

然后,使用writeToLastMemberRead将新变量的值写入集合的最后读取成员。

writeToLastMemberRead(合奏,'牙齿',英石);

来自所有集合成员的批处理数据

在实践中,您希望将牙齿故障指示器附加到集合中的每个成员。为此,将合奏重置为未读状态,以便下一个读取开始于第一集合成员。然后,循环通过所有合奏成员,计算ToothFault,并将其附加。

重置(套装);圣= false;尽管hasdata(集成)数据=读取(集成);SIMINPUTVARS = data.simulationInput {1} .variables;tfgain = siminputvars.value;ST =(ABS(TFGAIN)<0.1);writeToLastMemberRead(合奏,'牙齿',英石);结束

最后,将新的牙齿故障指示器作为条件变量在集成系统中。您可以使用这个名称来跟踪和引用集成数据中的变量,这些变量表示生成成员数据的条件。

合奏。ConditionVariables =“ToothFault”;合奏。ConditionVariables
ans = " ToothFault "

现在,每个集合成员都包含原始的未处理数据和一个附加变量,该变量表示收集数据时的故障条件。在实践中,您可能会计算并附加来自原始振动数据的其他值,以确定用于故障检测和诊断的潜在条件指示器。以获取更详细的示例,该示例展示了操作和分析存储在simulationEnsembleDatastore对象,看到使用Simu金宝applink生成故障数据

立即读取多个成员

如果它对您想要进行的处理是有效的或有用的,那么您可以将集成配置为一次从多个成员读取数据。要做到这一点,使用ReadSize财产。的命令使用此属性来确定一次读取的合奏成员。例如,配置集合以一次读取两个成员。

合奏。ReadSize= 2;

改变的值ReadSize还将集成重置为未读状态。因此,下一个read操作读取前两个集合成员。返回一个具有等于的行数的表ReadSize

合奏。选择edVariables = [“振动”“ToothFault”];data3 =阅读(整体)
data3 =2×2表振动ToothFault  _________________ __________ { 580年x1时间表}假{592}x1时间表假

LastMemberRead属性包含在此操作中读取的所有集成成员的文件名。

合奏。LastMemberRead
ans =2 x1字符串“/ tmp / Bdoc21a_1606923_187194 / tpcc96bd37 / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_1。垫”“/ tmp / Bdoc21a_1606923_187194 / tpcc96bd37 / predmaint-ex54897023 /数据/ TransmissionCasingSimplified_log_2.mat”

当您将数据追加到具有ReadSize> 1,您必须写入与您读取的相同数量的合奏成员。因此,例如,当ReadSize= 2,提供一个两行表writeToLastMemberRead

另请参阅

|||

相关话题