Разработчик S-функции диалоговое окно

О разработчике S-функции

Диалоговое окно S-Function Builder позволяет вам задать атрибуты S-функции, которая будет создана блоком S-Function Builder. Чтобы отобразить диалоговое окно, дважды кликните значок блока S-Function Builder или выберите блок и затем выберите Open Block из меню Edit на редакторе моделей или контекстном меню блока.

Диалоговое окно содержит средства управления, которые позволяют вам ввести информацию, необходимую для блока S-Function Builder, чтобы создать S-функцию к вашим спецификациям. Средства управления сгруппированы в панели. Смотрите следующие разделы для получения информации о панелях и средствах управления, которые они содержат.

Примечание

Следующие разделы используют целевую S-функцию термина, чтобы относиться к S-функции, заданной диалоговым окном S-Function Builder.

Смотрите Пример: Моделирование Системы Two-Input/Two-Output для примера, показывающего, как использовать Разработчика S-функции, чтобы смоделировать two-input/two-output дискретную систему пространства состояний.

Панель Имени Parameters/Language/S-Function

Эта панель отображает целевое S-имя-функции и параметры и содержит следующие средства управления.

S-имя-функции

Задает имя целевой S-функции.

Язык

Задает выходной язык для S-функции. Можно принять решение сгенерировать S-функции на C/C++, или можно наследовать образцовые настройки.

S-параметры-функции

Эта таблица показывает параметры целевой S-функции. Каждая строка таблицы соответствует параметру и каждому отображения столбца свойство параметра можно следующим образом:

  • Имя Имя параметра. Задайте и измените это свойство от Панели Параметров.

  • Тип данных Перечисляет тип данных параметра. Задайте и измените это свойство от Панели Параметров.

  • Значение Задает значение параметра. Введите допустимое выражение MATLAB® в это поле.

Создать/Сохранить

Используйте эту кнопку, чтобы сгенерировать исходный код C и исполняемый файл MEX от информации, которую вы ввели в Разработчика S-функции. Если кнопка маркирована Build, S-Function Builder генерирует исходный код и исполняемый файл MEX. Если кнопка маркирована Save, она генерирует только исходный код C. Используйте флажок Save code only на панели Build Info, чтобы переключить функциональность этой кнопки.

Скройтесь/Покажите вкладки редактирования S-функции

Используйте маленькую кнопку в правом нижнем углу панели Parameters/S-Function Name, чтобы свернуть и расширить нижнюю часть диалогового окна S-Function Builder.

Панель порта/Параметра

Эта панель Port/Parameter на левых отображениях порты и параметры, которые диалоговое окно задает для целевой S-функции.

Панель содержит древовидное управление, главные узлы которого соответствуют целевым портам S-входного-параметра-функции, выходным портам и параметрам, соответственно. Расширение Входных портов, Выходных портов или узла Параметра отображает входные порты, выходные порты или параметры, соответственно, заданный для целевой S-функции. Выбор любого порта или узлов параметра выбирает соответствующую запись на соответствующем порте или панели спецификации параметра.

Панель инициализации

Панель Initialization позволяет вам задавать основные характеристики S-функции, такие как ширина ее портов ввода и вывода и ее шага расчета.

Разработчик S-функции использует информацию, что вы вводите в эту панель, чтобы сгенерировать метод коллбэка mdlInitializeSizes. Механизм Simulink® вызывает этот метод во время образцовой фазы инициализации симуляции, чтобы получить основную информацию о S-функции. (См. Взаимодействие Engine Simulink с S-функциями C для получения дополнительной информации об образцовой фазе инициализации.)

Панель Initialization содержит следующие поля.

Количество дискретных состояний

Количество дискретных состояний в S-функции.

IC дискретных состояний

Начальные условия дискретных состояний в S-функции. Можно ввести значения как список, разделенный запятыми или как вектор (например, [0 1 2]). Количество начальных условий должно равняться количеству дискретных состояний.

Количество непрерывных состояний

Количество непрерывных состояний в S-функции.

