Сгенерируйте код для предсказания оставшейся полезной жизни

В этом примере показано, как использовать MATLAB ® Coder для развертывания алгоритма прогнозирования оставшегося срока полезного использования (RUL). Такая генерация кода полезна, когда вы обучили модель предсказания RUL, такую как linearDegradationModel в MATLAB и готовы развернуть алгоритм предсказания в другом окружении. Этот пример использует MATLAB Coder, чтобы сгенерировать файл MEX, который является исполняемым из MATLAB. Можно использовать подобную процедуру для генерации кода для любого целевого объекта, который поддерживает MATLAB Coder.

Рабочий процесс для генерации кода для предсказания RUL проиллюстрирован на следующей схеме. Первый шаг - подгонка модели RUL с использованием исторических данных из вашей системы, как описано в Обновлении Предсказания RUL по мере поступления данных. Необходимо также написать функцию точки входа, из которой можно сгенерировать код. Эта функция является функцией MATLAB, которая получает новые данные от вашей системы и использует ее, чтобы предсказать новый RUL.

Можно использовать рабочий процесс этого примера, чтобы сгенерировать код для прогнозирования оставшегося срока полезного использования с основанными на деградации моделями RUL, linearDegradationModel и exponentialDegradationModel.

Подгонка модели RUL

Перед генерацией кода для предсказания 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 Coder и задайте функцию точки входа

На рабочем столе 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

Теперь можно использовать сгенерированный код как часть развернутой системы для прогнозирования оставшегося срока полезного использования.

См. также

| |

Похожие темы