p align="left">2. Аналогично 3. 4. 5. Пусть тогда Таким образом имеем систему из пяти дифференциальных уравнений: Итак, составим программу для решения дифференциальных уравнений и построения графиков переходных процессов. Сначала сделаем некоторые переобозначения: F -- массив значений правых частей F[1]=dZ1/dt F[2]=X6 F[3]=dб/dt F[4]=dX4/dt F[5]=dX6/dt Y0 -- начальные значения переменных системы уравнений Y -- массив переменных системы уравнений Y[1]=Z1 Y[2]=X5 Y[3]= б Y[4]=X4 Y[5]=X6 2. Листинг программы Входные параметры: * T0 * 0 * TK * 30 * h * 0.01 * Y0 * 0 0 0 0 0 * T * 1 2 1 1 1 * k * 1 1 1 1 1 * g * 1 * n * 0.5 ******** 2.1. Главная программа program Eler; uses mdd, graph; begin start(ymin,ymax,t0,tk,t,k1,k2,k3,k4,t1,t2,t3,h,g,y0,y); output1; while t<=tk do begin Eu(g,k1,k2,k3,k4,k6,t1,t2,t3,t4,d,t,h,m,y0,F,y,Gr); abc (Gr, ymin, ymax); output(t,y) end; readln; begline; start2(t0,t,y0,y); top(ymin,ymax,t0,tk,shg,hi,bx,by); while t<=tk do begin Eu(g,k1,k2,k3,k4,k6,t1,t2,t3,t4,d,t,h,m,y0,F,y,Gr); draw(Gr,t,shg,hi,bx,by,h); end; finish(t0,tk,ymin,ymax,shg,hi,bx,by); readln end. 2.2. Модуль unit MDD; interface {описание структуры программы} uses graph; const m=5; m2=5; type mass=array [1..m] of real; {массив дифференциалов} mass2=array [1..m2] of real; {массив переходных процессов} var y0, y, F: Mass; Gr: Mass2; f1,e: text; i,grdriver,grmode:integer; g,n,u4,k3,k4,t1,t2,t3,T4,T5,d,k6,k1,k2,h,ymin,ymax,t0,tk,t, shg,hi,bx,by,i1:real; s:string[8]; procedure start(var ymin, ymax,t0, tk, t,k1,k2,k3,k4,t1,t2, t3,h,g:real;var y0,y:mass); procedure start2(var t0,t: real; var y0,y: mass);Procedure Eu (var g,k1, k2,k3,k4,t1,t2,t3, u4, k, d, t, h: real; m:integer; var y0, F, y: mass; var Gr: mass2); Procedure R (var y0, F: mass; g,k1,k2,k3,k4,k6,t1,t2,t3,t4,n: real); procedure graphiks(var Gr: mass2; y, y0: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real); procedure begline; procedure abc (Gr: mass2; var ymin,ymax:real); procedure top(ymin,ymax,t0,tk: real; var shg,hi,bx,by: real); procedure draw(Gr: mass2; t,shg,hi,bx,by,h: real); procedure finish(t0,tk,ymin,ymax,shg,hi,bx,by: real); procedure output1; procedure output(t: real; y: mass); implementation procedure start(var ymin,ymax,t0,tk,t,k1,k2,k3,k4,t1,t2,t3,h,g:real;var y0,y:mass); {начальные присвоения} begin assign (f1, 'C:\nu.txt'); assign (e, 'C:\Result.txt'); reset (f1); readln(f1); readln(f1); readln(f1,s, T0); readln(f1,s, TK); readln(f1,s, h); read(f1,s); for i:=1 to m do begin read(f1, y0[i]); y[i]:=y0[i]; end; readln(f1); readln(f1, s, t1, t2, t3, t4, t5); readln(f1,s, k1, k2, k3, k4, k6); readln(f1,s, g); readln(f1,s, n); ymin:=y0[1]; ymax:=y0[1]; T:=t0; close(f1); end; procedure start2(var t0,t: real; var y0,y: mass); {начальные присвоения2} begin reset (f1); readln(f1); readln(f1); readln(f1); readln(f1); readln(f1); read(f1,s); for i:=1 to m do begin read(f1, y0[i]); y[i]:=y0[i]; end; close(f1); T:=t0; end; Procedure Eu (var g,k1, k2,k3,k4,t1,t2,t3, u4, k, d, t, h: real; m:integer; var y0, F, y: mass; var Gr: mass2); var i: integer; begin R (y0,F,g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n); for i:=1 to m do for i:=1 to m do y[i]:=y0[i]+h*F[i]; graphiks(Gr,y,y0,g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n); t:=t+h; for i:=1 to m do y0[i]:=y[i]; end; Procedure R (var y0, F: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real); begin F[1]:=((g-y0[2]*k6-y0[1])*k2)/T2; F[2]:=y0[5]; F[3]:=(k3*(y0[1]+y0[2])-y0[3])/T3; F[4]:=(k4*y0[1]-y0[4])/T4; F[5]:=(y0[4]-2*n*T5*y0[5]-y0[2])/(T5*T5); end; procedure graphiks(var Gr: mass2; y, y0: mass; g,k1,k2,k3,k4,k6,T1,T2,T3,T4,n: real); begin Gr[1]:=g-k6*y[2]; Gr[2]:=(g-y[2]*k6y[1])*k2+k1*(g-y[2]*k6); Gr[3]:=y[3]; Gr[4]:=y[2]; Gr[5]:=y[2]*k6; end; procedure begline; begin grdriver:=detect; initgraph(grdriver, grmode, 'd:\bp\bgi'); setfillstyle(1,11); bar(0,0,640,480); setcolor(15); rectangle(40,460,600,40); i:=40; while i<600 do begin setcolor(15); line(i,40,i,460); i:=i+56; end; i:=40; while i<460 do begin line(40,i,600,i); i:=i+42 end; end; procedure abc (Gr: mass2; var ymin,ymax: real); begin for i:=1 to m2 do begin if ymin>Gr[i] then ymin:=Gr[i]; if ymax<Gr[i] then ymax:=Gr[i]; end; end; procedure top(ymin,ymax,t0,tk: real; var shg,hi,bx,by: real); begin shg:=560/(tk-t0); hi:=420/(ymax-ymin); bx:=600-tk*shg; by:=440-ymax*hi; end; procedure draw(Gr: mass2; t,shg,hi,bx,by,h: real); {процедура построения графиков} begin for i:=1 to m2 do begin moveto(round((t-h)*shg+bx),round(GetMaxY-Gr[i]*hi-by)); SetColor(11+i); SetLineStyle(0,1,3); lineto(trunc(t*shg+bx),trunc(GetMaxY-Gr[i]*hi-by)); end; end; procedure finish(t0,tk,ymin,ymax,shg,hi,bx,by: real); begin setfillstyle(1,11); bar(40,475,600,461); setfillstyle(1,11); bar(40,5,635,39); setfillstyle(1,15); setcolor(12); SetLineStyle(0,1,3); setcolor(5); i1:=t0; while i1<=tk do begin str(i1:5:2,s); settextstyle(0,0,1); outtextxy(round(i1*shg+bx)-10,GetMaxY-30,s); i1:=i1+(tk-t0)/10; end; setcolor(12); line(50,30,60,30); settextstyle(0,0,2); outtextxy(70,20,'E'); setcolor(13); line(170,30,180,30); outtextxy(190,20,'U'); setcolor(14); line(280,30,290,30); outtextxy(300,20,'A'); setcolor(15); line(390,30,400,30); outtextxy(410,20,'Y'); setcolor(16); line(500,30,510,30); outtextxy(520,20,'Z'); setcolor(4); settextstyle(1,0,2); outtextxy(round(i1*shg+10),getMaxY-40,'T(c)'); setcolor(5); i1:=ymin; while i1<=ymax do begin str(i1:5:3,s); settextstyle(0,0,1); outtextxy(10,round(GetMaxY-i1*hi-by),s); i1:=i1+(ymax-ymin)/10; end; setfillstyle(1,1); bar(0,0,5,480); bar(0,0,640,5); bar(640,0,635,480); bar(640,480,5,475); end; Procedure output1; begin rewrite(e); writeln(e,' Результаты решение системы ДУ'); writeln(e,'****************************************************'); writeln(e,'* T (c) * D(z1) * D(x5) * D(A) * D(x4) * D(x6) *'); writeln(e,'***************************************************'); writeln(' Результаты решение системы ДУ'); writeln('*****************************************************'); writeln('* T (c) * D(z1) * D(x5) * D(A) * D(x4) * D(x6) *'); writeln('*****************************************************'); end; procedure output(t: real; y: mass); {Вывод на экран результатов решения системы уравнений и их запись во внешний файл} begin write (e, t:3:2,' '); write (t:3:2,' '); for i:=1 to m do begin write (e, y[i]:5:4,' '); write (y[i]:5:4,' '); end; writeln(e); writeln end; END. 3. Графики переходных процессов Зависимость сигнала на выходе УУП от времени
Зависимость сигнала рассогласования от времени Зависимость от времени координаты исполнительного органа ИУ Регулируемая величина График сигнала обратной связи Общий вид решения
Страницы: 1, 2
|