Непрерывный IC состояний

Начальные условия непрерывных состояний в S-функции. Можно ввести значения как список, разделенный запятыми или как вектор (например, [0 1 2]). Количество начальных условий должно равняться количеству непрерывных состояний.

Демонстрационный режим

Демонстрационный режим S-функции. Демонстрационный режим определяет длину интервала между временами, когда S-функция обновляет свой вывод. Можно выбрать одну из следующих опций:

  • Inherited

    S-функция наследовала свой шаг расчета от блока, соединенного с ее входным портом.

  • Continuous

    Блок обновляет свои выходные параметры на каждом шаге симуляции.

  • Discrete

    S-функция обновляет свои выходные параметры на уровне, заданном в поле Sample time value диалогового окна S-Function Builder.

Значение шага расчета

Скалярное значение, указывающее на интервал между обновлениями S-функции выходные параметры. Это поле включено, только если вы выбираете Discrete как Sample mode.

Примечание

Разработчик S-функции в настоящее время не поддерживает шаги расчета нескольких-блоков или ненулевое время смещения.

Количество PWorks

Количество указателей данных используется S-функцией. PWorks указывает на память за жизненный цикл блока. Например, можно объявить и инициализировать указатель на файл или память в Start, и получить доступ к нему в Outputs, Update и панелях Derivatives, и освободить его в панели Terminate. Код, написанный в этих панелях, вызван mdlStart, mdlOutputs, mdlUpdate, mdlDerivatives и mdlTerminate. Смотрите Скользящее среднее значение в качестве примера с Запуском и Оконечный и Перестановка с помощью Классов Cpp.

Примечание

Использование PWorks влияет на соответствие SimState. Если вы объявляете PWorks, использование SimState сохраняют, и восстановление не позволено. В противном случае установка соответствия SimState по умолчанию, USE_DEFAULT_SIM_STATE, используется.

Панель свойств данных

Панель Свойств данных позволяет вам добавлять порты и параметры к вашей S-функции. Столбец кнопок слева от панелей позволяет вам добавлять, удалять, или переупорядочивать порты или параметры, в зависимости от в настоящее время выбранной панели.

  • Чтобы добавить порт или параметр, нажмите кнопку Add.

  • Чтобы удалить в настоящее время выбранный порт или параметр, нажмите кнопку Delete.

  • Чтобы переместить в настоящее время выбранный порт или параметр одно положение в соответствующем списке портов S-Function или списке параметров, нажмите кнопку Up.

  • Чтобы переместить в настоящее время выбранный порт или параметр вниз одно положение в соответствующем списке портов S-функции или списке параметров, нажмите кнопку Down.

Размещение массивов

Размещение массивов вашего кода C/C++. Можно выбрать одну из перечисленных в таблице опций.

ОпцияРазмещение массивов Функции C/C++Действие
Column-majorГлавный столбцом

Блок S-Function Builder добавляет функцию SimStruct ssSetArrayLayoutForCodeGen в mdlInitializeSizes, чтобы отметить S-функцию для главной столбцом генерации кода.

Row-majorГлавный строкой

Блок S-Function Builder добавляет функцию SimStruct ssSetArrayLayoutForCodeGen в mdlInitializeSizes, чтобы отметить S-функцию для главной строкой генерации кода.

Во время симуляции, если ваш код C/C++ включает матрицы или многомерные входные параметры, выходные параметры или параметры, транспонируют, добавляются к этим методам коллбэка S-функции:

  • mdlOutputs

  • mdlUpdate

  • mdlDerivatives

Simulink также применяется, предыдущее транспонирует когда рабочая симуляция в Акселераторе и Быстрых Режимах Accelerator. S-функция не встраивается при помощи TLC. Вместо этого S-функция MEX с транспонирует, скомпилированы непосредственно.

AnyФункция C/C++ не затронута размещением массивов

Блок S-Function Builder добавляет функцию SimStruct ssSetArrayLayoutForCodeGen в mdlInitializeSizes, чтобы отметить S-функцию как принимающий и главную строкой и главную столбцом генерацию кода.

