В этой теме будет показано, как создать сигнал шины и подключить его к S-Function Builder. В конце вы будете использовать S-Function Builder, чтобы создать простую С MEX S-функцию.
Построитель S-функций является Simulink® блок, который интегрирует код C/C + +, чтобы создать S-функцию из спецификаций и кода С, которые вы поставляете. S-Function Builder также служит оберткой для сгенерированной S-функции в моделях, которые используют S-функцию. Дополнительные сведения о S-Function Builder см. в разделе Сборка S-функций автоматически с использованием S-Function Builder. Чтобы увидеть дополнительные примеры о том, как использовать S-Function Builder, введите sfundemos
в MATLAB® Командное окно, затем перейдите к разделу C-file 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-Function Builder из библиотеки User-Defined Functions в браузере библиотек в новую модель.
Щелкните на холсте и введите S-Function Builder или скопируйте образец блока S-Function Builder из библиотеки User-Defined Functions в новую модель.
Дважды кликните, чтобы открыть редактор 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
и выберите Generate TLC wrapper, чтобы создать оболочку для S-функции для генерации кода.
Нажмите Build на S-Function Builder, чтобы начать процесс сборки.
S-Function Builder создает файл MEX, который реализует указанную S-функцию и сохраняет файл в текущей папке (см. «Как S-Function Builder создает S-функцию»).
Сохраните модель, содержащую блок S-Function Builder.
S-Function Builder создает 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-Function Builder использует mex
команда, чтобы создать представление файла MEX S-функции из сгенерированного исходного кода и любого указанного внешнего пользовательского исходного кода и библиотек.
Чтобы использовать сгенерированную S-функцию в другой модели, сначала проверьте, чтобы убедиться, что папка, содержащая сгенерированную S-функцию, находится в пути MATLAB. Затем скопируйте блок S-Function Builder из модели, используемой для создания S-функции, в целевую модель. При необходимости установите параметры целевой модели равными значениям, требуемым целевой моделью.
Кроме того, можно развернуть сгенерированную S-функцию, не используя блок S-Function Builder или не раскрывая базовый исходный файл C.
Откройте модель Simulink, которая будет включать S-функцию.
Щелкните на холсте, чтобы создать образец блока s-function или скопируйте блок s-function из библиотеки User-Defined Functions в браузере библиотек в модель.
Дважды кликните по блоку S-Function.
В открывшихся Параметрах блоков окне в S-function name поле edit введите имя исполняемого файла, сгенерированного S-Function Builder.
Введите любые параметры для S-функции в S-function parameters поле edit. Введите параметры в том порядке, в котором они появляются в диалоговом окне S-Function Builder.
Нажмите OK в диалоговом окне Блок S-function Parameters.
Создав блок из сгенерированной S-функции, можно также создать маску для S-Function блока. Дополнительные сведения о том, как добавить маску для S-функции, см. в разделе «Создание маски блоков». Чтобы увидеть пример добавления маски блоков к S-функции, введите следующую команду в Командном окне MATLAB.
open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfcndemo_matadd'));
Можно использовать сгенерированный исполняемый файл в любом блоке S-Function в любой модели, пока исполняемый файл находится в пути MATLAB.
S-Function | S-Function Builder