русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-08-31; просмотров: 3651; Нарушение авторских прав


Инструментарий 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 - Выходы. Вкладка содержит текстовое окно,предназначенное для ввода выражений расчета выходных переменных. В расчетныхвыражениях можно использовать следующие переменные (не объявляя их специально):

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

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

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

· p_width0, p_width1, p_width2 - и т.д. Переменные целоготипа, значения которых равны размерности нулевого, первого, второго и т.д.параметров блока 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с открытой вкладкой Outputs показано на рис. 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. ContinuousDerivatives -Производные непрерывныхпеременных состояния. Вкладка содержит текстовое окно, предназначенное для ввода выраженийрасчета производных непрерывных переменных состояния. В расчетных выраженияхможно использовать те же переменные, что и на вкладке Outputs,за исключением дискретныхпеременных состояния xD. Сами производные обозначаются как dx[0], dx[1], dx[2] и т.п.

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

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-FunctionBuilder(вкладка ContinuousDerivatives)

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

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

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

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-FunctionBuilder(вкладка 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 следует ввести команду:



<== предыдущая лекция | следующая лекция ==>
Математическое описание ДПТ НВ | Модернизация S-функций, созданных с помощью S-Function Builder


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.488 сек.