Разработка системы автоматизации холодильной установкиРефераты >> Технология >> Разработка системы автоматизации холодильной установки
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