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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

Наши рекомендации