Функция Simulink ® - это вычислительный блок, который вычисляет набор выходов при наличии набора входов. Заголовок функции использует нотацию, аналогичную таким языкам программирования, как MATLAB ® и C++. Функцию Simulink можно определить и реализовать несколькими способами:
Функциональный блок Simulink - функция, определенная с помощью блоков Simulink в функциональном блоке Simulink.
Экспортированная графическая функция Stateflow ® - функция, определенная с переходами состояний в диаграмме Stateflow, а затем экспортированная в модель Simulink.
Экспортированная функция Stateflow MATLAB - функция, определенная с помощью языковых инструкций MATLAB в диаграмме Stateflow, а затем экспортированная в модель Simulink.
S-функция - функция, определенная с помощью S-функционального блока. Для примера с S-функцией откройте sfcndemo_simulinkfunction_getset.
Вызывающая функция Simulink вызывает выполнение функции Simulink из любой точки иерархии модели или диаграммы.
Блок вызова функции - вызов функции, определенной в Simulink или экспортированной из Stateflow. См. раздел Описание блока вызывающего абонента функции.
Переход диаграммы Stateflow - в диаграмме Stateflow вызовите функцию, определенную в Simulink или экспортированную из Stateflow.
Функциональный блок MATLAB - вызов функции из скрипта языка MATLAB.
S-Function block - вызов функции системными методами. Посмотрите ssDeclareFunctionCaller и ssCallSimulinkFunction.
Системный блок MATLAB - вызов функции с использованием системного объекта и языка MATLAB.
В дополнение к блокам Argument Inport и Argument Outport блок функции Simulink может взаимодействовать с сигналами в локальной среде блока через блоки Inport или Outport. Эти сигналы скрыты от вызывающего абонента. Блоки портов можно использовать для подключения и обмена данными между двумя функциональными блоками Simulink или для подключения к корневым блокам Inport и Outport, которые представляют внешний ввод-вывод.

Можно также подключить блоки исходящего порта к блокам-приемникам, которые включают в себя блоки ведения журнала (В файл, В рабочую область) и просмотра (Область, Отображение). Однако эти блоки выполняются последними после всех остальных блоков.
Функциональный блок Simulink может выводить событие вызова функции в блок Outport.
Функции используются при необходимости многократного использования логики в иерархии модели. Рассмотрим пример, в котором функция Simulink с повторно используемой логикой определена в диаграмме Stateflow.

Можно переместить повторно используемую логику изнутри диаграммы Stateflow в блок Simulink Function. Затем логика повторно используется вызывающими функциями в подсистемах Simulink (блоки подсистемы и модели) и в диаграммах Stateflow на любом уровне иерархии модели.

В результате повышается гибкость структурирования модели для повторного использования.
Примечание
Имена входных и выходных аргументов (x2, y2) для вызова функции из диаграммы Stateflow не обязательно должны соответствовать именам аргументов в прототипе функции (u, y) блока функции Simulink.
Прототип функции для блока Simulink Function может иметь идентичные входные и выходные аргументы. Например, функция, которая фильтрует шум, может вводить сигнал и затем возвращать сигнал после фильтрации.
mySignal = filter(mySignal)
Можно вызвать функцию с помощью блока вызова функции и добавить шум в тестовый сигнал для проверки алгоритма функции.

При генерации кода для этой модели входной аргумент блока Simulink Function передает указатель на сигнал, а не копию значения сигнала.
void filter(real_T *rtuy_mySignal)
{
. . .
*rtuy_mySignal = model_P.DiscreteFilter_NumCoef * DiscreteFilter_tmp; }
Используйте функции при моделировании общего ресурса, например принтера. Модель slexPrinterExample использует функциональные блоки Simulink в качестве общего интерфейса между несколькими компьютерами и одной диаграммой Stateflow, моделирующей процесс печати.

