S-функции (system-functions) обеспечивают мощный механизм расширения возможностей среды Simulink ®. S-функция - это описание компьютерного языка блока Simulink, написанного на MATLAB ®, C, C++ или Fortran. C, C++ и S-функции Fortran компилируются как MEX-файлы с помощью mex (см. Сборка функции C MEX). Как и в случае с другими MEX-файлами, S-функции представляют собой динамически связанные подпрограммы, которые модуль выполнения MATLAB может автоматически загружать и выполнять.
S-функции используют специальный вызывающий синтаксис, называемый S-function API, который позволяет взаимодействовать с движком Simulink. Это взаимодействие очень похоже на взаимодействие, которое происходит между двигателем и встроенными блоками Simulink.
S-функции имеют общую форму и могут соответствовать непрерывным, дискретным и гибридным системам. Следуя набору простых правил, можно реализовать алгоритм в S-функции и использовать блок S-функции для добавления его в модель Simulink. После записи S-функции и размещения ее имени в S-функциональном блоке (доступном в библиотеке блоков пользовательских функций) можно настроить пользовательский интерфейс с помощью маскирования (см. раздел Создание блоковых масок).
При наличии Coder™ Simulink можно использовать S-функции в модели и генерировать код. Можно также настроить код, созданный для S-функций, написав файл TLC. Дополнительные сведения см. в разделе S-Функции и создание кода (Simulink Coder).
S-функции определяют, как работает блок во время различных частей моделирования, таких как инициализация, обновление, производные, выходы и завершение. На каждом этапе моделирования механизм моделирования вызывает метод для выполнения конкретной задачи. Основы S-функций требуют фундаментального знания математических отношений между входами, состояниями и выходами блоков. Чтобы понять, как работают S-функции, сначала нужно понять математику того, как Simulink моделирует модель, а именно этапы моделирования. Дополнительные сведения см. в разделе Фазы моделирования в динамических системах.
Блок Simulink состоит из набора входов, набора состояний, набора параметров и набора выходов, где выходы являются функцией времени моделирования, входов, параметров и состояний.

