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

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

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

Примечание

Мы рекомендуем, чтобы вы использовали шаблон файла MEX на C при разработке S-функций 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, описанный подробно в S-функциях Уровня 1 C Преобразования MEX. Кроме того, код указывает, что вы используете формат S-функции Уровня 2.

Примечание

Все S-функции от версии 1.3 Simulink® до версии 2.1 считаются S-функциями Уровня 1. Они совместимы с более новыми версиями программного обеспечения, но мы рекомендуем, чтобы вы написали новые S-функции в формате Уровня 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 файла MEX MATLAB®, чтобы соединить интерфейсом с файлами MEX со средой MATLAB
matlabroot/extern/include/matrix.hMATLAB Внешние Интерфейсные стандартные программы 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-функция должна реализовать следующие функции, (см.):

  • 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-функции.