ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.11.2024
Просмотров: 28
Скачиваний: 0
Иерархическая структура хтс
Уровень иерархии |
Пример |
Назначение |
1. Типовой процесс |
Реактор, колонна, теплообменник, смеситель и др. |
Преобразование вещества и энергии |
2. Цех |
Совокупность отделений, работающих на выпуск определенной продукции (цех производства бензина) |
Объединение типовых процессов |
3. Химический завод |
Совокупность цехов, объединенных общим сырьем (завод производства метанола) |
Объединение цехов по выпуску продукции |
4.Технологическая линия |
Совокупность заводов, связанных между собой общей производственной линией (первичная подготовка нефти) |
Объединение заводов по сырью и продукции |
5. Отрасль химической промышленности |
Совокупность заводов химической, нефтехимической и нефтеперерабатывающей промышленности данного округа |
Получение и распределение продукции по назначению |
Практическая часть
Исходные данные:
Коэффициенты для расчета теплоемкости:
№ |
B |
A |
1 |
1,010-5 |
0,869 |
2 |
1,110-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.