Эта тема покажет вам, как создать сигнал шины и соединить его с Разработчиком S-функции. В конце вы будете использовать Разработчика S-функции, чтобы создать простую S-функцию MEX C.
Разработчик S-функции является блоком Simulink®, который интегрирует код C/C++, чтобы создать S-функцию из технических требований и кода С, который вы предоставляете. Разработчик S-функции также служит оберткой для сгенерированной S-функции в моделях, которые используют S-функцию. Чтобы узнать больше на Разработчике S-функции, смотрите S-функции Сборки Автоматически Используя Разработчика S-функции. Чтобы видеть больше примеров о том, как использовать Разработчика S-функции, введите sfundemos
в Командном окне MATLAB® затем перейдите к C-file S-functions> S-function Builder.
Начните создавать свою S-функцию путем установки текущей папки на папку, в которой вы хотите создать S-функцию. Затем добавьте эту папку в путь MATLAB.
mkdir newSfun addpath(fullfile(pwd,'newSfun')) cd('newSfun')
Если вы хотите соединить сигнал шины с портом Input or Output Разработчика S-функции, необходимо сначала создать объект шины. Можно создать объект шины в интерактивном режиме с помощью Редактора Шины Simulink (см., Создают и Задают Simulink. Соедините шиной Объекты). В качестве альтернативы можно использовать 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-функции с шиной, введите следующую команду в командном окне MATLAB:
open_system(fullfile(matlabroot,'/toolbox/simulink/simdemos/simfeatures/sfbuilder_bususage'))
Создайте новую модель Simulink. Нажмите на холст и введите Разработчика S-функции, чтобы создать экземпляр блока S-Function Builder. В качестве альтернативы перетащите блок S-Function Builder из библиотеки User-Defined Functions в Браузере Библиотеки в новую модель.
Нажмите на холст и введите Разработчика S-функции или скопируйте экземпляр блока S-Function Builder из библиотеки User-Defined Functions в новую модель.
Дважды кликните, чтобы открыть Разработчика S-функции редактор.
Используйте панели записи спецификации и кода на диалоговом окне 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 on the 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-функции автоматически генерирует этот заголовочный файл.
После генерации исходного кода S-функции Разработчик S-функции использует 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.
В диалоговом окне Block Parameters, которое открывается в поле редактирования S-function name, вводят имя исполняемого файла, сгенерированного Разработчиком S-функции.
Введите любые параметры для S-функции в поле редактирования S-function parameters. Введите параметры в порядок, в котором они появляются в диалоговом окне S-Function Builder.
Нажмите OK на диалоговом окне S-Function Block 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