Модуль вычисления результата

( результат выводится его в форму и сохраняется в файл)

 

 

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.