Разработка системы автоматизации холодильной установки
Рефераты >> Технология >> Разработка системы автоматизации холодильной установки

File_name:string;{Имя файла данных}

constructor Init ; {инициализация параметров}

procedure save; {запись данных в файл}

procedure count; {расчет переходного процесса методом Рунге-Кутта}

procedure setka_par;

procedure show;{показ графика}

procedure obrob;{обработка результатов расчета}

function f(y,ys,tvar:real):real;

end;

constructor work.init;

var i:integer;

begin

for i:=0 to max do

begin

tv[i]:=0;

t[i]:=0;

end;

clrscr;

write ('Введите постоянную времени Т1=');

readln(t1);

write ('Введите постоянную времени Т2=');

readln(t2);

write ('Введите начальную температуру в камере t0=');

readln(t[0]);

write ('Ввести установившеюся температуру при ее росте ');

readln(tur);

write('Ввести установившеюся температуру при ее снижении ');

readln(tus);

write ('Имя файла данных ');

readln(File_name)

end;

procedure work.save;

var file1:text;

i:integer;

begin

assign(file1,File_name);

rewrite (file1);

writeln(file1,'Исследование двухпозиционной системы регулирования');

writeln(file1,'температуры в холодильной камере');

writeln(file1,'Исходные данные');

writeln(file1,'постоянные времени Т1=',t1,' T2= ',t2);

writeln(file1,'заданный диапазон 0.5-1 градус цельсия');

writeln(file1,'полученный диапазон ',minimum:6:3,'-',maximum:6:3, 'градус цельсия');

writeln(file1,'период колебаний ',period:4:2,' часа');

for i:= 0 to max do

if (i mod 50)=0 then {сохраняется

каждое 50-е значение}

begin write (file1,(i*h):6:4);

write (file1,tv[i]:10:5);

writeln(file1,t[i]:10:5);

end;

close(file1);

end;

procedure work.count;

var

k1,k2,k3,k4:real;

i: integer;

tvar1:real;

rost:boolean ;{флаг состояния работы компрессоров (при rost=false)

компрессоры работают и наоборот}

begin

if t[0] < 0.5 then begin

tvar1:= tur;

rost:= true;

end;

if t[0]>1 then begin

tvar1:=tus; {установка флагов}

rost :=false;

end;

for i:=0 to max-1 do

{длительность переходного процесса max * h = 5000*0.04 =200 часов}

begin

k1:=h*f(t[i],tv[i],tvar1) ;

k2:=h*f(t[i]+(h/2)*tv[i]+(h/8)*k1,tv[i]+k1/2,tvar1);

k3:=h*f(t[i]+(h/2)*tv[i]+(h/8)*k1,tv[i]+k2/2,tvar1);

k4:=h*f(t[i]+h*tv[i]+(h/2)*k3,tv[i]+k3,tvar1);

t[i+1]:=t[i]+h*(tv[i]+(1/6)*(k1+k2+k3));

tv[i+1]:=tv[i]+(1/6)*(k1+2*k2+2*k3+k4);

if (t[i+1]<=0.5) and (rost=false) then

begin

tvar1:=tur;

rost:=true;

end;

if (t[i+1]>=1) and (rost=true) then

begin

tvar1:=tus;

rost:=false;

end;

end;

end;

function work.f(y,ys,tvar:real):real ;

begin

f:=(tvar-y-(t1+t2)*ys)/(t1*t2) ;

end;

procedure StartGraph;

var

Driver, Mode: Integer;

begin

Driver := Detect;

InitGraph(Driver, Mode, '');

Setbkcolor(white);

End;

procedure Setka;

var

i:integer;

begin

ClearViewPort;

setcolor(8);

for i:=0 to 10 do

begin

line(round(GetMaxX*i/10),0,round(GetMaxX*i/10),GetMaxY);

line(0,round(GetMaxY*i/10),GetMaxX,round(GetMaxY*i/10));

end ;

End;

Procedure Work.Setka_par;

Var

I,J:Integer;

St:String;

Jt:real;

dop : integer;

Begin

if t[0]>1 then dop:=0;

if t[0] <0.5 then dop :=-3;

settextstyle(0,1,2);

outtextxy(round(0.05*GetMaxX),round(0.15*GetMaxY),'ТЕМПЕРАТУРА , C');

settextstyle(0,0,1);

