ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.11.2024

Просмотров: 28

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Иерархическая структура хтс

Уровень иерархии

Пример

Назначение

1. Типовой процесс

Реактор, колонна, теплообменник, смеситель и др.

Преобразование вещества и энергии

2. Цех

Совокупность отделений, работающих на выпуск определенной продукции (цех производства бензина)

Объединение типовых процессов

3. Химический завод

Совокупность цехов, объединенных общим сырьем (завод производства метанола)

Объединение цехов по выпуску продукции

4.Технологическая линия

Совокупность заводов, связанных между собой общей производственной линией (первичная подготовка нефти)

Объединение заводов по сырью и продукции

5. Отрасль химической промышленности

Совокупность заводов химической, нефтехимической и нефтеперерабатывающей промышленности данного округа

Получение и распределение продукции по назначению

Практическая часть

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

Коэффициенты для расчета теплоемкости:

B

A

1

1,010-5

0,869

2

1,110-5

0,963

Таблица 1 - Индивидуальные задания для расчета смесителя потоков

№ вар.

№ потока

Расход, кг,ч

Тем-ра, С

Доля компонента

1

2

7

1

2180

330

0.5

0.5

2

2000

295

0.2

0.8

3

2110

301

0.4

0.6


Параметры теплообменника:

Внутренний диаметр труб, м 0.05

Внешний диаметр труб, м 0.057

Количество труб 3280

Площадь сечения теплообмена, м2 5.85

Термическое сопротивление стенки, м2/Вт 0.127

Площадь теплообмена, м2 3860

Теплоемкость гор. теплонос., 0.92

№ вар.

Расход Gt, кг/ч

Начальная т-ра Gt, С

7

6220

389

№ вар.

Коэффициент разделения

G6

G7

7

0.7

0.3

Программа в Pascal:

Program hts;

type

m = array [1..100] of real;

m2 = array [1..10, 1..100] of real;

const

k = 2;

p = 3;

A: array [1..k] of real = (0.869, 0.963);

B: array [1..k] of real = (1e-5, 1.1e-5);

d_vnutr = 0.05;

d_vnesh = 0.057;

kol_trub = 3280;

S_sech = 5.85;

r_term = 0.127;

S= 3860;

Cp_hot = 0.920;

var

Cp,F,T: real;

Flow_Rate: m;

Flow_t: m;

Flow_Comp_Frac: m2;

flows_param: m2;

flows_composition: m2;

Cp_comp: m2;

Flow_Cp: m;

Heater_Flow_Rate: real;

Heater_Flow_Temp: real;

Heated_Flow_Temp: real;

splitFlow_Rate: m;

mix_Flow_Rate, mix_Cp, mix_Temp: real;

mix_Comp_Frac: m;

f1,f2: text;

i,j: integer;

procedure getCp_comp (Flows_param: m2; var Cp_comp: m2);

var

i,j: integer;

begin

for i:= 1 to k do

for j:= 1 to p do

Cp_comp[j,i]:= A[i] + B[i] * (Flows_param[j,2] + 273);

end;

procedure getFlow_Cp(flows_compositio: m2; var Flow_Cp: m);

var

i,j: integer;

begin

for j:= 1 to p do

for i:= 1 to k do

Flow_Cp[j]:= Flow_Cp[j] + flows_composition[j,i] * Cp_comp[j,i];

end;

procedure Mixer (Flows_param, Flows_composition: m2; var mix_Flow_Rate,

mix_Cp, mix_Temp: real; var mix_Comp_Frac: m);

var

i,j: integer;

begin

getCp_comp(Flows_param, Cp_comp);

getFlow_Cp(Flows_composition, Flow_Cp);

for i:= 1 to p do

mix_Flow_RAte:= mix_Flow_RAte + Flows_param[i,1];

for i:= 1 to k do

for j:= 1 to p do

mix_Comp_Frac[i]:= mix_Comp_Frac[i] + Flows_param[j,1]*

Flows_composition[j,1] / mix_Flow_Rate;

for i:= 1 to p do

mix_Cp:= mix_Cp + flows_param[i,1] / mix_flow_rate * flow_Cp[i];

for i:= 1 to p do

mix_temp:= mix_temp + flows_param [i,1]* flow_Cp[i]*(Flows_param[i,2] +

273) / (mix_Cp * mix_Flow_Rate);

end;

procedure heater (heater_flow_rate, heater_flow_temp: real; var


mix_flow_rate, mix_cp, mix_temp, heated_flow_temp: real; var mix_comp_frac: m);

var

i,j: integer;

w_cold: real;

w_hot: real;

N,M,a1,a2,Kt: real;

begin

w_cold:= mix_flow_rate * mix_Cp;

w_hot:= heater_flow_rate* cp_hot;

N:= w_hot / w_cold;

a1:= 1 / d_vnutr* exp(0.8*ln(heater_flow_rate / (kol_trub * d_vnutr))) *

(3.43 + 2.71e-3 * heater_flow_temp);

a2:= 1 / d_vnesh * exp(0.6*ln(mix_flow_rate* d_vnesh / S_sech) * (3.483 +

7.27e-3 * (mix_temp - 273)));

