exponenta event banner

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

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

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

Примечание

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

Требования к исходному файлу 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 Block 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.hПроцедуры API файлов MATLAB ® MEX для взаимодействия файлов MEX с средой MATLAB
matlabroot/extern/include/matrix.hПроцедуры API внешнего интерфейса MATLAB для запроса матриц 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):

  • 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 во многом напоминает дерево папок. 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-функции.