Пункт меню Generate S-function автоматизирует генерацию S-функции от подсистемы. Пункт меню Generate S-function представляет параметры, используемые в подсистеме, и позволяет вам объявить выбранные параметры как настраиваемые.
Для создания Блоков s-function от подсистемы смотрите, Создают Блоки s-function из Подсистемы.
Например, рассмотрите SourceSubsys
. Цель состоит в том, чтобы автоматически извлечь SourceSubsys
из модели и сборки Блок s-function от него. Переменная K
рабочей области, который является фактором усиления блока Gain в
SourceSubsys
, объявляется и генерируется как настраиваемая переменная.
Автоматически сгенерировать S-функцию от SourceSubsys
это имеет настраиваемый параметр K
:
С SourceSubsys
открытая модель, кликните по подсистеме, чтобы выбрать его.
Щелкните правой кнопкой по подсистеме и выберите C/C++ Code> Generate S-Function.
В окне Generate S-Function вы видите переменные или объекты данных, на которые ссылаются как параметры блоков в подсистеме. Можно объявить их как настраиваемых.
Верхняя панель окна отображает эти столбцы:
Variable Name: Имя параметра.
Класс: Если параметр является переменной рабочей области, ее тип данных отображен. Если параметр является объектом данных, его имя и класс отображены.
Tunable: Позволяет вам выбрать настраиваемые параметры. Чтобы объявить настраиваемый параметр, установите флажок. В этом примере, параметр K
объявляется настраиваемым.
Когда вы выбираете параметр в верхней панели, более низкая панель показывает блоки что ссылка параметр и родительская система каждого блока.
После выбора настраиваемых параметров нажмите кнопку Build. Процесс сборки инициирует генерацию кода и компиляцию S-функции при помощи цели S-функции. Опция Create New Model автоматически включена.
Процесс сборки отображает сообщения о состоянии в Командном окне MATLAB®. Когда сборка завершена, завершения окна настраиваемых параметров и новое неназванное окно модели открывается.
Окно модели содержит Блок s-function с тем же именем как подсистема, от которой был сгенерирован блок (в этом примере, SourceSubsys
). Опционально, можно сохранить сгенерированную модель, содержащую сгенерированный блок.
Сгенерированный код для Блока s-function хранится в текущей рабочей папке. Эти файлы записаны в папку верхнего уровня:
или subsys
_sf.c.cpp
, где
имя подсистемы (например, subsys
SourceSubsys_sf.c
)
subsys
_sf.h
, где subsys
_sf. mexext
зависимое платформой расширение файла MEX (например, mexext
SourceSubsys_sf.mexw64
)
Исходный код для S-функции записан в подпапку
. Верхний уровень subsys
_sfcn_rtw.c
или .cpp
файл является тупиковым файлом, который содержит включать директиву, чтобы можно было использовать, чтобы соединить интерфейсом с другим кодом C/C++ к сгенерированному коду.
Сгенерированный Блок s-function имеет импорт и выходные порты, ширины которых и шаги расчета соответствуют тем из исходной модели.
Следующий код, от mdlOutputs
стандартная программа сгенерированного кода S-функции (в SourceSubsys_sf.c
) показывает как настраиваемая переменная K
ссылается при помощи вызовов API MEX.
static void mdlOutputs(SimStruct *S, int_T tid)
...
/* Gain: '<S1>/Gain' incorporates:
* Sum: '<S1>/Sum'
*/
rtb_Gain_n[0] = (rtb_Product_p + (*(((const
real_T**)ssGetInputPortSignalPtrs(S, 2))[0]))) * (*(real_T
*)(mxGetData(K(S))));
rtb_Gain_n[1] = (rtb_Product_p + (*(((const
real_T**)ssGetInputPortSignalPtrs(S, 2))[1]))) * (*(real_T
*)(mxGetData(K(S))));
В автоматической генерации S-функции очищена опция Use Value for Tunable Parameters, или в командной строке установлен в 'off'
.
Используйте обертку S-функции MEX только в версии MATLAB, в которой создается обертка.
Предположим, что вы применяете класс памяти, такой как Define
к Simulink.Parameter
возразите так, чтобы параметр появился как макрос в сгенерированном коде. Если вы используете объект параметра в подсистеме, от которой вы генерируете S-функцию ERT, вы не можете выбрать объект параметра как настраиваемый параметр. Вместо этого генератор кода S-функции применяет пользовательский класс памяти к объекту параметра. Эта генерация макросов в коде S-функции позволяет вам сгенерировать S-функции от подсистем, которые содержат различные элементы, такие как Variant Subsystem блокируется, который вы конфигурируете, чтобы произвести условные выражения препроцессора в сгенерированном коде. Вы не можете изменить значение параметра в процессе моделирования S-функции.
Чтобы выбрать объект параметра как настраиваемый параметр, примените различный класс памяти или создайте свой собственный класс памяти. Классы памяти, которые обрабатывают параметры как макросы, включают Define
, ImportedDefine
, CompilerFlag
, и классы памяти, которые вы создаете установкой Data initialization к Macro
в Custom Storage Class Designer. Если вы используете немакро-класс памяти, вы не можете использовать объект параметра в качестве различной контрольной переменной и сгенерировать условные выражения препроцессора.
Если вы применяете класс памяти, который обрабатывает объект параметра как импортированный макрос, прежде чем вы сгенерируете S-функцию ERT, обеспечьте макроопределение. Например, предположите, что вы применяете класс памяти ImportedDefine
к Simulink.Parameter
возразите и используйте объект параметра в качестве различной контрольной переменной в подсистеме. Если вы устанавливаете пользовательский атрибут HeaderFile
к 'myHdr.h'
, когда вы генерируете S-функцию, помещаете пользовательский заголовочный файл myHdr.h
в текущей папке. Сгенерированная S-функция использует макро-значение от вашего заголовочного файла вместо значения от Value
свойство объекта параметра.
Использовать макрос, который вы задаете через параметр компилятора, например, путем применения класса памяти CompilerFlag
, используйте параметр конфигурации модели Code Generation> Custom Code> Additional build information> Defines, чтобы задать параметр компилятора. Для получения дополнительной информации смотрите Панель Генерации кода: Пользовательский код: Дополнительная информация о Сборке: Задает (Simulink Coder).