Создание S-функций на языке C с помощью S-Function Builder — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Создание S-функций на языке C с помощью S-Function Builder

2018-01-05 449
Создание S-функций на языке C с помощью S-Function Builder 0.00 из 5.00 0 оценок
Заказать работу

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

Создание S-функции рассмотрим на примере двигателя постоянного тока независимого возбуждения. Его математическое описание дано в п. 16.7.6.1. Поскольку в стандарте языка C отсутствуют матричные операции, то уравнения (9) - (12) перепишем в обычной форме:

(15)
(16)
(17)
(18)

Значения элементов матриц даны в п. 16.7.6.1.

S-Function Builder оформлен в виде обычного блока Simulink и находится в библиотеке Function&Tables (функции и таблицы). Пиктограмма блока показана на рис.16.12.


Рис. 16.12 Пиктограмма блока S-Function Builder

Двойной щелчок на пиктограмме открывает окно S - Function Builder. Окно S - Function Builder (см. рис. 16.13) содержит панель параметров (Parameters), в которой находится графа для ввода имени S -функции (S - function name) и графа для ввода начальных значений параметров, передаваемых через окно диалога блока S - function (S - function parameters). Также на этой панели находится кнопка Build, предназначенная для запуска процесса компиляции S -функции. В нижней части окна S - Function Builder находятся кнопки Help (вызов справки) и Close / Cancel (закрыть окно).

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

и фрагментов ее кода:

1. Initialization -Инициализация. На вкладке Initialization задаются следующие свойства S -функции:

· Input port width -Число входных переменных (размерность входного вектора).

· Output port width -Число выходных переменных (размерность выходного вектора).

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

· Sample time -Шаг модельного времени. Может принимать значения (из списка): Inherited -наследуемый, Continuous -непрерывный, Discrete -дискретный.

· Discrete sample time value -Шаг модельного времени для дискретной системы. Параметр доступен для ввода значения, если выбран дискретный шаг расчета.

· Number of discrete states -Число дискретных переменных состояния.

· Discrete states IC - Начальные значения дискретных переменных состояния. Значения вводятся через запятую.

· Number of continuous states - Число непрерывных переменных состояния.

· Continuous states IC -Начальные значения непрерывных переменных состояния. Значения вводятся через запятую.

Окно S-Function Builder с открытой вкладкой Ininialization показано на рис.16.13. Для рассматриваемого примера число входных переменных равно двум (напряжение на обмотке якоря и момент сопротивления). Число выходных переменных равно двум (момент и скорость). Количество переменных состояния также равно двум (ток якоря и скорость). Число параметров S-функции, передаваемых через окно диалога равно 6 (см. п. 16.7.6.2), шаг модельного времени - наследуемый, число дискретных переменных состояния - 0, начальные значения дискретных и непрерывных переменных состояния нулевые.


Рис. 16.13 Окно S-Function Builder (вкладка Ininialization)

2. Libraries -Библиотеки. На вкладке имеется три окна для ввода фрагментов С -кода:

· Library/Object/Source files -Имена подключаемых библиотечных (*. lib) и объектных (*. obj) файлов. Указанные файлы должны находиться в текущей рабочей папке, либо следует полностью указать путь к этим файлам. Имена файлов указываются по одному в каждой строке.

· Includes -Директивы для подключения заголовочных (*. h) и обычных (*.с, *.с pp) файлов. Например:
# include <math.h>
# include "myutils.c" и т.п.
В данном окне следует записать файлы, содержащие функции пользователя, которые будут использоваться в проекте.

· External Function Declarations -Объявления внешних функций, если они отсутствуют в заголовочных или иных подключаемых файлах. Например:
extern double func(double a);

Окно S - Function Builder с открытой вкладкой Libraries показано на рис. 16.14.


Рис. 16.14 Окно S-Function Builder (вкладка Libraries)

3. Outputs - Выходы. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета выходных переменных. В расчетных выражениях можно использовать следующие переменные (не объявляя их специально):

· u 0[0], u 0[1], u 0[2] … u 1[0], u 1[1], u 1[2]… и т.д. - Входные сигналы блока S - function. Входные сигналы должны быть действительными и иметь тип double.

· y [0], y [1], y [2] и т.д. - Выходные сигналы блока S - function. Выходные сигналы должны быть действительными и иметь тип double.

· param 1[0], param 2[0], param 3[0] и т.д. - Параметры блока S - function, передаваемые через окно диалога. Параметры быть действительными и иметь тип double.

· p _ width 0, p _ width 1, p _ width 2 - и т.д. Переменные целого типа, значения которых равны размерности нулевого, первого, второго и т.д. параметров блока S- function, передаваемых через окно диалога.

· u _ width - Фактическая размерность входного сигнала (переменная целого типа). Переменная доступна, если размерность входного сигнала на вкладке Initialization задана равной -1 (минус один). Если входной сигнал матрица - значением переменной u _ width будет вектор из двух элементов.

· y _ width -Фактическая размерность выходного сигнала (переменная целого типа). Переменная доступна, если размерность выходного сигнала на вкладке Initialization задана равной -1 (минус один). Если выходной сигнал матрица - значением переменной y _ width будет вектор из двух элементов.