Интерфейс функции использует синтаксис MATLAB для определения имени функции и ее входных и выходных аргументов. Иерархия модели может содержать только одно определение функции с указанным именем функции. Simulink проверяет, что:
Аргументы в параметре прототипа функции для блока вызывающей функции соответствуют аргументам, указанным в функции. Например, функция с двумя входными аргументами и одним выходным аргументом выглядит следующим образом:
y = MyFunction(u1, u2)
Тип данных, измерение и сложность аргументов должны быть согласованы. Для блока Function Caller можно задать параметры Input argument specifications и Output argument specifications, но обычно нет необходимости указывать эти параметры вручную. Simulink выводит спецификацию из функции.
Единственный случай, когда необходимо указать параметры аргумента, это когда блок вызывающей функции не может найти функцию в модели или в любой дочерней модели, на которую он ссылается. Такая ситуация может возникнуть, когда блок вызывающей функции и вызываемая функция находятся в отдельных моделях, на которые ссылается общая родительская модель. См. раздел Функциональные блоки Simulink в ссылочных моделях и спецификация аргументов для функциональных блоков Simulink.
Блоки Function-Call Subsystem с прямыми сигнальными соединениями для запуска обеспечивают лучшую прослеживаемость сигнала, чем блоки Simulink Function, но блоки Simulink Function имеют и другие преимущества.
Исключить маршрутизацию сигнальных линий. Блок Function Caller позволяет выполнять функции, определенные блоком Simulink Function без соединительной сигнальной линии. Кроме того, функции и их вызывающие абоненты могут находиться в различных моделях или подсистемах. Этот подход устраняет проблемы маршрутизации сигналов посредством иерархической структуры модели и позволяет более широко использовать компоненты модели.
Использование нескольких вызывающих абонентов для одной и той же функции. Одна и та же функция может быть вызвана несколькими блоками вызывающих функций или диаграммами потока состояний. Если функция содержит состояние (например, блок задержки блока), состояние совместно используется различными вызывающими абонентами.
Отдельный интерфейс функции от определения функции. Функции отделяют свой интерфейс (входные и выходные аргументы) от их реализации. Поэтому можно определить функцию с помощью блока Simulink Function, экспортированной графической функции из Stateflow или экспортированной функции MATLAB из Stateflow. Вызывающий абонент не должен знать, как и где была реализована функция.
Рассмотрение использования блока функции Simulink или блока подсистемы связано с общим состоянием между вызовами функций. Блок Simulink Function имеет общее состояние, в то время как блок Subsystem, даже если он указан как повторно используемая функция, не имеет.
Для блока функции Simulink, когда один блок имеет несколько вызывающих абонентов, код всегда генерируется для одной функции. Если блок Simulink Function содержит блоки с состоянием (например, Delay или Memory), состояние постоянно и совместно используется вызывающими функциями. В этом случае важным фактором является порядок вызовов.
Для блока подсистемы, когда блок имеет несколько экземпляров и сконфигурирован как повторно используемая функция, код обычно генерируется для одной функции в качестве оптимизации. Если блок Subsystem содержит блоки с состоянием, код по-прежнему генерируется для одной функции, но в функцию передается другая переменная состояния. Состояние не является общим для экземпляров.
Функциональные блоки Simulink позволяют реализовать функции графически, но иногда использование функционального блока Simulink не является лучшим решением.
Например, при моделировании ПИД-контроллера или цифрового фильтра необходимо смоделировать уравнения, определяющие динамическую систему. Используйте блок S-функции, подсистемы или модели для реализации систем уравнений, но не используйте блок функции Simulink, поскольку могут возникнуть следующие условия:
Сохранение состояния между вызовами функций. Если блок Simulink Function содержит какие-либо блоки с состоянием (например, Unit Delay или Memory), то их значения состояния являются постоянными между вызовами функции. При наличии нескольких вызовов этой функции значения состояния также сохраняются между вызовами, исходящими от разных вызывающих абонентов.
Наследование непрерывного времени выборки. Блок функции Simulink не может наследовать непрерывное время выборки. Поэтому не используйте этот блок в системах, которые используют непрерывное время выборки для моделирования непрерывных системных уравнений.
Визуально отображаются соединения между функцией Simulink и вызывающими ее абонентами с линиями, соединяющими вызывающих абонентов с функциями:
Включение/выключение линий трассировки - на вкладке «Отладка» выберите «Информационные наложения».
В
раскрывающемся списке выберите Функциональные соединители.
![]()
Направление линий трассировки - линии, соединенные в нижней части блока, исходят от вызывающего абонента функции. Линии, соединенные в верхней части блока, относятся к функции Simulink или подсистеме, содержащей эту функцию.


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

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

Если функция находится на корневом уровне модели, функция открывается. Если функция находится в подсистеме, открывается подсистема, содержащая эту функцию.
После выбора функциональных соединителей модель slexPrinterExample На показаны отношения между вызывающими абонентами и функциями.
В этом примере вызывающий абонент функции в блоке функции Simulink addPrintJob, вызывает экспортированную функцию Stateflow queuePrintJob. Поддиаграмма Busy вызывает функциональный блок Simulink printerInk. Строки трассировки выводятся из диаграммы Stateflow.

Используйте анимацию для выделения вызовов функций.
В этом примере показан вызов анимированной функции Simulink.

Чтобы получить доступ к анимации, на панели инструментов на вкладке «Отладка» в разделе «Анимация событий» задайте скорость анимации равной Slow, Medium, или Fast.
Анимация событий отображается при наличии в модели блоков событий, таких как блоки из библиотеки сообщений и событий, диаграммы статусов, блоки подсистемы вызовов функций, функции Simulink или блоки SimEvents ®.