Используйте один из предоставленных шаблонов S-функции C MEX в качестве начальной точки для создания собственной S-функции. Шаблоны содержат реализации скелета методов коллбэка с комментариями, которые объясняют их использование. Файл шаблона, sfuntmpl_basic.c
, содержит обычно используемые стандартные программы S-функций. Шаблон, содержащий все доступные стандартные программы (а также дополнительные комментарии), можно найти в sfuntmpl_doc.c
в той же папке.
Примечание
При разработке MEX S-функций рекомендуется использовать шаблон файла MEX на C.
В этом разделе описываются требования, которым должен соответствовать каждый исходный файл 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-функции (т.е. то, что вы вводите в диалоговом окне Блок S-function Parameters). Эти операторы дают вам доступ к SimStruct
структура данных, которая содержит указатели на данные, используемые в симуляции. Включенный код также определяет макросы, используемые для хранения и извлечения данных в SimStruct
, подробно описанный в Convert Level-1 C MEX S-Functions. В сложении код указывает, что вы используете Level-2 формат S-функции.
Примечание
Все S-функции из Simulink® версии 1.3-2.1 рассматриваются как Level-1 S-функции. Они совместимы с более новыми версиями ПО, но мы рекомендуем вам писать новые S-функции в Level-2 формате.
Следующие заголовки включаются по simstruc.h
при компиляции в виде файла MEX.
Заголовочные файлы, включенные simstruc.h При компиляции как файл MEX
Заголовочный файл | Описание |
---|---|
| Общие типы данных, например real_T |
| SimStruct типы данных, например DTypeId |
| MATLAB® MEX-файл API стандартных программ для взаимодействия файлов MEX с MATLAB окружения |
| MATLAB External Interface API стандартных программ для запросов и манипулирования матрицами MATLAB |
При компиляции S-функции для использования с продуктом Simulink Coder™, simstruc.h
включает в себя следующее.
Заголовочные файлы, включенные simstruc.h при использовании продуктом Simulink Coder
Заголовочный файл | Описание |
---|---|
| Общие типы, например real_T |
| SimStruct типы данных, например DTypeId |
| Макросы для стандартных программ MATLAB API |
Ваша S-функция должна реализовать следующие функции (см. «Настройка функций C/C + + S-Function»):
определяет размеры различных параметров в 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 во многом похоже на дерево папок. The 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-функции.