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

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

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

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

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

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

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

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

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

Примечание

Функция 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. Введите метку подписи для функции.

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

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

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

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

    Примечание

    Не используйте имя символа графика как аргумент функции или возвращаемое значение. Например, если любой x или y данные о графике, задавая функцию с подписью y = f(x) результаты в ошибке времени выполнения.

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

  4. В редакторе MATLAB введите код MATLAB, реализующий вашу функцию. Для получения дополнительной информации см. Программу функция MATLAB в Графике.

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

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

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

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

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

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

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

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

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

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

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

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

Имя

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

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

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

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

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

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

Метка

Метка 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 отображает документацию.

Похожие темы