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. Переместите указатель на место для новой функции Simulink на графике.
Введите метку подписи для функции.
Метка подписи функции задает имя вашей функции и формальные имена для ее аргументов и возвращаемых значений. Метка подписи имеет следующий синтаксис:
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
Необходимо использовать уникальные имена переменных для всех аргументов и возвращаемых значений.
Чтобы запрограммировать функцию, откройте редактор Simulink, дважды кликнув по полю с функцией. Первоначально редактор содержит блок Trigger вызова функции (Simulink) и блоки Inport (Simulink) и Outport (Simulink), которые совпадают с сигнатурой функции. Вы не можете удалить Trigger блок.
В редакторе Simulink добавьте блоки и соедините их с блоками Inport и Outport.
Сконфигурируйте блоки Inport и Outport.
Дважды кликните каждый блок, чтобы открыть диалоговое окно Параметров блоков.
На вкладке Signal Attributes введите Data type и Port dimensions входного параметра или возвращаемого значения.
Нажмите OK.
Примечание
Блок Inport в функции Simulink не может наследовать его Data type и Port dimensions. Дополнительные сведения см. в разделе Явное задание свойств блоков Inport.
Можно вызвать функции Simulink из действий любого состояния или перехода. Можно также вызвать функции Simulink из других функций.
Чтобы вызвать функцию Simulink, используйте сигнатуру функции и включите фактическое значение аргумента для каждого формального аргумента в сигнатуру функции. Если типы данных фактических и формальных аргументов различаются, функция приводит фактический аргумент к типу формального аргумента.
Можно задать свойства функции Simulink в диалоговом окне Model Explorer или Параметров блоков.
Чтобы использовать браузер Model Explorer:
Чтобы открыть Model Explorer, на вкладке Modeling, выберите Model Explorer.
На панели Model Hierarchy выберите функцию Simulink.
На панели Block Parameters измените свойства функции Simulink.
Чтобы использовать диалоговое окно Параметров блоков:
В редакторе Stateflow щелкните правой кнопкой мыши функцию Simulink.
Выберите Properties.
Отредактируйте свойства функции Simulink.
Описание свойств функции Simulink смотрите в Subsystem, Atomic Subsystem, CodeReuse Subsystem (Simulink).
Можно программно задать дополнительные свойства функций Simulink при помощи Stateflow.SLFunction
объекты. Для получения дополнительной информации о программном интерфейсе Stateflow смотрите Обзор API Stateflow.
Это руководство гарантирует, что имена Inport и блоков Output совместимы с правилами именования идентификаторов диаграмм Stateflow.
Блоки 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 приводит к ошибке времени выполнения во время симуляции. Чтобы избежать этой ошибки, откройте диалоговое окно Свойства графика и снимите флажок Export Chart Level Functions.
Вы не можете использовать функции Simulink в графиках Мура. Это ограничение предотвращает нарушения семантики Мура во время выполнения графика.
Если вы выбираете Execute (enter) Chart At Initialization свойства графика, вы не можете вызвать функции Simulink в переходах по умолчанию, которые выполняются при первом пробуждении графика. В противном случае график генерирует ошибку времени выполнения во время симуляции.
During состояний
Действия или переходные условия непрерывных ГрафиковВ графиках в непрерывном времени вы не можете вызвать функции Simulink в течение незначительных временных шагов. Вместо этого вызовите функции Simulink в действиях, которые происходят во время основных временных шагов: состояние entry
или exit
действия и переходные действия. Вызов функций Simulink в during состояний
действия или условия перехода приводят к ошибке времени выполнения во время симуляции.
Функции Simulink не поддерживают генерацию HDL-кода. Генерация HDL-кода для графиков, которые содержат функции Simulink, приводит к ошибке времени выполнения во время симуляции.
Передача аргумента в функцию Simulink по ссылке приводит к ошибке времени выполнения во время симуляции.
Bus Creator (Simulink) | Inport (Simulink) | Mux (Simulink) | Outport (Simulink) | Signal Conversion (Simulink) | Simulink Function (Simulink) | Trigger (Simulink)