Эта панель также содержит снабженные вкладками панели, которые позволяют вам задать атрибуты портов и параметров, которые вы создаете. См.:

Панель входных портов

Панель Input Ports позволяет вам осматривать и изменять свойства портов S-входного-параметра-функции. Панель включает доступную для редактирования таблицу, которая перечисляет свойства входных портов в порядке, в котором порты появляются на блоке S-Function Builder. Каждая строка таблицы соответствует порту. Каждая запись в строке отображает свойство порта можно следующим образом.

Имя порта

Имя порта. Отредактируйте это поле, чтобы изменить название порта.

Размерности

Перечисляет количество размерностей входного сигнала, принятого портом. Чтобы отобразить список поддерживаемых размерностей, нажмите смежную кнопку. Чтобы изменить размерность порта, выберите новое значение из списка. Задайте 1-D, чтобы измерить сигнал динамически, независимо от фактической размерности сигнала.

'Строки'

Задает размер первого (или только) размерность входного сигнала. Задайте -1, чтобы измерить сигнал динамически.

Столбцы

Задает размер второго измерения входного сигнала (только если входной порт принимает 2D сигналы).

Примечание

Для входных сигналов с двумя размерностями, если размерность строк динамически измерена, размерность столбцов должна также быть динамически измерена или установлена в 1. Если размерность столбцов будет установлена в некоторое другое значение, S-функция скомпилирует, но любая симуляция, содержащая эту S-функцию, не запустится из-за недопустимой спецификации размерности.

Сложность

Задает, принимает ли входной порт действительные или сигналы с комплексным знаком.

Шина

Если входной сигнал к блоку S-Function Builder является шиной, то используйте выпадающее меню в столбце Bus, чтобы выбрать 'on'.

Соедините шиной имя

Шаг 2 S-функций Сборки Автоматически дает вам команду создавать объект шины, если ваш входной сигнал является шиной. В поле, обеспеченном в столбце Bus Name, введите имя шины, которое вы задали при создании объекта шины импорта.

Панель выходных портов

Панель Output Ports позволяет вам осматривать и изменять свойства выходных портов S-функции. Панель состоит из таблицы, которая перечисляет свойства выходных портов в порядке, в котором порты появляются на Блоке s-function. Каждая строка таблицы соответствует порту. Каждая запись в строке отображает свойство порта можно следующим образом.

Имя порта

Имя порта. Отредактируйте это поле, чтобы изменить название порта.

Размерности

Перечисляет количество размерностей сигналов, выведенных портом. Чтобы отобразить список поддерживаемых размерностей, нажмите смежную кнопку. Чтобы изменить размерность порта, выберите новое значение из списка. Задайте 1-D, чтобы измерить сигнал динамически, независимо от фактической размерности сигнала.

'Строки'

Задает размер первого (или только) размерность выходного сигнала. Задайте -1, чтобы измерить сигнал динамически.

Столбцы

Задает размер второго измерения выходного сигнала (только если выходы порта 2D сигналы).

Примечание

Для выходных сигналов с двумя размерностями, если одна из размерностей динамически измерена, другая размерность должна также быть динамически измерена или установлена в 1. Если второе измерение будет установлено в некоторое другое значение, S-функция скомпилирует, но любая симуляция, содержащая эту S-функцию, не запустится из-за недопустимой спецификации размерности. В некоторых случаях вычисления, которые определяют размерности динамически размерных выходных портов, могут быть недостаточными, и обе размерности 2D выходного сигнала, возможно, должны быть трудно закодированы.

Сложность

Задает ли выходы порта действительные или сигналы с комплексным знаком.

Шина

Если выходной сигнал к блоку S-Function Builder является шиной, то используйте выпадающее меню в столбце Bus, чтобы выбрать 'on'.

Соедините шиной имя

Шаг 2 S-функций Сборки Автоматически дает вам команду создавать объект шины. В поле, обеспеченном в столбце Bus Name, введите имя, которое вы задали при создании объекта шины выходного порта.

Панель параметров

Панель Parameters позволяет вам осматривать и изменять свойства S-параметров-функции. Панель состоит из таблицы, которая перечисляет свойства S-параметров-функции. Каждая строка таблицы соответствует параметру. Порядок, в котором появляются параметры, соответствует порядку, в котором пользователь должен задать их в поле S-function parameters. Каждая запись в строке отображает свойство параметра можно следующим образом.

'ParameterName'

Имя параметра. Отредактируйте это поле, чтобы изменить название.

Тип данных

Перечисляет тип данных параметра. Нажмите смежную кнопку, чтобы отобразить список поддерживаемых типов данных. Чтобы изменить тип данных параметров, выберите новый тип из списка.

Сложность

Задает, имеет ли параметр действительный или комплексные числа.

Панель атрибутов типа данных

Эта панель позволяет вам задавать атрибуты типа данных портов ввода и вывода целевой S-функции. Панель содержит таблицу, перечисляющую атрибуты типа данных каждого из портов S-функций. Можно отредактировать только некоторые поля в таблице. Другие поля отображаются серым. Каждая строка соответствует порту целевой S-функции. Каждый столбец задает атрибут соответствующего порта.

Порт

Имя порта. Это поле отображает имя, введенное в панелях Output ports и Input ports. Вы не можете отредактировать это поле.

Тип данных

Тип данных порта. Нажмите смежную кнопку, чтобы отобразить список поддерживаемых типов данных. Чтобы изменить тип данных, выберите различный тип данных из списка.

Остающиеся поля на этой панели включены, только если поле Data Type задает тип данных с фиксированной точкой. Смотрите Задают Типы данных с фиксированной точкой для получения дополнительной информации.

Панель библиотек

Панель Libraries позволяет вам задавать местоположение внешних файлов кода, на которые ссылается пользовательский код, который вы вводите в другие панели диалогового окна S-Function Builder. Это включает следующие поля.

Библиотека/Объект/Исходные файлы

Внешняя библиотека, объектный код и исходные файлы, на которые ссылается пользовательский код, который вы вводите в другом месте в диалоговое окно S-Function Builder. Перечислите каждый файл на отдельной строке. Если файл находится в текущей папке, вы должны задать только имя файла. Если файл находится в другой папке, необходимо задать полный путь файла.

Также можно также использовать это поле, чтобы задать пути поиска файлов для библиотек, объектных файлов, заголовочных файлов и исходных файлов. Для этого введите тег LIB_PATH, INC_PATH или SRC_PATH, соответственно, сопровождаемый путем. Можно сделать столько записей этого вида, сколько вам нужно, но каждый должен находиться на отдельной строке.

Например, считайте Разработчика S-функции проектом, который находится в d:\matlab6p5\work и должен соединиться против следующих файлов:

  • c:\customfolder\customfunctions.lib

  • d:\matlab7\customobjs\userfunctions.obj

  • d:\externalsource\freesource.c

Следующие записи позволяют Разработчику S-функции найти эти файлы:

SRC_PATH d:\externalsource
LIB_PATH $MATLABROOT\customobjs
LIB_PATH c:\customfolder
customfunctions.lib
userfunctions.obj
freesource.c

Когда этот пример иллюстрирует, можно использовать LIB_PATH, чтобы задать и объект и пути к файлам библиотеки. Можно включать имя библиотеки в объявление LIB_PATH, однако необходимо поместить имя объектного файла в отдельную строку. Тег $MATLABROOT указывает на путь относительно установки MATLAB. Вы включаете несколько записей LIB_PATH на отдельных строках. Пути ищутся в заданном порядке.

Можно также ввести препроцессор (-D) директивы в этом поле, например,

-DDEBUG

Каждая директива должна находиться на отдельной строке.

Примечание

Не помещайте кавычки вокруг пути к библиотеке, даже если путь имеет пробелы в нем. Если вы добавите кавычки, компилятор не найдет библиотеку.

