主要内容

writeToLastMemberRead

将数据写入集成数据存储的成员

描述

例子

writeToLastMemberRead (系综名称,值写入指定的一个或多个数据名称,值将参数配对到集成数据存储的最后读成员。属性最近访问的成员命令。(见用于状态监测和预测性维护的数据集成)。每一个的名字必须与属性中的条目匹配合奏。DataVariables.函数写入相应的价值集成数据存储。

  • 如果系综是一个simulationEnsembleDatastore对象,然后writeToLastMemberRead将数据写入与最后读集成成员(合奏。LastMemberRead).

  • 如果系综是一个fileEnsembleDatastore对象,然后writeToLastMemberRead使用属性标识的函数合奏。WriteToMemberFcn写入数据。如果没有定义该属性,那么writeToLastMemberRead生成错误。

时,此语法不可用ReadSize的属性系综大于1。使用writeToLastMemberRead(合奏,数据)代替。

writeToLastMemberRead (系综数据将表中的数据写入最后读的集成成员。表变量必须匹配属性中的条目合奏。DataVariables

例子

全部折叠

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

对于本例,使用以下代码创建一个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时间表}{20202x1时间表}

默认情况下,存储在集成数据中的所有变量都被指定为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;

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

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

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

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

在实践中,您希望将牙齿故障指示器附加到集合中的每个成员。为此,将集成数据存储重置为未读状态,以便下一个读取操作从第一个集成成员开始。然后,循环遍历所有集成成员,计算ToothFault为每个成员并附加它。的重置操作不变合奏。DataVariables,所以“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生成故障数据

为存储在MATLAB文件中的数据创建一个文件集成数据存储,并使用告诉软件如何读取和写入该数据存储的函数对其进行配置。(有关配置文件集成数据存储的详细信息,请参见测量数据的文件集成数据存储)。

创建集合数据存储,指向当前文件夹中的数据文件解压缩fileEnsData.zip%提取压缩文件位置= pwd;扩展=“.mat”;fensemble = fileEnsembleDatastore(位置,扩展);指定数据和条件变量fensemble。DataVariables = [“gs”“老”“负载”“速度”];fensemble。ConditionVariables =“标签”配置可变数据读写功能目录(fullfile (matlabroot,“例子”“predmaint”“主要”))确保函数在路径上fensemble。ReadFcn = @readBearingData;fensemble。WriteToMemberFcn = @writeBearingData;

函数告诉writeToLastMemberRead命令如何与组成集成的数据文件交互。因此,当您调用命令,它使用readBearingData把所有变量都读入fensemble。SelectedVariables.在这个例子中,readBearingData从结构中提取请求的变量,轴承,以及存储在文件中的其他变量。它还解析数据的错误状态的文件名。

指定要读取的变量,并从集合的第一个成员中读取它们。

fensemble。SelectedVariables = [“gs”“负载”“标签”];数据=读取(fensemble)
data =1×3表标签gs负载  ________ _______________ ____ " 错误的“x1双}{5000 0

现在可以根据需要处理来自成员的数据。对于本例,计算存储在变量中的信号的平均值gs.从返回的表中提取数据

Gsdata = data.gs{1};Gsmean = mean(gsdata);

你可以写出均值gsmean返回数据文件作为一个新变量。为此,首先展开集合中的数据变量列表,以包含新值的变量。调用新变量gsMean

fensemble。DataVariables = [fensemble.DataVariables;“gsMean”
fensemble = fileEnsembleDatastore with properties: ReadFcn: @readBearingData WriteToMemberFcn: @writeBearingData DataVariables: [5x1 string] IndependentVariables: [0x0 string] ConditionVariables: "label" SelectedVariables: [3x1 string] ReadSize: 1 NumMembers: 5 LastMemberRead: "/tmp/Bdoc22b_2134332_1901927/tp5be3083d/predmaint-ex34165887/FaultData_01. "文件:[5x1字符串]

接下来,将派生的平均值写入与最后读集成成员对应的文件。(见用于状态监测和预测性维护的数据集成)。当你打电话时writeToLastMemberRead,它将数据转换为结构并调用fensemble。WriteToMemberFcn将数据写入文件。

writeToLastMemberRead (fensemble“gsMean”, gsmean);

调用再次将last-read-member指示符推进到集成中的下一个文件,并从该文件读取数据。

数据=读取(fensemble)
data =1×3表标签gs负载  ________ _______________ ____ " 错误的“{5000 x1双}50

属性可以确认该数据来自不同的成员负载变量。在这里,它的值是50,而在之前的read成员中,它是0。

您可以重复处理步骤来计算并附加该集成成员的平均值。在实践中,自动化读取、处理和写入数据的过程更有用。为此,将集成重置为未读取数据的状态。然后循环整个集成,并为每个成员执行读取、处理和写入步骤。

重置(fensemble)Hasdata (fensemble) data = read(fensemble);Gsdata = data.gs{1};Gsmean = mean(gsdata);writeToLastMemberRead (fensemble“gsMean”, gsmean);结束

hasdata命令返回当每个成员都读过了。集合中的每个数据文件都包含gsMean由数据导出的变量gs在那个文件里。在开发预测维护算法时,可以使用类似此循环的技术从集成文件中提取和处理数据。有关更详细地说明在算法开发过程中使用文件集成数据存储的示例,请参见滚动元件轴承故障诊断.该示例还展示了如何使用并行计算工具箱™来加速大型数据集合的处理。

要确认派生变量存在于文件集成数据存储中,请从第一个和第二个集成成员中读取它。为此,再次重置集成,并将新变量添加到所选变量中。实际上,在计算出派生值之后,只读取这些值而不重新读取未处理的数据是很有用的,这可能会占用大量内存空间。对于本例,读取所选变量,其中包括新变量,gsMean,但不包括未经处理的数据,gs

重置(fensemble) fensemble。SelectedVariables = [“标签”“负载”“gsMean”];Data1 = read(fensemble)
data1 =1×3表标签负载gsMean  ________ ____ ________ " 错误的“0 -0.22648
Data2 = read(fensemble)
data2 =1×3表标签负载gsMean  ________ ____ ________ " 错误的“50 -0.22937
rmpath (fullfile (matlabroot,“例子”“predmaint”“主要”))%重置路径

输入参数

全部折叠

集成数据存储以添加数据变量,指定为a:

writeToLastMemberRead属性标识的集成的最后读成员LastMemberRead集合的性质。类最近访问的成员是最后读取的集成成员命令。(见用于状态监测和预测性维护的数据集成)。

要写入当前集成成员的新数据,指定为表格.例如,假设您已经计算出两个值,希望将它们添加到当前成员:存储为MATLAB的向量®工作空间变量Afilt,标量存储为Amean.使用下面的命令来构造数据

data = table(Afilt,Amean,“VariableNames”, {“Afilt”“Amean”});

表中的行数必须与ReadSize的属性系综.默认情况下,ReadSize= 1,将单个表行写入单个集成成员。配置时系综若要一次读取多个成员,则必须写入相同数量的成员。例如,如果ReadSize= 3,则数据是一个三行表。

限制

  • 当你使用simulationEnsembleDatastore管理远程位置的数据,例如使用Amazon S3™(简单存储服务)的云存储,Windows Azure®Blob存储和Hadoop®分布式文件系统(HDFS™),不能使用writeToLastMemberRead向集成数据存储区添加数据。

版本历史

在R2018a中引入