Получение графических изображений реакций САУ при одиночных трапецеидальном, импульсном и гармоническом сигналах

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

Рис. 13. Реакция САУ на трапецеидальное входное воздействие

 

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

Рис. 14. Реакция САУ на импульсное входное воздействие

Проверка в среде Simulink.

Проверка показала правильное функционирование программы, так как графическое изображения реакции САУ на импульсное входное воздействие, полученное при помощи составленной программы и среды Simulink, полностью совпадают.

 

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

 

Рис. 15. Реакция САУ на гармоническое входное воздействие

Проверка в среде Simulink.

Проверка показала правильное функционирование программы, так как графическое изображения реакции САУ на гармоническое входное воздействие, полученное при помощи составленной программы и среды Simulink, полностью совпадают.

Получение графического изображения реакции САУ при последовательностях единичного ступенчатого, импульсного и гармонического сигналов.

Для выполнения данного пункта расчетно-графической работы воспользуемся интегрированной в MatLab средой Simulink.

Рис. 14. Определение реакции САУ на последовательность входных сигналов в Simulink.

Изменим числовые параметры входных сигналов и определим реакцию САУ.

Анализ-заключение по результатам работы.

В данной расчетно-графической работе исследовался электромеханический привод промышленного манипулятора.

При выполнении работы были применены знания в области теории автоматического управления и высшей математики для математического описания и исследования САУ. Так же был освоен метод моделирования для исследования динамики электромеханического привода промышленного манипулятора.

Согласно заданию на расчетно-графическую работу были решены следующие задачи:

1) разработка фазовой математической модели линейной САУ методами пространства состояний;

2) исследование модели на устойчивость, управляемость и наблюдаемость;

3) разработка цифровой модели САУ по заданной структурной схеме и передаточным функциям звеньев;

4) получение графического изображения реакции САУ на различные входные сигналы;

5) определение основных параметров качества функционирования системы.

В результате выполнения расчетно-графической работы были определены:

1) модель в пространстве состояний исследуемой САУ;

2) фробениусова каноническая форма уравнений состояний и граф системы по фробениусовой канонической форме;

3) жорданова каноническая форма уравнений состояний и граф системы по жордановой канонической форме.

 

Используя данные канонические формы и графы системы, было выявлено, что система является устойчивой, частично управляемой и полностью наблюдаемой.

Пользуясь моделью в пространстве состояний исследуемой САУ, мной была разработана программа для имитационного моделирования системы. В ней применяется метод численного интегрирования Рунге-Кутта II порядка. Сравнение результатов функционирования составленной программы и интегрированной в систему MatLab среды Simulink, позволяет сделать вывод, что составленная программа работает правильно.

Таким образом, в результате выполнения данной расчетно-графической работы мной были получены и углублены знания по получению моделей системы в пространстве состояний; по определению устойчивости, управляемости и наблюдаемости системы; по применению метода моделирования для исследования САУ.

Список используемой литературы

1.Асанов А.З. Метод пространства состояний в задачах анализа динамических систем.–Набережные Челны: Изд-во КамПИ, 1992.

2.Асанов А.З. Цифровое моделирование и анализ динамических систем.– Набережные Челны: Изд-во КамПИ, 2004.

3.Ахмадеев. И.А. Использование системы MatLAB для исследования систем управления.–Набережные челны: Изд-во КамПИ, 2002.

4.Лазарев Ю. Начала программирования в среде MatLAB: Учебное пособие.– Киев: Изд-во

НТУУ "КПИ", 2003.

5.Вальвачев А.Н. Программирование на языке Delphi.– Минск: Изд-во ООО «Попурри», 1997.

6.Макаров Е.Г. Самоучитель MathCad 14.– М.: Изд-во «Новый Диск», 2008.

 

 

Приложение. Листинг программы.

Unit Unit1;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Buttons, ExtCtrls, jpeg, pngimage, Grids,CategoryButtons;

Type

TMass= array of array of Real;

TVector= array of Real;

