Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Расчет реактора.doc
Скачиваний:
7
Добавлен:
19.12.2018
Размер:
318.98 Кб
Скачать

5. Порядок работы

1. Разработать математическую модель реактора.

2. Уяснить задачу и подготовить исходные данные в соответствии с алгоритмом для ввода их с терминала ЭВМ.

3. Для запуска программы необходимо запустить на исполнение файл react.exe.

4. Ввести исходные данные из таблицы (по варианту, указанному преподавателем). Ввести значения V = 2, S = 2, L = 10, Т = (температура из интервала температур, указанного в задании к лабораторной работе, п.4), SHAG = 1, EPS = 0.001 - 0.0001.

5. Помимо вывода результатов расчёта на экран ЭВМ, в программе предусмотрен вывод в файл report.rpt, который содержит все этапы работы программы.

6. По полученным результатам расчета определить область существования экстремума для целевого компонента. Оптимум по температуре определяется путем сравнения расчетов для нескольких температур из указанного интервала.

7. Если интервалы существования оптимума по времени пребывания и температуре определены, то можно приступать к оптимизации. Результаты оптимизации будут выводиться на печать.

8. Если интервалы существования оптимума не определены, то необходимо обработать результаты расчета и построить статические характеристики (см. рис.5).

9. Следует учесть, что для проведения оптимизации после выхода из программы с целью построения зависимостей (см. рис.5), следует снова запустить программу, провести расчет реактора для любого начального режима, чтобы оказаться в той части программы, где осуществляется процесс оптимизации (рис.4. блок 12). При этом ход и результаты оптимизации появятся на экране, а если подключен канал вывода в файл, то результаты оптимизации зафиксируются в соответствующем файле.

6. ТРЕБОВАНИЯ К ОТЧЕТУ

Отчет должен содержать следующее:

  1. Постановка задачи, исходные данные.

  2. Математическая модель реактора.

  3. Результаты расчета на ЭВМ в виде распечаток.

  4. Статические характеристики в виде графических зависимостей.

  5. Результаты оптимизации.

  6. Схема управления реактором.

  7. Выводы по работе.

7. ПРОГРАММА К ЛАБОРАТОРНОЙ РАБОТЕ

МОДЕЛИРОВАНИЕ И ОПТИМИЗАЦИЯ РЕАКТОРОВ

НЕПРЕРЫВНОГО ДЕЙСТВИЯ НА ЭВМ

(РЕАКТОР ИДЕАЛЬНОГО ВЫТЕСНЕНИЯ)

Program React;

uses Crt;

Label

Again,1000,back,a1;

Const

R=1.985;

Var

X : Array[0..9]of Real;

Y : Array[0..9]of Real;

Y1 : Array[0..9]of Real;

Y2 : Array[0..9]of Real;

YFin : Array[0..9]of Real;

Z : Array[0..9]of Real;

K : Array[0..9]of Real;

S0 : Real;

Yp : Real;

NN : Byte;

Xt : Real;

H : Real;

XFin : Real;

Iss : integer;

HS : Real;

Prim,Ot,F1,F2 : Boolean;

OPT : Real;

TOpt : Real;

TAUOpt : Real;

A : Real;

Tp : Real;

Temp : Real;

Key : Char;

i : Byte;

Out : Text;

St : String;

TAU1,TAU2 : Real;

T1,T2 : Real;

SHAG1 : Real;

DT : Real;

Const T0 : Array[0..19] of Real=

(45,59,68,-52,66,62,40,-60,50,-66,-45,

-70, -68,-56,80,-85,-75,35,72,-95);

Const NC : Integer=4;

Const NOM : byte=7;

Const NSt : Integer=5;

Const TAU : Real=10.00;

Const T : Real=60;

Const V : Real=2.00;

Const S : Real=2.00;

Const L : Real=10.00;

Const Eps : Real=0.001;

Const Shag : Real =1.00;

Const N : Byte=5;

Const Fl : Boolean=False;

Function Str(N:Real):String;

var

s:String;

begin

System.Str(N,S);

Str:=S;

end;

Procedure GetConstants_K;

var

i:integer;

label 1,2;

begin

Write(Out,'-----------------------------------------------');

i:=1;

repeat