Включает

Заголовочные файлы, содержащие объявления функций, переменных и макросов, на которые ссылается пользовательский код, который вы вводите в другом месте в диалоговое окно S-Function Builder. Задайте каждый файл на отдельной строке как операторы #include. Используйте скобки, чтобы заключить имена стандарта C заголовочные файлы (например, #include <math.h>). Используйте кавычки, чтобы заключить имена пользовательских заголовочных файлов (например, #include "myutils.h"). Если ваша S-функция использует пользовательский, включают файлы, которые не находятся в текущей папке, необходимо использовать тег INC_PATH в поле Library/Object/Source files, чтобы установить включать путь для Разработчика S-функции к директориям, содержащим включать файлы (см. Библиотеку/Объект/Исходные файлы).

Внешние объявления функции

Объявления внешних функций, не объявленных в заголовочных файлах, перечислены в поле Includes. Поместите каждое объявление по отдельной строке. Разработчик S-функции включает заданные объявления в исходный файл S-функции, что он генерирует. Это позволяет код S-функции, который вычисляет состояния S-функции или выходные параметры, чтобы вызвать внешние функции.

Запустите панель

Используйте панель Start, чтобы записать код, чтобы выделить память в начале симуляции. На выделенное ссылается Pworks для использования в S-функции.

Выходная панель

Используйте панель Outputs, чтобы ввести код, который вычисляет выходные параметры S-функции на каждом шаге времени симуляции. Эта панель содержит следующие поля.

Описание кода

Код для функции mdlOutputs, которая вычисляет вывод S-функции на каждом временном шаге (или хит шага расчета, в случае дискретной S-функции). При генерации исходного кода для S-функции Разработчик S-функции вводит код в этом поле в функции обертки формы

void sfun_Outputs_wrapper(const real_T *u,
						real_T       *y,
						const real_T *xD, /* optional */
						const real_T *xC, /* optional */
						const real_T  *param0, /* optional */
						int_T p_width0 /* optional */
						real_T  *param1 /* optional */
						int_t p_width1 /* optional */
						int_T y_width, /* optional */
						int_T u_width) /* optional */
{

/* Your code inserted here */
}

где sfun является именем S-функции. Разработчик S-функции вставляет вызов этой функции обертки в методе коллбэка mdlOutputs, который она генерирует для вашей S-функции. Механизм Simulink вызывает метод mdlOutputs на каждом шаге времени симуляции (или шаге шага расчета в случае дискретной S-функции), чтобы вычислить S-функцию вывод. Метод mdlOutputs в свою очередь вызывает функцию обертки, содержащую ваш выходной код. Ваш выходной код затем на самом деле вычисляет и возвращает S-функцию вывод.

Метод mdlOutputs передает некоторых или все следующие аргументы к выходной функции обертки.

