ПРОГРАММНОЕ СРЕДСТВО ДЛЯ ВЫПОЛНЕНИЯ РАСЧЁТА И ПРЕДУПРЕЖДЕНИЯ ОШИБОК
На основе вышеуказанных формул было реализовано программное средство, производящее моделирование полёта самолёта и последующую его проверку на ошибки. Рассмотрим работу программы в двух случаях. При первом прогоне устанавливаем длину разбега 1000м. Запускаем моделирование взлёта нажатием кнопки «START». Рис. 2. Главное окно приложения. Моделирование взлёта для благоприятного исхода.
Для проверки возможности взлёта запускаем систему нажатием кнопки «USE SYSTEM». Рис. 3. Главное окно приложения. Расчёт возможности взлёта для благоприятного исхода.
Как видно из графика на рис.3, аварийная остановка не потребовалась, и самолёт благополучно закончил разгон.
При втором прогоне изменяем длину разбега на 500м и запускаем моделирование взлёта нажатием кнопки «START». Рис. 4. Главное окно приложения. Моделирование взлёта для плохого исхода. Как видно из графика на рис.4, самолёт не успеет набрать требуемую скорость до конца полосы.
Для проверки возможности взлёта запускаем систему нажатием кнопки «USE SYSTEM». Рис. 5. Главное окно приложения. Расчёт возможности взлёта для плохого исхода. На рис. 5 видно, что по достижении точки не возврата система определила, что условие взлёта недостижимо, и приняла решение прекратить набор скорости и начать торможение самолёта.
В ходе данной учебно-исследовательской работы была изучена предметная область – аэродинамика взлёта самолёта. Также на основе теоретических материалов было разработано программное средство, рассчитывающее возможность взлёта самолёта и предупреждающее возможные ошибки на этой стадии. Использованные формулы пока не достаточно полны, но уже сейчас отражают основные действующие силы и процессы и позволяют делать приблизительные расчёты. В дальнейшем я планирую продолжить работу в этой области и сделать расчёт максимально точным и применимым для задач авиации. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. Лигум Т.И. Практическая аэродинамика и динамика полёта турбореактивных самолётов, Транспорт 1967 2. Лигум Т.И. Аэродинамика самолёта Ту-134А-3 (Б-3), Транспорт 1987 3. Верещиков Д.В., Салтыков С.Н. Самолет Ил-76: аэродинамика и динамика полета, Электрон. текстовые дан. 2006 4. Остославский И.В. Аэродинамика самолета, Государственное издательство оборонной промышленности 1957 5. Остославский И.В, Титов В.М. Аэродинамический расчет самолета. - М.: Оборонгиз, 1947 ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ
var Form1: TForm1; implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject); //моделируем взлёт самолёта без нашей системы var polosa,s,n,s1,vmax:Integer; P,P1,v,G,i,S2,Ya,Xa,Cy,Cx,m,f:Real; begin polosa:=strtoint(edt2.text); Chart1.Series[0].Clear; Chart1.Series[1].Clear; Chart1.Series[2].Clear; S:=0; v:=0; S2:=strtofloat(edt8.text); P:=StrToFloat(edt5.text); m:=StrToFloat(edt3.text);
if rb1.Checked then f:=0.06; //выбор ср. величины коэфициента трения if rb2.Checked then f:=0.06; if rb3.Checked then f:=0.23; if rb4.Checked then f:=0.26;
vmax:=strtoint(edt1.text)-strtoint(edt4.text);//учёт ветра for S:=1 to polosa do begin Chart1.Series[0].AddXY(S, vmax); end; v:=0;
if (P-Xa-(1.1*f*(m*g))<=0) then showmessage('сила тяги слишком мала!') else begin for n:=1 to polosa do begin S:=n; Cy:=strtofloat(edt9.text); Cx:=strtofloat(edt6.Text); if s=s1 then P:=P-P1;
Ya:=50; Xa:=500; i:=9.8*(P-Xa-(1.1*f*(m*9.8-Ya)))/m; if i<0 then break; v:=Sqrt(Sqr(v)+(i*2)); //вычисляем скорость на каждом шаге if v>=vmax then Break; Chart1.Series[1].AddXY(S, v); if (S mod 10)=0 then Chart1.Refresh; Sleep(1); end; end; btn2.Visible:=True; end;
procedure TForm1.btn2Click(Sender: TObject); var color: TColor; S,S1,n1,n,polosa: integer; flag:boolean; P,P1,f,i,i2,G, S2, Ya, v, Cy, m, Xa, Cx, vmax, Smax2,Smax:Real; begin vmax:=StrToFloat(edt1.text)-StrToFloat(edt4.text);//учёт ветра Flag:=false; //флаг остановки
P:=strtofloat(edt5.Text); polosa:=strtoint(edt2.text); S2:=strtofloat(edt8.text); m:=StrToFloat(edt3.text); P:=StrToFloat(edt5.text);
if rb1.Checked then f:=0.06; if rb2.Checked then f:=0.06; if rb3.Checked then f:=0.23; if rb4.Checked then f:=0.26;
for n:=1 to Chart1.Series[1].LastValueIndex do begin //расчёт по метрам if flag=true then break; S:=n; i:=(sqr(Chart1.Series[1].YValue[S])-sqr(v))/2;
Cy:=strtofloat(edt9.text);
Ya:=50; Xa:=500;
i2:=9.8*((P*strtofloat(edt10.Text)/100)+Xa+(1.1*f*(m*9.8-Ya)))/m;
Smax2:=sqr(v)/(2*i2); Smax:=(Sqr(Vmax)-(v*vmax))/(2*i);
if (polosa-S-10<=Smax2) and (polosa-S<=Smax) and (v<vmax) then begin showmessage(floattostr(Smax)+' '+floattostr(Smax2)); flag:=true; end;
if flag=false then begin
v:=Chart1.Series[1].YValue[S]; Chart1.Series[2].AddXY(S, v);
if (S mod 5)=0 then Chart1.Refresh; end;
if flag=true then stop(S,P,v); if v>=vmax then break; end; end;
procedure TForm1.stop(S: integer; P,v: real); var s1,polosa:integer; F1,i,m,S2,Xa,Ya,f,Cy,Cx:Real; begin polosa:=strtoint(edt2.text); S2:=strtofloat(edt8.text); m:=StrToFloat(edt3.text);
if rb1.Checked then f:=0.06; //выбор ср. величины коэфициента трения if rb2.Checked then f:=0.06; if rb3.Checked then f:=0.23; if rb4.Checked then f:=0.26; s1:=0; repeat Chart1.Series[2].AddXY(S, v); Sleep(1); if (S mod 10)=0 then Chart1.Refresh; inc(S); inc(S1); Cy:=strtofloat(edt9.text); Cx:=strtofloat(edt6.text); Ya:=50; Xa:=500; i:=9.8*((P*strtofloat(edt10.Text)/100)+Xa+(1.1*f*(m*9.8-Ya)))/m; if (Sqr(v)-(i*2))<=0 then v:=0 else v:=sqrt(Sqr(v)-(i*2)); if v<=0 then break; if (S=polosa) then break; until v=0; end; end.
|