exponenta event banner

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

Графическая функция в диаграмме 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)
    При экспорте этой функции в код C y1 и y2 передаются по ссылке (в качестве указателей), и u передается значением. Передача входных данных по ссылке уменьшает количество раз, когда сгенерированный код копирует промежуточные данные, что приводит к более оптимальному коду.

    Примечание

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

  3. Чтобы запрограммировать функцию, создайте блок-схему в окне функции, как описано в разделе Блок-схемы в Stateflow.

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

    Примечание

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

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

  5. В диалоговом окне «Свойства данных» для каждого аргумента и возвращаемого значения укажите свойства данных, как описано в разделе «Задать свойства данных».

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

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

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

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

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

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

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

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

    Совет

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

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

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

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

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

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

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

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

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

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

  • Чтобы использовать Обозреватель моделей (Model Explorer):

    1. Чтобы открыть Обозреватель моделей (Model Explorer), на вкладке Моделирование (Modeling) выберите Обозреватель моделей (Model Explorer).

    2. На панели Иерархия модели (Model Hierarchy) выберите графическую функцию.

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

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

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

    2. Выберите Свойства.

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

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

Имя

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

Встроенная функция

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

  • Auto - определяет необходимость встраивания функции на основе внутреннего расчета.

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

  • Function - Не выполняет свою функцию.

Этикетка

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

Описание

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

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

Ссылка на онлайн-документацию для функции. Можно ввести URL-адрес веб-сайта или команду MATLAB, которая отображает документацию в соответствующем интерактивном формате, например HTML-файл или текст в окне команд MATLAB. Если щелкнуть гиперссылку «Документ» (Document), на экране появится файл Stateflow.

Связанные темы