TVec= array of array of Integer;

Type

TForm1 = class(TForm)

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);

procedure Edit12Change(Sender: TObject);

Private

procedure RK22 (A:TMass; n: integer; var t,U1: Extended; h: real; var X: TVector);

function RP(n: integer; A: TMass; X: TVector; t: real; U1:Extended): Real;

functionRead(Str: string; i,j: integer): Real;

function ReadPS(Str: string; j,n: integer): Integer;

function Signal(i: byte;t: Extended): Real;

functionTrapеzion(t: Extended): Real;

function Harmonic(t: Extended): Real;

functionImpulse(t: Extended): Real;

function ReadSignal(t: Extended): Extended;

End;

Var

Form1: TForm1;

C,A: TMass;

F,Z: TVector;

P: TVec;

t: Extended;

i,j,k: integer;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

Var

tk: real;

n: integer;

X: TVector;

U: Extended;

U1: Extended;

Const

h = 0.001;

Begin

Form2.Series1.Clear;

Form2.Series2.Clear;

Form1.Left:= (Screen.Width - Form1.Width) div 2;

Form1.Top:= Screen.Height - Form1.Height - 50;

Form2.Left:= (Screen.Width - Form2.Width) div 2;

Form2.Top:= Form1.Top - 250 ;

Form2.Show;

t:= 0; // начальное время

tk:= StrToFloat(Edit13.Text); // конечное время

n:= StrToInt(Edit12.Text); // кол-во уравнений состояния

SetLength(X,n);

for i := 0 to (n-1) do

begin

X[i]:=0;

end;

i:=0;

for j := 0 to n do

begin

SetLength(P,i+1,j+1);

SetLength(C,i+1,j+1);

P[i,j]:= ReadPS(Edit6.Text,j,n);

C[i,j]:= Read(Edit6.Text,i,j);

end;

P:= nil;

SetLength(P,n,(n+1));

SetLength(A,n,(n+1));

for i := 0 to (n-1) do

for j := 0 to n do

begin

P[i,j]:= ReadPS(StringGrid2.Rows[i].Text,j,n);

A[i,j]:= Read(StringGrid2.Rows[i].Text,i,j);

end;

while (t<tk) do

begin

U1:= ReadSignal(t);

RK22(A,n,t,U1,h,X);

U:=0;

for j := 0 to n do

begin

if (j<n) then

U:= U + C[0,j]*X[j]

else

U:= U + C[0,j]*U1;

end;

Form2.Series1.AddXY(t,U);

t:=t+h;

end;

Form2.Chart1.Title.Caption:= 'Реакция САУ на';

case RadioGroup1.ItemIndex of

0:Form2.Chart1.Title.Caption:= Form2.Chart1.Title.Caption + ' единичное ступенчатое воздействие';

1:Form2.Chart1.Title.Caption:= Form2.Chart1.Title.Caption + ' трапецеидальное воздействие';

2:Form2.Chart1.Title.Caption:= Form2.Chart1.Title.Caption + ' гармоническое воздействие';

3:Form2.Chart1.Title.Caption:= Form2.Chart1.Title.Caption + ' импульсное воздействие';

end;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

Form3 := TForm3.Create(Self);

try

begin

Form3.Image1.Picture.LoadFromFile('info.png');

Form3.ShowModal;

end;

finally

Form3.Free;

end;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

Begin

Form2.Close;

case RadioGroup1.ItemIndex of

0: i:=0;

1: i:=1;

2: i:=2;

3: i:=3;

end;

TRadioButton( RadioGroup1.Controls[i] ).Font.Size:= 9;

Timer2.Enabled:= True;

Image2.Picture.LoadFromFile('iChat.png');

Edit7.Text:='';

Edit8.Text:='';

Edit9.Text:='';

Edit10.Text:='';

Edit11.Text:='';

End;

function TForm1.Read(Str: string; i,j: integer): Real;

Var

k1,k2: integer;

Begin

if P[i,j]=0 then

begin

Result:=0;

end

else