Следующие уравнения выражают математические взаимосвязи между входами, выходами, параметрами, состояниями и временем моделирования.
где xd].
Выполнение модели Simulink происходит поэтапно. На этапе инициализации модуль Simulink включает в модель библиотечные блоки, распространяет ширину сигнала, типы данных и время выборки, оценивает параметры блока, определяет порядок выполнения блока и выделяет память. Затем двигатель входит в цикл моделирования, где каждый проход через цикл называется этапом моделирования. Во время каждого этапа моделирования механизм выполняет каждый блок в модели в порядке, определенном во время инициализации. Для каждого блока механизм вызывает функции, которые вычисляют состояния блока, производные и выходные данные для текущего времени выборки. Затем весь цикл моделирования продолжается до завершения моделирования.
Инициализация модели - модель подготовлена для моделирования. На этом этапе оцениваются параметры блока, определяется порядок выполнения блока и выделяется память для каждой операции. После этого этапа блоки проходят цикл моделирования.
Обновление непрерывных состояний и времени - выполняется только в том случае, если модель имеет непрерывные состояния. Можно изменить дополнительные методы шагов, такие как mdlOutputs, mdlDerivatives, и mdlZeroCrossing для вычисления выходных данных
S-функция содержит набор методов обратного вызова S-функции, которые выполняют задачи, требуемые на каждом этапе моделирования. Во время моделирования модели на каждом этапе моделирования механизм Simulink вызывает соответствующие методы для каждого блока S-Function в модели. Задачи, выполняемые методами обратного вызова S-функции, включают в себя:
Компиляция - на этом этапе модуль Simulink инициализирует S-функцию. Задачи включают в себя:
Включение библиотечных блоков в модель и распространение ширины сигнала, типов данных и времени выборки
Установка количества и размеров портов ввода и вывода
Оценка параметров блока и определение порядка выполнения блока
Выделение памяти и областей хранения.
Расчет выходных сигналов - в этом состоянии выходные сигналы вычисляются до тех пор, пока все выходные порты блока не станут действительными для текущего временного шага, а именно все выходные значения находятся в определенном диапазоне ошибок.
Обновление дискретных состояний - в этом вызове блок выполняет действия один раз за шаг, такие как обновление дискретных состояний.
Методы инициализации и завершения (Initialize and Terminate Methods) - эти дополнительные методы выполняют действия инициализации и завершения, необходимые для S-функции только один раз. Действия инициализации могут включать в себя установку пользовательских данных или инициализацию векторов состояния в S-функции. Метод завершения выполняет любые действия, такие как освобождение памяти, которое требуется при завершении моделирования или при удалении S-функционального блока из модели.
Интеграция - это относится к моделям с непрерывными состояниями и/или несамплированными пересечениями нулевого уровня. Если S-функция имеет непрерывные состояния, механизм вызывает выходную и производную части S-функции на второстепенных временных шагах. Это значит, что решатели могут вычислить состояния для вашей S-функции. Если S-функция не имеет отсчетов нулевых переходов, механизм также вызывает части выходных переходов и переходов нулевых переходов S-функции на второстепенных временных шагах, так что он может обнаружить переходы нулевых значений.
Описание терминологии моделирования, особенно для S-функций, см. в разделе Концепции S-функций.
Чтобы включить S-функцию C MEX в модель, перетащите блок S-функции из браузера библиотеки Simulink. Точно так же, чтобы включить Уровень 2 MATLAB S-function к модели, тяните Уровень 2 MATLAB S-function block к модели.
Откройте диалоговое окно «Параметры блока» и укажите имя S-функции в поле «Имя S-функции» для обеспечения функциональных возможностей блока S-функции. Например, введите timestwo и нажмите Apply, чтобы добавить S-функцию C MEX, которая умножает входящий сигнал на два.
Примечание
Если путь MATLAB включает в себя файл C MEX и файл MATLAB с тем же именем, на которое ссылается блок S-Function, блок S-Function использует файл C MEX.
Как в S-функциональном блоке, так и Level-2 окне MATLAB S-Function Block Parameters можно указать значения параметров для передачи соответствующей S-функции. Для использования этих полей необходимо знать необходимые S-функции параметры и порядок, в котором они требуются функции. (Если вы не знаете, обратитесь к автору S-функции, документации или исходному коду.) Введите параметры, разделенные запятой, в порядке, требуемом S-функцией. Значениями параметров могут быть константы, имена переменных, определенных в рабочей области MATLAB или модели, или выражения MATLAB.
В следующем примере показано использование поля Parameters для ввода пользовательских параметров для Level-2 MATLAB S-функции.

Модель msfcndemo_limintm в этом примере включает выборку S-функции msfcn_limintm.m.

msfcn_limintm.m S-функция принимает три параметра: нижнюю границу, верхнюю границу и начальное условие. S-функция выводит интеграл времени входного сигнала, если интеграл времени находится между нижней и верхней границами, нижнюю границу, если интеграл времени меньше нижней границы, и верхнюю границу, если интеграл времени больше верхней границы. Диалоговое окно в примере задает нижнюю и верхнюю границы и начальное условие -5.0, 5.0, и 0соответственно. Объем показывает результирующий выходной сигнал, когда входной сигнал представляет собой синусоидальную волну амплитуды 5.
Для получения информации о доступе к пользовательским параметрам в S-функции см. Обработка параметров S-функции и Обработка ошибок в S-функциях.
Средство маскирования можно использовать для создания пользовательских диалоговых окон и значков для S-функциональных блоков. Маскированные диалоговые окна упрощают задание дополнительных параметров для S-функций. Обсуждение маскирования см. в разделе Создание блоковых масок.
S-функции можно использовать для различных приложений, включая:
Создание новых блоков общего назначения
Добавление блоков, представляющих драйверы аппаратных устройств
Включение существующего кода C в моделирование (см. раздел Интеграция функций C с использованием устаревшего инструмента кода)
Описание системы как набора математических уравнений
Использование графической анимации (см. пример перевернутого маятника «Перевернутый маятник с анимацией»)
Наиболее распространенным использованием S-функций является создание пользовательских блоков Simulink (см. Основные сведения о создании блоков). При использовании S-функции для создания блока общего назначения его можно многократно использовать в модели, изменяя параметры для каждого экземпляра блока.
Level-2 S-функция MATLAB | Функция MATLAB | S-функция | Построитель S-функций