Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая работа / issledovanie_sistem_avtomaticheskogo_regulirovaniya.doc
Скачиваний:
73
Добавлен:
22.02.2014
Размер:
1 Mб
Скачать

7. Заключение

Замкнутая система с ПИД-регулятором при оптимальных параметрах настройки не обладает заданным запасом устойчивости, т.к. максимальное значение АЧХ при частотах от 3 до 8 превышает значения 1,62. Также по качеству управления ПИД-регулятор оказался не приемлемым для данной системы.

Приложение к курсовому проекту

1. Программа расчета параметров настройки пид регулятора

PROGRAM PIDREG;

const M=1.62;

eps=1.0E-06;

type index = array [1..20] of extended;

var X,Ya,Ba,Ca,Da,Yf,Bf,Cf,Df: index;

DFm: extended;

{ ***************************************************** }

procedure spline(n: integer; x,y: index; var b,c,d: index);

label 1,2,3;

var nm1,ib,i: integer;

t: extended;

begin

nm1:=n-1;

if (n<2) then goto 3;

if (n<3) then goto 2;

d[1]:=x[2]-x[1];

c[2]:=(y[2]-y[1])/d[1];

for i:=2 to nm1 do

begin

d[i]:=x[i+1]-x[i];

b[i]:=2.0*(d[i-1]+d[i]);

c[i+1]:=(y[i+1]-y[i])/d[i];

c[i]:=c[i+1]-c[i]

end;

{ Граничные условия }

b[1]:=-d[1];

b[n]:=-d[n-1];

c[1]:=0.0;

c[n]:=0.0;

if (n=3) then goto 1;

c[1]:=c[3]/(x[4]-x[2])-c[2]/(x[3]-x[1]);

c[n]:=c[n-1]/(x[n]-x[n-2])-c[n-2]/(x[n-1]-x[n-3]);

c[1]:=c[1]*d[1]*d[1]/(x[4]-x[1]);

c[n]:=-c[n]*d[n-1]*d[n-1]/(x[n]-x[n-3]);

{ *************************************** }

1: for i:=2 to n do

begin

t:=d[i-1]/b[i-1];

b[i]:=b[i]-t*d[i-1];

c[i]:=c[i]-t*c[i-1]

end;

c[n]:=c[n]/b[n];

for ib:=1 to nm1 do

begin

i:=n-ib;

c[i]:=(c[i]-d[i]*c[i+1])/b[i];

end;

b[n]:=(y[n]-y[nm1])/d[nm1]+d[nm1]*(c[nm1]+2.0*c[n]);

for i:=1 to nm1 do

begin

b[i]:=(y[i+1]-y[i])/d[i]-d[i]*(c[i+1]+2.0*c[i]);

d[i]:=(c[i+1]-c[i])/d[i];

c[i]:=3.0*c[i]

end;

c[n]:=3.0*c[n];

d[n]:=d[n-1];

goto 3;

2: b[1]:=(y[2]-y[1])/(x[2]-x[1]);

c[1]: = 0.0;

d[1]: = 0.0;

b[2]: = b[1];

c[2]: = 0.0;

d[2]: = 0.0;

3: ;

end;

{ ***************************************************** }

function seval(n: integer;u: extended; x,y,b,c,d: index):

extended;

label 1,2,3;

var j,k: integer;

dx: extended;

const i: integer = 1;

begin

if (i > n) or (i = n) then i: = 1;

if (u < x[i]) then goto 1;

if (u < x[i+1]) or (u=x[i+1]) then goto 3;

1: i:=1;

j:=n+1;

2: k: = ( i + j ) div 2;

if ( u < x[k] ) then j: = k;

if ( u > x[k] ) or ( u = x[k] ) then i: = k;

if (j>i+1) then goto 2;

3: dx:=u-x[i];

seval:=y[i]+dx*(b[i]+dx*(c[i]+dx*d[i]))

end;

{ ***************************************************** }

procedure Intplob(w,A,f: extended; var j: integer);

label 1,2;

var i,k: integer;

const n: integer=1;

begin

if (n=1) then

begin

X[1]:=w;

Ya[1]:=A;

Yf[1]:=f;

end;

if (n>1) then

begin

for i:=1 to n-1 do

begin

if (X[i]<w) then goto 1;

if (X[i]>w) then

begin

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

begin

X[n+1-k]:=X[n-k];

Ya[n+1-k]:=Ya[n-k];

Yf[n+1-k]:=Yf[n-k]

end;

X[i]:=w;

Ya[i]:=A;

Yf[i]:=f;

goto 2

end;

1: ;

end;

if (i=n-1) then

begin

X[n]:=w;

Ya[n]:=A;

Yf[n]:=f;

end

end;

2: j:=n;

spline(j,X,Ya,Ba,Ca,Da);

spline(j,X,Yf,Bf,Cf,Df);

n:=n+1;

end;

{ ***************************************************** }

procedure Virtob(w: extended; n: integer; var A,f: extended);

begin

A:=seval(n,w,X,Ya,Ba,Ca,Da);

f:=seval(n,w,X,Yf,Bf,Cf,Df)

end;

{ **************************************************** }

procedure Wsfunpid(n: integer);

label 1,2,3,4,5,6,7;

var w,dw,A,zA,f,g,zg,q,DF,zq,DTd,Kp,Ti,Td: extended;

Wf,Az,ZAz,Mrs,Wrs: extended;

{ ***************************************************** }

procedure MALT(R1,I1,R2,I2: extended; var R3,I3: extended);

begin

R3:= R1*R2-I1*I2;

I3:= R1*I2+R2*I1

