Проектирование твердотопливной баллистической ракеты, страница 2

9.   Список используемой литературы

1.  Шалыгин А.С.  Автоматизация расчёта траектории ЛА, 1990

2.  Бызов Л.Н., Охочинский М.Н.  Пакет прикладных программ «САПР ракетных транспортных систем», 2005

3.  Абугов Д.И.  Теория и расчёт РДТТ, 1987

4.  Сорокин Р.Е.  Теория внутрикамерных процессов в РС на твёрдом топливе, 1983

5.  Павлюк Ю.С.  Баллистическое проектирование ракет, 1996


unit Unit22;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,Buttons, ComCtrls, Gauges, ExtCtrls, TeeProcs,

TeEngine, Chart, Series;

type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Label3: TLabel;

Label5: TLabel;

Edit6: TEdit;

Label6: TLabel;

Edit7: TEdit;

Label7: TLabel;

Edit8: TEdit;

Label8: TLabel;

Edit10: TEdit;

Edit11: TEdit;

Label10: TLabel;

Label11: TLabel;

Edit12: TEdit;

Label12: TLabel;

Edit13: TEdit;

Label13: TLabel;

Edit14: TEdit;

Edit15: TEdit;

Edit16: TEdit;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Edit17: TEdit;

Gauge1: TGauge;

Chart1: TChart;

Series1: TFastLineSeries;

ProgressBar1: TProgressBar;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

var Mp,Mpn,k2,k1,mua,Pn,g,Iud,Va,t,dt,t0,T1,V,V0,

a0,a2,a1,teta,x0,y0,X,Y,Cx,ro,S,Cm,hg,hs,ps,b,ts,r,

gs,rp,a,p,temp,h,Pn_,Pud,ta,m,teta2,x0pas,y0pas,

tetapas,v0pas,t0pas,hpas,vapas,vpas,xpas,ypas,tpas,

muamax,muamin,pn_min,pn_max,nb,nh,k,px,py,Max,pxpas,pypas,pteta2:real;

mopt:real=1.0E300;

muaopt,pn_opt:real;

procedure atm;

var hg,hs,ps,b,ts,r,gs,rp: real;

indh:byte;

Procedure Met;

begin

temp:=ts+b*(hg-hs);

a:=20.047*sqrt(temp);

if abs(b)<1.0E-7 then

begin

p:=ln(ps)-gs*(hg-hs)/(rp*temp);

p:=exp(p);

end

else

begin

p:=ln(ps)-gs/(b*rp)*ln((ts+b*(hg-hs))/ts);

p:=exp(p);

end;

ro:=p/(rp*temp);

end;

begin

r:=6356767;

gs:=9.80665;

rp:=287.053;

hg:=r*h/(r+h);

g:=gs*sqr(r/(r+h));

indh:=0+

byte(h>-1999)+

byte(h>0)    +

byte(h>11019)+

byte(h>20063)+

byte(h>32162)+

byte(h>47350)+

byte(h>51412)+

byte(h>71802)+

byte(h>86152)+

byte(h>95411);

case indh of

0: begin           { ==========<-1999}

temp:=301.154;

ro:=1.47808;

a:=20.047*sqrt(temp);

p:=1.27774E5;

Exit;

end;

1: begin            { -1999<h<0 }

ts:=301.15;b:=-0.0065;ps:=1.27774E5;hs:=-2000;

end;

2: begin            { h>0 }

ts:=288.15;b:=-0.0065;ps:=1.01325E5;hs:=0.0;

end;

3: begin            {  11019<h }

ts:=216.65;b:=0.0;ps:=2.2632E4;hs:=11000;

end;

4: begin            { h>20063}

ts:=216.65;b:=0.001;ps:=5.47487E3;hs:=20000;

end;

5: begin            { 32162<h<47350}

ts:=228.65;b:=0.0028;ps:=8.68014E2;hs:=32000;

end;

6: begin            { 47350<h<51412}

ts:=270.65;b:=0.0;ps:=1.10906E2;hs:=47000;

end;

7: begin            { 51412<h<71802}

ts:=270.65;b:=-0.0028;ps:=66.9384;hs:=51000;

end;

8: begin            { 71802<h<86152}

