Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
План семестра поурочный по ВычМат-2014 / 2007_Учебное пособие МатЛаб_моделирование_30_01_2011.docx
Скачиваний:
314
Добавлен:
13.02.2015
Размер:
4.89 Mб
Скачать

3.3. Прямоточный теплообменник типа труба в трубе (решение задачи Коши)

Рис. 3.13. Схематическое изображение прямоточного теплообменника типа труба в трубе

Представленная схема теплообменника включает в себя два потока теплоносителей – например, охлаждаемый поток c начальной температурой (на входе в аппарат) , конечной температурой (на выходе), расходом, теплоёмкостьюи нагреваемый поток c начальной температурой (на входе в аппарат), конечной температурой (на выходе), расходом, теплоёмкостью. Поверхность теплообмена имеет площадь. Коэффициент теплопередачи обозначен.

Для построения системы уравнений математического описания процесса в прямоточном теплообменнике типа труба в трубе принимаются следующие допущения:

  • рассматривается стационарный режим процесса теплопередачи;

  • не происходит никаких других процессов, только процесс теплопередачи;

  • коэффициент теплопередачи постоянен и известен;

  • теплоёмкость потоков теплоносителей постоянна;

  • поверхность теплообмена равномерно распределена вдоль участка длины теплообменника;

  • движение первого и второго потоков теплоносителей описывается гидродинамической моделью идеального вытеснения.

Математическое описание процесса

Уравнение теплового баланса для принятой гидродинамической модели идеального вытеснения и выражение для локальной интенсивности теплопередачи для первого потока теплоносителя записываются следующим образом:

1 ; (45)

2 . (46)

Уравнение теплового баланса и выражение локальной интенсивности теплопередачи для второго потока теплоносителя:

3 ; (47)

4 . (48)

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

1 или

;

2 или (49)

;

3 ;

.

Поскольку начальные условия задаются при одном и том же значении независимой переменной , в данном случае решается задача Коши.

Эту систему можно решить аналитически точно. Задание начальных условий и изменение температур теплоносителей по длине теплообменника для данного случая показано ниже на рис. 3.14.

Рис. 3.14. Изменение температур теплоносителей по длине теплообменника типа труба в трубе (прямоток)

Блок-схема алгоритма расчета

Рис. 3.15. Блок-схема алгоритма поверочно-оценочного расчёта стационарного режима процесса в прямоточном теплообменнике типа труба в трубе

Программа расчета процесса

Обозначения переменных в тексте программы

T0cold и T0hot – температуры жидкости в трубках теплообменника; Vcold, Vhot – расходы, Chot, Ccold – теплоемкости; Ft – поверхность теплообмена; Kt – константа теплопередачи; L – длина змеевика, LocInt – локальная интенсивность.

Для построения графика необходимо выбрать исходную величину-аргумент (будет отображаться по горизонтальной оси), диапазон и шаг ее изменения, а также величину-функцию, зависящую от аргумента (вертикальная ось). Построенный график покажет, как будет изменяться зависимая величина при изменении аргумента (при этом значения всех остальных исходных величин, которые были введены в окна ввода исходных величин будут оставаться неизменными) – рис. 3.17.

Рис. 3.16. Ввод исходных данных и получение расчетных результатов, в том числе график зависимости температур в трубках теплообменника от продольной координаты

Рис. 3.17. Построение графика: зависимость температуры потока №2 на выходе из теплообменника от расхода

Текст программы тексте программы с комментариями

function[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt, L, Ft] = VvodIshodnDannih(hObject, eventdata, handles)

T0cold=str2double(get(handles.edit1,'String'));

T0hot=str2double(get(handles.edit2,'String'));

Vcold=str2double(get(handles.edit3,'String'));

Ccold=str2double(get(handles.edit5,'String'));

Ft=str2double(get(handles.edit9,'String'));

Kt=str2double(get(handles.edit7,'String'));

L=str2double(get(handles.edit8,'String'));

Vhot=str2double(get(handles.edit4,'String'));

Chot=str2double(get(handles.edit6,'String'));

end

function[]=VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles)

T0cold=VectorArg(1); T0hot=VectorArg(2); Vcold=VectorArg(3); Ccold=VectorArg(5); Ft=VectorArg(9);

Kt=VectorArg(7); L=VectorArg(8); Vhot=VectorArg(4); Chot=VectorArg(6);

%vivod argumentov na ekran

S=sprintf('%g',T0cold);

set(handles.edit1,'String',S);

S=sprintf('%g',T0hot);

set(handles.edit2,'String',S);

S=sprintf('%g',Vcold);

set(handles.edit3,'String',S);

S=sprintf('%g',Ccold);

set(handles.edit5,'String',S);

S=sprintf('%g',Ft);

set(handles.edit9,'String',S);

S=sprintf('%g',Kt);

set(handles.edit7,'String',S);

S=sprintf('%g',L);

set(handles.edit8,'String',S);

S=sprintf('%g',Vhot);

set(handles.edit4,'String',S);

S=sprintf('%g',Chot);

set(handles.edit6,'String',S);

end

