В этом разделе показано, как создать код C/C + + на основе онлайн-оценки кода MATLAB ® с использованием системного object™. Код C/C + + генерируется с помощьюcodegen (Кодер MATLAB) из Coder™ MATLAB. Созданный код используется для развертывания алгоритмов оценки в оперативном режиме на встроенной цели.
Можно также развернуть код оценки в режиме онлайн, создав автономное приложение с помощью MATLAB Compiler™. Компилятор MATLAB поддерживает системные объекты для использования внутри функций MATLAB, но не поддерживает системные объекты для использования в скриптах MATLAB.
Для рабочих процессов на базе Simulink ® используйте онлайн-блоки оценки из Toolbox™ идентификации системы, такие как Recursive Least Squares Estimator и Recursive Polynomial Model Estimator. Можно создать код C/C + + и структурированный текст для онлайн-блоков оценки с помощью Simulink Coder и Simulink PLC Coder™.
Поддержка генерации кода доступна для этих онлайн-объектов системы оценки:
Поддержка генерации кода доступна только для следующих команд объекта System:
Для создания кода для оценки в режиме онлайн:
Создайте функцию, чтобы объявить системный объект постоянным, и инициализируйте объект. Системный объект определяется как постоянный для поддержания состояний объекта между вызовами.
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. Кроме того, можно указать полный путь для этой функции.
Постоянный объект System инициализирован с условием if isempty(obj) для обеспечения инициализации объекта только один раз при первом вызове функции. Последующие вызовы функции просто выполняют step для обновления оценочных параметров. Во время инициализации необходимо указать неперестраиваемые свойства объекта, такие как EstimationMethod, Orders, и DataType.
Создание кода C/C + + и MEX-файлов с помощью codegen (Кодер MATLAB) из кодера MATLAB.
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( ).
Задание аргументов конструкторам объектов System в качестве констант времени компиляции при использовании codegen команда. Дополнительные сведения см. в разделе coder.Constant (Кодер MATLAB).
Не инициализируйте свойства системных объектов с другими объектами класса MATLAB в качестве значений по умолчанию при создании кода. Инициализируйте эти свойства в конструкторе.
Входы и выходы
Не изменяйте тип данных входных данных объекта System.
Не передавать объект System в качестве примера входного аргумента функции, скомпилированной с помощью codegen (Кодер MATLAB).
Не передавайте объект System функциям, объявленным как внешние (функции, вызываемые в интерпретируемом режиме) с помощью coder.extrinsic функция. Системные объекты, возвращенные внешними функциями и областью действия Системные объекты, которые автоматически становятся внешними, могут использоваться в качестве входных данных для другой внешней функции, но они не генерируют код.
Массивы ячеек
Массивы ячеек не могут содержать системные объекты.
Настраиваемые и не настраиваемые свойства системных объектов
Значение, назначенное неперестраиваемому свойству, должно быть константой, и этому свойству может быть назначено не более одного значения (включая назначение в конструкторе).
Можно задать настраиваемые свойства онлайн-объектов системы оценки во время построения или с помощью точечной нотации после этого.
isLocked | recursiveAR | recursiveARMA | recursiveARMAX | recursiveARX | recursiveBJ | recursiveLS | recursiveOE | release | reset | step | codegen (Кодер MATLAB)