K[i-1]:=0.2*i*exp(-100*i/(R*(T+273)));

if ((T0[nom-1]<0)and(T>=Abs(T0[Nom-1]))) then goto 2;

if (T>T0[nom-1]) then goto 1;

2: Tp:=2*Abs(T0[nom-1]);

K[i-1]:=0.2*i*exp(-100*(i+1)/(R*(Tp-T+273)));

1:

i:=i+1;

until i>NSt;

end;

Procedure OBM(var Y:array of Real;N:Byte);

begin

for i:=0 to N-1 do X[i]:=Y[i];

for i:=1 to N-1 do

if N-1=i then X[i]:=Yp;

end;

Procedure F(Xt:Real;Y:array of Real;N:Byte;var Z:array of Real);

begin

OBM(Y,N);

case Nom of

1:begin

Z[0]:=-X[0]*K[0]+X[1]*K[2];

Z[1]:=X[0]*K[0]-K[1]*X[1]-K[2]*X[1];

end;

2:begin

Z[0]:=-X[0]*K[1]+X[1]*K[0];

Z[1]:=X[0]*K[1]-X[1]*K[0]-X[1]*K[3]+X[2]*K[2];

end;

3:begin

Z[0]:=-X[0]*K[3]-X[0]*K[1]+X[1]*K[2];

Z[1]:=X[0]*K[3]-X[1]*K[2]-X[1]*K[0];

Z[2]:=X[0]*K[1];

end;

4:begin

Z[0]:=-X[0]*K[1]+X[2]*K[2]-X[0]*K[3];

Z[1]:=X[0]*K[1]-X[1]*K[0];

end;

5:begin

Z[0]:=-X[0]*K[0]+X[1]*K[1];

Z[1]:=X[0]*K[0]-X[1]*K[1]-X[1]*K[2]+X[3]*K[4];

Z[2]:=X[1]*K[2]-X[2]*K[3];

end;

6:begin

Z[0]:=-X[0]*K[0]-X[0]*K[1];

Z[1]:=X[0]*K[0]-X[1]*K[2];

Z[2]:=X[1]*K[2]+X[3]*K[3]-X[2]*K[4];

Z[3]:=X[0]*K[1]-X[3]*K[3];

end;

7:begin

Z[0]:=-X[0]*K[0];

Z[1]:=X[0]*K[0]-X[1]*K[1]-X[1]*K[2]-X[1]*K[4]+X[3]*K[3];

Z[2]:=X[1]*K[1];

Z[3]:=X[1]*K[2]-X[3]*K[3];

end;

8:begin

Z[0]:=-X[0]*X[1]*K[0];

Z[1]:=-X[0]*X[1]*K[0]-X[1]*X[2]*K[1];

Z[2]:=X[0]*X[1]*K[0]-X[1]*X[2]*K[1];

end;

9:begin

Z[0]:=-X[0]*X[1]*K[0]+X[2]*K[1]-X[2]*X[0]*K[2];

Z[1]:=-X[0]*X[1]*K[0]+X[2]*K[1];

Z[2]:=X[0]*X[1]*K[0]-X[2]*K[1]-X[2]*X[0]*K[2];

end;

10:begin

Z[0]:=-X[0]*X[1]*K[0]-X[0]*X[3]*K[1];

Z[1]:=-X[0]*X[1]*K[0];

Z[2]:=X[0]*X[1]*K[0]; Z[3]:=-X[0]*X[3]*K[1];

end;

11:begin

Z[0]:=-X[0]*K[0];

Z[1]:=X[0]*K[0]-X[1]*K[1]+X[2]*K[2];

end;

12:begin

Z[0]:=-X[0]*K[0]+X[2]*K[2]-X[0]*K[3];

Z[1]:=X[0]*K[0]-X[1]*K[1];

end;

13:begin

Z[0]:=-X[0]*K[0]+X[2]*K[1];

Z[1]:=X[0]*K[0]-X[1]*K[2]+X[3]*K[4];

Z[2]:=X[1]*K[2]-X[2]*K[3];

end;

14:begin

Z[0]:=-X[0]*K[0]+X[3]*K[1];

Z[1]:=X[0]*K[0]-X[1]*K[2]-X[1]*K[3];

Z[2]:=X[1]*K[2];

end;

