Разработчик 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. Используйте код Сохранения только флажок на Информационной панели Сборки, чтобы переключить функциональность этой кнопки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Inherited

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

  • Continuous

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

  • Discrete

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

Значение частоты дискретизации

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

Примечание

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

Количество PWorks

Количество указателей данных используется S-функцией. PWorks указывает на память за жизненный цикл блока. Например, можно объявить и инициализировать указатель на файл или память в Запуске, и получить доступ к нему в Выходных параметрах, Обновлении и панелях Производных, и освободить его в Оконечной панели. Код, написанный в этих панелях, вызван 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 с транспонирует, компилируются непосредственно.

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

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

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

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

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

Имя порта

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

Размерности

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

'Строки'

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

Столбцы

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

Примечание

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

Сложность

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

Шина

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

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

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

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

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

Имя порта

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

Размерности

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

'Строки'

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

Столбцы

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

Примечание

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

Сложность

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

Шина

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

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

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

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

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

'ParameterName'

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

Тип данных

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

Сложность

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

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

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

Порт

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

Тип данных

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

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

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

Панель Библиотек позволяет вам задавать местоположение внешних файлов кода, на которые ссылается пользовательский код, который вы вводите в другие панели диалогового окна 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 заголовочные файлы (e. g., #include <math.h>). Используйте кавычки, чтобы заключить имена пользовательских заголовочных файлов (e. g., #include "myutils.h" h. Если ваша S-функция использует пользовательский, включают файлы, которые не находятся в текущей папке, необходимо использовать тег INC_PATH в поле Библиотеки/Объекта/Исходных файлов, чтобы установить включать путь для Разработчика S-функции к директориям, содержащим включать файлы (см. Библиотеку/Объект/Исходные файлы).

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

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

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

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

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

Используйте Выходную панель, чтобы ввести код, который вычисляет выходные параметры 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 является количеством входных портов, заданных на панели Входных портов, найденной на панели Свойств данных. Имена аргументов, которые появляются в выходной функции обертки, совпадают с именами, найденными на панели Входных портов. Ширина каждого массива совпадает с входной шириной, заданной для каждого входного параметра на панели Входных портов. Если вы задали-1 как входная ширина, ширина массива задана аргументом u_width функции обертки (см. ниже).
y0, y1, ... yNУказатель на массивы, содержащие выходные параметры S-функции, где N является количеством выходных портов, заданных на панели Выходных портов, найденной на панели Свойств данных. Имена аргументов, которые появляются в выходной функции обертки, совпадают с именами, найденными на панели Выходных портов. Ширина каждого массива совпадает с выводом width, заданным для каждого вывода на панели Выходных портов. Если вы задали-1 как вывод width, ширина массива задана аргументом y_width функции обертки (см. ниже). Используйте этот массив, чтобы передать выходные параметры, которые ваш код вычисляет назад к механизму Simulink.
xDУказатель на массив, содержащий дискретные состояния S-функции. Этот аргумент появляется, только если вы задали дискретные состояния на панели Инициализации. На первом шаге времени симуляции дискретные состояния имеют начальные значения, которые вы задали на панели Инициализации. На последующих шагах частоты дискретизации состояния получены из значений, которые S-функция вычисляет на предыдущем временном шаге (см. Дискретную Панель Обновления для получения дополнительной информации).
xCУказатель на массив, содержащий непрерывные состояния S-функции. Этот аргумент появляется, только если вы задали непрерывные состояния на панели Инициализации. На первом шаге времени симуляции непрерывные состояния имеют начальные значения, которые вы задали на панели Инициализации. На последующих временных шагах состояния получены путем числовой интеграции производных состояний на предыдущем временном шаге (см. Непрерывную Панель Производных для получения дополнительной информации).
param0, p_width0, param1, p_width1... paramN, p_widthNparam0, param1... paramN является указателями на массивы, содержащие S-параметры-функции, где N является количеством параметров, заданных на панели Параметров, найденной на панели Свойств данных. p_width0, p_width1... p_widthN являются ширинами массивов параметров. Если параметр является матрицей, ширина равняется продукту размерностей массивов. Например, ширина 3 2 параметра матрицы равняется 6. Эти аргументы появляются, только если вы задаете параметры на панели Свойств данных.
y_widthШирина массива, содержащего S-функцию выходные параметры. Этот аргумент появляется в сгенерированном коде, только если вы задали-1 как ширина S-функции вывод. Если вывод является матрицей, y_width является продуктом размерностей матрицы.
u_widthШирина массива, содержащего S-входные-параметры-функции. Этот аргумент появляется в сгенерированном коде, только если вы задали-1 как ширина S-входного-параметра-функции. Если входной параметр является матрицей, u_width является продуктом размерностей матрицы.

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

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

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

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

Если S-функция имеет непрерывные состояния, используйте Непрерывную панель Производных, чтобы ввести код, требуемый вычислить производные состояния. Введите код для функции mdlDerivatives, чтобы вычислить производные непрерывных состояний в поле описания Кода на этой панели. При генерации кода Разработчик 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 является указателем на массив, ширина которого совпадает с количеством непрерывных производных, заданных на панели Инициализации. Ваш код должен использовать этот массив, чтобы возвратить значения производных, которые это вычисляет. Смотрите Выходную Панель для значений и использования других аргументов. Аргументы позволяют вашему коду вычислять производные как функцию S-входных-параметров-функции, выходных параметров, и, опционально, параметров. Ваш код может вызвать внешние функции, объявленные на панель Библиотек.

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

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

Введите код для функции mdlUpdate, чтобы вычислить значения дискретных состояний в поле описания Кода на этой панели. При генерации кода Разработчик 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-входных-параметров-функции, выходных параметров, и, опционально, параметров. Ваш код может вызвать внешние функции, объявленные на панель Библиотек.

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

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

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

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

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

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

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

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

Создайте 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 и функции с вашим кодом в Выходных параметрах, Непрерывных Производных и Дискретных панелях Обновлений. Например, с этой включенной опцией, можно использовать макросы, такие как 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 c.

Примечание

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

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

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

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

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

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

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

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

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

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

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

Выходная панель также выбирает Inputs, необходимы в выходной функции (прямое сквозное соединение) опция, поскольку эта модель в пространстве состояний имеет ненулевую матрицу D.

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

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

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

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

Была ли эта тема полезной?