Эта тема показывает, как сгенерировать код C/C++ от онлайновой оценки код MATLAB®, который использует Систему object™. Код C/C++ сгенерирован с помощью codegen
(MATLAB Coder) команда от MATLAB Coder™. Используйте сгенерированный код, чтобы развернуть онлайновые алгоритмы оценки в целевой процессор.
Можно также развернуть онлайновый код оценки путем создавания автономного приложения с помощью MATLAB Compiler™. Программное обеспечение MATLAB Compiler поддерживает Системные объекты для использования в функциях MATLAB, но не делает объектов системы поддержки для использования в скриптах MATLAB.
Для основанных на Simulink® рабочих процессов используйте онлайновые блоки средства оценки из System Identification Toolbox™, такие как Recursive Least Squares Estimator и Recursive Polynomial Model Estimator. Можно сгенерировать код C/C++ и Структурированный текст для онлайновых блоков оценки с помощью Simulink Coder и Simulink PLC Coder™.
Поддержка генерации кода доступна для этих онлайновых Системных объектов оценки:
Поддержка генерации кода доступна только для следующих команд Системного объекта:
Сгенерировать код для онлайновой оценки:
Создайте функцию, чтобы объявить ваш Системный объект как персистентный, и инициализировать объект. Вы задаете Системный объект как персистентный, чтобы обеспечить объектные состояния между вызовами.
function [A,B,EstimatedOutput] = arxonline(output,input) % Declare System object as persistent persistent obj; if isempty(obj) obj = recursiveARX([1 2 2],'EstimationMethod','Gradient'); end [A,B,EstimatedOutput] = step(obj,output,input); end
Функция создает Системный объект для онлайновой оценки модели ARX порядка [1 2 1]
, с помощью ненормированного алгоритма градиента, и данных об оценке, input
и output
. Сохраните эту функцию на пути MATLAB. В качестве альтернативы можно задать имя полного пути для этой функции.
Персистентный Системный объект инициализируется условием if isempty(obj)
гарантировать, что объект инициализируется только однажды, когда функция вызвана в первый раз. Последующие вызовы функции только выполняются step
команда, чтобы обновить предполагаемые параметры. Во время инициализации вы задаете ненастраиваемые свойства объекта, такие как EstimationMethod
, Orders
, и DataType
.
Сгенерируйте код C/C++ и файлы MEX с помощью codegen
(MATLAB Coder) команда от MATLAB Coder.
codegen arxonline -args {1,1}
Синтаксис -args {1,1}
задает набор аргументов в качестве примера к вашей функции. Аргументы в качестве примера устанавливают размерности и типы данных аргументов функции output
и input
как скаляры с двойной точностью.
Используйте сгенерированный код.
Используйте сгенерированный код C/C++, чтобы развернуть онлайновую оценку модели целевым процессором.
Используйте сгенерированный файл MEX для тестирования скомпилированного кода C/C++ в MATLAB. Сгенерированный файл MEX также полезен для ускорения симуляций алгоритмов оценки параметра в MATLAB.
Загрузите данные об оценке. В этом примере используйте статический набор данных для рисунка.
load iddata3
output = z3.y;
input = z3.u;
Обновите параметры модели путем вызова сгенерированного файла MEX.
for i = 1:numel(input) [A,B,EstimatedOutput] = arxonline_mex(output(i),input(i)); end
Следующие правила и ограничения применяются к использованию онлайновых Системных объектов оценки при записи кода MATLAB, подходящего для генерации кода.
Объектная конструкция и инициализация
Если Системные объекты хранятся в персистентных переменных, инициализируют объекты однажды путем встраивания указателей на объект в if
оператор с вызовом isempty( )
.
Установите аргументы на конструкторов Системного объекта как константы времени компиляции при использовании codegen
команда. Для получения дополнительной информации смотрите coder.Constant
(MATLAB Coder).
Не инициализируйте свойства Системных объектов другими объектами класса MATLAB как значения по умолчанию в генерации кода. Инициализируйте эти свойства в конструкторе.
Вводы и выводы
Не изменяйте тип данных входных параметров Системного объекта.
Не передавайте Системный объект как входной параметр в качестве примера к функции, скомпилированной с codegen
(MATLAB Coder).
Не передавайте Системный объект функциям, объявленным как значение внешних параметров (функции, вызванные в интерпретированном режиме) использование coder.extrinsic
функция. Системные объекты, возвращенные во внешние функции и Системные объекты осциллографа, которые автоматически становятся значением внешних параметров, могут использоваться в качестве входных параметров к другой внешней функции, но они не генерируют код.
Массивы ячеек
Массивы ячеек не могут содержать Системные объекты.
Настраиваемые и ненастраиваемые свойства системных объектов
Значение, присвоенное ненастраиваемому свойству, должно быть константой, и может быть самое большее одно присвоение на то свойство (включая присвоение в конструкторе).
Можно установить настраиваемые свойства онлайновых Системных объектов оценки во время создания или при помощи записи через точку после этого.
isLocked
| recursiveAR
| recursiveARMA
| recursiveARMAX
| recursiveARX
| recursiveBJ
| recursiveLS
| recursiveOE
| release
| reset
| step
| codegen
(MATLAB Coder)