АргументОписание
u0, u1, ... uNУказатели на массивы, содержащие входные параметры к S-функции, где N является количеством входных портов, заданных на панели Input ports, найденной на панели Data Properties. Имена аргументов, которые появляются в выходной функции обертки, совпадают с именами, найденными на панели Input ports. Ширина каждого массива совпадает с входом width, заданным для каждого входа на панели Input ports. Если вы задали-1 как вход width, ширина массива задана аргументом u_width функции обертки (см. ниже).
y0, y1, ... yNУказатель на массивы, содержащие выходные параметры S-функции, где N является количеством выходных портов, заданных на панели Output ports, найденной на панели Data Properties. Имена аргументов, которые появляются в выходной функции обертки, совпадают с именами, найденными на панели Output ports. Ширина каждого массива совпадает с выводом width, заданным для каждого вывода на панели Output ports. Если вы задали-1 как вывод width, ширина массива задана аргументом y_width функции обертки (см. ниже). Используйте этот массив, чтобы передать выходные параметры, которые ваш код вычисляет назад к механизму Simulink.
xDУказатель на массив, содержащий дискретные состояния S-функции. Этот аргумент появляется, только если вы задали дискретные состояния на панели Initialization. На первом шаге времени симуляции дискретные состояния имеют начальные значения, которые вы задали на панели Initialization. На последующих шагах шага расчета состояния получены из значений, которые S-функция вычисляет на предыдущем временном шаге (см. Дискретную Панель Обновления для получения дополнительной информации).
xCУказатель на массив, содержащий непрерывные состояния S-функции. Этот аргумент появляется, только если вы задали непрерывные состояния на панели Initialization. На первом шаге времени симуляции непрерывные состояния имеют начальные значения, которые вы задали на панели Initialization. На последующих временных шагах состояния получены путем числовой интеграции производных состояний на предыдущем временном шаге (см. Непрерывную Панель Производных для получения дополнительной информации).
param0, p_width0, param1, p_width1... paramN, p_widthNparam0, param1... paramN является указателями на массивы, содержащие S-параметры-функции, где N является количеством параметров, заданных на панели Parameters, найденной на панели Data Properties. p_width0, p_width1... p_widthN являются ширинами массивов параметров. Если параметр является матрицей, ширина равняется продукту размерностей массивов. Например, ширина 3 2 параметра матрицы равняется 6. Эти аргументы появляются, только если вы задаете параметры на панели Data Properties.
y_widthШирина массива, содержащего S-функцию выходные параметры. Этот аргумент появляется в сгенерированном коде, только если вы задали-1 как ширина S-функции вывод. Если вывод является матрицей, y_width является продуктом размерностей матрицы.
u_widthШирина массива, содержащего S-входные-параметры-функции. Этот аргумент появляется в сгенерированном коде, только если вы задали-1 как ширина S-входного-параметра-функции. Если вход является матрицей, u_width является продуктом размерностей матрицы.

Эти аргументы разрешают вам вычислять вывод блока как функция его входных параметров и, опционально, его состояний и параметров. Код, который вы вводите в этом поле, может вызвать внешние функции, объявленные в заголовочных файлах или внешних объявлениях на панели Libraries. Это позволяет вам использовать существующий код, чтобы вычислить выходные параметры S-функции.

Входные параметры необходимы в выходной функции

Установите этот флажок, если текущие значения S-входных-параметров-функции используются, чтобы вычислить его выходные параметры. Механизм Simulink использует эту информацию, чтобы обнаружить алгебраические циклы, созданные, прямо или косвенно соединяя S-функцию вывод с S-входным-параметром-функции.

Непрерывная панель производных

Если S-функция имеет непрерывные состояния, используйте панель Continuous Derivatives, чтобы ввести код, требуемый вычислить производные состояния. Введите код для функции mdlDerivatives, чтобы вычислить производные непрерывных состояний в поле Code description на этой панели. При генерации кода Разработчик S-функции берет код в этой панели и вставляет его в функцию обертки формы:

void sfun_Derivatives_wrapper(const real_T *u,
							const real_T *y, 
							real_T *dx,
							real_T *xC, 
							const real_T  *param0,  /* optional */
							int_T p_width0, /* optional */
							real_T  *param1,/* optional */
	 						int_T p_width1, /* optional */
							int_T y_width, /* optional */
		 					int_T u_width) /* optional */
{

	/* Your code inserted here. */

}

где sfun является именем S-функции. Разработчик S-функции вставляет вызов этой функции обертки в методе коллбэка mdlDerivatives, который она генерирует для S-функции. Механизм Simulink вызывает метод mdlDerivatives в конце каждого временного шага, чтобы получить производные непрерывных состояний (см. Взаимодействие Engine Simulink с S-функциями C). Решатель Simulink численно интегрирует производные, чтобы определить непрерывные состояния на следующем временном шаге. На следующем временном шаге механизм пасует назад обновленные состояния к методу mdlOutputs (см. Выходную Панель).

Метод коллбэка mdlDerivatives, сгенерированный для S-функции, передает следующие аргументы функции обертки производных:

  • u

  • y

  • dx

  • xC

  • param0, p_width0, param1, p_width1... paramN, p_widthN

  • y_width

  • u_width

