Используйте одни из предоставленных S-шаблонов-функций MEX C как отправная точка для создания вашей собственной S-функции. Шаблоны содержат скелетные реализации методов обратного вызова с комментариями, которые объясняют их использование. Шаблонный файл, sfuntmpl_basic.c
, содержит обычно используемые стандартные программы S-функции. Шаблон, содержащий все доступные стандартные программы (а также больше комментариев), может быть найден в sfuntmpl_doc.c
в той же папке.
Мы рекомендуем, чтобы вы использовали шаблон файла MEX на C при разработке S-функций MEX.
В этом разделе описываются требования, чтобы каждый исходный файл S-функции встретился, чтобы скомпилировать правильно. S-шаблоны-функций удовлетворяют эти требования.
Для S-функций, чтобы действовать правильно, каждый исходный модуль вашей S-функции, которая получает доступ к SimStruct
, должен содержать следующую последовательность, задает, и включать
#define S_FUNCTION_NAME your_sfunction_name_here #define S_FUNCTION_LEVEL 2 #include "simstruc.h"
где your_sfunction_name_here
является именем вашей S-функции (i. e., что вы вводите в диалоговое окно S-Function Block Parameters). Эти операторы предоставляют вам доступ к структуре данных SimStruct
, которая содержит указатели на данные, используемые моделированием. Включенный код также задает макросы, используемые, чтобы сохранить и получить данные в SimStruct
, описанном подробно в S-функциях Уровня 1 C Преобразования MEX. Кроме того, код указывает, что вы используете формат S-функции Уровня 2.
Все S-функции от версии 1.3 Simulink® до версии 2.1 считаются S-функциями Уровня 1. Они совместимы с более новыми версиями программного обеспечения, но мы рекомендуем, чтобы вы написали новые S-функции в формате Уровня 2.
Следующие заголовки включены simstruc.h
при компиляции как файл MEX.
Заголовочные файлы, Включенные simstruc.h При Компиляции как файл MEX
При компиляции S-функции для использования с продуктом Simulink Coder™ simstruc.h
включает следующее.
Заголовочные файлы, Включенные simstruc.h, Когда Используется продуктом Simulink Coder
Ваша S-функция должна реализовать следующие функции (см. Методы Обратного вызова Записи):
задает размеры различных параметров в mdlInitializeSizes
SimStruct
, такие как количество выходных портов для блока.
задает частоту (частоты) дискретизации блока.mdlInitializeSampleTimes
вычисляет вывод блока.mdlOutputs
выполняет любые действия, требуемые при завершении моделирования. Если никакие действия не требуются, эта функция может быть реализована как тупик.mdlTerminate
Ваша S-функция должна включать следующий код трейлера в конце основного модуля только.
#ifdef MATLAB_MEX_FILE /* Is this being compiled as MEX-file? */ #include "simulink.c" /* MEX-file interface mechanism */ #else #include "cg_sfun.h" /* Code generation registration func */ #endif
Эти операторы выбирают соответствующий код для вашего конкретного приложения:
simstruc.h
файла является заголовочным файлом языка C, который задает структуру данных SimStruct
и ее макросы доступа. Это инкапсулирует все данные, относящиеся к модели или S-функции, включая блочные параметры и выходные параметры.
Существует одна структура данных SimStruct
, выделенная для модели Simulink. Каждой S-функции в модели сопоставили ее собственный SimStruct
с ним. Организация их SimStruct
s во многом как дерево папки. SimStruct
, сопоставленным с моделью, является корневой
SimStruct
. Любым SimStruct
, сопоставленным с S-функцией, является дочерний
SimStruct
.
Продукт Simulink обеспечивает набор макросов, которые S-функции могут использовать, чтобы получить доступ к полям SimStruct
. Займитесь Функциями SimStruct для получения дополнительной информации.
tmwtypes.h
файла является заголовочным файлом языка C, который задает набор типов данных, используемых в S-шаблоне-функции и в SimStruct
. Эти типы данных, такие как real_T
, uint32_T
, и т.д., обеспечивают способ переключиться между различными типами данных для 16, 32, и системы на 64 бита, позволяя большую независимость от платформы и гибкость.
S-функции не требуются, чтобы использовать эти типы данных. Например, можно отредактировать пример csfunc.c
и изменить real_T
на double
и int_T
к int
. Если вы скомпилируете и моделируете S-функцию, результаты будут идентичны результатам с помощью предыдущих типов данных.
Ваша S-функция может быть скомпилирована в одном из трех режимов, заданных или командой mex
или продуктом Simulink Coder, когда S-функция создается:
MATLAB_MEX_FILE
— Указывает, что S-функция создается как файл MEX для использования с продуктом Simulink.
Rt
Указывает, что S-функция создается с продуктом Simulink Coder для приложения реального времени с помощью решателя фиксированного шага.
NRT
— Указывает, что S-функция создается с продуктом Simulink Coder для неприложения реального времени с помощью решателя переменного шага.
Процесс сборки, который вы используете автоматически, задает режим для вашей S-функции.