Автоматизация холодильного оборудования

Приложение

Исходный текст программы modul

program modul;

uses crt, graph;

const max=5000; {число точек}

h=0.04; {шаг интегрирования}

type work=object

t, tv: array [0 max] of real; {t‑температура, tv – скорость

роста температуры}

t1:real; {постоянная времени}

t2:real; {постоянная времени}

tur:real; {установившаяся температура при ее росте}

tus:real; {установившаяся температура при ее снижении}

maximum, minimum:real; {фактический диапазон регулирования}

period:real; {период колебаний}

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

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13  14 


Другие рефераты на тему «Производство и технологии»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы