В этом примере показано, как использовать MATLAB ® Coder для развертывания алгоритма прогнозирования оставшегося срока полезного использования (RUL). Такая генерация кода полезна, когда вы обучили модель предсказания RUL, такую как linearDegradationModel
в MATLAB и готовы развернуть алгоритм предсказания в другом окружении. Этот пример использует MATLAB Coder, чтобы сгенерировать файл MEX, который является исполняемым из MATLAB. Можно использовать подобную процедуру для генерации кода для любого целевого объекта, который поддерживает MATLAB Coder.
Рабочий процесс для генерации кода для предсказания RUL проиллюстрирован на следующей схеме. Первый шаг - подгонка модели RUL с использованием исторических данных из вашей системы, как описано в Обновлении Предсказания RUL по мере поступления данных. Необходимо также написать функцию точки входа, из которой можно сгенерировать код. Эта функция является функцией MATLAB, которая получает новые данные от вашей системы и использует ее, чтобы предсказать новый RUL.
Можно использовать рабочий процесс этого примера, чтобы сгенерировать код для прогнозирования оставшегося срока полезного использования с основанными на деградации моделями RUL, linearDegradationModel
и exponentialDegradationModel
.
Перед генерацией кода для предсказания RUL необходимо подогнать модель RUL с помощью исторических данных. В данном примере загрузите данные в linTrainTables.mat
. Этот файл содержит измерения некоторого индикатора состояния, взятые с течением времени, организованные в таблицы с метками столбцов "Time"
и "Condition"
. Используйте эти данные для обучения линейной модели деградации. (Для получения дополнительной информации о настройке и обучении этого типа модели RUL смотрите linearDegradationModel
.)
load('linTrainTables.mat') mdl = linearDegradationModel; fit(mdl,linTrainTables,"Time","Condition")
Как только у вас есть обученная модель RUL, сохраните модель используя saveRULModelForCoder
. Эта функция сохраняет модель RUL в файл MAT. Позже в функции точки входа используйте loadRULModelForCoder
для загрузки и восстановления модели RUL из этого файла.
saveMATfilename = 'savedModel.mat';
saveRULModelForCoder(mdl,saveMATfilename);
Функция точки входа является функцией, для которой вы хотите сгенерировать код. При прогнозировании RUL ваша функция точки входа может взять входные данные, обработать их каким-либо образом, чтобы извлечь индикатор состояния и затем использовать predictRUL
чтобы получить новую оценку RUL из модели.
В данном примере создайте функцию точки входа degradationRULPredict.m
, как показано здесь.
type degradationRULPredict.m
function [estRUL,ci,pdfRUL] = degradationRULPredict(data) %#codegen threshold = 60; % Load prepared model mdl = loadRULModelForCoder('savedModel.mat'); % Use input data for new prediction [estRUL,ci,pdfRUL] = predictRUL(mdl,data,threshold); end
Эта функция принимает за вход точку данных, состоящую из времени и значения индикатора состояния. Функция использует loadRULModelForCoder
для загрузки версии обученной модели, ранее сохраненной в saveRULModelForCoder
. Функция также включает в себя необходимую %#codegen
директива, которая инструктирует Проверка Кода с помощью анализатора кода (MATLAB Coder) помочь вам диагностировать и исправить нарушения, которые могут привести к ошибкам во время генерации кода или во время выполнения.
Функция простой точки входа этого примера загружает модель и получает новое предсказание RUL. Ваша функция точки входа может выполнять другие операции, такие как дальнейшая обработка входных данных для извлечения индикатора состояния для использования в предсказании. Однако все функции и операции в функции точки входа должны поддерживать генерацию кода.
Ваша функция может также использовать update
команда для обновления модели предсказания на основе новых данных. Для этого можно включить дополнительный код для сохранения обновленных параметров модели при завершении работы и перезапуске развернутой системы. Для получения дополнительной информации смотрите Сгенерировать код, который сохраняет состояние модели RUL для перезапуска системы.
Ваша функция точки входа может обычно изменять свойства объекта модели RUL, которые не доступны только для чтения. Однако значения следующих свойств, которые в противном случае считываются-записываются, фиксированы в сгенерированном коде. Попытка изменить их во время исполнения приводит к ошибке.
LifeTimeVariable
LifeTimeUnit
DataVariables
Чтобы сгенерировать код, вы должны предоставить выборочные данные, имеющих тип данных и формат, ожидаемые функцией точки входа. В данном примере загружайте некоторые тестовые данные в том же формате, что и данные, которые вы использовали для обучения модели RUL, таблицы времени и значения индикатора состояния. Поскольку ваша функция точки входа занимает одно время и значение в качестве входных данных, извлеките одну запись из таблицы тестовых данных. Для генерации кода конкретные значения не имеют значения, только типы данных.
load('linTestData.mat','linTestData1') testData = linTestData1(1,:); testData
testData=1×2 table
Time Condition
____ _________
1 2.1316
На рабочем столе MATLAB, на вкладке Приложений, в разделе Генерации кода, нажмите MATLAB Coder. Приложение MATLAB Coder откроется на странице Select Source Files. В поле Сгенерировать код для функции введите имя функции точки входа, degradationRULPredict
. Затем нажмите кнопку Далее.
Чтобы задать типы входных данных для функции точки входа, на странице Define Input Types, используйте testData
в вызове degradationRULPredict
. При вводе вызова MATLAB Coder отображает обнаруженные типы входа и количество выходов. Для подтверждения нажмите кнопку Далее.
Опционально проверьте функцию точки входа на наличие проблем, возникающих во время исполнения. Для этого щелкните Проверить на наличие проблем. Когда вы будете готовы, нажмите кнопку Далее, чтобы перейти на страницу Сгенерировать код. На этой странице вы задаете цель для генерации кода. Можно сгенерировать код предсказания RUL для любой из целей, которые поддерживает MATLAB Coder, включая автономный код C/C + +, код C/C + +, скомпилированный в библиотеку, или код C/C + +, скомпилированный в исполняемый файл. В данном примере из списка Тип сборки выберите MEX
. Файл MEX является исполняемым файлом, который можно вызвать из MATLAB.
Нажмите Generate, чтобы сгенерировать файл MEX, degradationRULPredict_mex
. Для получения дополнительной информации о возможностях MATLAB CODER и файлах это производит, посмотрите, Производят Код С при помощи Приложения MATLAB CODER (MATLAB CODER).
codegen
КомандаВ качестве альтернативы использованию приложения MATLAB Coder можно сгенерировать код с помощью следующего codegen
(MATLAB Coder) команда.
codegen degradationRULPredict -args {testData} -nargout 3
Code generation successful.
Чтобы подтвердить сгенерированный код, в командной строке MATLAB запустите функцию MATLAB точки входа на тестовых данных. Затем запустите сгенерированный файл MEX на тех же данных и подтвердите, что результаты совпадают.
[estRUL,ci,pdfRUL] = degradationRULPredict(testData); [estRUL_mex,ci_mex,pdfRUL_mex] = degradationRULPredict_mex(testData);
Для примера сравните предполагаемый RUL, полученный с функцией MATLAB и сгенерированным файлом MEX.
estRUL
estRUL = 114.2927
estRUL_mex
estRUL_mex = 114.2927
Теперь можно использовать сгенерированный код как часть развернутой системы для прогнозирования оставшегося срока полезного использования.
loadRULModelForCoder
| predictRUL
| saveRULModelForCoder