Повторное использование код MATLAB путем определения функций MATLAB

Функция MATLAB® в графике Stateflow® является графическим элементом, который вы используете, чтобы написать алгоритмы, которые легче реализовать путем вызова встроенных функций MATLAB. Типовые приложения включают:

  • Ориентированные на матрицу вычисления

  • Анализ данных и визуализация

Этот тип функции полезен для алгоритмов кодирования, которые более легко выражаются при помощи MATLAB вместо графических построений Stateflow. Функции MATLAB также обеспечивают оптимизацию для генерации эффективного, код С производственного качества для встраиваемых приложений.

Функция MATLAB может находиться где угодно в графике, состоянии или подграфике. Местоположение функции определяет набор состояний и переходов, которые могут вызвать функцию.

  • Если вы хотите вызвать функцию только в одном состоянии или подграфике и его подсостояниях, поместите свою функцию MATLAB в то состояние или подграфик. Эта функция заменяет любые другие функции того же имени в родительских элементах и предках того состояния или подграфика.

  • Если вы хотите вызвать функцию где-нибудь в том графике, поместите свою функцию MATLAB в уровень графика.

  • Если вы хотите вызвать функцию из какого-либо графика в вашей модели, поместите свою функцию MATLAB в уровень графика и позвольте экспортировать функций уровня графика. Для получения дополнительной информации смотрите Экспорт Функции Stateflow для Повторного использования.

Например, эта функция MATLAB имеет имя stdevstats. Это берет аргумент vals и возвращает выходное значение stdevout.

Чтобы вычислить стандартное отклонение значений в vals, функция использует этот код.

function stdevout = stdevstats(vals)
%#codegen

% Calculates the standard deviation for vals

len = length(vals);
stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

function mean = avg(array,size)
mean = sum(array)/size;

Задайте функцию MATLAB в графике

  1. В объектной палитре кликните по значку функции MATLAB. Переместите указатель в местоположение для новой функции MATLAB в вашем графике.

  2. Введите метку подписи для функции, как описано в Объявляют Аргументы функции и Возвращаемые значения.

  3. Чтобы программировать функцию, откройте редактора MATLAB путем двойного клика по функциональному полю.

  4. В редакторе введите код MATLAB, реализующий вашу функцию.

  5. В Model Explorer расширьте объект диаграммы и выберите функцию MATLAB. Аргументы и возвращаемые значения функциональной подписи появляются как элементы данных, которые принадлежат вашей функции. Аргументы имеют осциллограф Input. Возвращаемые значения имеют осциллограф Output.

  6. В диалоговом окне Свойств данных для каждого значения аргумента и возвращаемого значения, задайте свойства данных, как описано в Set Data Properties.

  7. Создайте любые дополнительные элементы данных, требуемые вашей функцией. Для получения дополнительной информации смотрите, Добавляют Данные Через Model Explorer.

    Ваша функция может получить доступ к своим собственным данным или данным, принадлежащим метрополиям или графику. Элементы данных в функции могут иметь один из этих осциллографов:

    • Local — Локальные данные сохраняются от одного вызова функции до следующего вызова функции. Допустимый для C строит диаграмму только.

    • Constant — Постоянные данные сохраняют свое начальное значение посредством всех вызовов функции.

    • Parameter — Данные о параметре сохраняют свое начальное значение посредством всех вызовов функции.

    • Temporary — Временные данные инициализируют в начале каждого вызова функции. Допустимый для C строит диаграмму только.

В графиках, которые используют C в качестве языка действия, задайте временные данные когда это необходимо, чтобы использовать данные, которые только допустимы, в то время как функция выполняется. Например, можно определять счетчик цикла иметь осциллограф Temporary, если встречное значение не должно сохраняться после того, как функция завершается.

В графиках, которые используют MATLAB в качестве языка действия, вы не должны задавать временные функциональные данные. Если вы используете неопределенную переменную, Stateflow создает временную переменную. Переменная доступна остальной части функции.

Можно инициализировать функциональные данные (кроме аргументов и возвращаемых значений) от рабочего пространства MATLAB. Для получения дополнительной информации смотрите, Инициализируют Данные из Базового рабочего пространства MATLAB.

Объявите аргументы функции и возвращаемые значения

Функциональная метка подписи задает имя для вашей функции и официальные имена для ее аргументов и возвращаемых значений. Метка подписи имеет этот синтаксис:

