Повторно используйте код 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. В диалоговом окне Data properties для каждого аргумента и возвращаемого значения задайте свойства данных, как описано в Set Data Properties.

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

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

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

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

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

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

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

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

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

Можно задать свойства функции MATLAB в Model Explorer или в диалоговом окне Свойства функции MATLAB.

  • Чтобы использовать браузер Model Explorer:

    1. Чтобы открыть Model Explorer, на вкладке Modeling, выберите Model Explorer.

    2. На панели Model Hierarchy выберите функцию MATLAB.

    3. На панели MATLAB Function измените свойства функции MATLAB.

  • Чтобы использовать диалоговое окно свойств функций MATLAB:

    1. В редакторе Stateflow щелкните правой кнопкой мыши функцию MATLAB.

    2. Выберите Properties.

    3. Отредактируйте свойства функции MATLAB.

Можно также программно задать свойства функции MATLAB при помощи Stateflow.EMFunction объекты. Для получения дополнительной информации о программном интерфейсе Stateflow смотрите Обзор API Stateflow.

Имя

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

Функция Inline опции

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

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

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

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

Метка

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

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

Определяет, насыщаются ли целочисленные переполнения в сгенерированном коде. Для получения дополнительной информации смотрите Handle Integer Overflow для данных графика.

Это свойство применяется только к функциям MATLAB в графиках, которые используют C в качестве языка действий. В графиках, которые используют MATLAB в качестве языка действий, поведение данных зависит от значения свойства Saturate on целочисленное переполнение для графика.

Функция MATLAB fimath

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

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

  • Specify Other - Задайте свою собственную fimath объект одним из следующих методов:

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

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

Это свойство применяется только к функциям MATLAB в графиках, которые используют C в качестве языка действий. В графиках, которые используют MATLAB в качестве языка действий, поведение данных зависит от значения свойства MATLAB Chart fimath для графика.

Описание

Описание функции. Можно ввести краткое описание функций в иерархии.

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

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

Похожие темы