begin

if (j=0) then

k1:= 1

else

k1:= P[i,j-1] + 5;

k2:= P[i,j] - k1;

Result:= StrToFloat(copy(Str,k1,k2));

end;

End;

functionTForm1.ReadPS(Str: string; j, n: integer): integer;

Var

S, Z: string;

Begin

Z:= '*X[';

Inc(j);

if (j<=n) then

begin

S:= Z + IntToStr(j) + ']';

result:= Pos(S,Str);

end

else

result:= Pos('*U',Str);

End;

functionTForm1.ReadSignal(t: Extended): Extended;

Begin

case RadioGroup1.ItemIndex of

0: result:=Signal(0,t);

1: begin

if (Edit7.Text='') or (Edit8.Text='') or (Edit9.Text='') or(Edit10.Text='') or (Edit11.Text='') then

begin

Mes;

exit;

end;

result:=Signal(1,t);

end;

2: begin

if (Edit7.Text='') or (Edit9.Text='') or (Edit11.Text='') then

begin

Mes;

exit;

end;

result:=Signal(2,t);

end;

3: begin

if (Edit7.Text='') or (Edit9.Text='') or(Edit10.Text='') or (Edit11.Text='') then

begin

Mes;

exit;

end;

result:=Signal(3,t);

end;

end;

End;

procedure TForm1.RK22(A: TMass; n: integer; var t,U1: Extended; h: real; var X: TVector);

Var

h2: real;

X1: TVector;

begin

h2:=h/2;

SetLength(X1,n);

SetLength(F,n);

 

for i:= 0 to (n-1) do

begin

F[i]:= RP(n,A,X,t,U1);

X1[i]:= X[i]+h2*F[i];

end;

for i:= 0 to (n-1) do

begin

F[i]:= RP(n,A,X1,t,U1);

X[i]:=X[i]+h*F[i];

end;

End;

functionTForm1.RP(n: integer; A: TMass; X: TVector; t: real;U1: Extended): Real;

Begin

result:= 0;

for j := 0 to n do

begin

if j=0 then

result:= A[i,j]*X[j]

else

if (j<n) then

result:= result + A[i,j]*X[j]

else

result:= result + A[i,j]*U1;

end;

End;

functionTForm1.Signal(i: byte; t: Extended): Real;

Begin

case i of

0: begin

result:=1;

Form2.Series2.AddXY(t,result);

end;

1: result:= Trapеzion(t);

2: result:= Harmonic(t);

3: result:= Impulse(t);

End;

End;

procedure TForm1.Timer2Timer(Sender: TObject);

Const

L = 474;

Begin

if RadioGroup1.ItemIndex=0 then

begin

Form1.Width := L;

Form1.Left:= (Screen.Width - Form1.Width) div 2;

Timer2.Enabled:= False;

exit;

end;

FormPlus;

while (Form1.ClientWidth < 859) do

begin

Form1.ClientWidth:= Form1.ClientWidth + 1;

Form1.Left:= (Screen.Width - Form1.Width) div 2;

end;

GroupBox8.Caption := '';

GroupBox8.Visible:= True;

GroupBox9.Visible:= True;

SpeedButton1.Caption:= 'A';

if RadioGroup1.ItemIndex=1 then

begin

GroupBox8.Caption := ' Трапецеидальный входной сигнал';

GroupBox10.Visible:= True;

GroupBox11.Visible:= True;

GroupBox12.Visible:= True;

GroupBox13.Visible:= True;

GroupBox14.Visible:= True;

Edit7.Visible:= True;

Edit8.Visible:= True;

Edit9.Visible:= True;

Edit10.Visible:= True;

Edit11.Visible:= True;

SpeedButton2.Caption:= 't0';

SpeedButton3.Caption:= 't1';

SpeedButton4.Caption:= 't2';

SpeedButton5.Caption:= 't3';

Image1.Picture.LoadFromFile('Trapеzion.png');

End;

if RadioGroup1.ItemIndex=2 then

Begin

GroupBox8.Caption := ' Гармонический входной сигнал';

GroupBox10.Visible:= True;

GroupBox12.Visible:= True;

GroupBox14.Visible:= True;

Edit7.Visible:= True;

Edit9.Visible:= True;

Edit11.Visible:= True;

SpeedButton3.Caption:= 'w';

SpeedButton5.Caption:= 'f0';

Image1.Picture.LoadFromFile('Harmonic.png');

End;

if RadioGroup1.ItemIndex=3 then

begin

GroupBox8.Caption := ' Импульсный входной сигнал';

GroupBox10.Visible:= True;

GroupBox12.Visible:= True;

GroupBox13.Visible:= True;

GroupBox14.Visible:= True;

Edit7.Visible:= True;

Edit9.Visible:= True;

Edit10.Visible:= True;

Edit11.Visible:= True;

SpeedButton3.Caption:= 't1';

SpeedButton4.Caption:= 't2';

SpeedButton5.Caption:= 't3';

Image1.Picture.LoadFromFile('Impulse.png');

end;

if (Form1.ClientWidth = 859) then

StatusBar1.Panels[4].Text:=' Вид и числовые значения входного воздействия';

Timer2.Enabled:= False;

End;

functionTForm1.Trapеzion(t: Extended): Real;

Var

x0,x1,x2,x3,x4, l, a: Real;

Begin

SetLength(Z,5);

Z[0]:= StrToFloat(Edit7.Text); // A

Z[1]:= StrToFloat(Edit9.Text); // t1

Z[2]:= StrToFloat(Edit10.Text); // t2

Z[3]:= StrToFloat(Edit11.Text); // t3

Z[4]:= StrToFloat(Edit8.Text); // t0

l:= Z[2]+Z[3];

if t<Z[4] then

begin

result:=0;

Form2.Series2.AddXY(t,result);

exit;

end

else

begin

t:= t - Z[4];

if t>l then

begin

i:= Trunc(t/l);

a:= i*l;

end

else

a:=0;

end;

x0:= a;

x1:= (Z[2] - Z[1])/2 + a;

x2:= 0.5*Z[1] + 0.5*Z[2] + a;

x3:= Z[2] + a;

x4:= Z[2] + Z[3] + a;

if (t>=x0) and (t<x1) then

result:= Z[0]*((t-x0)/(x1-x0));

if (t>=x1) and (t<x2) then

result:= Z[0];

if (t>=x2) and (t<=x3) then

result:= Z[0]*(1-((t-x2)/(x3-x2)));

if (t>x3) and (t<x4) then

result:= 0;

t:= t + Z[4];

Form2.Series2.AddXY(t,result);

End;

function TForm1.Harmonic(t: Extended): Real;

var

A, w, f: Real;

begin

A:= StrToFloat(Edit7.Text);

w:= StrToFloat(Edit9.Text);

f:= StrToFloat(Edit11.Text);

result:= A*sin(w*t+f);

Form2.Series2.AddXY(t,result);

End;

 

function TForm1.Impulse(t: Extended): Real;

Var

x1,x2,x3, l, a: Real;

Begin

SetLength(Z,4);

Z[0]:= StrToFloat(Edit7.Text); // A

Z[1]:= StrToFloat(Edit9.Text); // t1

Z[2]:= StrToFloat(Edit10.Text); // t2

Z[3]:= StrToFloat(Edit11.Text); // t3

l:= Z[2]+Z[3];

if t<Z[1] then

begin

result:=0;

Form2.Series2.AddXY(t,result);

exit;

end;

t:=t-Z[1];

if t>l then

begin

i:= Trunc(t/l);

a:= i*l;

end

else

a:=0;

x1:= a;

x2:= Z[2] + a;

x3:= Z[2] + Z[3]+ a;

if (t>=x1) and (t<x2) then result:= Z[0];

if (t>=x2) and (t<x3) then result:= 0;

t:= t + Z[1];

Form2.Series2.AddXY(t,result);

End;

End.