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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.