15:begin

Z[0]:=-X[0]*K[0];

Z[1]:=X[0]*K[0]-X[1]*K[2]+X[2]*K[1]+X[3]*K[4];

Z[2]:=-X[2]*K[1]+X[1]*K[2]-X[2]*K[3];

end;

16:begin

Z[0]:=-X[0]*K[0]+X[1]*K[1];

Z[1]:=X[0]*K[0]-X[1]*K[1]-X[1]*K[2]+X[2]*K[3];

Z[2]:=X[1]*K[2]-X[2]*K[3]-X[2]*K[4]+X[3]*K[5];

end;

17:begin

Z[0]:=-X[0]*K[0]-X[0]*K[4]+X[3]*K[5];

Z[1]:=X[0]*K[0]-X[1]*K[1]+X[2]*K[2];

Z[2]:=X[1]*K[1]-X[2]*K[2]+X[3]*K[3];

end;

18:begin

Z[0]:=-X[0]*X[1]*K[1];

Z[1]:=-X[0]*X[1]*K[1]-X[2]*X[1]*K[0];

Z[2]:=X[0]*X[1]*K[2]-X[2]*X[1]*K[0];

end;

19:begin

Z[0]:=-X[0]*K[0]+X[3]*K[2];

Z[1]:=X[0]*K[0]-X[1]*K[1];

Z[2]:=X[1]*K[1]-X[2]*K[3];

end;

20:begin

Z[0]:=-X[0]*X[1]*K[0]-X[0]*X[3]*K[1];

Z[1]:=-X[0]*X[1]*K[0];

Z[2]:=X[0]*X[1]*K[0]-X[0]*X[2]*K[1];

end; end;

Z[N-1]:=V/S;

end;

Procedure RKStep(N:byte;Xt:Real;Y:array of Real;H:Real;

var Xh:Real;var YH:Array of Real);

var

A :Array[0..4] of Real;

W :Array[0..99]of Real;

l,j :integer;

begin

A[0]:=0.5*H; A[1]:=0.5*H; A[2]:=H; A[3]:=H; A[4]:=0.5*H;

Xh:=Xt;

For l:=0 to N-1 do begin Yh[l]:=Y[l];W[l]:=Y[l];end;

for j:=0 to 3 do

begin

F(Xh,W,N,Z);

Xh:=Xt+A[j];

for l:=0 to N-1 do

begin

Yh[l]:=Yh[l]+A[j+1]*Z[l]/3;

W[l]:=Y[l]+A[j]*Z[l];

end;

end;

end;

Procedure Runge(Xt:Real;Y:array of Real;N:byte;EPS:Real;

Prim:Boolean;XFin:Real;var YFin:Array of Real);

var

Y1,Y2,Y3 : Array[0..99] of Real;

X1,X2,X3 : Real;

k:integer;

Label 11,12,13,100,10,21;

begin

if Prim then begin

H:=XFin-Xt; Iss:=0;

end else H:=HS;

11: F1:=(Xt+2.01*H-XFin)>0;

F2:=H>0;

if (F1 and F2)or((Not F1)and(Not F2))then begin

HS:=H;

Ot:=True;

H:=(XFin-Xt)/2;

end;

RKStep(N,Xt,Y,2*H,X1,Y1);

12: RKStep(N,Xt,Y,H,X2,Y2);

RKStep(N,X2,Y2,H,X3,Y3);

for k:=0 to N-1 do if (Abs(Y1[k]-Y3[k])>Eps) then goto 13;

Xt:=X3;

if Ot then goto 100;

for k:=0 to N-1 do Y[k]:=Y3[k];

if Iss=5 then Goto 10;

21: Iss:=Iss+1;

goto 11;

10: Iss:=0;

H:=2*H;

Goto 21;

13: H:=0.5*H;

Ot:=False;

X1:=X2;

for k:=0 to N-1 do Y1[k]:=Y2[k];

Goto 12;

100: for k:=0 to N-1 do YFin[k]:=Y3[k];

end;

Procedure Optimization;

Label

5000,Rep,1,2;

begin

T:=T1;

Opt:=0;

Rep:

for i:=0 to NN-1 do Y1[i]:=Y2[i];

i:=1;

repeat

