Заключение
В данной работе был получен алгоритм идентификации объекта управления по переходной характеристике с помощью ЭВМ и на его основе произведена идентификация объекта и синтез системы автоматического управления им. Метод обладает достаточной точностью, однако предъявляет большие требования к точности вычисления интегральных параметров Ii, т.к. в уравнения для получения коэффициентов F они входят в высокой степени Поэтому для их вычисления необходимо использовать метод высокого порядка и малый шаг.
Cписок литературы
Автоматическое регулирование двигателей летательных аппаратов. Труды ЦИАМ, № 761, вып. 17, 1977 (стр. 144-154).
Макаров И. И., Менский Б. М. Линейные автоматические системы. М., Машиностроение, 1982 – 504 с.
Смит Дж. М. Математическое и цифровое моделирование для инженеров и исследователей. М., Машиностроение, 1980.
Приложение Листинг программ
********Программа идентификации САУ
Program TAU;
Uses graph,crt;
Const
hmax=2;
Var
sigm,h:array [0..2501] of single;
I1,I2,I3,I4:array [0..2501] of single;
GD,GM:integer;
fj,Ij:array[1..4] of single;
ha:char;
temp,y,x,f,n,i,j:integer;
dt,t:real;
k,b1,a1,a2,a3:single;
s:string[5];
Begin
Clrscr;
dt:=0.005;
N:=2000;
t:=0;
{randomize;}
For i:=0 to N do Begin
t:=i*dt;
h[i+1]:=48*exp(-1/0.4*t)-50*exp(-1/0.3*t)-46.666666667*t*exp(-1/0.3*t)+2
end;
{Вычисляем подинтергальные значения I1,I2,I3,I4}
For i:=1 to N do sigm[i]:=h[i]/hmax;
t:=0;
for i:=1 to N do Begin
t:=(i-1)*dt;
I1[i]:=1-sigm[i];
I2[i]:=(1-sigm[i])*t;
I3[i]:=(1-sigm[i])*t*t;
I4[i]:=(1-sigm[i])*t*t*t;
end;
{Вычисление непосредственно самих I1,I2,I3,I4}
For j:=1 to 4 do Ij[j]:=0;
For i:=1 to N-1 do Begin
Ij[1]:=Ij[1]+(I1[i]+I1[i+1])/2*dt;
Ij[2]:=Ij[2]+(I2[i]+I2[i+1])/2*dt;
Ij[3]:=Ij[3]+(I3[i]+I3[i+1])/2*dt;
Ij[4]:=Ij[4]+(I4[i]+I4[i+1])/2*dt;
end;
{Находим Fj}
Fj[1]:=Ij[1];
Fj[2]:=Ij[1]*Ij[1]-Ij[2];
Fj[3]:=Ij[1]*Ij[1]*Ij[1]-2*Ij[1]*Ij[2]+0.5*Ij[3];
Fj[4]:=-Ij[4]/6+0.5*Ij[1]*Ij[3]+Fj[3]*Ij[1]-Fj[2]*Ij[2];
b1:=-Fj[4]/Fj[3];
a1:=b1+Fj[1];
a2:=Fj[2]+b1*Fj[1];
a3:=Fj[3]+b1*Fj[2];
K:=h[N+1];
Writeln ('a1=',a1:6:4,', a2=',a2:6:4,', a3=',a3:6:4,', b1=',b1:6:4,', K=',K:6:4,', n=',n, ', dt=',dt:0:4);
Readkey;
GD:=Detect; GM:=2;
Initgraph (GD,GM,'C:\BP\BGI');
SetBkColor(White);
j:=1;
Setcolor(9);
For i:=1 to 6 do Line(20+60*i,450,20+60*i,450-400);
For i:=0 to 4 do Begin {Условие надписи на оси Y}
str(i,s);
Setcolor(1);
OuttextXY(10,450-100*i,s);
Setcolor(9);
Line (20,450-100*i,620,450-100*i);
end;
Setcolor(9);
Line(20,50,20,450);
Line(20,450,620,450);
moveto(20,450);
for i:=0 to 600 do Begin {Построение графика}
setcolor(4);
y:=round(100*h[j]);
x:=i;
SetLineStyle(0,0,3);
Lineto(x+20,450-y);
SetLineStyle(0,0,1);
j:=j+3;
if (i=0) or (i mod 60 = 0) then Begin {Условие надписи на оси X}
setcolor(9);
temp:=round(i/60);
str(temp,s);
Line(20+i,450,20+i,450-400);
setcolor(1);
Moveto(20+i,460);
Outtext(s);
setcolor(4);
moveto(20+x,450-y);
end;
End;
Readkey;
CloseGraph;
end.
**********Программа, моделирующая САУ по передаточным функциям замкнутой системы.
Program TAU;
Uses graph,crt;
label
m1;
Const
hmax=2;
Var
x:array[1..3000] of real;
x1,x2,x3,x4,x5,x6,x7,x8:real;
temp,y,x111,gd,gm,n,i,j:integer;
g,dt:real;
s:string;
text:string;
c:char;
prosto:boolean;
Begin
Clrscr;
dt:=0.00333;
N:=3000;
{t:=0;}
x1:=0;x2:=0;x3:=0;x4:=0;x5:=0;x6:=0;x7:=0;x8:=0;
g:=1;
prosto:=true;
For i:=0 to N-1 do Begin
x1:=x1+dt*x2;
x2:=x2+dt*x3;
x3:=x3+dt*x4;
x4:=x4+dt*x5;
x5:=x5+dt*x6;
x6:=x6+dt*x7;
x7:=x7+dt*x8;
x8:=x8+dt*(-1155*x1-3130*x2-3952*x3-3014*x4-1522*x5-523.6*x6-120.7*x7-16.87*x8+0.7114);
x[i+1]:=x1*1155+3373*x2+4440*x3+3399*x4+1646*x5+503.4*x6+88.06*x7+6.02*x8;
Writeln('x[',i+1,']=',x[i+1]);
If prosto=true then Begin
c:=Readkey;
Case c of
'c':exit;
'r':prosto:=false;
end;
end;
end;
str(x[n]:6:6,text);
GD:=Detect; GM:=2;
Initgraph (GD,GM,'C:\BP\BGI');
SetBkColor(White);
j:=1;
Setcolor(9);
For i:=1 to 6 do Line(20+60*i,450,20+60*i,450-400);
For i:=0 to 4 do Begin {Условие надписи на оси Y}
str(i,s);
Setcolor(1);
OuttextXY(10,450-100*i,s);
Setcolor(9);
Line (20,450-100*i,620,450-100*i);
end;
Setcolor(9);
Line(20,50,20,450);
Line(20,450,620,450);
moveto(20,450);
for i:=0 to 600 do Begin {Построение графика}
setcolor(4);
y:=round(140*x[j]);
x111:=i;
SetLineStyle(0,0,3);
Lineto(x111+20,450-y);
SetLineStyle(0,0,1);
{If i mod 2=0 then j:=j+1;}
j:=j+4;
if (i=0) or (i mod 60 = 0) then Begin {Условие надписи на оси X}
setcolor(9);
temp:=round(i/60);
str(temp,s);
Line(20+i,450,20+i,450-400);
setcolor(1);
Moveto(300,240);
Outtext(text);
Moveto(20+i,460);
Outtext(s);
setcolor(4);
moveto(20+x111,450-y);
end;
End;
Readkey;
CloseGraph;
end.