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

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

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

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

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

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

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

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

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

Примечание

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

Например, эта функция Simulink имеет имя sim_fcn. Требуется три аргумента (aB, и 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 добавьте блоки и соедините их с блоками Outport и Inport.

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

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

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

    3. Нажмите OK.

    Примечание

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

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

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

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

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

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

  • Использовать Model Explorer:

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

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

    3. В панели Block Parameters отредактируйте свойства функции Simulink.

  • Использовать диалоговое окно Block Parameters:

    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)

Похожие темы