Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дз (4-2) Этап 1,2,3.doc
Скачиваний:
14
Добавлен:
09.02.2015
Размер:
627.71 Кб
Скачать

Этап 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; Р2; Р3;

Т1=300 К; Т2=300 К; Т3=300 К

Предварительные расчеты:

F13=13d132/4

F23=23d232/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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]