Повторно используйте компоненты Simulink в диаграммах Stateflow

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

Функции Simulink могут улучшить эффективность вашего проекта и повысить читаемость вашей модели. Типичные приложения включают:

  • Определение функции, которая требует блоков Simulink

  • Планирование выполнения нескольких контроллеров

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

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

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

  • Если вы хотите вызвать функцию из любого графика в вашей модели, используйте блок Simulink Function (Simulink), чтобы задать функцию непосредственно в холсте Simulink. Для получения дополнительной информации смотрите Обзор функций Simulink (Simulink).

Примечание

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

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

Функция содержит подсистему Simulink, которая умножает первый аргумент на усиление 25 и объединяет два других аргумента в комплексный выходной сигнал.

Задайте функцию Simulink

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

  2. Введите метку подписи для функции.

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

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    Можно задать несколько возвращаемых значений и несколько входных параметров. Каждое возвращаемое значение и входной параметр могут быть скаляром, вектором или матрицей значений. Для функций с одним возвращаемым значением опустите скобки в метке подписи.

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

  3. Чтобы запрограммировать функцию, откройте редактор Simulink, дважды кликнув по полю с функцией. Первоначально редактор содержит блок Trigger вызова функции (Simulink) и блоки Inport (Simulink) и Outport (Simulink), которые совпадают с сигнатурой функции. Вы не можете удалить Trigger блок.

  4. В редакторе Simulink добавьте блоки и соедините их с блоками Inport и Outport.

  5. Сконфигурируйте блоки Inport и Outport.

    1. Дважды кликните каждый блок, чтобы открыть диалоговое окно Параметров блоков.

    2. На вкладке Signal Attributes введите Data type и Port dimensions входного параметра или возвращаемого значения.

    3. Нажмите OK.

    Примечание

    Блок Inport в функции Simulink не может наследовать его Data type и Port dimensions. Дополнительные сведения см. в разделе Явное задание свойств блоков Inport.

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

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

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

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

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

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

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

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

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

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

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

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

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

Описание свойств функции Simulink смотрите в Subsystem, Atomic Subsystem, CodeReuse Subsystem (Simulink).

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

Инструкции по использованию функций Simulink

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

Это руководство гарантирует, что имена Inport и блоков Output совместимы с правилами именования идентификаторов диаграмм Stateflow.

Явное задание свойств блоков Inport

Блоки Inport в функции Simulink не могут наследовать свои типы данных и размеры. Поэтому необходимо задать Data type и Port dimensions каждого блока Inport, который не является скаляром типа double.

Блоки Outport в функции Simulink могут наследовать размеры и типы данных на основе соединений внутри подсистемы. Поэтому можно задать Data type и Port dimensions этих блоков как унаследованные.

Совет

Чтобы упростить обновление свойств блоков Inport, можно задать типы данных и размеры как параметры.

Преобразуйте разъединенные сигналы в смежные сигналы

Outport блоки в функциях Simulink не поддерживают разъединенные сигналы. Если ваша функция содержит блок, который выводит разъединенный сигнал, вставьте блок Signal Conversion (Simulink) между разъединенным выходом и блоком Outport. Это действие гарантирует, что выходной сигнал смежен.

Блоки, которые могут выводить разъединенный сигнал, включают блок Bus Creator (Simulink) и блок Mux (Simulink). Для блока Bus Creator выход разъединен, когда блок выводит виртуальную шину. Если вы выбираете Output as nonvirtual bus, выходной сигнал смежен, и преобразование не требуется.

Не экспортировать функции Simulink

Экспорт функции Simulink приводит к ошибке времени выполнения во время симуляции. Чтобы избежать этой ошибки, откройте диалоговое окно Свойства графика и снимите флажок Export Chart Level Functions.

Не используйте функции Simulink в графиках Мура

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

Не вызывайте функции Simulink в переходах по умолчанию, которые выполняются во время инициализации графика

Если вы выбираете Execute (enter) Chart At Initialization свойства графика, вы не можете вызвать функции Simulink в переходах по умолчанию, которые выполняются при первом пробуждении графика. В противном случае график генерирует ошибку времени выполнения во время симуляции.

Не вызывайте функции Simulink в During состояний Действия или переходные условия непрерывных Графиков

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

Не генерируйте HDL-код для функций Simulink

Функции Simulink не поддерживают генерацию HDL-кода. Генерация HDL-кода для графиков, которые содержат функции Simulink, приводит к ошибке времени выполнения во время симуляции.

Передайте аргументы по значению

Передача аргумента в функцию Simulink по ссылке приводит к ошибке времени выполнения во время симуляции.

См. также

(Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink) | (Simulink)

Похожие темы