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