function [VectorRes, VectorArg, Lmas, Tmas, n, m] = ReshitZadachu(VectorArg)

T0cold=VectorArg(1); Vcold=VectorArg(3); Ccold=VectorArg(5); Ft=VectorArg(9);

Kt=VectorArg(7); T0hot=VectorArg(2); L=VectorArg(8); Vhot=VectorArg(4); Chot=VectorArg(6);

function LocInt=funLocInt(T0hot,T0cold)

LocInt=Kt*(T0hot-T0cold);

end

function dThot=difurThot(T0hot,T0cold,L)

dThot=-(Ft*funLocInt(T0hot,T0cold))/(Vcold*Ccold*L);

end

function dTcold=difurTcold(T0hot,T0cold,L)

dTcold=(Ft*funLocInt(T0hot,T0cold))/(Vhot*Chot*L);

end

function dT=systDifUr(L,T)

dT=zeros(2,1);

dT(2)=difurThot(T(2),T(1),L);

dT(1)=difurTcold(T(2),T(1),L);

end

function [Lmas,Tmas]=uravnenije(T0hot,T0cold,L)

[Lmas,Tmas]=ode45(@systDifUr,[0.1 L], [T0hot T0cold]);

plot(Lmas,Tmas,'-k');

grid;

xlabel('Length (m)');

ylabel('T.out (C)');

end

[Lmas,Tmas]=uravnenije(T0hot,T0cold,L);

n=0; m=0;

[n,m]=size(Tmas);

Tout_cold=Tmas(n,2);

Tout_hot=Tmas(n,1);

LocInt=funLocInt(Tout_hot,Tout_cold);

VectorRes=[Tout_cold,Tout_hot, LocInt];

end

function[]=VivodResultNaEkran(VectorRes,hObject, eventdata, handles)

Tout_cold=VectorRes(1); Tout_hot=VectorRes(2); LocInt=VectorRes(3);

%vivod resultatov na ekran

S=sprintf('%g',Tout_cold);

set(handles.edit15,'String',S);

S=sprintf('%g',Tout_hot);

set(handles.edit16,'String',S);

S=sprintf('%g',LocInt);

set(handles.edit17,'String',S);

end

function[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]= PostrGrafic(VectorRes, VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg)

VectorArg(NameArg)=LeftNameVar;

k1Array(1)=LeftNameVar;

[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);

v1Array(1)=VectorRes(NameVar);

for i=2:(NumberSteps+1)

k1Array(i)=k1Array(i-1)+StepGr;

VectorArg(NameArg)=k1Array(i);

[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);

v1Array(i)=VectorRes(NameVar);

end

%stroim grafic

plot(k1Array,v1Array,'o-');

set(gca,'XGrid','on');

set(gca,'YGrid','on');

%podpisi k osyam

TextVectorArg=[' T in #1 (C) ',' T in #2 (C) ','Stream#1(kg/s) ','Stream#2(kg/s) ',' C #1 (G/kg*C) ',' C #2 (G/kg*C) ',' Koef teploobm ',' L teploob (m) ',' Ploshad (m2) '];

TextVectorRes=[' Tout#1 (C) ',' Tout#2 (C) ', ' LocInt '];

xLlabel=' ';

for i=((NameArg-1)*15+1):(NameArg*15+1)

xLlabel=strcat(xLlabel,TextVectorArg(i));

end

yLlabel=' ';

for i=((NameVar-1)*13+1):(NameVar*13+1)

yLlabel=strcat(yLlabel,TextVectorRes(i));

end

xlabel(xLlabel);

ylabel(yLlabel);

end

% --- Executes on button press in pushbutton13.

function [k1Array,v1Array,xLlabel,yLlabel,NumberSteps] =pushbutton13_Callback(hObject, eventdata, handles)

NameVar=str2double(get(handles.edit31,'String'));

LeftNameVar=str2double(get(handles.edit29,'String'));

RightNameVar=str2double(get(handles.edit30,'String'));

NameArg=str2double(get(handles.edit28,'String'));

StepGr=str2double(get(handles.edit32,'String'));

[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]=VvodIshodnDannih(hObject, eventdata, handles);

NumberSteps=round((RightNameVar-LeftNameVar)/StepGr);

%objavlyajem peremennije

Tout_cold=0; Tout_hot=0; LocInt=0;

VectorRes=[Tout_cold,Tout_hot, LocInt];

VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];

[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]=PostrGrafic(VectorRes,VectorArg,LeftNameVar,NumberSteps,StepGr,hObject, eventdata, handles,NameVar,NameArg);

end

% --- Executes on button press in pushbutton3.

function [VectorRes, VectorArg, Lmas, Tmas, n, m] = pushbutton3_Callback(hObject, eventdata, handles)

[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]= VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];

Tout_cold=0; Tout_hot=0; LocInt=0;

VectorRes=[Tout_cold,Tout_hot, LocInt];

[VectorRes,VectorArg,Lmas,Tmas,n,m]=ReshitZadachu(VectorArg);

VivodResultNaEkran(VectorRes,hObject, eventdata, handles);

end

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

%Vichislit resultati

