Диалоговое окно 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 дискретную систему в пространстве состояний.
Эта панель отображает целевое S-имя-функции и параметры и содержит следующие средства управления.
Задает имя целевой S-функции.
Задает выходной язык для S-функции. Можно принять решение сгенерировать S-функции на C/C++, или можно наследовать настройки модели.
Эта таблица показывает параметры целевой S-функции. Каждая строка таблицы соответствует параметру и каждому отображения столбца свойство параметра можно следующим образом:
Имя Имя параметра. Задайте и измените это свойство от Панели Параметров.
Тип данных Перечисляет тип данных параметра. Задайте и измените это свойство от Панели Параметров.
Значение Задает значение параметра. Введите допустимое выражение MATLAB® в это поле.
Используйте эту кнопку, чтобы сгенерировать исходный код C и исполняемый файл MEX от информации, которую вы ввели в Разработчика S-функции. Если кнопка помечена Build, S-Function Builder генерирует исходный код и исполняемый файл MEX. Если кнопка помечена Save, она генерирует только исходный код C. Используйте флажок Save code only на панели Build Info, чтобы переключить функциональность этой кнопки.
Используйте маленькую кнопку в правом нижнем углу панели Parameters/S-Function Name, чтобы свернуть и расширить нижнюю часть диалогового окна S-Function Builder.
Эта панель Port/Parameter на левых отображениях порты и параметры, которые диалоговое окно задает для целевой S-функции.
Панель содержит древовидное управление, главные узлы которого соответствуют целевым портам S-входного-параметра-функции, выходным портам и параметрам, соответственно. Расширение Input port, Выходных портов или узла Параметра отображает входные порты, выходные порты или параметры, соответственно, заданный для целевой S-функции. Выбор любого порта или узлов параметра выбирает соответствующую запись на соответствующем порте или панели спецификации параметра.
Панель Initialization позволяет вам задавать основные характеристики S-функции, такие как ширина ее портов ввода и вывода и ее шага расчета.
Разработчик S-функции использует информацию, что вы вводите в эту панель, чтобы сгенерировать mdlInitializeSizes
метод коллбэка. Механизм Simulink® вызывает этот метод во время фазы инициализации модели симуляции, чтобы получить основную информацию о S-функции. (См. Взаимодействие Engine Simulink с S-функциями C для получения дополнительной информации о фазе инициализации модели.)
Панель Initialization содержит следующие поля.
Количество дискретных состояний в S-функции.
Начальные условия дискретных состояний в S-функции. Можно ввести значения как список, разделенный запятыми или как вектор (например, [0 1 2]
). Количество начальных условий должно равняться количеству дискретных состояний.
Количество непрерывных состояний в S-функции.
Начальные условия непрерывных состояний в 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 |
Row-major | Упорядоченный по строкам | Блок S-Function Builder добавляет функцию SimStruct В процессе моделирования, если ваш код C/C++ включает матрицы или многомерные входные параметры, выходные параметры или параметры, транспонирует, добавляются к этим методам коллбэка S-функции:
Simulink также применяется, предыдущее транспонирует когда рабочая симуляция в Акселераторе и Быстрых Режимах Accelerator. S-функция не встраивается при помощи TLC. Вместо этого S-функция MEX с транспонирует, скомпилированы непосредственно. |
Any | Функция C/C++ не затронута размещением массивов | Блок S-Function Builder добавляет функцию SimStruct |
Эта панель также содержит снабженные вкладками панели, которые позволяют вам задать атрибуты портов и параметров, которые вы создаете. См.:
Панель 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. Каждая запись в строке отображает свойство параметра можно следующим образом.
Имя параметра. Отредактируйте это поле, чтобы изменить название.
Перечисляет тип данных параметра. Нажмите смежную кнопку, чтобы отобразить список поддерживаемых типов данных. Чтобы изменить тип данных параметров, выберите новый тип из списка.
Задает, имеет ли параметр действительный или комплексные числа.
Эта панель позволяет вам задавать атрибуты типа данных портов ввода и вывода целевой 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_widthN | param0 , 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.
Включайте отладочную информацию в сгенерированный файл MEX.
Сделайте S-Function совместимый с покрытием модели. Для получения дополнительной информации смотрите Покрытие для Пользовательского Кода C/C++ в Моделях Simulink (Simulink Coverage) в документации Simulink Coverage™.
Выбирание этой опции позволяет вам генерировать файл TLC. Необходимо сгенерировать файл TLC, если вы запускаете свою модель в Быстром Режиме Accelerator или генерируете код Simulink Coder™ из вашей модели. Кроме того, в то время как это не необходимо для симуляций Режима Accelerator, файл TLC сгенерирует код для S-функции и таким образом заставляет вашу модель запуститься быстрее в Режиме Accelerator.
Не создавайте файл MEX из сгенерированного исходного кода.
Делает 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).
Пример sfbuilder_example
показывает, как использовать Разработчика S-функции, чтобы смоделировать two-input/two-output дискретную систему в пространстве состояний с двумя состояниями. В примере матрицы пространства состояний являются параметрами к S-функции, и S-входной-параметр-функции и выход являются векторами. Можно найти вручную записанную версию S-функции в dsfunc.c
.
Необходимо создать S-функцию прежде, чем запустить модель в качестве примера. Чтобы создать S-функцию, дважды кликните на блоке S-Function Builder в модели и нажмите Build на диалоговом окне S-Function Builder, которое открывается.
Панель 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
.