реферат, рефераты скачать Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
реферат, рефераты скачать
реферат, рефераты скачать
МЕНЮ|
реферат, рефераты скачать
поиск
Программная реализация модального управления для линейных стационарных систем

Программная реализация модального управления для линейных стационарных систем

Курсовая работа:

«Программная реализация модального управления

для линейных стационарных систем»

Постановка задачи:

1. Для объекта управления с математическим описанием

[pic], (1) [pic]- задано,

где [pic] - n-мерный вектор состояния, [pic],

[pic]- начальный вектор состояния,

[pic]- скалярное управление,

[pic]- матрица действительных коэффициентов,

[pic]- матрица действительных коэффициентов,

найти управление в функции переменных состояния объекта, т.е.

[pic], (2)

где[pic]- матрица обратной связи, такое, чтобы замкнутая система была

устойчивой.

2. Корни характеристического уравнения замкнутой системы

[pic] (3)

должны выбираться по усмотрению (произвольно) с условием устойчивости

системы (3).

Задание:

1. Разработать алгоритм решения поставленной задачи.

2. Разработать программу решения поставленной задачи с интерактивным

экранным интерфейсом в системах Borland Pascal, Turbo Vision, Delphi - по

выбору.

3. Разработать программу решения систем дифференциальных уравнений (1) и

(3) с интерактивным экранным интерфейсом.

4. Разработать программу графического построения решений систем (1) и (3) с

интерактивным экранным интерфейсом.

Введение

Наряду с общими методами синтеза оптимальных законов управления для

стационарных объектов всё большее применение находят методы, основанные на

решении задачи о размещении корней характеристического уравнения замкнутой

системы в желаемое положение. Этого можно добиться надлежащим выбором

матрицы обратной связи по состоянию. Решение указанной задачи является

предметом теории модального управления (термин связан с тем, что корням

характеристического уравнения соответствуют составляющие свободного

движения, называемые модами).

Алгоритм модального управления.

Соглашения:

. Задаваемый объект управления математически описывается уравнением

[pic], (1)

где [pic] и [pic] - матрицы действительных коэффициентов,

[pic] - n-мерный вектор состояния

[pic]- скалярное управление,

[pic] - порядок системы (1).

. Обратная связь по состоянию имеет вид

[pic], (2)

где[pic]- матрица обратной связи.

. Система с введенной обратной связью описывается уравнением

[pic] (3)

. Характеристическое уравнение системы (1) имеет вид

[pic] (4)

. Характеристическое уравнение системы (3) с задаваемыми (желаемыми)

корнями [pic]имеет вид

[pic] (5)

Алгоритм:

1. Для исходной системы (1) составляем матрицу управляемости

[pic]

2. Обращаем матрицу [pic], т.е. вычисляем [pic].

Если [pic] не существует (т.е. матрица [pic] - вырожденная), то

прекращаем вычисления: полное управление корнями характеристического

уравнения (5) не возможно.

3. Вычисляем матрицу [pic]

4. Составляем матрицу

[pic]

5. Вычисляем матрицу, обратную матрице [pic], т.е. [pic]

6. Вычисляем матрицу [pic] - матрицу [pic] в канонической форме фазовой

переменной:

[pic]

где [pic]- коэффициенты характеристического уравнения (4).

Матрица [pic] в канонической форме имеет вид

[pic]

7. Составляем вектор [pic] , элементам которого являются коэффициенты

характеристического уравнения (4), т.е. [pic], [pic],

где [pic] - элементы матрицы [pic].

8. Находим коэффициенты характеристического уравнения (5) (см. пояснения) и

составляем из них вектор [pic].

9. Вычисляем вектор [pic].

[pic] - искомая матрица обратной связи системы (3), но она вычислена для

системы, матрицы которой заданы в канонической форме фазовой переменной

([pic] и [pic]).

10. Для исходной системы (3) матрица обратной связи получается по формуле

[pic]

Матрица [pic] - искомая матрица обратной связи.

Пояснения к алгоритму:

