主要内容

simulationEnsembleDatastore

管理生成的集成数据generateSimulationEnsemble或者通过记录模拟数据金宝app

描述

一个simulationEnsembleDatastoreObject是一个专门用于开发使用模拟数据进行状态监测和预测性维护的算法的数据存储。

该对象指定存储在MATLAB数据文件(MAT-files)集合中的数据变量、自变量和条件变量。数据文件包含金宝appSimulink.SimulationData.Dataset这些变量是在Simulink期间记录数据的结果金宝app®模型模拟。

有关演示模拟集成数据存储使用的详细示例,请参见生成和使用模拟数据集成.有关预测性维护工具箱™中数据集成的一般信息,请参见用于状态监测和预测性维护的数据集成

创建

要创建simulationEnsembleDatastore对象:

  1. 从Simulink模型生成并记录仿真数据。金宝app你可以用generateSimulationEnsemble或任何其他方式的日志模拟到磁盘。

  2. 创建一个simulationEnsembleDatastore对象,该对象指向生成的模拟数据simulationEnsembleDatastore命令(如下所述)。

如果您有先前生成的模拟数据generateSimulationEnsemble或者其他方法,你可以使用创建函数simulationEnsembleDatastore在任何时候创建一个新的模拟集成数据存储对象。

描述

例子