K[i-1]:=0.2*i*exp(-100*i/(R*(T+273)));

if ((T0[nom-1]<0)and(T>=Abs(T0[Nom-1]))) then goto 2;

if (T>T0[nom-1]) then goto 1;

2: Tp:=2*Abs(T0[nom-1]);

K[i-1]:=0.2*i*exp(-100*(i+1)/(R*(Tp-T+273)));

1:

i:=i+1;

until i>NSt;

Xt:=TAU1;

5000:

Prim:=True;

Runge(Xt,Y1,NN,Eps,Prim,XFin,YFin);

Xt:=XFin; S0:=0;

for i:=0 to NN-1 do begin

if (YFin[i]<0)then YFin[i]:=0;

Y1[i]:=YFin[i]; S0:=S0+Y1[i];

end;

Yp:=1-(S0-Y1[NN-1]); A:=Y1[NN-1]; Y1[NN-1]:=Yp;

if (Abs(Y1[NC-1])>Abs(Opt)) then begin

Opt:=Y1[NC-1]; TOpt:=T; TAUOPt:=Xt;

if (Xt>=TAU1) then

Writeln(Out,'Концентрация  X опт.=',Opt:6:6,',

при T опт.=',TOpt:2:2,', TAUопт.=',TAUOpt:2:2);

end;

Y1[NN-1]:=A; XFin:=Xt+SHAG1; if Xt<=TAU2 then goto 5000;

T:=T+DT;

if T<=T2 then goto Rep;

Writeln(Out,'-----------Результаты оптимизации----------------');

Writeln(Out,'-----------Оптимальные параметры:----------------');

Writeln(Out,'Время пребывания в реакторе (мин.)=',TAUOpt:2:2);

Writeln(Out,'Температура (С)=',TOpt:2:2);

Writeln(Out,'Максимальная концентрация целевого ',NC,'-го

компонента равна ',Opt:6:6,’ мольн.доли’);

end;

begin

Again:

ClrScr;

Writeln('╔═══════════════════════════════════════════════════╗');

Writeln('║ Расчет реактора идеального вытеснения. ║');

Writeln('╚═══════════════════════════════════════════════════╝');

Writeln('Введите исходные данные:');

write(' Номер варианта=>');Readln(Nom);

write(' Число реагентов в реакции=>');Readln(N);

write(' Число стадий в реакции=>');Readln(NSt);

writeln(' Начальные концентрации реагентов в реакции:');

a1:S0:=0;

for i:=1 to N do

begin

write(' Концентрация ',i,'-го компонента=>');

readln(X[i-1]);

S0:=S0+X[i-1];

if (X[i-1]<0)or(X[i-1]>1) then begin Dec(i); Continue;End;

if S0>1 then begin Writeln('Суммарная концентрация

не может быть неравной единице.');goto a1;end;

if S0=1 then Break;

end;

if S0<1 then Goto a1;

write(' Номер целевого компонента=>');readln(NC);

write(' Объемная скорость потока=>');readln(V);

write(' Сечение реактора=>');readln(S);

write(' Температура в реакторе=>');readln(T);

write(' Время пребывания в реакторе (мин.)=>');readln(TAU);

write(' Шаг печати=>');readln(SHAG);

write(' Точность интегрирования=>');readln(EPS);

Writeln('----------------------------------------------------');

Write('Желаете повторить ввод данных? [Y-Да/N-Нет]=>');

Repeat Key:=ReadKey;

Until (Key='Y')or(Key='y')or(Key='N')or(Key='n');

if (Key='Y')or(Key='y') then Goto Again;

Writeln;

Write('Вы желаете вывести результат в файл? [Y-Да/N-Нет]=> ');

Repeat Key:=ReadKey;

Until (Key='Y')or(Key='y')or(Key='N')or(Key='n');

if (Key='Y')or(Key='y') then

begin Assign(Out,'Report.Rpt');Fl:=True;end

else Assign(Out,'');

Writeln; ReWrite(Out);

GetConstants_K;

TAU:=L*S/V;

for i:=0 to N-1 do Y[i]:=X[i];

for i:=0 to N-1 do if N=i+1 then Yp:=X[i];

NN:=N; Xt:=0; Y[NN]:=0;

for i:=0 to NN-1 do begin Y2[i]:=Y[i]; Y1[i]:=Y[i]; end;

ClrScr;

Writeln(Out,'---------------------Расчет--------------------');

Writeln(Out,'Объемная скорость V=',V:2:2);

Writeln(Out,'Температура (C) T=',T:2:2);

Writeln(Out,'Высота реактора L=',L:2:2);

Writeln(Out,'Сечение реактора S=',S:2:2);

Writeln(Out,'Время пребываения (мин.) TAU=',TAU:2:2);

Writeln(Out,'Номер целевого компонента NC=',NC);

Writeln(Out,'Точность интегрирования EPS=',EPS:6:6);

Writeln(Out,'-----Результаты расчета----------------------');

Write(Out,'TAU');

for i:=1 to N do Write(Out,'.......X[',i,']');

Writeln(Out);

Write(Out,Xt:2:2);

for i:=1 to N do Write(Out,' ',X[i-1]:6:6);

Writeln(Out);

1000:

XFin:=Xt+Shag;

Prim:=True;

Runge(Xt,Y,NN,EPs,Prim,XFin,YFin);

Xt:=XFin;

S0:=0;

For i:=0 to NN-1 do begin

if (YFin[i]<0) then YFin[i]:=0;

Y[i]:=YFin[i];

S0:=S0+Y[i];

end;

Yp:=1-(S0-Y[NN-1]);

Writeln(Out);

if Xt<10 then Write(Out,' ',Xt:2:2) else Write(Out,Xt:2:2);

for i:=0 to NN-2 do Write(Out,' ',Y[i]:6:6);

Write(Out,' ',Yp:6:6);

if Xt<10 then Write(Out,' ',Y[NN-1]:2:2) else Write(Out,'

',Y[NN-1]:2:2);

if Xt<TAU then goto 1000;

Temp:=Yp;

Yp:=Y[NN-1];

Y[NN-1]:=Temp;

Writeln(Out);

Write(Out,'Выход целевого ',NC,'-го компонента=',Y[NC-1]:6:6);

Y[N]:=Yp;

Writeln(Out);

Write('Желаете оптимизировать данные? [Y-Да/N-Нет]=>');

Repeat Key:=ReadKey;

Until (Key='Y')or(Key='y')or(Key='N')or(Key='n');

if (Key='N')or(Key='n') then Goto Back;

Writeln(Out);

Writeln;

Write('Задайте нижнюю границу поиска по времени TAU1=');

readln(TAU1);

Write('Задайте верхнюю границу поиска по времени TAU2=');

readln(TAU2);

Write('Задайте шаг поиска по времени SHAG1=');

readln(SHAG1);

Write('Задайте нижнюю границу поиска по температуре T1=');

readln(T1);

Write('Задайте верхнюю границу поиска по температуре T2=');

readln(T2);

Write('Задайте шаг поиска по температуре DT=');

readln(DT);

if Fl then Writeln(Out,'TAU1=',TAU1:2:2,’ мин’);

if Fl then Writeln(Out,'TAU2=',TAU2:2:2,’ мин’);

if Fl then Writeln(Out,'SHAG1=',SHAG1:2:2,’ мин’);

if Fl then Writeln(Out,'T1=',T1:2:2,’ С’);

if Fl then Writeln(Out,'T2=',T2:2:2,’ С’);

if Fl then Writeln(Out,'DT=',DT:2:2,’ С’);

ClrScr;

Write('Ждите...');

Optimization;

back:

Write('Желаете начать заново? [Y-Да/N-Нет]=>');

Repeat Key:=ReadKey;

Until (Key='Y')or(Key='y')or(Key='N')or(Key='n');

if (Key='Y')or(Key='y') then Goto Again;

Close(Out);

end.

СПИСОК ЛИТЕРАТУРЫ

1. Кафаров В.В. Методы кибернетики химико-технологических процессов. - М.: Химия,1971. - 496с.

2. Безденежных А.А. Математические модели химических реакторов - Киев: Наука, 1970. - 171с.

3. Агеев М.И. и др. Библиотека технической кибернетики. – М.: Наука, 1985. -Вып.1. - 175с.

4. Бояринов А.И., Кафаров В.В. Методы оптимизации в химической технологии. - М.: Химия, 1975. - 576с.