Аргумент dx является указателем на массив, ширина которого совпадает с количеством непрерывных производных, заданных на панели Initialization. Ваш код должен использовать этот массив, чтобы возвратить значения производных, которые это вычисляет. Смотрите Выходную Панель для значений и использования других аргументов. Аргументы позволяют вашему коду вычислять производные как функцию S-входных-параметров-функции, выходных параметров, и, опционально, параметров. Ваш код может вызвать внешние функции, объявленные на панель Libraries.

Дискретная панель обновления

Если S-функция имеет дискретные состояния, используйте панель Discrete Update, чтобы ввести код, который вычисляет на шаге текущего времени значения дискретных состояний на следующем временном шаге.

Введите код для функции mdlUpdate, чтобы вычислить значения дискретных состояний в поле Code description на этой панели. При генерации кода Разработчик S-функции берет код в этой панели и вставляет его в функцию обертки формы

void sfun_Update_wrapper(const real_T *u,
						const real_T *y, 
						real_T *xD, 
						const real_T  *param0,  /* optional */
						int_T p_width0, /* optional */
						real_T  *param1,/* optional */
	 					int_T p_width1, /* optional */
						int_T y_width, /* optional */
		 				int_T u_width) /* optional */
{

	/* Your code inserted here. */

}

где sfun является именем S-функции. Разработчик S-функции вставляет вызов этой функции обертки в методе коллбэка mdlUpdate, который она генерирует для S-функции. Механизм Simulink вызывает метод mdlUpdate в конце каждого временного шага, чтобы получить значения дискретных состояний на следующем временном шаге (см. Взаимодействие Engine Simulink с S-функциями C). На следующем временном шаге механизм пасует назад обновленные состояния к методу mdlOutputs (см. Выходную Панель).

Метод коллбэка mdlUpdates, сгенерированный для S-функции, передает следующие аргументы функции обертки обновлений:

  • u

  • y

  • xD

  • param0, p_width0, param1, p_width1... paramN, p_widthN

  • y_width

  • u_width

Смотрите Выходную Панель для значений и использования этих аргументов. Ваш код должен использовать xD (дискретные состояния) переменная, чтобы возвратить значения дискретных состояний, которые это вычисляет. Аргументы позволяют вашему коду вычислять дискретные состояния как функции S-входных-параметров-функции, выходных параметров, и, опционально, параметров. Ваш код может вызвать внешние функции, объявленные на панель Libraries.

Оконечная панель

Используйте панель Terminate для записи кода к свободному память, выделенная в панели Start. Память, на которую ссылается PWorks, может также быть замечена Terminate и должна быть освобождена здесь.

Создайте информационную панель

Используйте Информационную панель Сборки, чтобы задать опции для создания файла MEX S-функции. Эта панель содержит следующие поля.

Диагностика компиляции

Информация об отображениях как Разработчик S-функции генерирует исходные и исполняемые файлы C.

Покажите шаги компиляции

Регистрируйте каждый шаг сборки в поле Compilation diagnostics.

Создайте debuggable файл MEX

Включайте отладочную информацию в сгенерированный файл MEX.

Включите поддержку покрытия

Сделайте S-Function совместимый с покрытием модели. Для получения дополнительной информации смотрите Покрытие для Пользовательского Кода C/C++ в Моделях Simulink (Simulink Coverage) в документации Simulink Coverage™.

Сгенерируйте обертку TLC

Выбор этой опции позволяет вам генерировать файл TLC. Необходимо сгенерировать файл TLC, если вы запускаете свою модель в Быстром Режиме Accelerator или генерируете код Simulink Coder™ из вашей модели. Кроме того, в то время как это не необходимо для симуляций Режима Accelerator, файл TLC сгенерирует код для S-функции и таким образом заставляет вашу модель запуститься быстрее в Режиме Accelerator.

Сохраните код только

Не создавайте файл MEX из сгенерированного исходного кода.

Включите доступ к SimStruct

Делает SimStruct (S) доступный для функций обертки, которые генерирует Разработчик S-функции. Это позволяет вам использовать макросы SimStruct и функции с вашим кодом в Outputs, Continuous Derivatives и панелях Discrete Updates. Например, с этой включенной опцией, можно использовать макросы, такие как ssGetT в коде, который вычисляет S-функцию выходные параметры:

double t = ssGetT(S);
  if(t < 2 ) {
    y0[0] = u0[0];
  } else {
    y0[0]= 0.0;
  }

Дополнительные методы

Нажмите эту кнопку, чтобы включать дополнительные методы TLC в файл TLC для вашей S-функции. Проверяйте методы, вы хотите добавить и нажать кнопку Close, чтобы включать методы в ваш файл TLC. Для получения дополнительной информации см. Методы Конечного файла Блока (Simulink Coder).

Пример: Моделирование Системы Two-Input/Two-Output

sfbuilder_example в качестве примера показывает, как использовать Разработчика S-функции, чтобы смоделировать two-input/two-output дискретную систему пространства состояний с двумя состояниями. В примере матрицы пространства состояний являются параметрами к S-функции, и S-входной-параметр-функции и вывод являются векторами. Можно найти вручную записанную версию S-функции в dsfunc.c.

Примечание

Необходимо создать S-функцию прежде, чем запустить модель в качестве примера. Чтобы создать S-функцию, дважды кликните на блоке S-Function Builder в модели и нажмите Build на диалоговом окне S-Function Builder, которое открывается.

Инициализация настроек S-функции

Панель Initialization задает количество дискретных состояний и их начальных условий, а также устанавливает шаг расчета S-функции. Этот пример содержит два дискретных состояния, каждый инициализированный к 1, и дискретный демонстрационный режим с шагом расчета 1.

Инициализируя входные параметры, Выходные параметры и параметры

Панель Data Properties задает размерности S-входного-параметра-функции и вывода, а также инициализирует матрицы пространства состояний.

Панель Input ports задает один порт S-входного-параметра-функции как 1D вектор с двумя строками.

Панель Output ports так же задает один выходной порт S-функции как 1D вектор с двумя строками.

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

Панель S-function parameters наверху Разработчика S-функции содержит фактические значения для матриц пространства состояний, вводимых как выражения MATLAB. В этом примере каждый параметр пространства состояний является two-two матрицей. Также можно сохранить матрицы пространства состояний в переменных в рабочем пространстве MATLAB и ввести имена переменных в поле Value для каждого параметра.

Определение Выходного метода

Панель Outputs вычисляет S-функцию вывод как функция входных векторов и векторов состояния и матриц пространства состояний. В выходном коде, ссылочные S-параметры-функции с помощью названий параметра, заданных на Data Properties — панель Parameters. Индексируйте в 2D матрицы с помощью скалярного индекса, имея в виду, что S-функции используют основанную на нуле индексацию. Например, чтобы получить доступ к элементу C(2,1) в S-параметре-функции C, используйте C[1] в коде S-функции.

Панель Outputs также выбирает опцию Inputs are needed in the output function (direct feedthrough), поскольку эта модель в пространстве состояний имеет ненулевую матрицу D.

Определение дискретного метода обновления

Панель Discrete Update обновляет дискретные состояния. Как с выходным кодом, используйте S-имена-параметров-функции и индекс в 2D матрицы с помощью скалярного индекса, имея в виду, что S-функции используют основанную на нуле индексацию. Например, чтобы получить доступ к элементу A(2,1) в S-параметре-функции A, используйте A[1] в коде S-функции. Переменная xD хранит окончательные значения дискретных состояний.

Создание примера пространства состояний

Нажмите кнопку Build на Разработчике S-функции, чтобы создать исполняемый файл для этой S-функции. Можно теперь запустить модель и сравнить вывод с исходной дискретной S-функцией пространства состояний, содержавшейся в sfcndemo_dsfunc.