Что такое S-функция?

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-функций требуют фундаментальных знаний математических отношений между входами, состояниями и выходами блоков. Чтобы понять, как работают S-функции, сначала нужно понять математику того, как Simulink симулирует модель, а именно стадии симуляции. Более подробную информацию см. в разделе Фазы симуляции в динамических системах.

Математика блоков Simulink

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

Следующие уравнения выражают математические отношения между входами, выходами, параметрами, состояниями и временем симуляции.

y=f0(t,x,u)                 (Выходы)x˙=fd(t,x,u)                 (Производные)xdk+1=fu(t,xc,xdk,u),   (Обновление)

где x=[xc;xd].

Этапы симуляции

Выполнение модели Simulink выполняется поэтапно. В фазе Инициализации механизм Simulink включает в модель библиотечные блоки, распространяет ширины сигнала, типы данных и шаги расчета, оценивает параметры блоков, определяет порядок выполнения блоков и выделяет память. Затем двигатель входит в цикл симуляции, где каждый проход через цикл упоминается как шаг симуляции. Во время каждого шага симуляции двигатель выполняет каждый блок в модели в порядке, определенном во время инициализации. Для каждого блока механизм вызывает функции, которые вычисляют состояния блока, производные и выходные значения для текущего шага расчета. Затем весь цикл симуляции продолжается до завершения симуляции.

Инициализация модели - Модель подготовлена к симуляции. На этом этапе оцениваются параметры блоков, определяется порядок выполнения блока и выделяется память для каждой операции. После этого этапа блоки проходят цикл симуляции.

Обновление непрерывных состояний и времени - происходит только, если модель имеет непрерывные состояния. Можно изменять мелкий шаг методы, такие как mdlOutputs, mdlDerivatives, и mdlZeroCrossing для вычисления выходов

Методы обратного коллбэка S-функции

S-функция содержит набор методов коллбэка S-функции, которые выполняют задачи, необходимые на каждом этапе симуляции. Во время симуляции модели, на каждом этапе симуляции, двигатель Simulink вызывает соответствующие методы для каждого блока S-Function в модели. Задачи, выполняемые методами коллбэка S-функции, включают:

  • Компиляция - На этом этапе механизм Simulink инициализирует S-функцию. Задачи включают:

    • Включение библиотечных блоков в модель и распространение ширины сигнала, типов данных и шагов расчета

    • Установка количества и размерностей входа и выхода портов

    • Оценка параметров блоков и определение порядка выполнения блоков

    • Выделение памяти и областей хранения.

  • Вычисление выходов - В этом состоянии выходные параметры вычисляются до тех пор, пока все выходные порты блоков не будут действительны для текущего временного шага, а именно все выходные значения находятся в определенной области значений ошибок.

  • Обновление дискретных состояний - В этом вызове блок выполняет временные шаги, такие как обновление дискретных состояний.

  • Инициализация и завершение методов - Эти необязательные методы выполняют действия инициализации и завершения, требуемые S-функцией, только один раз. Действия инициализации могут включать в себя настройку пользовательских данных или инициализацию векторов состояния в S-функции. Метод завершения выполняет любые действия, такие как освобождение памяти, которое требуется, когда симуляция завершена, или когда блок s-function удаляется из модели.

  • Интегрирование - Это относится к моделям с непрерывными состояниями и/или неавторизованными пересечениями нуля. Если ваша S-функция имеет непрерывные состояния, двигатель вызывает выходные и производные фрагменты вашей S-функции в незначительных временных шагах. Это значит, что решатели могут вычислить состояния для вашей S-функции. Если ваша S-функция имеет незащищенные пересечения нуля, двигатель также вызывает выходы и пересечения нулем фрагментов вашей S-функции в незначительных временных шагах, чтобы он мог определить местоположение пересечений нуля.

Чтобы понять терминологию симуляций, особенно для S-функций, см. S-Function Concepts.

Использование S-функций в моделях

  1. Чтобы включить S-функцию C MEX в модель, перетащите блок S-function из Simulink Library Browser. Точно так же, чтобы включить Level-2 MATLAB S-function в модель, перетащите блок Level-2 MATLAB S-function в модель.

  2. Откройте диалоговое окно Block Parameters и укажите имя S-функции в поле S-function name, чтобы предоставить функциональность для блока S-function. Для примера введите timestwo и нажмите Apply, чтобы добавить S-функцию MEX C, которая умножает входящий сигнал на два.

Примечание

Если путь MATLAB включает файл MEX на C и файл MATLAB, имеющий то же имя, на которое ссылается блок S-Function, блок S-Function использует файл MEX на C.

Передача параметров в S-функции

В 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-функцию

Можно использовать S-функции для различных приложений, включая:

Наиболее распространенным использованием S-функций является создание пользовательских блоков Simulink (см. «Основы создания блоков»). Когда вы используете S-функцию для создания блока общего назначения, можно использовать его много раз в модели, меняя параметры с каждым образцом блока.

См. также

| | |

Похожие темы