Kt:= 1 / (1 / a1 + r_term + 1 / a2);

M:= Kt*s / w_hot;

heater_flow_temp:= (mix_temp - 273) + (heater_flow_temp - (mix_temp - 273)) * N *

(exp(M *( 1-N)) - 1)/ (exp(M*(1-N))-N)

end;

procedure Splitter(split_flow1, split_flow2, mix_flow_rate: real; var

splitFlow_Rate: m);

var

i: integer;

begin

splitFlow_Rate[1]:= split_Flow1 * mix_flow_rate;

splitFlow_Rate[2]:= split_Flow2 * mix_flow_rate;

end;

begin

assign(f1, 'mixer_dan1.txt');

reset(f1);

assign(f2, 'mixer_dan2.txt');

reset(f2);

for i:= 1 to p do

begin

for j:= 1 to k do

read (f1, flows_param[i,j]);

readln(f1)

end;

for i:= 1 to p do

begin

for j:= 1 to k do

read (f2, flows_composition[i,j]);

readln(f2)

end;

writeln('=======Миксер======');

Mixer(flows_param, flows_composition, mix_flow_rate, mix_cp, mix_temp,

mix_comp_frac);

writeln('Расход потока', mix_flow_rate: 10, 'кг/ч');

for i:= 1 to k do

writeln('Доля компонента',i, mix_comp_frac[i]:8:4);

writeln('Темплоемкость G4', mix_cp:10:4, 'Дж/(кг*К)');

writeln('========Теплообменник======');

heater (6200, 360, mix_flow_rate, mix_cp, mix_temp, heated_flow_temp,

mix_comp_frac);

writeln('Т нагретого потока',heated_flow_temp:10:4, 'C');

writeln('F нагретого потока',mix_flow_rate:6, 'кг/ч');

for i:= 1 to k do

writeln('Доля компонента',i, mix_comp_frac[i]:9:4);

writeln('========Делитель======');

Splitter(0.5, 0.5, mix_flow_rate, splitFlow_rate);

for i:= 1 to 2 do

writeln('F потока',i, splitflow_rate[i]:9);

close(f1);

close(f2);

end.

Программа в Lazarus:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,

Grids, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

public

end;

const (* Коэффициенты для определения теплоемкости *)

A: array [1..2] of real = (0.869, 0.963);

B: array [1..2] of real = (1e-5, 1.1e-5);

var

Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

begin

//Заполнение таблицы с параметрами теплообменника


with StringGrid1 do begin Cells[0, 0]:= 'Параметр'; Cells[1, 0]:= 'Значение'; Cells[0, 1]:= 'Внутр. диаметр труб, м'; Cells[1, 1]:= '0,05'; Cells[0, 2]:= 'Внеш. диаметр труб, м'; Cells[1, 2]:= '0,057'; Cells[0, 3]:= 'Количество труб'; Cells[1, 3]:= '3280'; Cells[0, 4]:= 'Площ. сечения теплообмена, м2'; Cells[1, 4]:= '5,85'; Cells[0, 5]:= 'Термич. сопротивление стенки, м2/Вт'; Cells[1, 5]:= '0,127'; Cells[0, 6]:= 'Площадь теплообмена, м2'; Cells[1, 6]:= '3860'; Cells[0, 7]:= 'Теплоемкость гор. теплоносителя, Дж/(кг*К)'; Cells[1, 7]:= '0,920'; Cells[0, 8]:= 'Расход греющего потока, кг/ч'; Cells[1, 8]:= '6200'; Cells[0, 9]:= 'Температура греющего потока, °С'; Cells[1, 9]:= '360'; end; //Заполнение параметров исходных потоков

with StringGrid2 do begin Cells[0, 0]:= 'Параметр'; Cells[1, 0]:= 'Поток 1'; Cells[2, 0]:= 'Поток 2'; Cells[3, 0]:= 'Поток 3'; Cells[0, 1]:= 'Расход, кг/ч'; Cells[1, 1]:= '2180'; Cells[2, 1]:= '2000'; Cells[3, 1]:= '2110'; Cells[0, 2]:= 'Температура, °С'; Cells[1, 2]:= '603'; Cells[2, 2]:= '568'; Cells[3, 2]:= '574'; Cells[0, 3]:= 'Доля компонента 1'; Cells[1, 3]:= '0,5'; Cells[2, 3]:= '0,2'; Cells[3, 3]:= '0,4'; Cells[0, 4]:= 'Доля компонента 2'; Cells[1, 4]:= '0,5'; Cells[2, 4]:= '0,8'; Cells[3, 4]:= '0,6';

Cells[0, 5]:= 'Теплоемкость потока, Дж/(кг*К)';

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,j: integer;

Cp_comp: array [1..3, 1..2] of real;

Flow_Cp: array [1..3] of real;

mix_Flow_Rate: real;

mix_Comp_Frac: array [1..2] of real;

mix_Cp: real;

mix_Temp: real;

begin

StringGrid2.Cells [4,0]:= 'Поток 4';

for i:= 1 to 2 do

for j:= 1 to 3 do