for i:=0 to 9 do Begin

jt:=h*max*i/10;

str(jt:3:0,st);

outtextxy(round(GetMaxX*i/10+8),round(GetMaxY/2+8),st)

End;

settextstyle(0,0,2);

outtextxy(round(0.6*GetMaxX),round(0.8*GetMaxY)+5,'Время , час');

settextstyle(0,0,1);

j:=5+dop;

FOR i := 0 to 5 do begin

str(j,st);

outtextxy(5,round(GetMaxY*i/5+4),st) ;

j:=j-1

end;

end;

procedure Work.Show ;

Var i:integer;

msx,msy:real;

dop : integer;

begin

if t[0] >1 then dop:=0;

if t[0] <0.5 then dop :=3;

msx:=GetMaxX/max;

Msy:=GetMaxY/5;

for I:=1 to max do

line (round(msx*(i-1)),

round(GetMaxY-msy*(t[i-1]+dop)),

round(msx*i),

round(GetMaxY-msy*(t[i]+dop)))

end;

procedure work.obrob;

var

i:integer;

begin i:=0;

if t[0] >1 then begin

while tv[i]<=0 do

begin

minimum:=t[i]; {минимум функции}

i:=i+1

end;

period:=i;

while tv[i]>=0 do

begin

maximum :=t[i];

i:=i+1

end ;

while tv[i]<=0 do i:=i+1;

period:=h+(i-period);

end;

if t[0] <0.5 then begin

while tv[i] >=0 do

begin

maximum :=t[i];

i:=i+1;

end;

period:=i;

while tv[i]<= 0 do

begin

minimum:=t[i];

i:=i+1;

end;

while tv[i]>=0 do i:=i+1;

period:=h*(i-period)

end;end;

var a:work;

begin

with a do

begin

init;

count;

obrob;

save;

startgraph;

setka;

setka_par;

show;

repeat until keypressed;

end

end .

Протоколы работы :

Вариант №1

Исследование двухпозиционной системы регулирования

температуры в холодильной камере

Исходные данные

постоянные времени Т1= 1.0000000000E+02 T2= 1.0000000000E+01

заданный диапазон 0.5-1 градус цельсия

полученный диапазон 0.448- 1.249градус цельсия

период колебаний 54.64 часа

0.0000 0.00000 5.00000

2.0000 -0.01435 4.98512

4.0000 -0.02582 4.94451

6.0000 -0.03493 4.88341

8.0000 -0.04211 4.80608

10.0000 -0.04773 4.71600

12.0000 -0.05206 4.61601

14.0000 -0.05536 4.50843

16.0000 -0.05780 4.39515

18.0000 -0.05955 4.27769

20.0000 -0.06075 4.15731

22.0000 -0.06149 4.03501

24.0000 -0.06186 3.91161

26.0000 -0.06194 3.78777

28.0000 -0.06178 3.66402

30.0000 -0.06142 3.54080

32.0000 -0.06092 3.41843

34.0000 -0.06030 3.29718

36.0000 -0.05959 3.17728

38.0000 -0.05880 3.05888

40.0000 -0.05796 2.94212

42.0000 -0.05707 2.82709

44.0000 -0.05616 2.71385

46.0000 -0.05522 2.60248

48.0000 -0.05427 2.49298

50.0000 -0.05331 2.38539

52.0000 -0.05236 2.27972

54.0000 -0.05140 2.17597

56.0000 -0.05045 2.07413

58.0000 -0.04950 1.97418

60.0000 -0.04856 1.87612

62.0000 -0.04764 1.77992

64.0000 -0.04672 1.68557

66.0000 -0.04582 1.59302

68.0000 -0.04493 1.50227

70.0000 -0.04406 1.41328

72.0000 -0.04320 1.32602

74.0000 -0.04236 1.24047

76.0000 -0.04153 1.15659

78.0000 -0.04071 1.07436

80.0000 -0.03991 0.99374

82.0000 -0.03913 0.91470

84.0000 -0.03835 0.83723

86.0000 -0.03760 0.76128

88.0000 -0.03686 0.68683

90.0000 -0.03613 0.61384

92.0000 -0.03541 0.54230

94.0000 -0.02524 0.47583

96.0000 -0.00312 0.44827

98.0000 0.01464 0.46043

100.0000 0.02884 0.50444


Страница: