Шаблоны для C S-функций

Сведения о шаблонах для C S-функций

Используйте один из предоставленных шаблонов S-функции C MEX в качестве начальной точки для создания собственной S-функции. Шаблоны содержат реализации скелета методов коллбэка с комментариями, которые объясняют их использование. Файл шаблона, sfuntmpl_basic.c, содержит обычно используемые стандартные программы S-функций. Шаблон, содержащий все доступные стандартные программы (а также дополнительные комментарии), можно найти в sfuntmpl_doc.c в той же папке.

Примечание

При разработке MEX S-функций рекомендуется использовать шаблон файла MEX на C.

Требования к исходным файлам S-функций

В этом разделе описываются требования, которым должен соответствовать каждый исходный файл S-функции для правильной компиляции. Шаблоны 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

Заголовочный файлОписание
matlabroot/ extern/include/tmwtypes.hОбщие типы данных, например real_T
matlabroot/ simulink/include/simstruc_types.hSimStruct типы данных, например DTypeId
matlabroot/ extern/include/mex.hMATLAB® MEX-файл API стандартных программ для взаимодействия файлов MEX с MATLAB окружения
matlabroot/ extern/include/matrix.hMATLAB External Interface API стандартных программ для запросов и манипулирования матрицами MATLAB

При компиляции S-функции для использования с продуктом Simulink Coder™, simstruc.h включает в себя следующее.

Заголовочные файлы, включенные simstruc.h при использовании продуктом Simulink Coder

Заголовочный файлОписание
matlabroot/ extern/include/tmwtypes.hОбщие типы, например real_T
matlabroot/ simulink/include/simstruc_types.hSimStruct типы данных, например DTypeId
matlabroot/ rtw/c/src/rt_matrx.hМакросы для стандартных программ MATLAB API

Методы коллбэка, которые S-функция должна реализовать

Ваша S-функция должна реализовать следующие функции (см. «Настройка функций C/C + + S-Function»):

  • mdlInitializeSizes определяет размеры различных параметров в SimStruct, например, количество выходных портов для блока.

  • mdlInitializeSampleTimes задает шаги (шаги) расчета блока.

  • mdlOutputs вычисляет выходы блока.

  • mdlTerminate выполняет любые действия, необходимые при завершении симуляции. Если никаких действий не требуется, эта функция может быть реализована как заглушка.

Операторы, необходимые в нижней части S-функций

Ваша 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

Эти операторы выбирают соответствующий код для вашего конкретного приложения:

  • simulink.c включается, если файл компилируется в Файл MEX.

  • cg_sfun.h включается, если файл используется с продуктом Simulink Coder для создания автономного или исполняемого файла в реальном времени.

    Примечание

    Этот код трейлера не должен находиться в теле какой-либо стандартной программы S-функций.

SimStruct

Файл simstruc.h является файлом заголовка на языке C, который задает SimStruct структура данных и ее макросы доступа. Он инкапсулирует все данные, относящиеся к модели или S-функции, включая параметры блоков и выходы.

Существует одно SimStruct структура данных, выделенная для модели Simulink. Каждая S-функция в модели имеет свои собственные SimStruct связана с ним. Организация этих SimStructs во многом похоже на дерево папок. The SimStruct с моделью связан корень SimStruct. Любой SimStruct сопоставленный с S-функцией является дочерним элементом SimStruct.

Продукт Simulink предоставляет набор макросов, которые S-функции могут использовать для доступа к полям SimStruct. Дополнительные сведения см. в разделе О функциях SimStruct.

Типы данных в S-функциях

Файл tmwtypes.h является файлом заголовка на языке C, который задает набор типов данных, используемых в шаблоне S-функции и в SimStruct. Эти типы данных, такие как real_T, uint32_Tи т.д., обеспечивают способ переключения между различными типами данных для 16, 32 и 64-разрядных систем, обеспечивая большую независимость и гибкость платформы.

S-функции не требуются для использования этих типов данных. Например, можно отредактировать пример csfunc.c и изменяйте real_T на double и int_T на int. Если вы скомпилируете и симулируете S-функцию, результаты будут идентичны результатам с использованием предыдущих типов данных.

Компиляция C S-функций

Ваша S-функция может быть скомпилирована в одном из трех режимов, заданных либо mex команда или продуктом Simulink Coder, когда S-функция построена:

  • MATLAB_MEX_FILE - Указывает, что S-функция создается как файл MEX для использования с продуктом Simulink.

  • RT - указывает, что S-функция создается с помощью продукта Simulink Coder для приложения реального времени с использованием решателя с фиксированным шагом.

  • NRT - указывает, что S-функция создается с помощью продукта Simulink Coder для приложения, не относящегося к реальному времени, с использованием решателя с переменным шагом.

Процесс сборки, который вы используете, автоматически определяет режим для вашей S-функции.