S-функции (system-functions) обеспечивают мощный механизм расширения возможностей Simulink® окружение. S-функция является описанием компьютерного языка блока Simulink, записанным в MATLAB®, C, C++ или Фортран. S-функции на C, C++ и Фортран компилируются как файлы MEX с помощью mex
утилита (см. Build C MEX Function). Как и в других файлах MEX, S-функции являются динамически связанными стандартными подпрограммами, которые может автоматически загрузить и выполнить механизм выполнения MATLAB.
S-функции используют специальный синтаксис вызова, называемый S-function API, который позволяет вам взаимодействовать с движком Simulink. Это взаимодействие очень похоже на взаимодействие, которое происходит между двигателем и встроенными блоками Simulink.
S-функции следуют общей форме и могут включать непрерывные, дискретные и гибридные системы. Следуя набору простых правил, можно реализовать алгоритм в S-функции и использовать блок S-Function, чтобы добавить его к модели Simulink. После того, как вы запишете свою S-функцию и поместите ее имя в блок S-Function (доступный в библиотеке блоков User-Defined Functions), можно настроить пользовательский интерфейс с помощью маскировки (см. «Создание масок блоков»).
Если у вас есть Simulink Coder™, можно использовать S-функции в модели и сгенерировать код. Можно также настроить код, сгенерированный для S-функций, путем написания файла Target Language Compiler (TLC). Для получения дополнительной информации смотрите S-Функции и Генерация кода (Simulink Coder).
S-функции определяют, как блок работает во время различных частей симуляции, таких как инициализация, обновление, производные, выходные параметры и отключение. На каждом шаге симуляции механизм симуляции вызывает метод, чтобы выполнить определенную задачу. Основы S-функций требуют фундаментальных знаний математических отношений между входами, состояниями и выходами блоков. Чтобы понять, как работают S-функции, сначала нужно понять математику того, как Simulink симулирует модель, а именно стадии симуляции. Более подробную информацию см. в разделе Фазы симуляции в динамических системах.
Блок Simulink состоит из множества входов, набора состояний, набора параметров и набора выходов, где выходные параметры являются функцией времени симуляции, входов, параметров и состояний.
Следующие уравнения выражают математические отношения между входами, выходами, параметрами, состояниями и временем симуляции.
где
Выполнение модели Simulink выполняется поэтапно. В фазе Инициализации механизм Simulink включает в модель библиотечные блоки, распространяет ширины сигнала, типы данных и шаги расчета, оценивает параметры блоков, определяет порядок выполнения блоков и выделяет память. Затем двигатель входит в цикл симуляции, где каждый проход через цикл упоминается как шаг симуляции. Во время каждого шага симуляции двигатель выполняет каждый блок в модели в порядке, определенном во время инициализации. Для каждого блока механизм вызывает функции, которые вычисляют состояния блока, производные и выходные значения для текущего шага расчета. Затем весь цикл симуляции продолжается до завершения симуляции.
Инициализация модели - Модель подготовлена к симуляции. На этом этапе оцениваются параметры блоков, определяется порядок выполнения блока и выделяется память для каждой операции. После этого этапа блоки проходят цикл симуляции.
Обновление непрерывных состояний и времени - происходит только, если модель имеет непрерывные состояния. Можно изменять мелкий шаг методы, такие как mdlOutputs
, mdlDerivatives
, и mdlZeroCrossing
для вычисления выходов
S-функция содержит набор методов коллбэка S-функции, которые выполняют задачи, необходимые на каждом этапе симуляции. Во время симуляции модели, на каждом этапе симуляции, двигатель Simulink вызывает соответствующие методы для каждого блока S-Function в модели. Задачи, выполняемые методами коллбэка S-функции, включают:
Компиляция - На этом этапе механизм Simulink инициализирует S-функцию. Задачи включают:
Включение библиотечных блоков в модель и распространение ширины сигнала, типов данных и шагов расчета
Установка количества и размерностей входа и выхода портов
Оценка параметров блоков и определение порядка выполнения блоков
Выделение памяти и областей хранения.
Вычисление выходов - В этом состоянии выходные параметры вычисляются до тех пор, пока все выходные порты блоков не будут действительны для текущего временного шага, а именно все выходные значения находятся в определенной области значений ошибок.
Обновление дискретных состояний - В этом вызове блок выполняет временные шаги, такие как обновление дискретных состояний.
Инициализация и завершение методов - Эти необязательные методы выполняют действия инициализации и завершения, требуемые S-функцией, только один раз. Действия инициализации могут включать в себя настройку пользовательских данных или инициализацию векторов состояния в S-функции. Метод завершения выполняет любые действия, такие как освобождение памяти, которое требуется, когда симуляция завершена, или когда блок s-function удаляется из модели.
Интегрирование - Это относится к моделям с непрерывными состояниями и/или неавторизованными пересечениями нуля. Если ваша S-функция имеет непрерывные состояния, двигатель вызывает выходные и производные фрагменты вашей S-функции в незначительных временных шагах. Это значит, что решатели могут вычислить состояния для вашей S-функции. Если ваша S-функция имеет незащищенные пересечения нуля, двигатель также вызывает выходы и пересечения нулем фрагментов вашей S-функции в незначительных временных шагах, чтобы он мог определить местоположение пересечений нуля.
Чтобы понять терминологию симуляций, особенно для S-функций, см. S-Function Concepts.
Чтобы включить S-функцию C MEX в модель, перетащите блок S-function из Simulink Library Browser. Точно так же, чтобы включить Level-2 MATLAB S-function в модель, перетащите блок Level-2 MATLAB S-function в модель.
Откройте диалоговое окно Block Parameters и укажите имя S-функции в поле S-function name, чтобы предоставить функциональность для блока S-function. Для примера введите timestwo
и нажмите Apply, чтобы добавить S-функцию MEX C, которая умножает входящий сигнал на два.
Примечание
Если путь MATLAB включает файл MEX на C и файл MATLAB, имеющий то же имя, на которое ссылается блок S-Function, блок S-Function использует файл MEX на C.
В S-function блоке и Level-2 MATLAB S-Function Block Parameters окне вы можете задать значения параметров, чтобы перейти к соответствующей S-функции. Чтобы использовать эти поля, вы должны знать параметры, необходимые S-функции и порядок, в котором функция требует их. (Если вы не знаете, обратитесь к автору, документации или исходному коду S-функции.) Введите параметры, разделенные запятыми, в порядке, требуемом S-функцией. Значениями параметров могут быть константы, имена переменных, заданные в MATLAB или рабочее пространство модели, или выражения MATLAB.
Следующий пример иллюстрирует использование поля Parameters для ввода пользовательских параметров для Level-2 S-функции MATLAB.
Модель msfcndemo_limintm
в этом примере включает в себя выборку S-функции msfcn_limintm.m
.
The msfcn_limintm.m
S-функция принимает три параметра: нижнюю границу, верхнюю границу и начальное условие. S-функция выводит временной интеграл входного сигнала, если временной интеграл находится между нижней и верхней границами, нижнюю границу, если временной интеграл меньше нижней границы, и верхнюю границу, если временной интеграл больше верхней границы. Диалоговое окно в примере задает нижнюю и верхнюю границы и начальное условие -5.0
, 5.0
, и 0
, соответственно. На возможности показан результат выхода, когда вход является синусоидой амплитуды 5.
Смотрите Обработку параметров S-функции и Ошибки указатель в S-функциях для получения информации о том, как получить доступ к пользовательским параметрам в S-функции.
Можно использовать средство маскировки для создания пользовательских диалоговых окон и значков для блоков S-Function. Маскированные диалоговые окна могут упростить определение дополнительных параметров для S-функций. Для получения информации о маскировке см. раздел «Создание маски блоков».
Можно использовать S-функции для различных приложений, включая:
Создание новых блоков общего назначения
Добавление блоков, представляющих драйверы аппаратных устройств
Включение существующего кода С в симуляцию (см. «Интеграция функций C с помощью Legacy Code Tool»)
Описание системы как множества математических уравнений
Использование графической анимации (см. пример инвертированного маятника, Инвертированный маятник с анимацией)
Наиболее распространенным использованием S-функций является создание пользовательских блоков Simulink (см. «Основы создания блоков»). Когда вы используете S-функцию для создания блока общего назначения, можно использовать его много раз в модели, меняя параметры с каждым образцом блока.
Level-2 MATLAB S-Function | MATLAB Function | S-Function | S-Function Builder