Функция 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. Переместите указатель в местоположение для новой функции MATLAB в вашем графике.
Введите метку подписи для функции.
Функциональная метка подписи задает имя для вашей функции и официальные имена для ее аргументов и возвращаемых значений. Метка подписи имеет этот синтаксис:
[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)
результаты в ошибке времени выполнения.
Чтобы программировать функцию, откройте редактор MATLAB путем двойного клика по функциональному полю.
В редакторе MATLAB введите код MATLAB, реализующий вашу функцию. Для получения дополнительной информации см. Программу функция MATLAB в Графике.
В Model Explorer расширьте объект диаграммы и выберите функцию MATLAB. Аргументы и возвращаемые значения функциональной подписи появляются как элементы данных, которые принадлежат вашей функции. Аргументы имеют осциллограф Input
. Возвращаемые значения имеют осциллограф Output
.
В диалоговом окне Свойств данных для каждого значения аргумента и возвращаемого значения, задайте свойства данных, как описано в Set Data Properties.
Создайте любые дополнительные элементы данных, требуемые вашей функцией. Для получения дополнительной информации смотрите, Добавляют Данные Через Model Explorer.
Ваша функция может получить доступ к своим собственным данным или данным, принадлежащим родительским состояниям или графику. Элементы данных в функции могут иметь один из этих осциллографов:
Constant
— Постоянные данные сохраняют свое начальное значение посредством всех вызовов функции.
Parameter
— Данные о параметре сохраняют свое начальное значение посредством всех вызовов функции.
В функциях MATLAB вы не должны создавать локальные или временные функциональные данные явным образом. Если вы используете неопределенную переменную, Stateflow создает временную переменную, которая доступна для остальной части функции. Чтобы сохранить значения, которые сохраняются через вызовы функции, используйте ключевое слово persistent
.
Можно вызвать функции MATLAB от действий любого состояния или перехода. Можно также вызвать функции MATLAB от других функций. Если вы экспортируете функцию MATLAB, можно вызвать ее из любого графика в модели.
Чтобы вызвать функцию MATLAB, используйте функциональную подпись и включайте значение действительного аргумента для каждого формального аргумента в функциональной подписи. Если типы данных фактических и формальных аргументов отличаются, функция бросает действительный аргумент к типу формального аргумента.
Можно задать свойства для функции MATLAB в Model Explorer или диалоговом окне свойств MATLAB Function.
Использовать Model Explorer:
Чтобы открыть Model Explorer, во вкладке Modeling, выбирают Model Explorer.
В панели Model Hierarchy выберите функцию MATLAB.
В панели MATLAB Function отредактируйте свойства функции MATLAB.
Использовать диалоговое окно свойств MATLAB Function:
В редакторе Stateflow щелкните правой кнопкой по функции MATLAB.
Выберите Properties.
Отредактируйте свойства функции MATLAB.
Можно также задать свойства функции MATLAB программно при помощи Stateflow.EMFunction
объекты. Для получения дополнительной информации о Stateflow программируемый интерфейс, см. Обзор API Stateflow.
FunctionName . Щелкните по ссылке имени функции, чтобы открыть вашу функцию в редакторе MATLAB.
Управляет встраиванием вашей функции в сгенерированном коде:
Auto
— Определяет, встроить ли вашу функцию на основе внутреннего вычисления.
Inline
— Встраивает вашу функцию, если вы не экспортируете ее в другие графики, и это не часть рекурсии. (Рекурсия существует если ваши вызовы функции сама прямо или косвенно посредством другого вызова функции.)
Function
— Не встраивает вашу функцию.
Метка Signature для вашей функции. Функциональная метка подписи задает имя для вашей функции и официальные имена для ее аргументов и возвращаемых значений.
Задает, насыщает ли целочисленное переполнение в сгенерированном коде. Для получения дополнительной информации смотрите Целочисленное переполнение Указателя для Данных о Графике.
Это свойство применяется только к функциям MATLAB в графиках, которые используют C в качестве языка действия. В графиках, которые используют 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 или рабочем пространстве модели и вводит свое имя переменной в окне редактирования.
Это свойство применяется только к функциям MATLAB в графиках, которые используют C в качестве языка действия. В графиках, которые используют MATLAB в качестве языка действия, поведение данных зависит от значения свойства fimath Графика MATLAB для графика.
Функциональное описание. Можно ввести краткие описания функций в иерархии.
Соединитесь с онлайн-документацией для функции. Можно ввести веб-адрес URL или команду MATLAB, которая отображает документацию в подходящем онлайн-формате, таком как файл HTML или текст в командном окне MATLAB. Когда вы кликаете по гиперссылке Document link, Stateflow отображает документацию.