end;

{ **************************************************** }

procedure DIVD(R1,I1,R2,I2: extended; var R3,I3: extended);

var R: extended;

begin

R:= R2*R2+I2*I2;

R3:= (R1*R2+I1*I2)/R;

I3:= (I1*R2-I2*R1)/R

end;

{ ***************************************************** }

procedure Wrg(w,Td,Ti,Kp: extended; var Rrg,Irg: extended);

begin

Rrg:=Kp;

Irg:=Kp*(Td*w-1.0/Ti/w)

end;

{ ********************************************************* }

function Azs(n: integer; w,Td,Ti,Kp: extended): extended;

var A,f: extended;

Rrg,Irg: extended;

Rrs,Irs,Rzs,Izs: extended;

begin

Virtob(w,n,A,f);

Wrg(w,Td,Ti,Kp,Rrg,Irg);

MALT(Rrg,Irg,A*cos(f),A*sin(f),Rrs,Irs);

DIVD(Rrs,Irs,1.0+Rrs,Irs,Rzs,Izs);

Azs:=sqrt(sqr(Rzs)+sqr(Izs))

end;

{ ***************************************************** }

begin

Td:=0.1;

DTd:=Td;

w:=4.0;

1: ;

dw:=0.1*w;

Virtob(w,n,A,f);

g:=-f-pi/2.0;

zq:=M*w*(M*cos(g)+Td*w*M*sin(g)

-sqrt(1.0+sqr(Td*w)))/A/(sqr(M)-1.0);

2: ;

w:=w+dw;

Virtob(w,n,A,f);

g:=-f-pi/2.0;

q:=M*w*(M*cos(g)+Td*w*M*sin(g)-sqrt(1.0+sqr(Td*w)))/A/(sqr(M)-1.0);

if ( q > zq ) then

begin

zq:=q;

zg:=g;

zA:=A;

goto 2

end;

if ( q < zq ) then

if ( abs(dw/w) < eps ) then

begin

w:=w-dw;

q:=zq;

g:=zg;

A:=zA;

goto 3

end

else

begin

zq:=q;

zg:=g;

zA:=A;

dw:=-dw/1.62;

goto 2

end;

3: ;

Kp:=sqr(M)*sin(g)*(1.0-Td*w/M/sin(g)/sqrt(1.0

+sqr(Td*w)))/(sqr(M)-1.0)/A;

Ti:=Kp/q;

Wf:=w;

DF:=M*sqr(w)*(M*sin(g)-Td*w/sqrt(1.0+sqr(Td*w)))/(sqr(M)-1.0)/A;

if ( DF > DFm ) then

begin

Td:=Td-DTd;

DTd:=DTd/1.62;

Td:=Td+DTd;

goto 1

end;

dw:=0.1*w;

ZAz:=Azs(n,w,Td,Ti,Kp);

4: ;

w:=w+dw;

Az:=Azs(n,w,Td,Ti,Kp);

if ( Az > 1.05*M ) then goto 6;

if ( Az > ZAz ) then

begin

ZAz:=Az;

goto 4

end;

if ( Az < ZAz ) then

begin

if ( abs(dw/w) < eps ) then goto 5;

ZAz:=Az;

dw:=-dw/1.62;

goto 4

end;

5: ;

Mrs:=ZAz;

Wrs:=w-dw;

if ( DTd/Td < eps ) then goto 7;

if ( abs((M-Mrs)/M) > 2.0*eps ) then

begin

6: ;

Td:=Td-DTd;

DTd:=DTd/1.62;

Td:=Td+DTd;

w:=Wf;

goto 1;

end

else

begin

Td:=Td+DTd;

w:=Wf;

goto 1

end;

7: ;

writeln(' ');

writeln(' Kp=',Kp:6:4);

writeln(' Tи=',Ti:6:4);

writeln(' Tд=',Td:6:4);

writeln(' Kp/Tи=',Kp/Ti:6:4);

writeln(' Резонансная частота Wp=',Wrs:6:4);

writeln(' Частота максимума вспом. функции WF=',Wf:6:4)

end;

{ ***************************************************** }

procedure Nastr;

var w,Am,Gm: extended;

n: integer;

begin

writeln(' ');

writeln(' Введите чувствительность DF');

readln(DFm);

writeln(' ');

writeln(' Введите значение частоты w1');

readln(w);

writeln(' Введите значение амплитуды КЧХ объекта A(w1)');

readln(Am);

writeln(' Введите значение фазы КЧХ объекта F(w1)');

readln(Gm);

Intplob(w,Am,Gm,n);

writeln(' ');

writeln(' Введите значение частоты w2');

readln(w);

writeln(' Введите значение амплитуды КЧХ объекта A(w2)');

readln(Am);

writeln(' Введите значение фазы КЧХ объекта F(w2)');

readln(Gm);

Intplob(w,Am,Gm,n);

writeln(' ');

writeln(' Введите значение частоты w3');

readln(w);

writeln(' Введите значение амплитуды КЧХ объекта A(w3)');

readln(Am);

writeln(' Введите значение фазы КЧХ объекта F(w3)');

readln(Gm);

Intplob(w,Am,Gm,n);

writeln(' ');

writeln(' Введите значение частоты w4');

readln(w);

writeln(' Введите значение амплитуды КЧХ объекта A(w4)');

readln(Am);

writeln(' Введите значение фазы КЧХ объекта F(w4)');

readln(Gm);

Intplob(w,Am,Gm,n);

writeln(' ');

Wsfunpid(n)

end;

{ ***************************************************** }

begin

Nastr

end.