В данной работе рассматривается случай, когда управление единственно и

информация о переменных состояния полная. Задача модального управления

тогда наиболее просто решается, если уравнения объекта заданы в

канонической форме фазовой переменной.

Так как управление выбрано в виде линейной функции переменных состояния

[pic], где [pic] является матрицей строкой [pic]. В таком случае уравнение

замкнутой системы приобретает вид [pic]. Здесь

[pic]

[pic]

Характеристическое уравнение такой замкнутой системы будет следующим

[pic]

Поскольку каждый коэффициент матрицы обратной связи [pic] входит только в

один коэффициент характеристического уравнения, то очевидно, что выбором

коэффициентов [pic] можно получить любые коэффициенты характеристического

уравнения, а значит и любое расположение корней.

Если же желаемое характеристическое уравнение имеет вид

[pic],

то коэффициенты матрицы обратной связи вычисляются с помощью соотношений:

[pic]

Если при наличии одного управления нормальные уравнения объекта заданы не

в канонической форме (что наиболее вероятно), то, в соответствии с пунктами

№1-6 алгоритма, от исходной формы с помощью преобразования [pic] или [pic]

нужно перейти к уравнению [pic] в указанной канонической форме.

Управление возможно, если выполняется условие полной управляемости (ранг

матрицы управляемости M должен быть равен n). В алгоритме об управляемости

системы судится по существованию матрицы [pic]: если она существует, то

ранг матрицы равен ее порядку (n). Для объекта управления с единственным

управлением матрица [pic] оказывается также единственной.

Для нахождения коэффициентов [pic] характеристического уравнения (5), в

работе используется соотношения между корнями [pic] и коэффициентами

[pic] линейного алгебраического уравнения степени n:

[pic], (k = 1, 2, ... , n)

где многочлены [pic]- элементарные симметрические функции, определяемые

следующим образом:

[pic],

[pic],

[pic],

...

[pic]

где Sk - сумма всех [pic] произведений, каждое из которых содержит k

сомножителей xj с несовпадающими коэффициентами.

Программная реализация алгоритма.

Текст программной реализации приведен в ПРИЛОЖЕНИИ №1. Вот несколько

кратких пояснений.

. Программа написана на языке Object Pascal при помощи средств Delphi 2.0,

и состоит из следующих основных файлов:

KursovayaWork.dpr

MainUnit.pas

SubUnit.pas

Matrix.pas

Operates.pas

HelpUnit.pas

OptsUnit.pas

. KursovayaWork.dpr - файл проекта, содержащий ссылки на все формы проекта

и инициализирующий приложение.

. В модуле MainUnit.pas находится описание главной формы приложения, а

также сконцентрированы процедуры и функции, поддерживаюшие нужный

интерфейс программы.

. Модули SubUnit.pas и Operates.pas содержат процедуры и функции,

составляющие смысловую часть программной реализации алгоритма, т.е.

процедуры решения задачи модально управления, процедуры решения систем

дифференциальных уравнений, процедуры отображения графиков решений систем

и т.д. Там также находятся процедуры отображения результатов расчетов на

экран.

. В модуле Matrix.pas расположено описание класса TMatrix - основа

матричных данных в программе.

. Модули HelpUnit.pas и OptsUnit.pas носят в программе вспомогательный

характер.

. Для решения систем дифференциальных уравнений использован метод Рунге-

Кутта четвертого порядка точности с фиксированным шагом. Метод был

позаимствован из пакета программ NumToolBox и адаптирован под новую

модель матричных данных.

. Обращение матриц производится методом исключения по главным диагональным

элементам (метод Гаусса). Этот метод так же был позаимствован из

NumToolBox и соответствующе адаптирован.

Пориложение.

program KursovayaWork;

uses

Forms,

MainUnit in 'MainUnit.pas' {Form_Main},

OptsUnit in 'OptsUnit.pas' {Form_Options},

SubUnit in 'SubUnit.pas',

Matrix in 'Matrix.pas',

Operates in 'Operates.pas',

HelpUnit in 'HelpUnit.pas' {Form_Help};

