Сгенерируйте S-функцию от подсистемы

Пункт меню Generate S-function автоматизирует генерацию S-функции от подсистемы. Пункт меню Generate S-function представляет параметры, используемые в подсистеме, и позволяет вам объявить выбранные параметры как настраиваемые.

Для создания Блоков s-function от подсистемы смотрите, Создают Блоки s-function из Подсистемы.

Например, рассмотрите SourceSubsys. Цель состоит в том, чтобы автоматически извлечь SourceSubsys из модели и сборки Блок s-function от него. Переменная K рабочей области, который является фактором усиления блока Gain в SourceSubsys, объявляется и генерируется как настраиваемая переменная.

Автоматически сгенерировать S-функцию от SourceSubsys это имеет настраиваемый параметр K:

  1. С SourceSubsys открытая модель, кликните по подсистеме, чтобы выбрать его.

  2. Щелкните правой кнопкой по подсистеме и выберите C/C++ Code> Generate S-Function.

  3. В окне Generate S-Function вы видите переменные или объекты данных, на которые ссылаются как параметры блоков в подсистеме. Можно объявить их как настраиваемых.

    Верхняя панель окна отображает эти столбцы:

    • Variable Name: Имя параметра.

    • Класс: Если параметр является переменной рабочей области, ее тип данных отображен. Если параметр является объектом данных, его имя и класс отображены.

    • Tunable: Позволяет вам выбрать настраиваемые параметры. Чтобы объявить настраиваемый параметр, установите флажок. В этом примере, параметр K объявляется настраиваемым.

    Когда вы выбираете параметр в верхней панели, более низкая панель показывает блоки что ссылка параметр и родительская система каждого блока.

  4. После выбора настраиваемых параметров нажмите кнопку Build. Процесс сборки инициирует генерацию кода и компиляцию S-функции при помощи цели S-функции. Опция Create New Model автоматически включена.

  5. Процесс сборки отображает сообщения о состоянии в Командном окне MATLAB®. Когда сборка завершена, завершения окна настраиваемых параметров и новое неназванное окно модели открывается.

  6. Окно модели содержит Блок s-function с тем же именем как подсистема, от которой был сгенерирован блок (в этом примере, SourceSubsys). Опционально, можно сохранить сгенерированную модель, содержащую сгенерированный блок.

    Сгенерированный код для Блока s-function хранится в текущей рабочей папке. Эти файлы записаны в папку верхнего уровня:

    • subsys_sf.c или .cpp, где subsys имя подсистемы (например, SourceSubsys_sf.c)

    • subsys_sf.h

    • subsys_sf. mexext, где mexext зависимое платформой расширение файла MEX (например, 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, чтобы задать параметр компилятора. Для получения дополнительной информации смотрите Панель Генерации кода: Пользовательский код: Дополнительная информация о Сборке: Задает.

Смотрите также

Похожие темы