主要内容

生成预测剩余使用寿命的代码

这个例子展示了如何使用MATLAB®Coder部署一个预测剩余使用寿命(RUL)的算法。当您训练了一个RUL预测模型,例如linearDegradationModel在MATLAB和准备部署预测算法到另一个环境。这个例子使用MATLAB编码器生成一个可从MATLAB执行的MEX文件。您可以使用类似的过程为MATLAB Coder支持的任何目标生成代码。金宝app

生成预测RUL代码的工作流如下图所示。第一步是使用来自系统的历史数据来适应RUL模型,如当数据到达时更新RUL预测.您还必须编写一个入口点函数,从中生成代码。这个函数是一个MATLAB函数,它从系统接收新数据,并使用它来预测一个新的RUL。

您可以使用此示例的工作流生成代码,使用基于降级的RUL模型预测剩余的有用寿命,linearDegradationModelexponentialDegradationModel

符合荷重软化模型

在生成用于RUL预测的代码之前,您必须使用历史数据适应RUL模型。对于本例,加载数据linTrainTables.mat.这个文件包含一些随时间变化的条件指示器的测量值,组织到带有列标签的表中“时间”“条件”.使用这些数据来训练一个线性退化模型。(有关配置和培训这种类型的RUL模型的更多信息,请参见linearDegradationModel.)

负载(“linTrainTables.mat”) mdl =线性退化模型;fit (mdl linTrainTables,“时间”“条件”

为代码生成准备模型

一旦您有了训练有素的RUL模型,就使用它来保存模型saveRULModelForCoder.这个函数将RUL模型保存到MAT文件中。以后,在入口点函数中,使用loadRULModelForCoder从该文件加载和重建RUL模型。

saveMATfilename =“savedModel.mat”;saveRULModelForCoder (mdl saveMATfilename);

定义入口点函数

入口点函数是要为其生成代码的函数。在预测RUL时,入口点函数可能会获取输入数据,以某种方式处理它以提取条件指示器,然后使用predictRUL从模型中得到一个新的RUL估计。

对于本例,创建入口点函数degradationRULPredict.m,如下所示。

类型degradationRULPredict.m
function [estRUL,ci, pdfrl] =降解rulpredict (data) %#codegen threshold = 60;%加载准备好的模型mdl = loadRULModelForCoder('savedModel.mat');% Use input data for new prediction [estRUL,ci,pdfRUL] = predictRUL(mdl,data,threshold);结束

该函数接受一个由时间和条件指示值组成的数据点作为输入。这个函数使用loadRULModelForCoder加载先前保存的训练模型版本saveRULModelForCoder.该函数还包括必需的% # codegen指令,它指示用代码分析器检查代码(MATLAB编码器)帮助您诊断和修复在代码生成期间或运行时可能导致错误的违规。

入口点功能的能力和限制

本例简单的入口点函数加载模型,得到新的RUL预测。入口点函数可以执行其他操作,例如对输入数据进行进一步处理,以提取用于预测的条件指示器。但是,入口点函数中的所有函数和操作都必须支持代码生成。金宝app

函数也可以使用更新命令,根据新数据更新预测模型。为此,您可以包含额外的代码,以便在关闭并重新启动部署的系统时保留更新的模型参数。有关更多信息,请参见为系统重启生成保留RUL模型状态的代码

入口点函数通常可以更改RUL模型对象的非只读属性。但是,以下属性的值在生成的代码中是固定的,否则它们是可读写的。试图在运行时更改它们会产生错误。

  • LifeTimeVariable

  • LifeTimeUnit

  • DataVariables

生成代码

要生成代码,必须提供具有入口点函数所期望的数据类型和格式的示例数据。对于本例,以与训练RUL模型、时间表和条件指示值相同的格式加载一些测试数据。因为入口点函数接受一个时间和值作为输入,所以从测试数据表中提取一个条目。对于代码生成,具体的值不重要,只有数据类型重要。

负载(“linTestData.mat”“linTestData1”) testData = linTestData1(1,:);testData
testData =1×2表时间条件____ _________ 1 2.1316

打开MATLAB编码器应用程序并指定入口点函数

在MATLAB桌面,上应用程序选项卡,在代码生成,点击MATLAB编码器.MATLAB编码器应用程序在选择源文件页面打开。在生成函数代码框,输入入口点函数的名称,degradationRULPredict.然后,单击下一个

指定输入数据类型

若要指定入口点函数的输入数据类型,请在“定义输入类型”页上使用testData号召degradationRULPredict.当您输入调用时,MATLAB编码器显示检测到的输入类型和输出数量。点击下一个来确认。

生成代码

可选地,检查入口点功能在运行时产生的问题。为此,请单击检查问题.准备好后,单击下一个,以进入生成代码页。在此页中,您指定代码生成的目标。您可以为MATLAB Coder支持的任何目标生成RUL预测代码,包括独立的C/ c++代码,编译为库的C/ c++代码,或编译为可执行文件的C/ c++代金宝app码。对于本例,从构建类型列表中,选择墨西哥人.MEX文件是可以从MATLAB中调用的可执行文件。

点击生成来生成MEX文件,degradationRULPredict_mex.有关MATLAB Coder功能及其生成的文件的更多信息,请参见使用MATLAB Coder App生成C代码(MATLAB编码器)

生成代码与codegen命令

作为使用MATLAB Coder应用程序的替代方法,您可以使用以下方法生成代码codegen(MATLAB编码器)命令。

codegendegradationRULPredictarg游戏{testData}-nargout3.
代码生成成功。

验证生成的代码

为了验证生成的代码,在MATLAB命令提示符下,在测试数据上运行入口点MATLAB函数。然后,在相同的数据上运行生成的MEX文件,并确认结果相同。

[estRUL, ci, pdfRUL] = degradationRULPredict (testData);[estRUL_mex, ci_mex pdfRUL_mex] = degradationRULPredict_mex (testData);

例如,比较MATLAB函数和生成的MEX文件得到的估计RUL。

estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927

现在,您可以将生成的代码用作已部署系统的一部分,以预测剩余的使用寿命。

另请参阅

||

相关的话题