· xC [0], xC [1], xC [2] и т.д. - Непрерывные переменные состояния. Тип переменных - double.

· xD [0], xD [1], xD [2] и т.д. - Дискретные переменные состояния. Тип переменных - double.

На вкладке имеется флажок для установки параметра Inputs are needed in the output function (direct feedthrough) -использование входных сигналов для расчета выходных (прямой проход).

Текст автоматически генерируемого метода mdl Outputs,приведен ниже:

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 */{/* Место для ввода расчетного кода */},

где sfun -имя S -функции.

Окно S - Function Builder с открытой вкладкой Output s показано на рис. 16.15.


Рис. 16.15 Окно S-Function Builder (вкладка Outputs)

В примере на рис. 16.15 в первой строке объявляются переменные - параметры электродвигателя, и этим переменным присваиваются значения параметров передаваемых в S -функцию через окно диалога. Во второй строке объявляются и вычисляются переменные COO и С11, входящие в уравнения (17), (18). В третьей и четвертой строках записаны выражения для расчета выходных сигналов в соответствии с уравнениями (17) и (18). Параметр Inputs are needed in the output function (direct feedthrough) не установлен, поскольку в выражениях для расчета выходных сигналов отсутствуют входные. После генерации С -кода в тексте S -функции появится код, введенный в окне вкладки Outputs.

4. Continuous Derivatives -Производные непрерывных переменных состояния. Вкладка содержит текстовое окно, предназначенное для ввода выражений расчета производных непрерывных переменных состояния. В расчетных выражениях можно использовать те же переменные, что и на вкладке Outputs,за исключением дискретных переменных состояния xD. Сами производные обозначаются как dx [0], dx [1], dx [2] и т.п.

Текст автоматически генерируемого метода mdl Derivatives,приведен ниже:

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 */{/* Место для ввода расчетного кода */}

Окно S-Function Builder с открытой вкладкой Continuous Derivatives показано на рис. 16.15.


Рис. 16.16 Окно S-Function Builder (вкладка Continuous Derivatives)

В примере на рис. 16.16 в первых двух строках объявляются переменные - параметры электродвигателя, и этим переменным присваиваются значения параметров передаваемых в S -функцию через окно диалога. В следующих двух строках объявляются и вычисляются переменные AOO … B 11, входящие в уравнения (15), (16). В последних двух строках записаны выражения для расчета производных непрерывных переменных состояния в соответствии с уравнениями (15) и (16).

5. Discrete Update - Расчет дискретных переменных состояния. В текстовом окне вкладки записываются выражения для расчета дискретных переменных состояния. В расчетных выражениях можно использовать те же переменные, что и на вкладке Outputs,за исключением непрерывных переменных состояния x С. Сами дискретные переменные состояния обозначаются как xD [0], xD [1], xD [2] и т.п.

Текст автоматически генерируемо метода mdl Update,приведен ниже:

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 */{/* Место для ввода расчетного кода */}

Окно S - Function Builder с открытой вкладкой Discrete Update показано на рис. 16.17.


Рис. 16.17 Окно S-Function Builder (вкладка Discrete Update).

В рассматриваемом примере отсутствуют дискретные переменные состояния, поэтому на рисунке дан лишь пример расчетного выражения.

6. Build Info -Информация о компоновке. На вкладке в окне Compilation diagnostics (диагностические сообщения о ходе компиляции) отображается информацию о процессе компоновки S-функции.

На вкладке Build Info с помощью флажков можно установить следующие параметры:

· Show compile steps -Отображать стадии компиляции. При установленном флажке в окне Compilation diagnostics будут отображены все сообщения компилятора о процессе компиляции. Данный параметр желательно устанавливать при сборке S -функции, использующей внешние функции.

· Create a debuggable MEX - file -Создавать отлаживаемый исполняемый файл. При установленном флажке в процессе компиляции будет создан файл, позволяющий выполнять отладку Simulink -модели.

· Generate wrapper TLC -Создавать TLC- файл. Флажок устанавливается, если предполагается использовать ускоренный режим расчетов или Realtime Workshop.

· Save code only -Создавать только текстовый код. Если флажок установлен, то будут созданы только текстовые файлы на языке С.

Перед началом компиляции необходимо выбрать (настроить) компилятор. Для этого в командном окне MATLAB следует ввести команду:

Mex - setup

и далее следовать диалогу с компилятором. С программой MATLAB поставляется компилятор Lcc. Ниже приводится пример такого диалога:

Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? n -Ответ пользователя

Select a compiler: [1] Borland C++Builder version 5.0 [2] Borland C++Builder version 4.0 [3] Borland C++Builder version 3.0 [4] Borland C/C++ version 5.02 [5] Borland C/C++ version 5.0 [6] Borland C/C++ (free command line tools) version 5.5 [7] Compaq Visual Fortran version 6.1 [8] Compaq Visual Fortran version 6.5 [9] Digital Visual Fortran version 6.0 [10] Digital Visual Fortran version 5.0 [11] Lcc C version 2.4 [12] Microsoft Visual C/C++ version 6.0 [13] Microsoft Visual C/C++ version 5.0 [14] WATCOM C/C++ version 11 [15] WATCOM C/C++ version 10.6

[0] None

Compiler: 11 -Ответ пользователя


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.025 с.