( результат выводится его в форму и сохраняется в файл)
unit U_rez;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Grids;
type
TForm_rez = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
. . . . . . . . . . . . . .
Memo1: TMemo;
SaveDialog1: TSaveDialog;
procedure BitBtn_close_rezClick(Sender: TObject);
procedure BitBtn_calcClick(Sender: TObject);
procedure BitBtn_saveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_rez: TForm_rez;
implementation
uses u_main, u_ish_dan;
var Q:real; //теплота сгорания топлива
V_O2,L0sv,Lasv,L0vv,Lavv:real;
V0_CO2,V0_SO2,V0_H2O,V0_N2,V0:real;
Va_CO2,Va_SO2,Va_H2O,Va_N2,V_O2_izb,Va:real;
Sproc:real; //сумма процентов дымовых газов
// плотности топлива (r_topl), влажного воздуха (r_vozd)
// и продуктов горения (r_gor)
r_topl,r_vozd,r_gor:real;
// массы топлива (M_topl), воздуха (M_vozd) и продуктов горения (M_gor)
M_topl,M_vozd,M_gor:real;
V:real; // объем сжигаемого газа (при подсчете матер-го баланса)
H2Ovv,O2vv,N2vv:real; //процентный сотав влажного атм. воздуха
koef_vozd:real; //коэф-т для пересчета сухого воздуха на влажный
prihod:real; // матер-ный баланс: приход, кг
neviazka:real; // невязка
{$R *.DFM}
procedure TForm_rez.BitBtn_close_rezClick(Sender: TObject);
begin
close
end;
procedure TForm_rez.BitBtn_calcClick(Sender: TObject);
var
i:integer;
begin
// ======= расчет объемов ===========================
// V_O2 - объем кислорода
// L0sv - теорет-кий объем сухого воздуха
// L0vv - теорет-кий объем влажного воздуха
// Lasv - действит-ный объем сухого воздуха
// Lavv - действит-ный объем влажного воздуха
//====================================================
V_O2:=0;
for i:=1 to ns do
V_O2:= V_O2 + KV_O2[i]*VG[i];
V_O2:= 0.01*V_O2;
L0sv:=V_O2*4.76;
Lasv:=alfa*L0sv;
L0vv:=(1+0.00124*dsv)* L0sv;
Lavv:=alfa*L0vv;
// вывод объемов
Edit_V_O2.Text:= FormatFloat('##0.000',V_O2);
Edit_L0sv.Text:= FormatFloat('##0.000',L0sv);
Edit_Lasv.Text:= FormatFloat('##0.000',Lasv);
Edit_L0vv.Text:= FormatFloat('##0.000',L0vv);
Edit_Lavv.Text:= FormatFloat('##0.000',Lavv);
//====================================================
// расчет и вывод теплоты сгорания
//====================================================
Q:=0;
for i:=1 to 9 do Q:=Q+KQ[i]*VG[i];
Edit_Q.Text:= FormatFloat('#######0.0',Q);
//===========================================================
// расчет объема продуктов горения 1 м3 газа при alfa=1
//===========================================================
V0_CO2:=0;
V0_SO2:=0;
V0_H2O:=0;
for i:=1 to nv do begin
V0_CO2:= V0_CO2 + KV0_CO2[i]*VG[i];
V0_SO2:= V0_SO2 + KV0_SO2[i]*VG[i];
V0_H2O:= V0_H2O + KV0_H2O[i]*VG[i];
end;
V0_CO2:=0.01*V0_CO2;
V0_SO2:=0.01*V0_SO2;
V0_H2O:=0.01*V0_H2O;
V0_N2:=0.01*N2V+3.76*V_O2;
V0:=V0_CO2+ V0_SO2+V0_H2O+V0_N2;
// вывод
Edit_VCO2g.Text:= FormatFloat('##0.000',V0_CO2);
Edit_VSO2g.Text:= FormatFloat('##0.000',V0_SO2);
Edit_VH2Og.Text:= FormatFloat('##0.000',V0_H2O);
Edit_VN2g.Text:= FormatFloat('##0.000',V0_N2);
Edit_V0.Text:= FormatFloat('##0.000',V0);
//===========================================================
// расчет объема продуктов горения 1 м3 газа при alfa>1
//===========================================================
Va_CO2:=V0_CO2;
Va_SO2:=V0_SO2;
Va_H2O:=V0_H2O+0.00124*dsv*Lavv/(1+0.00124*dsv);
Va_N2:=0.01*N2V+alfa*3.76*V_O2;
V_O2_izb:=(alfa-1)*V_O2;
Va:= Va_CO2+Va_SO2+Va_H2O+Va_N2+V_O2_izb;
// вывод
Edit_VCO2a.Text:= FormatFloat('##0.000',Va_CO2);
Edit_VSO2a.Text:= FormatFloat('##0.000',Va_SO2);
Edit_VH2Oa.Text:= FormatFloat('##0.000',Va_H2O);
Edit_VN2a.Text:= FormatFloat('##0.000',Va_N2);
Edit_VO2_izb.Text:= FormatFloat('##0.000',V_O2_izb);
Edit_Va.Text:= FormatFloat('##0.000',Va);
//=================================================================
// расчет %-го состава продуктов горения 1 м3 газа при alfa=1
//=================================================================
CO2g:= 100*V0_CO2/V0;
SO2g:= 100*V0_SO2/V0;
H2Og:= 100*V0_H2O/V0;
N2g:= 100*V0_N2/V0;
Sproc:=CO2g+SO2g+H2Og+N2g;
// вывод
Edit_CO2g.Text:= FormatFloat('##0.000',CO2g);
Edit_SO2g.Text:= FormatFloat('##0.000',SO2g);
Edit_H2Og.Text:= FormatFloat('##0.000',H2Og);
Edit_N2g.Text:= FormatFloat('##0.000',N2g);
Edit_Sproc.Text:= FormatFloat('##0.000',Sproc);
if (abs(Sproc-100)>1E-6) then begin
ShowMessage('% состав продуктов горения не равен 100%. Ошибка в выч-ях!');
Exit
end;
//======================================================================
// Расчет процентного состава продуктов горения 1 м3 газа при alfa>1
//======================================================================
CO2ga:= 100*Va_CO2/Va;
SO2ga:= 100*Va_SO2/Va;
H2Oga:= 100*Va_H2O/Va;
N2ga:= 100*Va_N2/Va;
O2_izb:=100*V_O2_izb/Va;
Sproc:=CO2ga+SO2ga+H2Oga+N2ga+O2_izb;
// вывод
Edit_CO2a.Text:= FormatFloat('##0.000',CO2ga);
Edit_SO2a.Text:= FormatFloat('##0.000',SO2ga);
Edit_H2Oa.Text:= FormatFloat('##0.000',H2Oga);
Edit_N2a.Text:= FormatFloat('##0.000',N2ga);
Edit_O2_izb.Text:= FormatFloat('##0.000',O2_izb);
Edit_Sproca.Text:= FormatFloat('##0.000',Sproc);
if (abs(Sproc-100)>1E-6) then begin
ShowMessage('% состав продуктов горения не равен 100%. Ошибка в выч-ях!');
Exit
end;
//=================================================================
// Материальный баланс горения (при сжигании V=100 м3 газа)
//=================================================================
r_topl:=0; V:=100;
//======== выч-ние плотности и массы топлива
for i:=1 to nv do
if VG[i]>1E-6 then //газ присутствует в составе топлива
r_topl:=r_topl+VG[i]*MM[i];
r_topl:=r_topl/100/22.4;
M_topl:=r_topl*V;
//======== выч-ние плотности и массы воздуха
H2Ovv:=100*dsv/(803.6+dsv);
koef_vozd:=(100-H2Ovv)/100;
O2vv:=koef_vozd*21; // пересчет О2 на влажное сост.
N2vv:=koef_vozd*79; // пересчет N2 на влажное сост.
r_vozd:=(H2Ovv*18+O2vv*32+N2vv*28)/100/22.4;
M_vozd:=r_vozd*V*Lavv;
//======== выч-ние плотности и массы продуктов горения
r_gor:=(CO2ga*44+SO2ga*64+H2Oga*18+N2ga*28+O2_izb*32)/100/22.4;
M_gor:=r_gor*V*Va;
//============ вывод ===============
Memo1.Clear;
Memo1.Lines.Add('===============================================');
Memo1.Lines.Add(' Приход, кг ');
Memo1.Lines.Add('===============================================');
Memo1.Lines.Add('Масса природного газа = '
+FormatFloat('###0.0000',r_topl)
+' * '+FormatFloat('###0.0',V)+' = '
+FormatFloat('###0.000',M_topl)+' кг');
Memo1.Lines.Add('Масса воздуха = '
+FormatFloat('###0.000',r_vozd)
+' * '+FormatFloat('###0.0',V)
+' * '+FormatFloat('###0.000',Lavv)+' = '
+FormatFloat('###0.000',M_vozd)+' кг');
prihod:=M_topl+M_vozd;
Memo1.Lines.Add('Всего = '+FormatFloat('###0.000',prihod)+' кг');
Memo1.Lines.Add('');
Memo1.Lines.Add('===============================================');
Memo1.Lines.Add(' Расход, кг');
Memo1.Lines.Add('===============================================');
Memo1.Lines.Add('Масса продуктов горения = ');
Memo1.Lines.Add('= '+FormatFloat('###0.000',r_gor)
+' * '+FormatFloat('###0.0',V)
+' * '+FormatFloat('###0.000',Va)+' = '
+FormatFloat('###0.000',M_gor)+' кг');
Neviazka:=abs(prihod-M_gor)/M_gor;
Memo1.Lines.Add('');
Memo1.Lines.Add('===============================================');
Memo1.Lines.Add('');
Memo1.Lines.Add('Невязка = |'+FormatFloat('###0.000',prihod)
+'-'+FormatFloat('###0.000',M_gor)+'|/'
+FormatFloat('###0.000',M_gor)+'*100% = '
+FormatFloat('###0.000',Neviazka*100)+'%');
//включение кнопок
Form_rez.BitBtn_save.Enabled:=True;
end;
//=================================================================
// Сохранение решения в файле
//=================================================================
procedure TForm_rez.BitBtn_saveClick(Sender: TObject);
var i:integer;
str,str1,stra,str1a:string; //вспом
procedure formula(mas_koef:mas_v;proc:boolean;pr:boolean);
//-----------------------------------------------------------------
// формирует 2 строки: str и str1 - для вывода суммы произведений
// массивов mas_koef и VG. Если proc=TRUE, то эта сумма умножается
// на 0,01. Если pr=TRUE, то обе строки выводятся в файл f.
//-----------------------------------------------------------------
var i:integer;
begin
str:=''; str1:='';
for i:=1 to nv do
if (VG[i]>1E-6) and (mas_koef[i]>1E-6) then
begin
str:=str+FloatToStr(mas_koef[i])+'*'+gas[i]+'вл +';
str1:=str1+FloatToStr(mas_koef[i])+'*'
+FormatFloat('##0.000',VG[i])+'% +';
end;
delete(str,length(str),1); //удаление из строки последнего «+»
delete(str1,length(str1),1);
if (proc) then begin
str:='0.01*('+str+')';
str1:='0.01*('+str1+')';
end;
if pr then writeln(f,str,' =');
if pr then write(f,'= ',str1,' =');
end; //formula
//-----------------------------------------------------------------
begin
if SaveDialog1.Execute then // выбран файл для сохранения
begin
Fname:=SaveDialog1.FileName;
AssignFile(f,fname);
Rewrite(f);
writeln(f,'Расчет горения топлива');
writeln(f,'====================================================');
// вывод исходного состава сухого газа
writeln(f,'Исходный состав cухого газа (%):');
for i:=1 to ns do
if abs(SG[i])>1E-6 then writeln(f,gas[i]:6,' = ',SG[i]:8:2);
writeln(f,'Температура сухого атмоферного воздуха = ',t:4:1,
' град. С');
writeln(f,'Влажность газа = ',dsg:6:2,' г/м3');
writeln(f);
// вывод состава влажного газа
writeln(f,'Влажный состав газа (%):');
for i:=1 to nv do
if abs(VG[i])>1E-6 then writeln(f,gas[i]:6,' = ',VG[i]:8:2);
writeln(f,'Влагосодержание атмосферного воздуха dsv = ',dsv:6:2,
' г/м3');
writeln(f,'Коэффициент избытка воздуха alfa = ',alfa:4:2);
writeln(f);
writeln(f,'Теплота сгорания топлива:');
write(f,'Qнр = ');
formula(KQ,False,True);
writeln(f,Q:8:0, ' кДж/м3');
writeln(f);
writeln(f,'Объем кислорода, необходимого для сжигания 1 м3 газа:);
write(f,'V_O2 = ');
formula(KV_O2,True,True);
writeln(f,V_O2:6:3,' м3/м3');
writeln(f,'====================================================');
writeln(f,'Теоретически необходимое количество сухого воздуха:');
writeln(f,'L0с.в. = 4.76 * V_O2 = 4.76 * ',V_O2:6:3,' = ',
L0sv:6:3,' м3/м3');
writeln(f);
writeln(f,'Действительное количество сухого воздуха:');
writeln(f,'Laс.в. = alfa * L0с.в. = ',alfa:4:2,' * ',L0sv:6:3,
'=',Lasv:6:3,' м3/м3');
writeln(f);
writeln(f,'Теоретически необходимое количество атм. воздуха:');
writeln(f,'L0в.в.=(1+0,00124*dс.в.)*L0с.в.=(1+0,00124*',
dsv:5:2,')*',L0sv:6:3,'=',L0vv:6:3,' м3/м3');
writeln(f);
writeln(f,'Действительное количество атмосферного воздуха:');
writeln(f,'Laв.в. = alfa*L0в.в.=',alfa:4:2,'*',L0vv:6:3,'=',
Lavv:6:3,' м3/м3');
writeln(f);
writeln(f,'====================================================');
writeln(f,'Объем продуктов горения:');
write(f,'V_CO2 = ');
formula(KV0_CO2,True,True);
writeln(f,Va_CO2:6:3,' м3/м3');
writeln(f);
write(f,'V_H2O = ');
formula(KV0_H2O,True,False);
stra:='+0,00124*dс.в.*La_вв/(1+0,00124*dс.в.)=';
str1a:='+0,00124*'+FormatFloat('#0.000',dsv)+'*'
+FormatFloat('##0.000',Lavv)+'/(1+0,00124*'
+FormatFloat('#0.000',dsv)+')=';
writeln(f,str,' +'); writeln(f,stra);
writeln(f,'= ',str1,' +'); write(f,str1a);
writeln(f,Va_H2O:6:3,' м3/м3');
writeln(f);
writeln(f,'V_N2 = 0,01*N2вл+3,76*alfa*V_O2=0.01*',
N2V:6:3,'+3.76*',alfa:4:2,'*',
V_O2:5:3,'=',Va_N2:4:2,' м3/м3');
writeln(f);
writeln(f,'V_O2избыт. = (alfa-1)*V_O2=(',alfa:4:2,'-1)*',
V_O2:6:3,'=',V_O2_izb:6:3,' м3/м3');
writeln(f);
writeln(f,'Общее количество продуктов горения:');
write(f,'Va = V_CO2+V_H2O+V_N2+V_O2избыт.=',Va_CO2:6:3,'+',
Va_H2O:5:3,'+',Va_N2:4:2,'+',V_O2_izb:5:3,'=',
Va:6:3,' м3/м3');
writeln(f);
writeln(f,'====================================================');
writeln(f,'Процентный состав продуктов горения:');
writeln(f,'CO2 = 100*Va_CO2/Va = 100*',Va_CO2:6:3,'/',
Va:6:3,'=',CO2ga:6:2,' %');
writeln(f,'H2O = 100*Va_H2O/Va = 100*',Va_H2O:6:3,'/',
Va:6:3,'=',H2Oga:6:2,' %');
writeln(f,'N2 = 100*Va_N2/Va = 100*',Va_N2:6:3,'/',
Va:6:3,'=',N2ga:6:2,' %');
writeln(f,'O2избыт. = 100*V_O2избыт./Va = 100*',V_O2_izb:6:3,'/',
Va:6:3,'=',O2_izb:6:2,' %');
writeln(f);
writeln(f);
writeln(f,'Материальный баланс горения природного газа (V=100 м3) :');
writeln(f,'====================================================');
writeln(f,' Приход, кг ');
writeln(f,'====================================================');
writeln(f,'Плотность топлива: ');
write(f,'r_topl = ');
formula(MM,False,True);
writeln(f,r_topl:6:3,' кг/м3');
writeln(f);
writeln(f,'Масса природного газа: ');
writeln(f,'M_топл = r_топл * V = ',r_topl:6:3,'*',V:3:0,'=',
M_topl:8:3,' кг');
writeln(f);
writeln(f,'Пересчет воздуха на влажную массу:');
write(f,'H2Oв.в. = 100*dс.в./(803.6+dс.в.)');
writeln(f,'=100*',dsv:4:2,'/(803.6+',dsv:4:2,') =',
H2Ovv:6:3,' %');
writeln(f,'O2в.в. = (100-H2Oв.в.)*21/100=(100-',O2vv:6:3,
')*21/100=',O2vv:6:3,' %');
writeln(f,'N2в.в. = (100-H2Oв.в.)*79/100=(100-',H2Ovv:6:3,
')*21/100=',N2vv:6:3,' %');
writeln(f);
writeln(f,'Плотность воздуха:');
writeln(f,'r_возд =(H2Oв.в.*18+O2в.в.*32+N2в.в.*28)/(100*22.4)=');
writeln(f,'=(',H2Ovv:5:3,'*18+',O2vv:6:3,'*32+',N2vv:6:3,
'*28)/(100*22.4)=',r_vozd:6:3,' кг/м3');
writeln(f);
writeln(f,'Масса воздуха: ');
writeln(f,'M_возд = r_возд * V * Laв.в.= ',r_vozd:6:3,'*',V:3:0,
'*',Lavv:6:3,' =',M_vozd:8:3,' кг');
writeln(f);
writeln(f,'Приход = М_топл + M_возд = ',
M_topl:6:3,'+',M_vozd:8:3,'=',prihod:8:3,' кг');
writeln(f,'====================================================');
writeln(f,' Расход, кг');
writeln(f,'====================================================');
writeln(f,'Плотность продуктов горения:');
writeln(f,'r_гор = ',
'(CO2_гор*44+SO2_гор*64+H2O_гор*18+N2_гор*28+O2_избыт.*32)/');
writeln(f,'/(100*22.4)=(',CO2ga:5:2,'*44+',H2Oga:5:2,'*18+',
N2ga:5:2,'*28+',V_O2_izb:5:2,
'*32)/(100*22.4)=');
writeln(f,'= ',r_gor:6:3,' кг/м3');
writeln(f);
writeln(f,'Масса продуктов горения: ');
writeln(f,'M_гор = r_гор * V * Laв.в.= ',r_gor:6:3,'*',V:3:0,'*',
Lavv:6:3,' =',M_gor:8:3,' кг');
writeln(f);
writeln(f,'====================================================');
writeln(f,'Невязка = 100 * | M_топл + М_возд - М_гор |/М_гор = ');
writeln(f,'= 100 * | ',prihod:8:3,'-',M_gor:8:3,' |/',
M_gor:8:3,' = ',100*neviazka:5:3,' %');
closefile(f)
end
end;
end.