Agnophobia |
23.05.2014 14:13 |
Помогите с выводом графика в Паскале
Ребят, очень нужна помощь по программе. Нужно, чтобы она рисовала графики зависимостей тока от времени и угловой скорости от времени. По каким-то причинам, она не хочет этого делать, выдает пустые оси с сеткой и все. tehno035
Код:
program fili;
uses crt, Graph;
var dv,Udp,Uds,Udt,kdp,kds,kdt,krp,krs,krt,tpp,Uz,
Fi,w,Uship,kship,tship,Ic,Ia,Mn,Mdob,Mmax,Ia_max,
Ra,Trs,Trp,Trt,Fi_max,dUp1,dUw1,dUt1,Tac,c,
Jc,dt,w_max,t,Uz1,n,Urs,Urt,dUt,dUp,dUp0,dUw,Urp1,Urp,
Uacp,Urs1,dUs,dUw0,Urt1,dUt0,Uship1,Ia1,dI,w1,Tm,Fi1,k,x,t1,Udp1:real;
RAZ,NEL,m:integer;
q: String;
GrDriver,GrMode,Color: Integer;
begin
clrscr;
Ra:=0.93; {Активное сопротивление якоря цепи}
Tac:=0.0045; {Постоянная времени якорной цепи}
Uz:=10; {Максимальное напряжение задания}
m:=12; {Разрядность АЦП}
krs:=4.31; {Коэффициент усиления регулятора скорости}
Trs:=0.036; {Постоянная времени регулятора скорости}
krt:=7.24; {Коэффициент усиления регулятора тока*}
Trt:=0.0045; {Постоянная времени регулятора тока*}
kship:=10.33; {Коэффициент тиристорного преобразователя}
Tship:=0.0002;
krp:=2.19;
Trp:=0.09;
c:=0.822; {Конструктивная постоянная двигателя}
Jc:=0.036; {Момент инерции системы}
tpp:=0.24; {Время переходного процесса}
dt:=0.0001; {Шаг по времени}
w_max:=125.65; {Максимальная скорость на выходе системы}
Mn:=7.4; {Номинальный момент на выходе системы}
Ia_max:=71; {Максимальный ток на выходе электрической части двигателя}
t:=0; {Время начала переходного процесса}
n:=0; {Начало нумерации}
w:=0; {Начальная угловая скорость}
Fi:=0;
Urs:=0; {Начальное напряжение на выходе регулятора скорости}
Urt:=0; {Начальное напряжение на выходе регулятора тока}
Ia:=0; {Начальный ток на выходе электической части двигателя}
dUw:=0; {Начальное напряжение на входе АЦП}
dUt:=0; {Начальное напряжение на входе регулятора тока}
dUp:=0;
kdp:=0.95;
Tm:=0.0045;
dv:=0.462748;
writeln('Введите напряжение задания, U');
readln(Uz);
if Uz=0 then
Uz1:=0.9
else
Uz1:=Uz;
Udp:=Fi*kdp;
writeln('Исследовать разомкнутую систему? [1-да*/2-*нет]');
readln(RAZ);
if RAZ=2 then begin
writeln('Включить нелинейность? [1-да*/2-*нет]');
k:=2*(Uz1/Uz);
x:=6*(Uz1/Uz);
readln(NEL);
clrscr;
end;
Color:=15;
GrDriver:=VGA;GrMode:=VGAHi;InitGraph(GrDriver,GrMode,'d:\downloads\BP70\BGI');
if RAZ=1 then begin
kdp:=0;
tpp:=10*dt;
NEL:=2;
tpp:=10*dt;
dt:=tpp/500;
k:=0.025*(Uz1/Uz);
x:=6*(Uz1/Uz);
end;
if RAZ=2 then begin
if abs(Udp)>=Uz then Udp:=Uz*abs(Udp)/Udp;
end;
dUp1:=Uz-Udp;
if RAZ=2 then begin
if abs(dUp1)>=Uz then dUp1:=Uz*abs(dUt)/dUp1;
end;
Urp1:=Urp+Krp*(dUp-dUp0)+(Krp*dUp*dt)/Trp;
if RAZ=2 then begin
if abs(Urp1)>=Uz then Urp1:=Uz*abs(Urp1)/Urp1;
end;
Uds:=w*kds;
if RAZ=2 then begin
if abs(Uds)>=Uz then Uds:=Uz*abs(Uds)/Uds;
end;
dUw1:=Urp1-Uds;
if RAZ=2 then begin
if abs(dUw1)>=Uz then dUw1:=Uz*abs(dUw1)/dUw1;
end;
dv:=10/((exp(m*ln(2)))-1);
Uacp:=dv*trunc(dUw1/dv);
Urs1:=Urs+Krs*(dUw-dUw0)+(Krs*dUs*dt)/Trs;
if RAZ=2 then begin
if abs(Urs1)>=Uz then Urs1:=Uz*abs(Urs1)/Urs1;
end;
Udt:=Ia*kdt;
if RAZ=2 then begin
if abs(Udt)>=Uz then Udt:=Uz*abs(Udt)/Udt;
end;
dUt1:=Urs1*Udt;
if RAZ=2 then begin
if abs(dUt1)>=Uz then dUt1:=Uz*abs(dUt1)/dUt1;
end;
Urt1:=Urt+Krt*(dUt-dUt0)+(Krt*dUt*dt)/Trt;
if RAZ=2 then begin
if abs(Urt1)>=Uz then Urt1:=Uz*abs(Urt1)/Urt1;
end;
Uship1:=Uship+(kship*Urt1-Uship)*(dt/Tship);
Ia1:=Ia+((1/Ra)*Uship1-Ia)*(dt/Tac);
if NEL=1 then Ic:=0;
if NEL=2 then begin
if abs(w)<=0.5*w_max then Mdob:=(Mn/(0.5*w_max))*w
else Mdob:=Mn;
end;
dI:=Ia1-Ic;
w1:=w*(Ra*dI*dt)/(c*Tm);
Fi1:=(w*(Ra*dI*dt)/(c*Tm))*t;
t1:=t+dt;
PutPixel
(Round(50+t*500/tpp),Round(350-w*450/(k*w_max)),15);
PutPixel
(Round(50+t*500/tpp),Round(350-Ia*450/(x*Ia_max)),15);
Line(50,350,630,350);
Line(630,350,620,347);
Line(630,350,620,353);
Line(50,10,50,450);
Line(50,10,47,20);
Line(50,10,53,20);
OutTextXY(60,25,'w, rad/s');
OutTextXY(0,25,'I, A');
OutTextXY(605,358,'t, s');
Str(Uz:3:1,q);
OutTextXY(270,20,'Uz = '+q+' V');
Str(w1:7:4,q);
OutTextXY(480,10,'w = '+q+' rad/s');
Str(Ia1:7:4,q);
OutTextXY(480,20,'I = '+q+' A');
Str(Fi:7:4,q);
OutTextXY(480,30,'Fi = '+q+' rad');
Line(150,50,150,350);
Line(150,368,150,450);
Line(250,50,250,350);
Line(250,368,250,450);
Line(350,50,350,350);
Line(350,368,350,450);
Line(450,50,450,350);
Line(450,368,450,450);
Line(550,50,550,350);
Line(550,368,550,450);
Line(50,50,54,50);
Line(104,50,550,50);
Line(50,100,54,100);
Line(104,100,550,100);
Line(50,150,54,150);
Line(104,150,550,150);
Line(50,200,54,200);
Line(104,200,550,200);
Line(50,250,54,250);
Line(104,250,550,250);
Line(50,300,54,300);
Line(104,300,550,300);
Line(50,400,54,400);
Line(104,400,550,400);
Line(50,450,54,450);
Line(104,450,550,450);
Str(0:1,q);
OutTextXY(30,356,q);
Str((100*tpp/500):5:4,q);
OutTextXY(125,356,q);
Str((200*tpp/500):5:4,q);
OutTextXY(225,356,q);
Str((300*tpp/500):5:4,q);
OutTextXY(325,356,q);
Str((400*tpp/500):5:4,q);
OutTextXY(425,356,q);
Str((500*tpp/500):5:4,q);
OutTextXY(525,356,q);
Str((x*Ia_max*(50/450)):5:1,q);
OutTextXY(0,300,q);
Str((x*Ia_max*(100/450)):5:1,q);
OutTextXY(0,250,q);
Str((x*Ia_max*(150/450)):5:1,q);
OutTextXY(0,200,q);
Str((x*Ia_max*(200/450)):5:1,q);
OutTextXY(0,150,q);
Str((x*Ia_max*(250/450)):5:1,q);
OutTextXY(0,100,q);
Str((x*Ia_max*(300/450)):5:1,q);
OutTextXY(0,50,q);
Str((x*(-Ia_max)*(50/450)):5:1,q);
OutTextXY(0,400,q);
Str((x*(-Ia_max)*(100/450)):5:1,q);
OutTextXY(0,450,q);
Str((k*(-w_max)*(100/450)):5:1,q);
OutTextXY(60,450,q);
Str((k*(-w_max)*(50/450)):5:1,q);
OutTextXY(60,400,q);
Str((k*w_max*(50/450)):5:1,q);
OutTextXY(60,300,q);
Str((k*w_max*(100/450)):5:1,q);
OutTextXY(60,250,q);
Str((k*w_max*(150/450)):5:1,q);
OutTextXY(60,200,q);
Str((k*w_max*(200/450)):5:1,q);
OutTextXY(60,150,q);
Str((k*w_max*(250/450)):5:1,q);
OutTextXY(60,100,q);
Str((k*w_max*(300/450)):5:1,q);
OutTextXY(60,50,q);
if t1<tpp then
begin
t:=t1;
w:=w1;
Urs:=Urs1;
Urt:=Urt1;
Ia:=Ia1;
dUw:=dUw1;
dUt:=dUt1;
end;
readln;
end.
|