ts:=214.65;b:=-0.002;ps:=3.95639;hs:=71000;

end;

9:begin             { 86152<h<95411}

ts:=186.65;b:=0.0;ps:=0.36;hs:=85000;

end;

10:begin            { =======>95411}

temp:=196.6;ro:=0.0;a:=281.1;p:=0.0;

Exit;

end;

end;

Met;

Exit;

end;{atm}

procedure raketa;

begin

Mp:=Mpn/(1-(k1*mua+k2));

Cm:=10000;

y0:=0;

x0:=0 ;

V0:=0;

t0:=0;

h:=0;

repeat

t:=t0+dt;

atm;

Max:=v0/a;

if (Max>=0) and (Max<0.8) then Cx:=0.29

else if   (Max=0.8) and (Max<1.068)  then Cx:=Max-0.51

else if Max>=1.068 then Cx:=0.091+0.5/Max;

T1:=Iud/(Pn_*g);

m:=mp*(1-t0/T1);

Pud:=T1*g*Pn_ ;

ta:=mua*Pud/(Pn_*g);

a0:=1.57 ;

a2:=(0.73-a0)/(-2*ta*t0+ta*ta);

a1:=-2*a2*t0;

teta:=a0+a1*t0+a2*t0*t0;

S:=Mp/Cm ;

Va:=((Pn_*g)/(1-t0/T1))-g*sin(teta)-Cx*ro*v0*v0/(2*Cm*(1-t0/T1));

px:=V0*cos(teta);

py:=V0*sin(teta);

V:=V0+Va*dt;

X:=x0+px*dt;

Y:=y0+py*dt;

x0:=X;

y0:=Y;

h:=Y;

V0:=V ;

t0:=t ;

until t>=ta ;

y0pas:=y;

x0pas:=x ;

V0pas:=v;

tetapas:=teta;

repeat

atm;

max:=v0pas/a;

if (max>=0) and (max<0.8) then Cx:=0.29

else if   (max>=0.8) and (max<1.068)  then Cx:=max-0.51

else if max>=1.068 then Cx:=0.091+0.5/max;

Vapas:=(-m*g*sin(tetapas)-Cx*ro*v0pas*v0pas*S/2)/m;

pxpas:=V0pas*cos(tetapas);

pypas:=V0pas*sin(tetapas);

pteta2:=(g*cos(tetapas)/v0pas);

Vpas:=V0pas+Vapas*dt;

teta2:=tetapas-pteta2*dt;

Xpas:=x0pas+pxpas*dt;

Ypas:=y0pas+pypas*dt;

x0pas:=Xpas;

y0pas:=Ypas;

h:=Ypas;

V0pas:=Vpas ;

tetapas:=teta2;

until ypas<=0;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i,j:integer;

begin

k1:=StrToFloat(Edit1.Text);

k2:=StrToFloat(Edit2.Text);

Mpn:=StrToFloat(Edit4.Text);

dt:=StrToFloat(Edit6.Text);

Iud:=StrToFloat(Edit7.Text);

muamin:=0.1 ;

muamax:=0.7 ;

pn_min:=1;

pn_max:=7;

j:=1000;

for i:=1 to j do begin

gauge1.Progress:=(gauge1.Progress+1);

progressbar1.Position:=Round(100*i/j);

randomize;

mua:=muamin+(muamax-muamin)*random;

pn_:=pn_min+(pn_max-pn_min)*random;

Mp:=Mpn/(1-(k1*mua+k2));

if  mp<mopt then begin

raketa;

if xpas>=100000 then begin

mopt:=mp;

muaopt:=mua;

pn_opt:=pn_;

k:= i;

Edit3.Text:=FloatToStr(v);

Edit8.Text:=FloatToStr(y);

Edit13.Text:=FloatToStr(x);

Edit10.Text:=FloatToStr(xpas);

Edit11.Text:=FloatToStr(vpas);

Edit12.Text:=FloatToStr(ypas);

Edit14.Text:=FloatToStr(muaopt);

Edit15.Text:=FloatToStr(pn_opt);

Edit16.Text:=FloatToStr(mopt);

Edit17.Text:=FloatToStr(k);

Series1.AddXY(mopt,xpas,'',clRed);

end;

end;

end;

end;

end.