{$R *.RES}

begin

Application.Initialize;

Application.Title := 'Модальное управление';

Application.CreateForm(TForm_Main, Form_Main);

Application.CreateForm(TForm_Options, Form_Options);

Application.CreateForm(TForm_Help, Form_Help);

Application.Run;

end.

unit MainUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,

ComCtrls, Tabnotbk, Menus, StdCtrls, Spin, ExtCtrls, Buttons, Grids,

OleCtrls, VCFImprs, GraphSvr, ChartFX {, ChartFX3};

type

TForm_Main = class(TForm)

BevelMain: TBevel;

TabbedNotebook_Main: TTabbedNotebook;

SpinEdit_Dim: TSpinEdit;

BitBtn_Close: TBitBtn;

BitBtn_Compute: TBitBtn;

StringGrid_Ap0: TStringGrid;

StringGrid_Anp0: TStringGrid;

StringGrid_Roots: TStringGrid;

StringGrid_Kpp0: TStringGrid;

StringGrid_Bp0: TStringGrid;

RadioGroup_RootsType: TRadioGroup;

Label_A1p0: TLabel;

Label_Ap0: TLabel;

Label_mBp0: TLabel;

Label_Roots: TLabel;

Label_Kpp0: TLabel;

BevelLine: TBevel;

Label_Dim: TLabel;

StringGrid_Ap1: TStringGrid;

StringGrid_Bp1: TStringGrid;

Label_Ap1: TLabel;

Label_Bp1: TLabel;

StringGrid_Kpp1: TStringGrid;

Label_Kpp1: TLabel;

StringGrid_InCond: TStringGrid;

Label_InCond: TLabel;

Label_U: TLabel;

Edit_U: TEdit;

BitBtn_Options: TBitBtn;

BitBtn_Help: TBitBtn;

StringGrid_ABKpp1: TStringGrid;

Label_ABKpp1: TLabel;

Edit_W: TEdit;

Label_w: TLabel;

RadioGroupChart: TRadioGroup;

ChartFX: TChartFX;

LabelW1: TLabel;

StringGrid_Solve1: TStringGrid;

StringGrid_Solve2: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure BitBtn_CloseClick(Sender: TObject);

procedure BitBtn_OptionsClick(Sender: TObject);

procedure BitBtn_ComputeClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure SpinEdit_DimChange(Sender: TObject);

procedure StringGrid_RootsSetEditText(Sender: TObject; ACol,

ARow: Longint; const Value: string);

procedure RadioGroup_RootsTypeClick(Sender: TObject);

