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

Графическая функция в Stateflow® график является графическим элементом, который помогает вам повторно использовать логику потока управления и итерационные циклы. Вы создаете графические функции с графиками потока, которые используют соединительные соединения и переходы. Можно вызвать графическую функцию в действиях состояний и переходов. С помощью графических функций можно:

  • Создайте модульную, переиспользуемую логику, которую можно вызвать где угодно на графике.

  • Отслеживайте поведение симуляции визуально во время анимации на графике.

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

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

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

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

Примечание

Графическая функция может получить доступ к графикам и состояния над ней в иерархии Stateflow.

Для примера эта графическая функция имеет имя f1. Требуется три аргумента (a, b, и c) и возвращает три выходных значения (x, y, и z). Функция содержит график потока, которая вычисляет трёх различных продуктов аргументов.

Задайте графическую функцию

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

  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. Чтобы запрограммировать функцию, создайте график потока внутри функционального блока, как описано в Flow Графиков в Stateflow.

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

    Примечание

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

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

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

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

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

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

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

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

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

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

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

    Совет

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

Управление большими графическими функциями

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

Чтобы сделать графическую функцию поле непрозрачным, щелкните правой кнопкой мыши функцию и очистите свойство Content Preview из контекстного меню.

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

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

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

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

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

Можно задать свойства для графической функции в Model Explorer или в диалоговом окне Свойства функции (Function properties).

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

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

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

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

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

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

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

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

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

Имя

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

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

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

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

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

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

Метка

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

Описание

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

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

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

Похожие темы