[VectorRes,VectorArg,Lmas,Tmas,n,m]=pushbutton3_Callback(hObject, eventdata, handles);

%otkrit fail dlya zapisi

[f,p]=uiputfile('C:\MATLAB701\work\S294Res.txt','Окно выбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo schitivanija

fprintf(f,'%d\t%d\n',n,m);

for i=1:n

for j=1:m

fprintf(f,'%g\t',Tmas(i,j));

end

fprintf(f,'\n');

end

for i=1:n

fprintf(f,'%g\t',Lmas(i));

end

fprintf(f,'\n');

for i=1:3

fprintf(f,'%g\t',VectorRes(i));

end

for i=1:9

fprintf(f,'%g\t',VectorArg(i));

end

%sohranit v fail resultati vichislenij

fprintf(f,'\nS294_TEPLOOBM_PRYAMOTOCHNYI_02\n');

fprintf(f,'RESULTATI VICHISLENIY\n');

TextString=strcat('Tout#1(C)\t','Tout2(C)\t','LocInt\n');

fprintf(f,TextString);

fprintf(f,'%g\t\t',VectorRes(1));

fprintf(f,'%g\t\t',VectorRes(2));

fprintf(f,'%g\n',VectorRes(3));

%sohranit v fail ishodnije argumenti

fprintf(f,'ARGUMENTI VICHISLENIY\n');

TextString=strcat(' T in #1 (C) ',' T in #2 (C) ','Stream#1(kg/s) ','Stream#2(kg/s) ',' C #1 (G/kg*C) ',' C #2 (G/kg*C) ',' Koef teploobm ',' L teploob (m) ',' Ploshad (m2) ');

fprintf(f,TextString);

for i=1:9

fprintf(f,'%g\t\t\t',VectorArg(i));

end

fclose(f);

end

% --- Executes on button press in pushbutton14.

function pushbutton14_Callback(hObject, eventdata, handles)

%Otkrit is faila

[f,p]=uigetfile('C:\MATLAB701\work\S294Res*.txt','Окно выбора');

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

%chitat matricu T(n,m)

n=fscanf(f,'%d',1);

m=fscanf(f,'%d',1);

for i=1:n

for j=1:m

Tmas(i,j)=fscanf(f,'%g',1);

end

end

%chitat stolbec L(n)

for i=1:n

Lmas(i)=fscanf(f,'%g',1);

end

for i=1:3

VectorRes(i)=fscanf(f,'%g',1);

end

for i=1:9

VectorArg(i)=fscanf(f,'%g',1);

end

fclose(f);

%vivod na ekran

VivodResultNaEkran(VectorRes,hObject, eventdata, handles);

VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);

%postroit grafic

plot(Lmas,Tmas,'-k');

grid;

xlabel('L (m)');

ylabel('T (C)');

end

% --- Executes on button press in pushbutton8.

function pushbutton8_Callback(hObject, eventdata, handles)

%postroit grafic

[k1Array,v1Array,xLlabel,yLlabel,NumberSteps]= pushbutton13_Callback(hObject, eventdata, handles);

%Sohranit grafic v fail

[f,p]=uiputfile('C:\MATLAB701\work\S294Graf.txt','Окно выбора');

KudaZapisat=strcat(p,f);

f=fopen(KudaZapisat,'wt');

%gotovim dannije dlja avtomaticheskogo chitivanija

fprintf(f,'%d\t',NumberSteps);

for i=1:(NumberSteps+1)

fprintf(f,'%g\t',k1Array(i));

end

fprintf(f,'\n');

for i=1:(NumberSteps+1)

fprintf(f,'%g\t',v1Array(i));

end

%zapisivajem argumenti

[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft]=VvodIshodnDannih(hObject, eventdata, handles);

VectorArg=[T0cold,T0hot,Vcold,Vhot,Ccold,Chot,Kt,L,Ft];

for i=1:9

fprintf(f,'%g\t',VectorArg(i));

end

%podpisi k osyam grafica

fprintf(f,'%s\t%s\n',xLlabel,yLlabel);

fclose(f);

end

% --- Executes on button press in pushbutton15.

function pushbutton15_Callback(hObject, eventdata, handles)

%otkrit grafic is faila

[f,p]=uigetfile('C:\MATLAB701\work\S294Graf*.txt','Окно выбора');

OtkudaChitat=strcat(p,f);

f=fopen(OtkudaChitat,'rt');

%chitat is faila

NumberSteps=fscanf(f,'%d',1);

for i=1:NumberSteps+1

k1Array(i)=fscanf(f,'%g',1);

end

for i=1:NumberSteps+1

v1Array(i)=fscanf(f,'%g',1);

end

for i=1:9

VectorArg(i)=fscanf(f,'%g',1);

end

xLlabel=fscanf(f,'%s',1);

yLlabel=fscanf(f,'%s',1);

fclose(f);

%stroim grafic

plot(k1Array,v1Array,'o-');

set(gca,'XGrid','on');

set(gca,'YGrid','on');

xlabel(xLlabel);

ylabel(yLlabel);

%vivod na ekran

VivodArgumentovNaEkran(VectorArg,hObject, eventdata, handles);

end