exponenta event banner

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

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

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

На рабочем столе MATLAB на вкладке Приложения в разделе Создание кода щелкните Кодер MATLAB. Приложение Кодер MATLAB откроется на странице Выбор исходных файлов. В поле Generate code for function введите имя функции точки входа. degradationRULPredict. Затем нажмите кнопку Далее.

Укажите типы входных данных

Чтобы указать типы входных данных для функции точки входа, на странице Определить типы ввода (Define Input Types) используйте testData в вызове для degradationRULPredict. При вводе вызова кодер MATLAB отображает обнаруженные типы ввода и количество выходов. Нажмите кнопку Далее для подтверждения.

Создать код

При необходимости проверьте функцию точки входа на наличие проблем, возникающих во время выполнения. Для этого щелкните Проверить наличие проблем. Когда вы будете готовы, нажмите кнопку Далее, чтобы перейти на страницу Создать код. На этой странице указывается цель для создания кода. Можно создать код прогнозирования RUL для любых целей, поддерживаемых MATLAB Coder, включая автономный код C/C + +, код C/C + +, скомпилированный в библиотеку, или код C/C + +, скомпилированный в исполняемый файл. Для этого примера в списке Тип построения выберитеMEX. Файл MEX - это исполняемый файл, который можно вызвать из MATLAB.

Щелкните Создать (Generate), чтобы создать файл MEX. degradationRULPredict_mex. Дополнительные сведения о возможностях кодера MATLAB и создаваемых им файлах см. в разделе Создание кода C с помощью приложения кодера MATLAB (MATLAB Coder App).

Создать код с помощью codegen Команда

В качестве альтернативы использованию приложения MATLAB Coder можно создать код с помощью следующего codegen (Кодер MATLAB).

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

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

См. также

| |

Связанные темы