procedure TabbedNotebook_MainChange(Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

procedure StringGrid_SetEditText(Sender: TObject; ACol,

ARow: Longint; const Value: string);

procedure BitBtn_HelpClick(Sender: TObject);

procedure RadioGroupChartClick(Sender: TObject);

private

procedure FillFixedCellsInAllGrids;

procedure FillCellsInAllGrids;

public

procedure BindGrids;

procedure UnBindGrids;

end;

var

Form_Main: TForm_Main;

implementation

uses Matrix, SubUnit, OptsUnit, Operates, CFXOCX2, HelpUnit;

const

DefOptions = [goFixedVertLine, goFixedHorzLine,

goVertLine, goHorzLine,

goColSizing, goEditing,

goAlwaysShowEditor, goThumbTracking];

{$R *.DFM}

procedure TForm_Main.FillFixedCellsInAllGrids;

var

Order : TOrder;

i: byte;

Str: string;

begin

Order := SpinEdit_Dim.Value;

for i := 1 to Order do

begin

Str := IntToStr(i);

StringGrid_Ap0.Cells[0, i] := Str;

StringGrid_Ap0.Cells[i, 0] := Str;

StringGrid_Bp0.Cells[0, i] := Str;

StringGrid_ANp0.Cells[i, 0] := Str;

StringGrid_ANp0.Cells[0, i] := Str;

StringGrid_Roots.Cells[i, 0] := Str;

StringGrid_Kpp0.Cells[i, 0] := Str;

StringGrid_Ap1.Cells[0, i] := Str;

StringGrid_Ap1.Cells[i, 0] := Str;

StringGrid_Bp1.Cells[0, i] := Str;

StringGrid_ABKpp1.Cells[i, 0] := Str;

StringGrid_ABKpp1.Cells[0, i] := Str;

StringGrid_InCond.Cells[i, 0] := Str;

StringGrid_Kpp1.Cells[i, 0] := Str;

StringGrid_Solve1.Cells[i, 0] := 'X' + IntToStr(i);

StringGrid_Solve2.Cells[i, 0] := 'X' + IntToStr(i);

StringGrid_Solve1.Cells[0, 0] := 'Время';

StringGrid_Solve2.Cells[0, 0] := 'Время';

end;

end;

procedure TForm_Main.FillCellsInAllGrids;

var

Order : TOrder;

i, j : byte;

begin

Order := SpinEdit_Dim.Value;

for i := 1 to Order do

for j := 1 to Order do

begin

StringGrid_Ap0.Cells[j, i] := '0';

StringGrid_Ap0.Cells[i, i] := '1';

StringGrid_Bp0.Cells[1, i] := '0';

StringGrid_Roots.Cells[i, 1] := '-1';

StringGrid_Roots.Cells[i, 2] := '0';

StringGrid_Kpp0.Cells[i, 1] := '0';

StringGrid_Ap1.Cells[j, i] := '0';

StringGrid_Ap1.Cells[i, i] := '1';

StringGrid_Bp1.Cells[1, i] := '0';

StringGrid_ABKpp1.Cells[j, i] := '0';

StringGrid_ABKpp1.Cells[i, i] := '1';

StringGrid_InCond.Cells[i, 1] := '0';

StringGrid_Kpp1.Cells[i, 1] := '0';

end;

FillFixedCellsInAllGrids;

StringGrid_Roots.Cells[0, 1] := 'Re';

StringGrid_Roots.Cells[0, 2] := 'Im';

StringGrid_Bp1.Cells[1, 0] := '1';

StringGrid_Bp0.Cells[1, 0] := '1';

end;

procedure TForm_Main.BindGrids;

begin

CopyGrid(StringGrid_Ap1, StringGrid_Ap0);

CopyGrid(StringGrid_Bp1, StringGrid_Bp0);

CopyGrid(StringGrid_Kpp1, StringGrid_Kpp0);

StringGrid_Ap1.Options := DefOptions - [goEditing];

StringGrid_Bp1.Options := DefOptions - [goEditing];

StringGrid_Kpp1.Options := DefOptions - [goEditing];

end;

procedure TForm_Main.UnBindGrids;

begin

StringGrid_Ap1.Options := DefOptions;

StringGrid_Bp1.Options := DefOptions;

StringGrid_Kpp1.Options := DefOptions;

end;

procedure TForm_Main.BitBtn_CloseClick(Sender: TObject);

begin

Close;

end;

procedure TForm_Main.BitBtn_OptionsClick(Sender: TObject);

var

V0, V1, V2, V3: LongInt;

LS: TCheckBoxState;

begin

with Form_Options do

begin

V0 := SpinEdit0.Value;

V1 := SpinEdit1.Value;

V2 := SpinEdit2.Value;

V3 := SpinEdit3.Value;

LS := CheckBox_Link.State;

ShowModal;

if ModalResult = mrCancel then

begin

SpinEdit0.Value := V0;

SpinEdit1.Value := V1;

SpinEdit2.Value := V2;

SpinEdit3.Value := V3;

CheckBox_Link.State := LS;

end

else

if ((SpinEdit0.Value <> V0) or (SpinEdit1.Value <> V1)) or

((SpinEdit2.Value <> V2) or (SpinEdit3.Value <> V3)) then

begin

BitBtn_Compute.Enabled := True;

case BitBtn_Compute.Tag of

4, 5 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 4;

6, 7 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 4;

8, 9 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 8;

10, 11 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 8;

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.