[return_val1, return_val2,...] = function_name(arg1, arg2,...)
Можно задать несколько возвращаемых значений и несколько входных параметров. Каждое возвращаемое значение и входной параметр могут быть скаляром, вектором или матрицей значений. Для функций только с одним возвращаемым значением не используйте скобки в метке подписи.

Можно использовать то же имя переменной и для аргументов и для возвращаемых значений. Например, функция с этой меткой подписи использует переменные y1 и y2 в качестве обоих вводов и выводов:

[y1, y2, y3] = f(y1, u, y2)
Если вы экспортируете эту функцию в код С, y1 и y2 передаются ссылкой (как указатели), и u передается значением. Передача входных параметров ссылкой уменьшает число раз, что сгенерированный код копирует промежуточные данные, приводящие к более оптимальному коду.

Вызовите функции MATLAB в состояниях и переходах

Можно вызвать функции MATLAB от действий любого состояния или перехода. Можно также вызвать функции MATLAB от других функций. Если вы экспортируете функцию MATLAB, можно вызвать ее из любого графика в модели.

Синтаксис для вызова функции MATLAB совпадает с функциональной подписью с действительными аргументами, заменяющими формальные единицы, заданные в подписи. Если типы данных фактического и формального аргумента отличаются, функция бросает действительный аргумент к типу формального аргумента.

Совет

Если формальные аргументы функциональной подписи являются скалярами, проверяют, что вводы и выводы вызовов функции следуют правилам скалярного расширения. Для получения дополнительной информации смотрите Как Скалярные работы Расширения для Функций.

Задайте свойства функции MATLAB в графике

Можно установить общие свойства для функции MATLAB через ее диалоговое окно свойств. Чтобы открыть функциональное диалоговое окно свойств, щелкните правой кнопкой по полю функции MATLAB и выберите Properties из контекстного меню.

Имя

FunctionName . Щелкните по ссылке имени функции, чтобы открыть вашу функцию в редакторе MATLAB.

Функциональная встроенная опция

Управляет встраиванием вашей функции в сгенерированном коде:

  • 'auto' Определяет, встроить ли вашу функцию на основе внутреннего вычисления.

  • Встроенный Встраивает вашу функцию, если вы не экспортируете ее в другие графики, и это не часть рекурсии. (Рекурсия существует если ваши вызовы функции сама прямо или косвенно посредством другого вызова функции.)

  • Функция Не встраивает вашу функцию.

Метка

Метка Signature для вашей функции. Для получения дополнительной информации смотрите, Объявляют Аргументы функции и Возвращаемые значения.

Насыщайте на целочисленном переполнении

Задает, насыщает ли целочисленное переполнение в сгенерированном коде. Для получения дополнительной информации смотрите Целочисленное переполнение Указателя для Данных о Графике.

Функция MATLAB fimath

Задает свойства fimath для функции MATLAB. Заданные свойства fimath сопоставлены со всем fi и объектами fimath, созданными в функции MATLAB. Выберите одну из этих опций:

  • Same as MATLAB — Функция использует те же свойства fimath в качестве текущего глобального fimath. Окно редактирования появляется, потускнел и отображает текущий глобальный fimath в форме только для чтения. Для получения дополнительной информации о глобальном fimath и объектах fimath, см. документацию Fixed-Point Designer™.

  • Specify Other — Задайте свой собственный объект fimath одним из этих методов:

    • Создайте объект fimath в окне редактирования.

    • Создайте объект fimath в рабочем пространстве MATLAB или рабочем пространстве модели и введите его имя переменной в окне редактирования.

Описание

Функциональное описание. Можно ввести краткие описания функций в иерархии.

Ссылка на документ

Соединитесь с онлайн-документацией для функции. Можно ввести веб-адрес URL или команду MATLAB, которая отображает документацию в подходящем онлайн-формате, таком как файл HTML или текст в Окне Команды MATLAB. Когда вы кликаете по гиперссылке Document link, Stateflow отображает документацию.

Перечисленный и данные Переменного Размера в функциях MATLAB

В диаграммах Stateflow в моделях Simulink® можно использовать перечисленные данные и данные переменного размера в функциях MATLAB. Для получения дополнительной информации смотрите Генерацию кода для Перечислений (Simulink) и Объявите Вводы и выводы Переменного Размера (Simulink).

Похожие темы