系综= simulationEnsembleDatastore (位置从以前使用生成的数据创建模拟集成generateSimulationEnsemble指定的文件夹中位置.该函数从生成的mat文件中存储的信息识别生成数据中的集成变量。函数填充DataVariables而且SelectedVariables的属性系综使用这些集成变量的名称。

例子

系综= simulationEnsembleDatastore (位置signallog使用signallog来确定mat文件中的哪个变量包含日志信号。方法中指定的变量名信号记录Simulink模型的配置参数,从中生成数据。金宝app指定此变量允许集成将这些信号视为集成数据变量,而不是signallog变量本身。mat文件中的其他变量也作为集成数据变量返回。

系综= simulationEnsembleDatastore (位置signallog名称,值指定附加的属性使用一个或多个名称-值对参数的对象。例如,使用“IndependentVariables”,“年龄”;“ID”)在创建对象时指定自变量。

输入参数

全部展开

存储模拟数据的位置的文件路径,指定为字符串或字符向量。文件路径可以是MATLAB支持的任何位置金宝app®数据存储,包括指向远程位置的IRI路径。然而,当你使用simulationEnsembleDatastore管理远程数据时,不能使用writeToLastMemberRead向集成数据存储区添加数据。有关在MATLAB中使用远程数据的详细信息,请参见使用远程数据

例子:pwd + "\simResults"

记录信号的变量名,指定为字符串或字符向量。这个输入参数告诉simulationEnsembleDatastore存储的mat文件中的哪个数据变量包含日志模拟数据。变量名在信号记录Simulink模型的配置参数,从中生成数据。金宝app当你使用generateSimulationEnsemble为了为集成生成模拟数据,每个生成的mat文件都包含一个变量,PMSignalLogName,指定记录信号的变量名。

例子:“logsout”

属性

全部展开

集合中的数据变量,指定为字符串数组。数据变量是集成成员的主要内容。数据变量可以包括用于分析和开发预测性维护算法的测量数据或导出数据。例如,您的数据变量可能包括测量或模拟的振动信号和导出的值,如平均振动值或峰值振动频率。在实践中,数据变量、自变量和条件变量都是不同的变量集。

simulationEnsembleDatastore的初始值DataVariables以所有记录信号的名称在数据中生成generateSimulationEnsemblesimulationEnsembleDatastore还添加了变量SimulationInput而且SimulationMetadataDataVariables.这些变量包含关于如何执行模拟的信息。

你也可以指定DataVariables使用字符向量的单元格数组,例如{“振动”;“转速计”},但变量名总是存储为字符串数组,(“振动”;“转速器”).如果指定变量名的矩阵,则将矩阵平展为列向量。

集合中的自变量,指定为字符串数组。通常使用自变量对集合成员进行排序。例如时间戳、运行时数或行驶里程。将此属性设置为集成中这些变量的名称。在实践中,数据变量、自变量和条件变量都是不同的变量集。

你也可以指定IndependentVariables使用字符向量的单元格数组,例如{“时间”,“年龄”},但变量名总是存储为字符串数组,["时间";“时代”).如果指定变量名的矩阵,则将矩阵平展为列向量。

集合中的条件变量,指定为字符串数组。根据集合成员所处的故障条件或其他操作条件,使用条件变量标记集合中的成员。在实践中,数据变量、自变量和条件变量都是不同的变量集。

你也可以指定ConditionVariables使用字符向量的单元格数组,例如{“GearFault”;“温度”},但变量名总是存储为字符串数组,[" GearFault”;“温度”).如果指定变量名的矩阵,则将矩阵平展为列向量。

从集合中读取的变量,指定为字符串数组。类时,使用此属性可指定将哪些变量提取到MATLAB工作区命令从集成中读取数据。中指定的每个名称返回包含表变量的表行SelectedVariables.例如,假设你有一个集合,系综,它包含六个变量,而你只想读取其中的两个,振动而且FaultState.设置SelectedVariables财产和电话

合奏。SelectedVariables = [“振动”“FaultState”];数据=读取(集合)

SelectedVariables可以是变量的任意组合DataVariablesConditionVariables,IndependentVariables属性。如果SelectedVariables是空的,生成错误。

simulationEnsembleDatastore的初始值SelectedVariables到生成的数据中所有记录信号的名称generateSimulationEnsemble

你可以指定SelectedVariables使用字符向量的单元格数组,例如{“振动”;“转速计”},但变量名总是存储为字符串数组,(“振动”;“转速器”).如果指定变量名的矩阵,则将矩阵平展为列向量。

一次从集成数据存储中读取的成员数,指定为小于集成中成员总数的正整数。默认情况下,命令返回包含来自一个集成成员的数据的单行表。从单个成员中读取多个成员的数据操作,将此属性设置为大于1的整数值。例如,如果ReadSize= 3,则返回一个三行表,其中每行包含来自不同集成成员的数据。如果小于ReadSize那么,成员是未读的返回一个表,其行数与剩余成员数相同。

集成数据存储属性LastMemberRead包含最近一次读取的所有文件的名称操作。例如,如果ReadSize= 3,则a操作集LastMemberRead到包含三个文件名的字符串向量。

当你使用writeToLastMemberRead,将要写入的数据指定为行数为的表ReadSize.的writeToLastMemberRead命令更新指定的成员LastMemberRead,将一个表行写入每个指定文件。

改变了ReadSize属性还会将集成重置为未读状态。例如,假设您每次读取一个集成成员(ReadSize= 1),然后改变ReadSize为3。下一个操作返回来自前三个集成成员的数据。

此属性是只读的。

集合中的成员数,指定为正整数。

此属性是只读的。

最后一个读入MATLAB工作区的集成成员的文件名,指定为字符串。当你使用命令从集成数据存储中读取数据,软件确定下一步读取哪个集成成员,并从相应的文件中读取数据。的LastMemberRead属性包含最近读取文件的路径。当集成数据存储尚未被读取或已被重置时,LastMemberRead是一个空字符串。

当你打电话时writeToLastMemberRead若要将数据添加回集成数据存储,该函数将写入中指定的文件LastMemberRead

默认情况下,每次从一个集成成员读取数据ReadSize集成数据存储的属性为1)ReadSize> 1,LastMemberRead字符串数组是否包含最近读取的所有文件的路径操作。

此属性是只读的。

集成数据存储中的文件列表,指定为长度的列字符串向量NumMembers.每个条目都包含数据存储中文件的完整路径。文件的顺序是命令读取集成成员。

例子:[" C: \ \ Data_01.csv数据”;“C: \ Data \ Data_02.csv”;“C: \ \ Data_03.csv数据”)

对象的功能

而且writeToLastMemberRead功能专门用于预测性维护工具箱集成数据。其他函数,例如重置而且hasdata,与用于数据存储对象的MATLAB。要将特定的集成成员提取到更小或更专门的集成数据存储中,请使用子集.若要使用单个命令将所有成员数据传输到表或单元格数组中,请使用readall.要对集成数据存储进行分区,请使用分区(n, ds指数)语法分区函数。

从集成数据存储中读取成员数据
writeToLastMemberRead 将数据写入集成数据存储的成员
子集 从现有集成数据存储的子集创建新的集成数据存储
重置 将数据存储重置为初始状态
hasdata 确定是否有数据可以读取
进步 确定已经读取了多少数据
readall 读取数据存储中的所有数据
numpartitions 数据存储分区数
分区 对数据存储进行分区
创建高数组
isPartitionable 确定数据存储是否可分区
isShuffleable 确定数据存储是否可洗牌

例子

全部折叠

通过在改变故障参数的同时模拟机器的Simulink®模型,生成表示在故障条件下运行的机器的模拟集成数据存储。金宝app

加载Simulin金宝appk模型。该模型是齿轮箱模型的简化版本利用Simu金宝applink生成故障数据.对于本例,只建模了一种故障模式,即齿轮-齿故障。

mdl =“TransmissionCasingSimplified”;open_system (mdl)

将齿轮-齿故障建模为系统中的扰动齿轮故障子系统。扰动的大小由模型变量控制ToothFaultGain,在那里ToothFaultGain = 0对应于无齿轮齿故障(正常运行)。要生成故障数据的集合,您可以使用generateSimulationEnsemble对不同值下的模型进行模拟ToothFaultGain,范围从-2到0。的数组金宝app仿真软件。SimulationInput对象为集成中的每个成员配置Simulink模型。金宝app每个模拟在其自己的数据文件中生成集成的独立成员。创建这样一个数组,并使用setVariable为每次运行分配齿故障增益值。

toothFaultValues = -2:0.5:0;% 5牙faultgain值simin(ct) = Simulink.SimulationInput(mdl);金宝appsimin(ct) = setVariable(simin(ct),“ToothFaultGain”toothFaultValues (ct));结束

对于这个例子,模型已经配置为记录某些信号值,振动而且转速计(见使用信号日志导出信号数据(金宝app模型)).generateSimulationEnsemble进一步配置模型为:

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

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

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

为生成的数据指定一个位置。对于本例,将数据保存到名为数据在当前文件夹中。的指标状态是1(真)如果所有的模拟都没有错误。

mkdir数据位置= fullfile(pwd,“数据”);[status,E] = generateSimulationEnsemble(simin,location);
[31- 8 -2022 04:51:02]运行模拟…[31-Aug-2022 04:51:15]完成5次模拟运行中的2次[31-Aug-2022 04:51:18]完成5次模拟运行中的4次[31-Aug-2022 04:51:22]完成5次模拟运行中的5次

数据文件夹,检查其中一个文件。每个文件都是一个mat文件,包含以下MATLAB®变量:

  • SimulationInput- - -金宝app仿真软件。SimulationInput对象,该对象用于配置用于生成文件中的数据的模型。您可以使用它来提取有关运行模拟的条件(例如故障或正常)的信息。

  • logsout——一个数据集对象,其中包含Simulink模型配置为记录的所有数据。金宝app

  • PMSignalLogName—包含日志数据的变量的名称(“logsout”在这个例子中)。的simulationEnsembleDatastore命令使用此名称解析文件中的数据。

  • SimulationMetadata-关于生成数据的模拟的其他信息记录在文件中。

现在可以使用生成的数据创建模拟集成数据存储。由此产生的simulationEnsembleDatastore对象指向生成的数据。对象列出集成中的数据变量,默认情况下选择所有变量进行读取。检查DataVariables而且SelectedVariables属性来确认这些指定。

ensemble = simulationEnsembleDatastore(location)
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振动

您现在可以使用系综读取和分析集成数据存储中生成的数据。看到simulationEnsembleDatastore获取更多信息。

一般来说,使用命令提取数据simulationEnsembleDatastore对象导入MATLAB®工作空间。通常,集成包含的变量比特定分析所需的变量要多。使用SelectedVariables的属性simulationEnsembleDatastore对象选择要读取的变量子集。

对于本例,使用以下代码创建一个simulationEnsembleDatastore对象使用之前在不同故障值处运行Simulink®模型生成的数据(参见金宝appgenerateSimulationEnsemble)。集成包括一个模型参数的五个不同值的仿真数据,ToothFaultGain.由于数据量大,所以解压缩操作需要几分钟。

解压缩simEnsData.zip%提取压缩文件集合= simulationEnsembleDatastore(pwd,“logsout”
ensemble = simulationEnsembleDatastore with properties: DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [5x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]

生成数据的模型,TransmissionCasingSimplified,被配置为这样的结果集成包含变量,包括加速度计数据,振动,转速表数据,转速计.默认情况下,simulationEnsembleDatastore对象将所有这些变量指定为数据变量和所选变量,如DataVariables而且SelectedVariables属性。

合奏。数据变量
ans =5 x1字符串“PMSignalLogName”“SimulationInput”“SimulationMetadata”“Tacho”“振动”
合奏。SelectedVariables
ans =5 x1字符串“PMSignalLogName”“SimulationInput”“SimulationMetadata”“Tacho”“振动”

假设对于您想做的分析,您只需要振动数据和金宝app仿真软件。SimulationInput对象,该对象描述模拟此成员数据的条件。集合奏。SelectedVariables来指定要读取的变量。的命令然后从当前集成成员中提取这些变量。

合奏。SelectedVariables = [“振动”“SimulationInput”];Data1 = read(集合)
data1 =1×2表振动SimulationInput  ___________________ ______________________________ { 20202 x1时间表}{1 x1仿真软件。金宝appSimulationInput}

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

vibdata1 = data1.振动{1};情节(vibdata1.Time vibdata1.Data)标题(“振动-乐团第一成员”

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

下次你打电话的时候在这个集合上,最后读的成员指定向前推进到集合的下一个成员(参见用于状态监测和预测性维护的数据集成).从集合的下一个成员中读取所选变量。

Data2 = read(集合)
data2 =1×2表振动SimulationInput  ___________________ ______________________________ { 20215 x1时间表}{1 x1仿真软件。金宝appSimulationInput}

为了证实这一点data1而且data2包含来自不同集成成员的数据,检查不同模型参数的值,ToothFaultGain.对于每个集成,此值存储在变量字段SimulationInput变量。

data1.SimulationInput {1} .Variables
ans =带属性的变量:名称:'ToothFaultGain'值:-2工作空间:'global-workspace'上下文:"描述:""
data2.SimulationInput {1} .Variables
ans =带属性的变量:名称:'ToothFaultGain'值:-1.5000工作空间:'global-workspace'上下文:"描述:""

这个结果证实了data1是来自乐团成员的跟ToothFaultGain= -2,和data2是从会员那里来的ToothFaultGain= -1.5

您可以处理集成数据存储中的数据,并向集成成员添加派生变量。对于本例,处理一个变量值来计算一个标签,该标签指示集成成员是否包含存在故障时获得的数据。然后将该标签添加到集合中。

对于本例,使用以下代码创建一个simulationEnsembleDatastore对象使用之前在不同故障值处运行Simulink®模型生成的数据。金宝app(见generateSimulationEnsemble)。集成包括一个模型参数的五个不同值的仿真数据,ToothFaultGain.该模型被配置为将模拟数据记录到一个名为logsout在mat文件中,这些文件为本例存储在simEnsData.zip.由于数据量大,所以解压缩手术可能需要一到两分钟。

解压缩simEnsData.zip%提取压缩文件集合= simulationEnsembleDatastore(pwd,“logsout”
ensemble = simulationEnsembleDatastore with properties: DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: [0x0 string] SelectedVariables: [5x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: [0x0 string] Files: [5x1 string]

从集成的第一个成员中读取数据。软件确定哪个集成是第一个成员,并更新属性合奏。LastMemberRead以反映相应文件的名称。

数据=读取(集合)
data =表1×5PMSignalLogName SimulationInput SimulationMetadata转速器振动  _______________ ______________________________ _________________________________ ___________________ ___________________ {' logsout} {1 x1仿真软件。金宝appSimulationInput} {1x1 金宝appSimulink。SimulationMetadata} {20202x1 timetable} {20202x1 timetable}

默认情况下,存储在集成数据中的所有变量都被指定为SelectedVariables.因此,返回的表行包括所有集成变量,包括一个变量SimulationInput,其中包含金宝app仿真软件。SimulationInput为该集成成员配置模拟的对象。该对象包括ToothFaultGain用于集成成员的值,该值存储在其数据结构中变量财产。检查这个值。(有关如何存储模拟配置的详细信息,请参见金宝app仿真软件。SimulationInput(金宝app模型))。

数据。SimulationInput {1}
ans = SimulationInput属性:ModelName: 'TransmissionCasingSimplified' InitialState: [0x0 Simulink.op. pr金宝appoperties]ModelOperatingPoint] ExternalInput: [] ModelParameters: [0x0 金宝appSimulink.Simulation.]ModelParameter] BlockParameters: [0x0 金宝appSimulink.Simulation.]BlockParameter]变量:[1x1 Simulink.金宝appSimulation.]变量]PreSimFcn: [] PostSimFcn: [] UserString: "
Inputvars = data.SimulationInput{1}.Variables;Inputvars。的名字
ans = '牙齿缺陷增加'
Inputvars。价值
Ans = -2

假设你想转换ToothFaultGain将每个集成成员的值转换为一个二进制指示器,以指示是否存在齿故障。进一步假设,根据您对系统的经验,您知道小于0.1量级的齿故障增益值足够小,可以认为是健康的运行。将该集成的增益值转换为一个指标,当-0.1 <增益< 0.1时为0(无故障),否则为1(故障)。

sT = abs(Inputvars.Value) < 0.1;

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

合奏。数据变量= [ensemble.DataVariables;“ToothFault”];合奏。数据变量
ans =6 x1字符串“PMSignalLogName”“SimulationInput”“SimulationMetadata”“Tacho”“振动”“牙齿故障”

这个操作在概念上等同于向集成数据表中添加一列。现在,DataVariables包含新变量名,将派生值赋给使用的成员的该列writeToLastMemberRead

writeToLastMemberRead(合奏,“ToothFault”、圣);

在实践中,您希望将牙齿故障指示器附加到集合中的每个成员。为此,将集成数据存储重置为未读状态,以便下一个读取操作从第一个集成成员开始。然后,循环遍历所有集成成员,计算ToothFault为每个成员并附加它。的重置操作不变合奏。数据变量,所以“ToothFault”仍然存在于那个列表中。

重置(套装);sT = false;Hasdata (ensemble) data = read(ensemble);InputVars = data.SimulationInput{1}.Variables;TFGain = InputVars.Value;sT = abs(TFGain) < 0.1;writeToLastMemberRead(合奏,“ToothFault”、圣);结束

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

合奏。条件变量= {“ToothFault”};合奏。ConditionVariables
ans = "牙齿缺陷"

您可以将新变量添加到合奏。SelectedVariables当你想读出来做进一步分析的时候。类中存储的数据的更多操作和分析方法的示例simulationEnsembleDatastore对象,看到利用Simu金宝applink生成故障数据

方法的一次调用中从多个集成成员读取数据命令,使用ReadSize集合数据存储的属性。这个例子使用了simulationEnsembleDatastore,但您可以使用相同的技术fileEnsembleDatastore

使用下面的代码创建一个simulationEnsembleDatastore对象使用之前在不同故障值处运行Simulink模型生成的数据(参见金宝appgenerateSimulationEnsemble).集成包括一个模型参数的五个不同值的仿真数据,ToothFaultGain.(由于数据量大,数据量大解压缩操作可能需要一两分钟。)指定要读取的一些数据变量。

解压缩simEnsData.zip%提取压缩文件集合= simulationEnsembleDatastore(pwd,“logsout”);合奏。SelectedVariables = [“振动”“SimulationInput”];

默认情况下,调用类的值返回一个单行表振动而且SimulationInput第一个集成成员的变量。改变ReadSize属性一次读取三个成员。

合奏。ReadSize= 3; data1 = read(ensemble)
data1 =3×2表振动SimulationInput  ___________________ ______________________________ { 20202 x1时间表}{1 x1仿真软件。金宝appSimulationInput} {20215x1时间表}{1x1 Simulink金宝app。SimulationInput} {20204x1时间表}{1x1 Simulink金宝app。SimulationInput}

返回一个三行表,其中每行包含来自第一、第二和第三个集成成员之一的数据。还更新LastReadMember属性设置为包含三个相应文件路径的字符串数组。避免设置ReadSize到一个大到在加载数据时可能耗尽内存的值。

如果集合包含三个或更多的额外成员,则下一个操作返回来自第4、第5和第6个成员的数据。因为这个例子的集合总共只包含五个成员,所以下一个操作只返回两行。

Data2 = read(集合)
data2 =2×2表振动SimulationInput  ___________________ ______________________________ { 20213 x1时间表}{1 x1仿真软件。金宝appSimulationInput} {20224x1时间表}{1x1 Simulink金宝app。SimulationInput}

版本历史

在R2018a中引入