Этап 3.
Расчетная схема представлена на рис.2. Емкость 2 заправлена гелием, а емкости 1 и 3 -воздухом.
Рис. 2
МАТЕМАТИЧЕСКАЯ МОДЕЛЬ
Исходные данные:
V1; V2; V3; d13; d23;
13;23;
RВ= 287.2 Дж/(кг×К);kВ=1.41;КРВ=0.528;
RHe= 2077.4 Дж/(кг×К);kHe=1.66;
π=3.14;=6 Вт/(м2×К)
Начальные условия:
t=0;
Р1=Р1Н; Р2=Р2Н; Р3=Р3Н;
Т1=300 К; Т2=300 К; Т3=300 К
Предварительные расчеты:
F13=13d132/4
F23=23d232/4
S1= (6V1/)2/3
S2= (6V2/)2/3
S3= (6V3/)2/3
Уравнения расхода:
G13=G(F13,P1,P3,TPmax1)
G23=G(F23,P2,P3,TPmax2),
где TPmaxi– температура газа в той из двух рассматриваемых емкостей, где давление больше.
Расчет концентрации, газовой постоянной и показателя изоэнтропы смеси:
концентрации гелия и воздуха:
газовая постоянная смеси:
показатель изоэнтропы смеси:
Уравнения расчета изменения параметров в емкостях ПС:
1-я емкость:
2-я емкость
3-я емкость
Конечное условие: Pmin 0.95*Pmax
ПРОГРАММА РАСЧЕТА НА ЭВМ
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label42: TLabel;
Panel1: TPanel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Panel2: TPanel;
Label10: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label17: TLabel;
Label19: TLabel;
Edit7: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Panel4: TPanel;
Label15: TLabel;
Label24: TLabel;
Label25: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Panel5: TPanel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label39: TLabel;
Label43: TLabel;
Label40: TLabel;
Edit19: TEdit;
Edit20: TEdit;
Edit21: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
GroupBox1: TGroupBox;
Label44: TLabel;
Label45: TLabel;
Label46: TLabel;
Label47: TLabel;
Label48: TLabel;
Label49: TLabel;
Label50: TLabel;
Label51: TLabel;
Label61: TLabel;
Edit23: TEdit;
Edit24: TEdit;
Edit25: TEdit;
GroupBox2: TGroupBox;
Label53: TLabel;
Label57: TLabel;
Label59: TLabel;
Label80: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit27: TEdit;
Edit30: TEdit;
ScrollBox1: TScrollBox;
Label65: TLabel;
Label66: TLabel;
Label68: TLabel;
Label69: TLabel;
Label70: TLabel;
Label71: TLabel;
Label72: TLabel;
Label73: TLabel;
Label75: TLabel;
Label76: TLabel;
Label77: TLabel;
Label78: TLabel;
Label81: TLabel;
mg2: TMemo;
t: TMemo;
p1: TMemo;
p2: TMemo;
p3: TMemo;
T1: TMemo;
T2: TMemo;
T3: TMemo;
mg4: TMemo;
Panel3: TPanel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Close; // закрыть главное окно программы
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
const
R=287.2; k=1.41; Betakr=0.528; PI=3.14; TST=300; Rhe=2077.4;khe=1.66;
Var
M2,M4,D2,D4,V1,V2,V3,F2,F4,Pa1,Pa2,Pb1,Pb2,alfa,DQ1,DQ2,DQ3,
Ta1,Ta2,Bk1,A,B,C,D,H,G13,G23,DT,PM,PX,Gv,Gh,ghe,gVo,KM,RM,tt,S1,S2,S3,S4:real;
i,max,min,n:integer;
Y,V:array [1..8] of real;
begin
M2:=strToFloat(Edit2.Text);
M4:=strToFloat(Edit4.Text);
D2:=strToFloat(Edit7.Text)/1000;
D4:=strToFloat(Edit9.Text)/1000;
V1:=strToFloat(Edit11.Text)/1000;
V2:=strToFloat(Edit12.Text)/1000;
V3:=strToFloat(Edit13.Text)/1000;
DT:=strToFloat(Edit10.Text);
alfa:=strToFloat(Edit5.Text);
Y[1]:=strToFloat(Edit19.Text)*1000000;
Y[2]:=strToFloat(Edit15.Text);
Y[3]:=strToFloat(Edit20.Text)*1000000;
Y[4]:=strToFloat(Edit16.Text);
Y[5]:=strToFloat(Edit21.Text)*1000000;
Y[6]:=strToFloat(Edit17.Text);
F2:=M2*PI*sqr(D2)/4;
F4:=M4*PI*sqr(D4)/4;
S1:=PI*exp((2/3)*ln(6*V1/PI));
S2:=PI*exp((2/3)*ln(6*V2/PI));
S3:=PI*exp((2/3)*ln(6*V3/PI));
Edit27.Text :=FloatToStrF(F2*1000000,ffFixed,4,4);
Edit30.Text :=FloatToStrF(F4*1000000,ffFixed,4,4);
Edit23.Text :=FloatToStrF(S1,ffFixed,4,4);
Edit24.Text :=FloatToStrF(S2,ffFixed,4,4);
Edit25.Text :=FloatToStrF(S3,ffFixed,4,4);
//Критический перепад давления для гелия
Bk1:=exp((khe/(khe-1))*ln(2/(khe+1)));
tt:=0; Gv:=0;Gh:=0;gVo:=1;
t.Lines.Add('____');
mg2.Lines.Add('____');
mg4.Lines.Add('____');
Memo1.Lines.Add('____');
Memo2.Lines.Add('____');
p1.Lines.Add('____');
p2.Lines.Add('____');
p3.Lines.Add('____');
T1.Lines.Add('____');
T2.Lines.Add('____');
T3.Lines.Add('____');
REPEAT
//writeln('Opredelenie napravleniya rashoda');
//writeln;
if Y[1]>Y[5] then
begin
Pa1:=Y[1]; Pb1:=Y[5]; Ta1:=Y[2]; A:=-1; B:=1;
end
else begin
Pa1:=Y[5]; Pb1:=Y[1]; Ta1:=Y[6]; A:=1; B:=-1;
end;
if Y[3]>Y[5] then
begin
Pa2:=Y[3]; Pb2:=Y[5]; Ta2:=Y[4]; C:=-1; D:=1;
end
else begin
Pa2:=Y[5]; Pb2:=Y[3]; Ta2:=Y[6]; C:=1; D:=-1;
end;
//Расч¸т расходов
if (Pb1/Pa1)>Betakr then
begin
H:=2*k*(exp((2/k)*ln(Pb1/Pa1))-exp(((k+1)/k)*ln(Pb1/Pa1)))/(k-1)/R/Ta1;
if H<0 then G13:=0
else
G13:=F2*Pa2*sqrt(H);
end
else begin
H:=2*k*(exp((2/k)*ln(Betakr))-exp(((k+1)/k)*ln(Betakr)))/(k-1)/R/Ta1;
if H<0 then G13:=0
else
G13:=F2*Pa2*sqrt(H);
end;
if Y[1]<Y[5] then G13:=0; //обратный клапан
if (Pb2/Pa2)>Bk1 then
begin
H:=2*khe*(exp((2/khe)*ln(Pb2/Pa2))-exp(((khe+1)/khe)*ln(Pb2/Pa2)))/(khe-1)/Rhe/Ta2;
if H<0 then G23:=0
else
G23:=F4*Pa2*sqrt(H);
end
else begin
H:=2*khe*(exp((2/khe)*ln(Bk1))-exp(((khe+1)/khe)*ln(Bk1)))/(khe-1)/Rhe/Ta2;
if H<0 then G23:=0
else
G23:=F4*Pa2*sqrt(H);
end;
if Y[3]<Y[5] then G23:=0; //обратный клапан
Gv:=Gv+G13*DT;
Gh:=Gh+G23*DT;
ghe:=Gh/(Gh+Gv);
gVo:=1-ghe;
KM:=khe*ghe+k*(1-ghe);
RM:=Rhe*ghe+R*(1-ghe);
tt:=tt+DT;
t.Lines.Add(FloatToStrF(tt,ffFixed,4,2));
mg2.Lines.Add(FloatToStrF(G13,ffFixed,6,6));
mg4.Lines.Add(FloatToStrF(G23,ffFixed,6,6));
p1.Lines.Add(FloatToStrF(Y[1]/1000000,ffFixed,2,5));
p2.Lines.Add(FloatToStrF(Y[3]/1000000,ffFixed,2,5));
p3.Lines.Add(FloatToStrF(Y[5]/1000000,ffFixed,2,5));
T1.Lines.Add(FloatToStrF(Y[2],ffFixed,3,2));
T2.Lines.Add(FloatToStrF(Y[4],ffFixed,3,2));
T3.Lines.Add(FloatToStrF(Y[6],ffFixed,3,2));
Memo1.Lines.Add(FloatToStrF(gVo,ffFixed,6,6));
Memo2.Lines.Add(FloatToStrF(ghe,ffFixed,6,6));
max:=1; min:=1; i:=1;
repeat
i:=i+2;
if Y[i]>Y[max] then max:=i;
if Y[i]<Y[min] then min:=i;
until i=5;
if Y[1]<Y[5] then //в случае срабатывания обратного клапана
begin
if Y[3]<Y[5] then min:=3
else min:=5
end;
if Y[3]<Y[5] then
begin
if Y[1]<Y[5] then min:=1
else min:=5
end;
PX:=Y[max];
PM:=Y[min];
//writeln('Maksimalnoe davlenie PX=',PX:3:2);
//writeln('Minimalnoe davlenie PM=',PM:3:2);
//writeln('PM/PX=',PM/PX:3:2);
//writeln;
DQ1:=alfa*S1*(TST-Y[2]);
V[1]:=k*(R*Ta1*G13*A+DQ1*(k-1))/V1;
V[2]:=Y[2]*(V1*V[1]-R*Y[2]*(G13*A)+DQ1*(k-1))/(Y[1]*V1);
DQ2:=alfa*S2*(TST-Y[4]);
V[3]:= khe*(Rhe*Ta2*G23*C+DQ2*(khe-1))/V2;
V[4]:=Y[4]*(V2*V[3]-Rhe*Y[4]*(G23*C)+DQ2*(khe-1))/(Y[3]*V2);
DQ3:=alfa*S3*(TST-Y[6]);
V[5]:=KM*(RM*Ta2*G13*B+RM*Ta2*G23*D+ DQ3*(KM-1))/V3;
V[6]:=Y[6]*(V3*V[5]-RM*Y[6]*(G13*B+G23*D)+ DQ3*(KM-1))/(Y[5]*V3);
for i:=1 to 6 do
Y[i]:=Y[i]+V[i]*DT;
{writeln(file1, G1:6:6);
writeln(file2, G2:6:6);
writeln(file3, G3:6:6);
writeln(file4, PX:3:2);
writeln(file5, PM:3:2);
write('dlya prodolgenya nazgmite <Enter>'); readln; }
UNTIL PM>=0.95*PX;
end;
end.