Скачиваний:
88
Добавлен:
23.02.2014
Размер:
916.99 Кб
Скачать

Приложение b. Текст программы синтеза регулятора методом двупараметрического rd-разбиения

restart:Digits:=5:kdt:=0.512;CmF:=1.116;CeF:=0.314;

Wrt:=0.1894*(0.05*s+1)*(0.01*s+1)/(0.011378*s^2+0.15083*s+0.488);Wr:=1/(0.2*s);

Wtp:=22/(0.05*s+1);Wya:=0.24/(0.01*s+1);

Wrkt :=Wya*Wrt*Wtp;

Wkt:=simplify(Wrkt/(1+kdt*Wrkt));

Woy1:=Wkt*CmF*Wr;

Woy:=simplify(Woy1/(1+Woy1*CeF/(Wrt*Wtp)));

Moy:=numer(Woy);Noy:=denom(Woy);

kooc:=0.01: # коэффициент ООС

eta:=1.502:m:=0.366:delta:=eta/m: # показатели качества

rds:=s=a+(sqrt(-1))*omega:ak:=a=-(eta*delta/(omega+delta)+m*omega):

df:=-(eta*delta/(omega+delta)+m*omega):

Wp:=k1+k2/s: # ПФ регулятора

glur:=k1*Moy*kooc*s+k2*Moy*kooc+Noy*s: # ХП ЗСУ в общем виде

Nj:=expand(simplify(subs(rds,glur))):

Imnj:=coeff(Nj,I):

Renj:=simplify(Nj-Imnj*I):

Opr:=subs(ak,omega=0,Renj); # уравнение особой прямой

x1:=coeff(Renj,k1):y1:=coeff(Renj,k2):z1:=-simplify(Renj-x1*k1-y1*k2):

x2:=coeff(Imnj,k1):y2:=coeff(Imnj,k2):z2:=-simplify(Imnj-x2*k1-y2*k2):

with(linalg):

d:=det(array(1..2,1..2,[[x1,y1],[x2,y2]])): # главный определитель

dk1:=det(array(1..2,1..2,[[z1,y1],[z2,y2]])): # определитель для k1

dk2:=det(array(1..2,1..2,[[x1,z1],[x2,z2]])): # определитель для k2

dk1w:=expand(subs(ak,dk1)):

dk2w:=expand(subs(ak,dk2)):dw:=simplify(expand(subs(ak,d))):

plot([dk1w/dw,dk2w/dw,omega=-3.1..7]):#,numpoints=1000):

s2:=plot([dk1w/dw,dk2w/dw,omega=-3.1..6.4],numpoints=1000):

k2u:=solve(Opr=0,k2);s3:=plot(k2u,k1=30..80):

display({s3,s2}): # строим годограф

new:=subs(k1=8,k2=20,glur):sdf:=solve(new,s); # находим корни ХП ЗСУ

poin:=[[Re(sdf[i]),Im(sdf[i])] $i=1..5];

Ws:=simplify(Wp*Woy/(1+Wp*Woy*kooc)); # ПФ ЗСУ в общем виде

Wsk:=subs(k1=8,k2=20,Ws);

h:=inttrans[invlaplace](%/s,s,t); # строим реакцию на

plot(h,t=0..5); # ступенчатое воздействие

poin:=[[Re(sdf[n]),Im(sdf[n])] $n=1..5];

as1:=plot([df,omega,omega=0..20]):as2:=plot([-eta,omega,omega=0..20]): as3:=plot([-*omega,omega,omega=0..20]):as4:=plot(poin,style=point):display({as1,as2,as3,as4}):

sdf:=solve(subs(k1=40,k2=120,glur),s); # поиск области качества

kol:=0:

for i from 1 to 5 do

if (Re(sdf[i]) >= subs(omega=abs(Im(sdf[i])),df))

then kol:=kol+1; end if;

end do;

printf("Количество некачественных корней = %d\n",kol);

Соседние файлы в папке amlahx строит графы ЛАЧХ