Шаблоны для 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-функции (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

Заголовочный файлОписание
matlabroot/extern/include/tmwtypes.hОбщие типы данных, e. g., real_T
matlabroot/simulink/include/simstruc_types.hТипы данных SimStruct, e. g., 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Общие типы, e. g., real_T
matlabroot/simulink/include/simstruc_types.hТипы данных SimStruct, e. g., 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 с ним. Организация их SimStruct s во многом как дерево папки. 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-функции.

Была ли эта тема полезной?