В этом разделе показано, как создать сигнал шины и подключить его к построителю S-функций. В конце вы будете использовать S-Function Builder для построения простой C MEX S-функции.
S-Function Builder - это блок Simulink ®, который интегрирует код C/C + + для создания S-функции из спецификаций и кода C. Построитель S-функций также служит оболочкой для сгенерированной S-функции в моделях, использующих S-функцию. Дополнительные сведения о построителе S-функций см. в разделе Автоматическое создание S-функций с помощью построителя S-функций. Для просмотра дополнительных примеров использования S-Function Builder введитеsfundemos в окне команд MATLAB ® перейдите к C-файлу S-functions > S-function Builder.
Начните создавать S-функцию, установив текущую папку в папку, в которой требуется создать S-функцию. Затем добавьте эту папку в путь MATLAB.
mkdir newSfun addpath(fullfile(pwd,'newSfun')) cd('newSfun')
Если требуется подключить сигнал шины к входному или выходному порту S-Function Builder, необходимо сначала создать объект шины. Объект шины можно создать в интерактивном режиме с помощью редактора шины Simulink (см. раздел Создание и указание объектов Simulink.Bus). Кроме того, можно использовать Simulink.Bus:
В окне команд MATLAB введите:
a = Simulink.Bus
В результате, HeaderFile для шины по умолчанию - пустой вектор символов:
a =
Simulink.Bus
Description: ''
HeaderFile: ''
Elements: [0x1 double]Если требуется указать файл заголовка для шины, то в окне команд MATLAB введите следующее:
a.Headerfile = 'Busdef.h'
Если файл заголовка не указан, Simulink автоматически создает Sfunctionname_bus.h

Для демонстрации использования S-Function Builder с шиной введите следующую команду в окне команд MATLAB:
open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfbuilder_bususage'))Создайте новую модель Simulink. Щелкните холст и введите S-Function Builder, чтобы создать экземпляр блока S-Function Builder. Можно также перетащить блок построителя S-функций из библиотеки пользовательских функций в браузере библиотеки в новую модель.
Щелкните холст и введите S-Function Builder или скопируйте экземпляр блока S-Function Builder из библиотеки пользовательских функций в новую модель.

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

Заполнить Outputs_wrapper функция с логикой кода. См. пример кода:
void sfbuilder_bus_Outputs_wrapper(const SFB_COUNTERBUS *u0,
const int32_T *u1,
const SFB_COUNTERBUS *y0,
int32_T *y1)
{
/* Output_BEGIN */
int32_T limit;
boolean_T inputGElower;
/* limit is sum of SFB_SIGNALBUS.input and the second input(u1) */
limit = u0->inputsignal.input + *u1;
/* check if SFB_SIGNALBUS.limit is >= LIMITBUS.lower_saturation_limit */
inputGElower = (limit >= u0->limits.lower_saturation_limit);
if((u0->limits.upper_saturation_limit >= limit) && inputGElower)
{
*y1 = limit;
}
else
{
if(inputGElower)
{
limit = u0->limits.upper_saturation_limit;
} else
{
limit = u0->limits.lower_saturation_limit;
}
*y1 = limit;
}
y0->inputsignal.input = *y1;
y0->limits = u0->limits;
/* Output_END */
} |
Щелкните стрелку под Build и выберите Создать оболочку TLC, чтобы создать оболочку для S-функции для генерации кода.
Щелкните Создать (Build) в Построителе S-функций (S-Function Builder), чтобы запустить процесс построения.
Построитель S-функций создает файл MEX, реализующий указанную S-функцию, и сохраняет файл в текущей папке (см. раздел Как построитель S-функций создает S-функцию).
Сохраните модель, содержащую блок S-Function Builder.
Построитель S-функций создает S-функцию путем создания следующих исходных файлов в текущей папке:
sfun.c - Этот файл содержит представление C исходного кода стандартных частей сгенерированной S-функции.
sfun_wrapper.c - Этот файл содержит пользовательский код, введенный в диалоговом окне S-Function Builder.
sfun.tlc - Этот файл позволяет выполнять сгенерированную S-функцию в Simulink Rapid Accelerator и позволяет встроить S-функцию во время формирования кода. Кроме того, этот файл генерирует код для S-функции в Accelerator режим, который позволяет модели работать быстрее.
sfun_bus.h - При указании любого Input port или Output port как шина в таблице Порты и параметры (Ports and Parameters), но не указывайте файл заголовка, то S-Function Builder автоматически генерирует этот файл заголовка.
После генерации исходного кода S-функции построитель S-функций использует mex для создания представления файла MEX S-функции из сгенерированного исходного кода и любого внешнего пользовательского исходного кода и библиотек, указанных пользователем.
Чтобы использовать сгенерированную S-функцию в другой модели, сначала проверьте, что папка, содержащая сгенерированную S-функцию, находится в пути MATLAB. Затем скопируйте блок S-Function Builder из модели, используемой для создания S-функции, в целевую модель. При необходимости задайте для параметров целевой модели значения, требуемые для целевой модели.
Кроме того, можно развернуть сгенерированную S-функцию без использования блока S-Function Builder или раскрытия базового исходного файла C.
Откройте модель Simulink, которая будет включать S-функцию.
Щелкните холст, чтобы создать экземпляр S-функционального блока, или скопируйте в модель S-функциональный блок из библиотеки пользовательских функций в браузере библиотеки.
Дважды щелкните по блоку S-Function.
В открывшемся диалоговом окне «Параметры блока» в поле редактирования имени S-функции введите имя исполняемого файла, созданного построителем S-функций.
Введите любые параметры для S-функции в поле редактирования параметров S-функции. Введите параметры в том порядке, в котором они отображаются в диалоговом окне S-Function Builder.
Нажмите кнопку OK в диалоговом окне S-Function Block Parameters (Параметры S-функционального блока).
Создав блок из сгенерированной S-функции, можно также создать маску для блока S-функции. Дополнительные сведения о добавлении маски для S-функции см. в разделе Создание блоковых масок. Для просмотра примера добавления блоковых масок к S-функции введите следующую команду в окне команд MATLAB.
open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfcndemo_matadd'));Созданный исполняемый файл можно использовать в любом блоке S-Function в любой модели, если он находится по пути MATLAB.
S-функция | Построитель S-функций