Cp_comp[j,i]:= A[i] + b[i] * StrToFloat(StringGrid2.Cells[j,2]) ;

for j:= 1 to 3 do

begin

for i:= 1 to 2 do

Flow_Cp[j]:= Flow_Cp[j] + StrToFloat(StringGrid1.Cells[j,2])*

Cp_comp[j,i];

StringGrid2.Cells[j,5]:= FloatToStrF(Flow_Cp[j], fffixed, 8, 4);

end;

for i:= 1 to 3 do

mix_Flow_Rate:= mix_Flow_Rate + StrToFloat(StringGrid2.Cells[i,1]);

StringGrid2.Cells[4,1]:= FloatToStrF(mix_Flow_Rate, fffixed, 8, 0);

for i:= 1 to 2 do

begin

for j:= 1 to 3 do

mix_Comp_Frac[i]:= mix_Comp_Frac[i] + StrToFloat(StringGrid2.Cells[j,1])*

StrToFloat(StringGrid2.Cells[j,1 + 2]) / mix_flow_rate;

StringGrid2.Cells[4, i+2 ]:= FloatToStrF (mix_Comp_Frac[i] , fffixed, 8, 4);

end;

for i:= 1 to 3 do

mix_Cp:= mix_Cp + StrToFloat(StringGrid2.Cells[i,1]) / mix_Flow_Rate *

Flow_Cp[i];

StringGrid2.Cells[4,5]:= FloatToStrF (mix_Cp , fffixed, 8, 4);

for i:= 1 to 3 do

mix_Temp:= mix_Temp + StrToFloat(StringGrid2.Cells[i,1]) *

Flow_Cp[i] * (StrToFloat(StringGrid2.Cells[i,2]) + 273) / (mix_Cp * mix_Flow_Rate);

StringGrid2.Cells[4,2]:= FloatToStrF (mix_Temp - 273, fffixed, 8, 0);

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i, j: integer;

W_cold: real;

W_hot: real;

N,M,a1, a2, Kt: real;

heated_Flow_Temp: real;

Cp_comp: array [ 1..2] of real;

Flow_Cp: real;

begin

W_cold:= StrToFloat(StringGrid2.Cells[4,1]) *(StrToFloat(StringGrid2.Cells[4,5]));


W_hot:= StrToFloat(StringGrid1.Cells[1,8]) *

(StrToFloat(StringGrid1.Cells[1,7]) );

N:= W_hot / W_cold;

a1:= 1 / StrToFloat(StringGrid1.Cells[1,1]) * exp (0.8*

ln(StrToFloat(StringGrid1.Cells[1,8]) / (StrToFloat(StringGrid1.Cells[1,3])*

(StrToFloat(StringGrid1.Cells[1,8]))))* (3.43+2.71e-3*

StrToFloat(StringGrid1.Cells[1,9])));

a2:= 1 / StrToFloat(StringGrid1.Cells[1,2]) * exp (0.6*

ln(StrToFloat(StringGrid2.Cells[4,1]) / (StrToFloat(StringGrid1.Cells[1,2])/

StrToFloat(StringGrid1.Cells[1,4]))))* (3.483+7.27e-3*

StrToFloat(StringGrid2.Cells[4,2]));

Kt:= 1 / (1 / a1 + StrToFloat(StringGrid1.Cells[1,5]) + 1 / a2);

M:= Kt * StrToFloat(StringGrid2.Cells[1,6]) / W_hot;

heated_Flow_Temp:= StrToFloat(StringGrid2.Cells[4,2]) +

(StrToFloat(StringGrid1.Cells[1,9]) - (StrToFloat(StringGrid2.Cells[4,2]))*

N * (exp( M * (1-N)) - 1) / (exp(M*(1-N)) -N));

for i:= 1 to 2 do

begin

Cp_comp[i]:= A[i] + B[i] * (heated_Flow_Temp + 273);

Flow_Cp:= Flow_Cp + 1 / StrToFloat(StringGrid2.Cells[4, i +2]) *

Cp_comp[i]

end;

With StringGrid2 do

begin

Cells[5, 0]:= 'Поток 5';

Cells[5, 1]:= Cells[4,1];

Cells[5, 2]:= FloatToStrF(heated_Flow_Temp, fffixed, 8, 2);

for i:= 3 to 4 do

Cells[5, i]:= Cells[4, i];

Cells[5,5]:= FloatToStrF(Flow_Cp, fffixed, 8, 4);

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,j: integer;

k1,k2: real;

begin

k1:= StrToFloat(Edit1.Text);

k2:= StrToFloat(Edit2.Text);

With StringGrid2 do

begin

Cells[6, 0]:= 'Поток 6';

Cells[7, 0]:= 'Поток 7';

Cells[6, 1]:= FloatToStrF( k1 * StrToFloat (Cells[5,1]), fffixed, 8, 0);

Cells[7, 1]:= FloatToStrF( k2 * StrToFloat (Cells[5,1]), fffixed, 8, 0);

for i:= 3 to 5 do

for j:= 6 to 7 do

begin

Cells[j, i]:= Cells[5, i];

Cells[j,2]:= Cells[5, 2];

end;

end;

end;

end.