В качестве отправной точки для создания собственной S-функции используйте один из предоставленных шаблонов S-функции C MEX. Шаблоны содержат каркасные реализации методов обратного вызова с комментариями, объясняющими их использование. Файл шаблона, sfuntmpl_basic.c, содержит часто используемые подпрограммы S-функций. Шаблон, содержащий все доступные процедуры (а также дополнительные комментарии), можно найти в sfuntmpl_doc.c в той же папке.
Примечание
При разработке S-функций MEX рекомендуется использовать шаблон файла C MEX.
В этом разделе описываются требования, которым должен соответствовать каждый исходный файл 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-файла
При компиляции S-функции для использования с продуктом Simulink Coder™ simstruc.h включает в себя следующее.
Файлы заголовков, входящие в состав simstruc.h При использовании продукта Simulink Coder
| Файл заголовка | Описание |
|---|---|
| Общие типы, например, real_T |
| SimStruct типы данных, например, DTypeId |
| Макросы для подпрограмм MATLAB API |
Функция S должна реализовывать следующие функции (см. Настройка функций C/C + + S):
определяет размеры различных параметров в mdlInitializeSizesSimStruct, например, количество выходных портов для блока.
задает время (и) выборки блока.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 связан с ним. Организация этих SimStructs во многом напоминает дерево папок. 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-функции.