Wyznaczenie trajektorii pionowej lotu TU-154M pomiędzy TAWS-37 i TAWS-38

Dane z zapisu zdarzeń TAWS 37 i 38, oraz wykresu przeciążeń
(Baro Altidue) Wysokość Baryczna : (752.0 ft * 0.3048 m/ft) – 168 m = 61,20 m (nad poziom lotniska)
(Sink Rate) Prędkość opadania : -1505 ft/min * (0,3048 m/ft) / 60 = -7.64 m/s

(Baro Altidue ) Wysokość Baryczna : (671.0 ft * 0.3048 m/ft) – 168m = 36.52 m (nad poziom lotniska)
(Sink rate) Prędkość opadania 394.35 ft/min * (0.3048 m/ft) / 60 = 2 m/s
Różnica czasu pomiędzy TAWS-37 i TAWS-38 : 06:40:59 – 06:40:43 = 16s
Przeliczniki : 1 ft = 0.3048 m, 1 kts (węzeł na sekundę) = 0.514 m/s

Między TAWS-34 a TAWS-35 został zresetowany (do ciśnienia standardowego) wysokościomierz baryczny podłączony do FMS, co daje poprawkę 0 168 metrów do następnych wskazań.
Poniżej przedstawione są wykresy przeciążeń pionowych i sposób zdjęcia wartości do analiz. Niebieskie linie oznaczają czas zmiany przeciążenia. Na podstawie tych wykresów została stworzona dwu wymiarowa tablica : czas zmiany przeciążenia, wartość przeciążenia. TAWS -37 jest oznaczony jako czas „0” , TAWS -38 ma być osiągnięty po 16 sekundach lotu. Prędkość pozioma samolotu nie ma wielkiego znaczenia dla tej uproszczonej symulacji, wiec w sposób uproszczony została przyjęta prędkość pozioma 79.43 m/s, Ale jak ktoś chce można stworzyć podobną tablice zmiany prędkości poziomej i użyć tej samej koncepcji (procedury) do odczytu zmian prędkości w funkcji czasu.


pr_pion[0][0] = -5.571; pr_pion[0][1]=1.040;
pr_pion[1][0] = -4.446; pr_pion[1][1]=1.094;
pr_pion[2][0] = -4.196; pr_pion[2][1]=1.067;
pr_pion[3][0] = -3.196; pr_pion[3][1]=1.040;
pr_pion[4][0] = -3.053; pr_pion[4][1]=1;
pr_pion[5][0] = -2.071; pr_pion[5][1]=1.040;
pr_pion[6][0] = -1.303; pr_pion[6][1]=0.959;
pr_pion[7][0] = -1.178; pr_pion[7][1]=1;
pr_pion[8][0] = -0.589; pr_pion[8][1]=0.959;
pr_pion[9][0] = -0.446; pr_pion[9][1]=1.04;
//-------------------------------------------------
pr_pion[10][0] = -0.321; pr_pion[10][1]=1;
pr_pion[11][0] = 0.428; pr_pion[11][1]=1.04;
pr_pion[12][0] = 0.821; pr_pion[12][1]=1.06;
pr_pion[13][0] = 3.839; pr_pion[13][1]=1.04;
pr_pion[14][0] = 4.464; pr_pion[14][1]=1.05;
pr_pion[15][0] = 4.589; pr_pion[15][1]=1.04;
pr_pion[16][0] = 5.714; pr_pion[16][1]=1;
pr_pion[17][0] = 6.571; pr_pion[17][1]=1.04;
pr_pion[18][0] = 6.714; pr_pion[18][1]=1.12;
pr_pion[19][0] = 6.964; pr_pion[19][1]=1.05;
pr_pion[20][0] = 7.446; pr_pion[20][1]=1.12;
pr_pion[21][0] = 8.464; pr_pion[21][1]=1.09;
pr_pion[22][0] = 8.821; pr_pion[22][1]=1.06;
pr_pion[23][0] = 9.589; pr_pion[23][1]=1.16;
pr_pion[24][0] = 9.732; pr_pion[24][1]=1.18;
pr_pion[25][0] = 9.857; pr_pion[25][1]=1.12;
pr_pion[26][0] = 10.464; pr_pion[26][1]=1.18;
pr_pion[27][0] = 11.714; pr_pion[27][1]=1.27;
pr_pion[28][0] = 12.482; pr_pion[28][1]=1.32;
pr_pion[29][0] = 12.607; pr_pion[29][1]=1.33;
pr_pion[30][0] = 12.821; pr_pion[30][1]=1.36;
pr_pion[31][0] = 13.839; pr_pion[31][1]=0.86;
pr_pion[32][0] = 14.678; pr_pion[32][1]=1.22;
pr_pion[33][0] = 14.964; pr_pion[33][1]=1.36;
pr_pion[34][0] = 15.482; pr_pion[34][1]=1.22;
pr_pion[35][0] = 15.607; pr_pion[35][1]=0.62;
pr_pion[36][0] = 15.714; pr_pion[36][1]=1.16;
pr_pion[37][0] = 15.875; pr_pion[37][1]=0.55;
pr_pion[38][0] = 16.000; pr_pion[38][1]=1;
pr_pion[39][0] = 16.482; pr_pion[39][1]=0.792;
pr_pion[40][0] = 16.607; pr_pion[40][1]=0.616;
pr_pion[41][0] = 16.678; pr_pion[41][1]=0.552;
pr_pion[42][0] = 16.857; pr_pion[42][1]=0.488;
pr_pion[43][0] = 16.982; pr_pion[43][1]=0.9821;
pr_pion[44][0] = 17.089; pr_pion[44][1]=0.392;
pr_pion[45][0] = 17.232; pr_pion[45][1]=0.376;
pr_pion[46][0] = 17.339; pr_pion[46][1]=0.344;
pr_pion[47][0] = 17.482; pr_pion[47][1]=0.232;
pr_pion[48][0] = 17.625; pr_pion[48][1]=0.184;
pr_pion[49][0] = 17.732; pr_pion[49][1]=0.232;
pr_pion[50][0] = 17.875; pr_pion[40][1]=0.296;
pr_pion[51][0] = 17.982; pr_pion[51][1]=0.488;
pr_pion[52][0] = 18.107; pr_pion[52][1]=0.264;
pr_pion[53][0] = 18.232; pr_pion[53][1]=0.440;
pr_pion[54][0] = 18.357; pr_pion[54][1]=0.296;
Mamy dane wejściowe : wysokość początkową, prędkość wznoszenia początkową, zadaną (jakąś z lekka paraboliczną) trajektorie wyznaczoną jednoznacznie przez zarejestrowane wartości przeciążeń, oraz wysokość końcowa i prędkość wznoszenia końcową.
Pojawia się ciekawe zagadnienie : nie jest oczywiste że dla zadanych warunków początkowych i zadanych przeciążeń pionowych, trajektoria lotu przetnie punkt końcowy i na dodatek z taką a nie inna prędkością wznoszenia. Czyli mamy podwójną weryfikacje trajektorii : osiągniecie punków : początek – koniec, osiągniecie zadanej prędkości wznoszenia. I nie jest zbyt oczywiste czy zdeterminowana (przez zarejestrowane przeciążenia) trajektoria spełni te wymagania, a jeżeli tak to przy jakich warunkach ?
Z pobieżnych analiz wynika że samolot nie uderzy w „sławną brzozę,” wiec można zapomnieć o „sławnej beczce”, więc upraszcza się nam bardzo symulacja (tylko przeciążenia pionowe), a program bardzo krótki (i banalny)
Funkcja która w zależności punktu czasu wyznacza przeciążenie na podstawie zadeklarowanej tablicy pr_pion :
//--------------wyznacz przeciążenie pionowe w funkcji do czasu -----------
float przeciazenie(float t )
{
float pr=1;
int z=0, i=0; //z - zatrzask spełnienie warunku
do {
if (t<pr_pion[i][0])
{
z=1;
if (i>0) pr=pr_pion[i-1][1];
else pr=pr_pion[i][0];
};
i++;
} while ((i<=Max_p)&&(z!=1));
if (z==0) { pr=pr_pion[Max_p-1][1]; };
return pr;
};
Dzięki tej funkcji jesteśmy nie zależni od częstotliwości próbkowania (zadeklarowanej ilości próbek iteracji)
//=========Glowna===petla===START=========================================
for (i = 0; i < Max_pr; i++)
{
//--czas--------------
tab_p[i+1].czas = tab_p[i].czas + delta_t; //upływ czasy jednostajny
tab_p[i+1].Vx = tab_p[i].Vx; //--prędkość-pozioma--
tab_p[i+1].Lx = tab_p[i].Lx - tab_p[i].Vx * delta_t; //--droga-pozioma-----
//przyspieszenie--pionowe--w : m/s
tab_p[i].Pz = przeciazenie(tab_p[i].czas + przesuniecie_t); // przeciążenie próbki
tab_p[i].Az = ( przeciazenie(tab_p[i].czas + przesuniecie_t) - 1) * g; // przyspieszenie próbki
tab_p[i+1].Vz = tab_p[i].Vz + tab_p[i].Az * delta_t; //prędkość pionowa wznoszenia
tab_p[i+1].Lz = tab_p[i].Lz + tab_p[i].Vz * delta_t; // wysokość pionowa
}; //==========KONIEC==głównej===pętli==========================
Jak widać program jest nadzwyczaj prosty, (całkowanie iteracyjne), należy tylko zwrócić uwagę na wywołanie funkcji „przeciążenie(t + przesunięcie_t) )” jest dodany dodatkowy parametr : przesunięcie czasowe, coś jak suwak czasu, do przodu , do tyłu. Dlaczego ten suwak czasu został wprowadzony ? Po pierwszym „odpaleniu” programu dla przesunięcia czasowego =0, końcowa trajektoria (po 16s) kończyła się na wysokości 25 metrów nad poziom lotniska, i prędkością wznoszenia 7,25 m/s. Można by podkręcić wartości odczytanych przeciążeń do góry lub do dołu, ale to droga „do nigdzie” Dlaczego ? jak podkręcimy do góry to owszem wysokość wzrośnie, ale i wzrośnie prędkość wznoszenia która i tak już jest cztery razy za duża, no to został nam przesuwanie w poziomie, to przodu do tyłu (jak soczewkę do obrazu) zgrają się nam te parametry ? czy nie ? „Czy wyostrzy ? ”
Przesuniecie
Czasowe w „s”
|
Końcowa prędkość
Wznoszenia Vz
w „m/s”
W punkcie TAWS-38
|
Końcowa wysokość Lz w „m” w punkcie
TAWS-38
|
wysokość
Nad lotniskiem w „m” w miejscu brzozy i prędkość wznoszenia
(w nawiasie)
|
Minimalna wysokość nad lotniskiem w „m”
|
Odległość od pasa dla minimalnej wysokości w „m”
|
Czas osiągniecia minimalnej wysokości w „s”
|
-0.8
|
6.67
|
13.24
|
0.5 (3.22 m/s)
|
-1.4
|
952
|
12.36
|
-0.7
|
6.94
|
14.58
|
1.62 (3.54 m/s)
|
-0.63
|
960
|
12.26
|
-0.6
|
7.31
|
16.15
|
2.74 (3.8 m/s)
|
0.12
|
968
|
12.16
|
-0.4
|
7.85
|
19.08
|
5.62 (4.55 m/s)
|
2.09
|
986
|
11.94
|
-0.2
|
7.59
|
22.39
|
7.72 (5.17 m/s)
|
3.28
|
1000
|
11.76
|
0.0
|
7.25
|
25.6
|
10.14 (5.76 m/s)
|
4.73
|
1016
|
11.45
|
+0.1
|
7.2
|
26.421
|
11.33 (6.07 m/s)
|
5.38
|
1022
|
11.48
|
+0.2
|
7.19
|
28.08
|
12.81 (6.41 m/s)
|
6.2
|
1031
|
11.37
|
+0.3
|
7.19
|
29.86
|
14.36 (6.31 m/s)
|
7.08
|
1040
|
11.26
|
+0.4
|
7.194
|
31.117
|
15.66 (6.12 m/s)
|
7.79
|
1047
|
11.16
|
+0.5
|
7.15
|
32.10
|
16.56 (5.67 m/s)
|
8.179
|
1053
|
11.04
|
+0.6
|
6.95
|
33.19
|
17.54 (5.83 m/s)
|
8.62
|
1059
|
11.00
|
+0.7
|
6.39
|
34.17
|
18.49 (5.71 m/s)
|
9.06
|
1066
|
10.92
|
+0.8
|
5.94
|
34.66
|
19.23 (5.5 m/s)
|
9.39
|
1073
|
10.848
|
+0.9
|
5.42
|
35.23
|
19.76 (5.32 m/s)
|
9.53
|
1078
|
10.8
|
+1.0
|
5.02
|
35.83
|
19.71 (5.0 m/s)
|
9.77
|
1083
|
10.72
|
+1.1
|
4.7
|
36.36
|
20.26 (5.07 m/s)
|
10.039
|
1089
|
10.64
|
+1.2
|
4.29
|
36.50
|
20.81 (5.22 m/s)
|
10.24
|
1096
|
10.55
|
+1.3
|
3.6
|
36.69
|
22.29 (5.5 m/s)
|
10.43
|
1102
|
10.47
|
+1.4
|
3.01
|
37,22
|
22.87 (5.77 m/s)
|
10.63
|
1108
|
10.4
|
+1.5
|
2.34
|
37.37
|
22.59 (5.9 m/s)
|
10.84
|
1115
|
10.32
|
+1.6
|
1.609
|
37.49
|
24.14 (6.31 m/s)
|
11.052
|
1121
|
10.24
|
Na podstawie dość prostego programu symulacyjnego mamy następujące wyniki zamieszczone w tabeli. Zaznaczyłem dwie linie na kolor żółty, pierwsza linia dla przesunięcia -0.7s, w sposób częściowy mogła by odpowiadać hipotezie z oficjalnego raportu (dlatego została wyróżniona). Z grubsza zgadza się wysokość uderzenia w brzozę : 5.5 metra (podstawa brzozy jest -4 metry nad poziom lotniska) ale inne parametry już się nie zgadzają, dlatego należy je omówić. Niżej przedstawiona jest tabela z Raportu Milera o wysokościach i pościnanych przeszkodach. Wiersz 5 tabeli poniżej określa w miarę podobną wysokość (błąd do przyjęcia) ścięcia brzózki i skrzydła., W symulacji powyżej gdzie jest założenie że samolot leci dalej poziomo, po 2,5 s lotu co odpowiada około 200 metrów lotu samolot jest się wstanie wzbić do wysokości 15,5 metra, a w tabeli poniżej po około (855m – 671m= 184m) wiersz 5 i 11. Robiąc beczkę do kąta -120 stopni jest się w stanie wzbić do 21 metrów. Wiadomym jest nawet bez symulacji że powyżej kąta przechyłu 30 stopni na tej niewielkiej prędkości tej klasy samolot to może co najwyżej spadać.

Pełna symulację obrotu samolotu wykonałem. Aby wykonać manewr beczki i nie zaryć kikutem skrzydła w grunt za brzozą (pochylenie terenu do góry 2%) to w miejscu brzozy prędkość wznoszenia samolotu musiała by być większa od 9 m/s. Co to oznacza ? Wiersz 2, to jest 1 sekunda lotu do tyłu do linii 5 (sławna brzoza) czyli od wysokości samolotu : 1.1m odejmijmy 9 metrów = -8 metrów. Tyle wynosi przeniżenie terenu w punkcie 2, a to oznacza szorowanie skrzydłami o ziemie, ale biorąc pod uwagę ze wysunięte podwozie ma wysokość od 1.5 metra do 2 metrów, to nie oznaczało by to szorowania tylko początek lądowania w tym miejscu, inaczej ujmując : brzoza musiała by rosnąc na skarpie, albo dla tego terenu samolot musiałby wylecieć z podziemnego tunelu aby dla zadanych parametrów (wznoszenie powyżej 9 m/s) aby beczkę wykonać. Przy założeniu że na sławnej brzozie samolot skrzydło zetnie co jak dla mnie jest niemożliwe ale ten tekst jest o wyznaczeniu trajektorii
Z uproszczonej symulacji powyższej mamy w miejscu brzozy prędkość wznoszenia 3.54 m/s dla pełnej symulacji (z uwzględnieniem beczki) samolot po około 3.5 sekundach lotu samolot przy kącie 102 stopnie zaryje kikutem skrzydła w ziemie, i to przy niemym założeniu że siła ciągu samolotu (silniki) jest przyłożona w tym samym punkcie co główna siła tarcia (czyli silniki umieszczone na skrzydłach). Wiadomym jest że silniki w TU-154M są umieszczone z tyłu, co powoduje że przy przechyle powyżej 20 stopni na tych niewielkich prędkościach samolot dużo szybciej będzie leciał w dół, niż to wynika z symulacji która nie uwzględnia momentu wykręcania, oddalenia wektora głównej siły tarcia (krawędzie skrzydeł) od wektora siły ciągu (silniki na ogonie samolotu). Oznacza to że uwzględniając spore rozsunięcie wektora siły ciągu od wektora siły tarcia prędkość wznoszenia przy brzozie musiała by być dużo- dużo większa niż wyliczone 9 m/s, Ale tego już nie symulowałem (nie liczyłem) bo nie ma sensu (szkoda czasu) . Tak wiec pierwszy żółty wiersz (2) z tabeli pierwszej neguje totalnie to co jest opisane w oficjalnym raporcie.
Zajmijmy się drugim bardziej żółtym wierszem (21) z pierwszej tabeli,
Zgadza się prawie prędkość wznoszenia i wysokość ( o dziwo ? „wyostrzyło” ? jednak ) prędkość wznoszenia : błąd 17 % , wysokość : błąd 2 %, to całkiem niezły wynik.
Ten sam punktu ale z korektą w dół : -0.1% odczytu przeciążenia z wykresu
Czyli współczynnik korygujący kor=0.999
Przesuniecie
Czasowe
|
Końcowa prędkość
Wznoszenia Vz
W punkcie TAWS-38
|
Końcowa wysokość Lz w punkcie
TAWS-38
|
wysokość
Nad lotniskiem w miejscu brzozy i prędkość wznoszenia
(w nawiasie)
|
Minimalna wysokość nad lotniskiem w m
|
Odległość od pasa dla minimalnej wysokości
|
Czas minimalnej wysokości w s
|
+1.5
|
2.19
|
36.12
|
22.59 (5.9 /s)
|
10.33
|
1111
|
10.36
|
Błąd prędkości wznoszenia +9,5%, Błąd wysokości -1% ,
Wykres przeciążeń pionowych w oficjalnym raporcie niestety jest jakościowo badziewny, (czy specjalnie ?) ponadto miernik przeciążeń pionowych też ma jakąś dokładność pomiaru, (błąd jest do oszacowanie ale trzeba go znać). Myślę że w granicach przesunięcia czasu od +1.4 do +1.6 może oscylować poprawny wynik.
Dlatego że prędkość wznoszenia od minimalnej wysokości narasta do czasu około 16 sekund (nie uwzględniając przesunięcia czasu (patrz macierz danych zdjęta z wykresu)), Co się dziej po 16 sekundach z przeciążeniem ?, staje się dużo mniejsza od wartości 1g . Co to oznacza ? to oznacza że samolot gwałtownie wytraca prędkość wznoszenia, i przesuwając „suwakiem czasu” wchodzimy w fazę tego wytracania prędkości wznoszenia.
Bo jest czymś dziwnym aby osiągając sporą prędkość wznoszenia 7.18 m/s , „ni z tego ni z owego” samolot zaczął tracić tę prędkość wznoszenia, Świadczy to o dość banalnej przyczynie takiego stanu rzeczy : silniki straciły ciąg , i używając uproszczonej przenośni : rzuconego kamienia w górę, nic już nie pcha do góry no to wytraca prędkość wznoszenia i za chwilę zacznie spadać.
Został dwie rzeczy do zrobienia : zobrazować końcówkę przesuniętego wykresu przeciążeń i zobrazować trajektorię pionową, spełniająca kryteria TAWS-37 –
TAWS 38.

Końcowy fragment oryginalnego wykresu przeciążeń pionowych

W miejscu sławnej brzozy na wysokości 23.49 m nad płytą lotniska występują 2 piki przeciążeń raczej nie naturalne, a po 1 sekundzie lotu, od brzozy (15 sekunda) przeciążenia są już tak małe, że świadczy to o nie działaniu silników (utrata ciągu)
Dłuższe obniżenie przeciążenia po 12 sekundzie (0.88g) jeszcze przed brzozą trudno stwierdzić czy jest naturalne, Ale być może być jeszcze naturalne, (np. odpadnięcie delikatne, aby nie przeciągnąć) prędkość wznoszenia w tej fazie około 5.7 m/s

Niebieska linia oznacza trajektorie lotu spełniającą następujące kryteria :
- przecięcie w przestrzenie punktów TAWS-37 i TAWS-38
- prędkości opadania wznoszenia dla punktów TAWS-37 i TAWS-38
- Wykres przeciążeń pionowych zdjęty z oficjalnego wykresu Raportu Milera i
przesunięty w czasie o +1.5 sekundy
Jak widać trajektoria lotu nie zeszła poniżej 10 metrów nad poziom lotniska w miejscu gdzie ziemia jest poniżej lotniska -20 do -30 metrów, więc o kontakcie z przeszkodami naziemnymi mowy być nie może, może za radiolatarnią BRL, wylot spalin mógł coś na ziemi uszkodzić. Jeden świadek musiał trzymać się samochodu aby go nie zdmuchnęło, A co na wysokości koron (czubków) drzew ? trochę ich tam było.
Czerwona linia oznacza oficjalną trajektorie lotu z Raportu Milera. Co się rzuca w oczy nawet bez żadnych obliczeń i symulacji ? W punkcie TAWS-37 prędkość opadania wynosi -7.6 m/s, a na oficjalnej trajektorii samolot się nawet z lekka wznosi
A przed punktem TAWS 37 opada, nawet przesuniecie o 1.5 s nie jest wystarczające aby to nadrobić, dlaczego ?
Patrz wynikowa tabela pierwsza : do wyrównania prędkości opadania z -7.6 m/s do prędkości 0 m/s (czyli najniższa wysokość osiągnięta prze samolot, względem lotniska) potrzeba około 10-11 sekund , a w raporcie to się dzieje w czasie mniejszym niż 1 sekunda ???. no cóż takich „wałków” w raporcie jest więcej…
Pomimo tego że na oficjalnej mapce z raportu punk TAWS – 38 jest wykasowany (brak) to zielona linia łącząca poszczególne TAWS-y dochodzi poprawnie do niby nie istniejącego punktu TAWS-38.
Istnieje również problem przesunięcia przeciążeń poprzecznych, ale brak mi pomysłu jak go synchronizować z wykresem przeciążeń pionowych
Może tak ? synchronizacja w czasie zmian przeciążeń świadcząca o gibnięciu ?
Gwałtowne gibnięcie powinno być zauważone również przez miernik przeciążeń pionowych. Jeżeli jest to sensowne (nie wiem) to wynikało by z tego że pierwsze gibnięcie miał miejsce na 1 sekundę wcześniej od przelotu nad sławną brzozą (czyli około 70-80 metrów przed sławną brzozą) , Ale do tego trzeba zanalizować i inne parametry, problem jest taki że jeżeli przesunęli wykres przeciążeń pionowych o +1.5 sekundy , to stawia wiarygodność oficjalnego raportu w spore wątpliwości. Więc wszelkie dane trzeba „cedzić przez dobre sito” co proste nie jest. Myślę że fragment tego „sita” dało się sensownie odtworzyć jeśli chodzi o TAWS-37 i TAWS-38
Więc do tej dyskusji o trajektorii dodaje swoje przemyślenia do oceny.
Co bym jeszcze dodał :
- Okolice TAWS-37 prędkość opadania -7.6 m/s co się zgadza mniej więcej z oficjalną trajektorią przed tym punktem… Za punktem TAWS-37 (około1930m przed początkiem pasa) oficjalna trajektoria idzie w górę, więc mamy z nagłą zmiana prędkości pionowej od -7,6 m/s do około +2 m/s w czasie około 0,2s było by to możliwe przy przeciążeniach rzędu 5g a rejestrowane w tym odcinku są przeciążenia w okolicach 1,02g… więc taka nagła zmiana prędkości opadania nie możliwa…
- odległość od 1170m w przybliżeni najniższy punkt, rejestrowane przeciążenia to 1,06g co daje przyspieszenie w górę +06 m/s_kwadrat, a w odległości 1170m (od progu) już 1,16g co daje 1,56m/s_kwadrat
W odległości od 1170m do 1000m (od pasa) samolot leci z lekka w dół lub poziomo… co przy dodatnim przyśpieszeniu jest nie możliwe
Od odległości 1170 do 1000m (na odcinku 170 metrów) samolot powinien zwiększyć wysokość o 3.5 metra, w oficjalnej mapce podejścia tak się nie dzieje….
A za punktem odległość od pasa 1100m samolot jakby idzie w dół, przy dodatnim przyspieszeniu dwa minima funkcji parabolicznej :
Z = a *x_kwadrat /2
jest to niemożliwe…
Zakładam że mirnik przeciążeń pionowych jest zamocowany na żyroskopie czyli, stały wzgledem ziemi (horyzontu) a nie samolotu, czy tak jest ? tego nie wiem,
Gdyby było inaczej (na stałe wzgledem samolotu)do brzozy kąt podniesienia samolotu nie jest duży, i nie ma to dużego wpływy na wyniki, za brzozą ten kat rośnie i miało by to trochę wpływ na wyniki końcowe,
więc pytanie jak ten miernik jest zamocowany ?
Poniżej listing prostego programu : TAWS-37-TAWS-38 :
/---------------TAWS-37-38---V-1.0-----------------------------------------------------------
//---------------Licencja--Open-Suroce------------------------------------------------------
//---------------Mozna-kopiować-poprawiać-testować-itp.-i-podawać--dalej-------
#include <vcl.h>
#include <math.h>
#include <iostream.h>
#include <fstream.h>
#include "unit_strings.h"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
fstream zb_wyniki; //zbior tekstowy wynikow
const Max_p = 55; // maksymalna ilosc probek
float pr_pion[Max_p][2];
//---------definicja zmian przeciazen z wykresu
def_przeciazenie_p()
{
pr_pion[0][0] = -5.571; pr_pion[0][1]=1.040;
pr_pion[1][0] = -4.446; pr_pion[1][1]=1.094;
pr_pion[2][0] = -4.196; pr_pion[2][1]=1.067;
pr_pion[3][0] = -3.196; pr_pion[3][1]=1.040;
pr_pion[4][0] = -3.053; pr_pion[4][1]=1;
pr_pion[5][0] = -2.071; pr_pion[5][1]=1.040;
pr_pion[6][0] = -1.303; pr_pion[6][1]=0.959;
pr_pion[7][0] = -1.178; pr_pion[7][1]=1;
pr_pion[8][0] = -0.589; pr_pion[8][1]=0.959;
pr_pion[9][0] = -0.446; pr_pion[9][1]=1.04;
//-------------------------------------------------
pr_pion[10][0] = -0.321; pr_pion[10][1]=1;
pr_pion[11][0] = 0.428; pr_pion[11][1]=1.04;
pr_pion[12][0] = 0.821; pr_pion[12][1]=1.06;
pr_pion[13][0] = 3.839; pr_pion[13][1]=1.04;
pr_pion[14][0] = 4.464; pr_pion[14][1]=1.05;
pr_pion[15][0] = 4.589; pr_pion[15][1]=1.04;
pr_pion[16][0] = 5.714; pr_pion[16][1]=1;
pr_pion[17][0] = 6.571; pr_pion[17][1]=1.04;
pr_pion[18][0] = 6.714; pr_pion[18][1]=1.12;
pr_pion[19][0] = 6.964; pr_pion[19][1]=1.05;
pr_pion[20][0] = 7.446; pr_pion[20][1]=1.12;
pr_pion[21][0] = 8.464; pr_pion[21][1]=1.09;
pr_pion[22][0] = 8.821; pr_pion[22][1]=1.06;
pr_pion[23][0] = 9.589; pr_pion[23][1]=1.16;
pr_pion[24][0] = 9.732; pr_pion[24][1]=1.18;
pr_pion[25][0] = 9.857; pr_pion[25][1]=1.12;
pr_pion[26][0] = 10.464; pr_pion[26][1]=1.18;
pr_pion[27][0] = 11.714; pr_pion[27][1]=1.27;
pr_pion[28][0] = 12.482; pr_pion[28][1]=1.32;
pr_pion[29][0] = 12.607; pr_pion[29][1]=1.33;
pr_pion[30][0] = 12.821; pr_pion[30][1]=1.36;
pr_pion[31][0] = 13.839; pr_pion[31][1]=0.86;
pr_pion[32][0] = 14.678; pr_pion[32][1]=1.22;
pr_pion[33][0] = 14.964; pr_pion[33][1]=1.36;
pr_pion[34][0] = 15.482; pr_pion[34][1]=1.22;
pr_pion[35][0] = 15.607; pr_pion[35][1]=0.62;
pr_pion[36][0] = 15.714; pr_pion[36][1]=1.16;
pr_pion[37][0] = 15.875; pr_pion[37][1]=0.55;
pr_pion[38][0] = 16.000; pr_pion[38][1]=1;
pr_pion[39][0] = 16.482; pr_pion[39][1]=0.792;
pr_pion[40][0] = 16.607; pr_pion[40][1]=0.616;
pr_pion[41][0] = 16.678; pr_pion[41][1]=0.552;
pr_pion[42][0] = 16.857; pr_pion[42][1]=0.488;
pr_pion[43][0] = 16.982; pr_pion[43][1]=0.9821;
pr_pion[44][0] = 17.089; pr_pion[44][1]=0.392;
pr_pion[45][0] = 17.232; pr_pion[45][1]=0.376;
pr_pion[46][0] = 17.339; pr_pion[46][1]=0.344;
pr_pion[47][0] = 17.482; pr_pion[47][1]=0.232;
pr_pion[48][0] = 17.625; pr_pion[48][1]=0.184;
pr_pion[49][0] = 17.732; pr_pion[49][1]=0.232;
pr_pion[50][0] = 17.875; pr_pion[40][1]=0.296;
pr_pion[51][0] = 17.982; pr_pion[51][1]=0.488;
pr_pion[52][0] = 18.107; pr_pion[52][1]=0.264;
pr_pion[53][0] = 18.232; pr_pion[53][1]=0.440;
pr_pion[54][0] = 18.357; pr_pion[54][1]=0.296;
};
//--------------wyznacz-przeciazenie-pionowe-w-funkcj-do-czasu-----------
float przeciazenie(float t )
{
float pr=1;
int z=0, i=0;
do {
if (t<pr_pion[i][0])
{
z=1;
if (i>0) pr=pr_pion[i-1][1];
else pr=pr_pion[i][1];
};
i++;
} while ((i<=Max_p)&&(z!=1));
if (z==0) { pr=pr_pion[Max_p-1][1]; };
return pr;
};
//---------------funkcja-pisz--naglowka---co--10--wynikow--------------
void nagluwek()
{
zb_wyniki << "-------------------------------------------------------------";
zb_wyniki << "-------------------------------------------";
zb_wyniki << endl;
zb_wyniki << " Lp. Czas Przeciazenie_pion Vx Vz " ;
zb_wyniki << " Lx Lz " << endl;
zb_wyniki << "-------------------------------------------------------------";
zb_wyniki << "-------------------------------------------";
zb_wyniki << endl;
zb_wyniki.width(8);
return;
};
//============================================================================
int main(int argc, char* argv[])
{
const int Max_pr=10000; //ilosc probek iteracji (do dowolnego zwiekszania)
typedef struct par_lotu_ //uproszczona definicja parametrów lotu
{
double czas; //czas kolejnej probki w sek, od zera
double Vx; //predkosc lotu w osi x w m/s
double Vz; //predkosc lotu w osi z (do dolu)
double Lx; //przebyta droga w osi x w metrach
double Lz; //przebyta droga w osi z (do dolu)
double Az; //przyspieszenie pionowe
double Pz; //przecizenie pionowe
} par_lotu;
const g=9.81; //przyspieszenie ziemskie w m/s
const p_wys_z=61.2; //poczatkowa wysokosc nad lotniskiem : TAWS 37
double Czas_l = 16; //czas lotu do analizy w sek
double L_TAWS_37 = 1935; //poczatkowa odleglosc od lotniska TAWS 37
const double predkosc_Vx = 79.43;//predkosc w średnia pomiędzy TAWS-37 a TAWS-38
double predkosc_Vz =-7.64; // predkość pionowa poczatkowa
par_lotu tab_p[Max_pr+1]; //tablica wynikowa parametrow
double przesuniecie_t; //przesuniecie czasowe wykresu przeciazen
double delta_k;
const int dlz =120; // dlugośc nazwy zbioru wynikowego
char nazwa_zb_[dlz+1]; // nazwa zbioru wynikowego
str_zero(nazwa_zb_, dlz); // zerowanie nazwy zbioru
char *nazwa_zb; //deklaracja
nazwa_zb = &nazwa_zb_[0]; //inicjalizacja
//podanie trzech kluczowych parametrow :
//poczatkowa predkosc wznoszenia, przesuniecie czasu wykresu przeciazen
cout << data_czas() <<" START PROGRAMU TAWS-37-38 "<< endl;
//cout << endl <<"Podaj poczatkowa predkosc pionowa (-7.64 m/s) : ";
//cin >> predkosc_Vz;
//cout << endl;
cout << endl <<"Podaj przesyniecie czasu (-5s do +2 s) : ";
cin >> przesuniecie_t;
cout << endl;
float delta_t=Czas_l/Max_pr; //wielkosc dyskretyzacji czasu w sek.
nazwa_zb = nazwa_zbioru(nazwa_zb, Czas_l, predkosc_Vz,przesuniecie_t);
cout <<endl <<" Wyniki w zbiorze : " << nazwa_zb << endl;
zb_wyniki.open(nazwa_zb, ios::trunc | ios::in | ios::out);
if (zb_wyniki==NULL)
{ cout <<" Blad otwarcia zbioru "<< nazwa_zb << endl;
exit;
};
zb_wyniki << data_czas() <<" START PROGRAMU moment_obrotu_s " << endl;
//zerowanie tablicy prubek iteracji
int i;
for (i = 0; i <= Max_pr; i++) {
tab_p[i].czas=0;
tab_p[i].Vx=0;
tab_p[i].Vz=0;
tab_p[i].Lx=0;
tab_p[i].Lz=0;
tab_p[i].Az=0;
tab_p[i].Pz=0;
};
tab_p[0].Lx= L_TAWS_37;
tab_p[0].Lz= p_wys_z; //wartosc poczatkowa wysokosci
tab_p[0].Vx= predkosc_Vx; //wartosc poczatkowa predkości poziomej
tab_p[0].Vz= predkosc_Vz; //wartosc poczatkowa prdkosci pionowej (wznoszenia)
def_przeciazenie_p();
// główna petala iteracyjna wyliczająca prodkosc i polozenie
// samolotu przez zadany czas lotu
float kor=0.999;
//=========Glowna===petla===START=========================================
for (i = 0; i < Max_pr; i++)
{
//--czas--------------
tab_p[i+1].czas = tab_p[i].czas + delta_t; //uplyw czasy jednostajny
tab_p[i+1].Vx = tab_p[i].Vx; //--predkość-pozioma--
tab_p[i+1].Lx = tab_p[i].Lx - tab_p[i].Vx * delta_t; //--droga-pozioma-----
//przyspieszenie--pionowe--w : m/s
tab_p[i].Pz = przeciazenie(tab_p[i].czas + przesuniecie_t)* kor;
tab_p[i].Az = ( (przeciazenie(tab_p[i].czas + przesuniecie_t)*kor) - 1) * g;
//predkość pionowa wznoszenia
tab_p[i+1].Vz = tab_p[i].Vz + tab_p[i].Az * delta_t;
// wysokosc pionowa
tab_p[i+1].Lz = tab_p[i].Lz + tab_p[i].Vz * delta_t;
}; //==========KONIEC==glownej===petli==========================
//----WYPLUWAMY---DANE---------------------------------------------------
zb_wyniki <<"Ilosc prubek iteracji = "<< Max_pr << endl;
zb_wyniki <<"Czas lotu do analizy = "<< Czas_l << endl;
zb_wyniki <<"predkosc poczatkowa pionowa Vz m/s = "<< predkosc_Vz << endl;
zb_wyniki <<"przesuniecie czasu (s) = "<< przesuniecie_t << endl;
zb_wyniki <<"korekcja odczytu przeciazen z wykresu kor ="<< kor << endl << endl;
for (i = 0; i <= Max_pr; i++)
{
if ((i % 10)==0) { nagluwek(); };
zb_wyniki << i;
zb_wyniki.width(16);
zb_wyniki << tab_p[i].czas;
zb_wyniki.width(16);
zb_wyniki << tab_p[i].Pz<<" g";
zb_wyniki.width(12);
zb_wyniki << tab_p[i].Vx;
zb_wyniki.width(16);
zb_wyniki << tab_p[i].Vz;
zb_wyniki.width(16);
zb_wyniki << tab_p[i].Lx;
zb_wyniki.width(16);
zb_wyniki << tab_p[i].Lz;
zb_wyniki.width(8);
zb_wyniki << endl;
};
zb_wyniki << endl <<data_czas() <<" KONIEC PROGRAMU Tor_Lotu " << endl;
zb_wyniki.close();
cout << data_czas() <<" KONIEC PROGRAMU Tor_Lotu" << endl;
cout << "wcisnij `q` i `enter` " ;
cin >> Czas_l;
return 0;
}
Nagłowek biblioteki unit_strings
//---------------------------------------------------------------------------
#ifndef unit_stringsH
#define unit_stringsH
#include <vcl\vcl.h>
#include <strstream.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
//---------------------------------------------------------------------------
char *Radiany_to_stopnie(float rad);
char *Radiany_to_stopnie(float rad, char *zm);
char *nazwa_zbioru(char *str, double czas, double wz, double przes);
//void nazwa_zbioru(char *str_temp double czas, double wz);
//char *nazwa_zbioru(double czas, double wz);
void str_zero (char *s1, int n); //--wstaw-n-zer-do-stringu-bez-adresu
char *data_str();
char *data_str(char *str);
char *godz_str();
char *godz_str(char *str);
char *data_czas();
char *data_czas(char *str);
#endif;
Biblioteka unit_strings :
Unit_string.ccp
//-----------------------------------------------------------------------------
#pragma hdrstop
#pragma package(smart_init)
#include "unit_strings.h"
const int Max_Str = 256;
char str_temp[Max_Str];
char str_temp1[Max_Str]; //zmienna stringowa
//----radiany---to--stopnie------------------------------
char *Radiany_to_stopnie(float rad)
{
float st_r = (rad/(2*3.14))*360;
int st = st_r / 1;
float m_r = (st_r - st) * 60;
int m = m_r / 1;
float s_r = (m_r - m) *60;
int s = s_r / 1;
sprintf(str_temp,"%03d:%02d:%02d",st,m,s);
return str_temp;
};
//------------------------------------------------------------
char *Radiany_to_stopnie(float rad, char *zm)
{
float st_r = (rad/(2*3.14))*360;
int st = st_r / 1;
float m_r = (st_r - st) * 60;
int m = m_r / 1;
float s_r = (m_r - m) *60;
int s = s_r / 1;
sprintf(zm,"%03d:%02d:%02d",st,m,s);
return zm;
};
//-----------------------------------------------------------------------------
void str_zero (char *s1, int n) //--wstaw-n-zer-do-stringu---bez-adresu
{
int i;
char *zx;
zx=s1;
if (n>=0)
{
for (i=0; i<n; i++)
{
*zx=char(0);
zx++;
}
}
return ;
};
//--podaj-date-jako-string-temp--------------------------
char *data_str()
{
struct date d;
memset(str_temp,0,Max_Str);
getdate(&d);
sprintf(str_temp,"%4d-%02d-%02d", d.da_year, d.da_mon, d.da_day);
return str_temp;
};
//--podaj_date-jako-string----------------------------------
char *data_str(char *str)
{
struct date d;
getdate(&d);
sprintf(str,"%4d-%02d-%02d", d.da_year, d.da_mon, d.da_day);
return str;
};
//--------podaj-czas-jako--string-temp---------------------
char *godz_str()
{
struct time t;
memset(str_temp,0,Max_Str);
gettime(&t);
sprintf(str_temp,"%02d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec);
return str_temp;
};
//--------podaj-czas-jako--string---------------------------
char *godz_str(char *str)
{
struct time t;
gettime(&t);
sprintf(str,"%02d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec);
return str;
};
//---podaj-data--czas--jako--string-temp-------------------
char *data_czas()
{
char dat[11], czas[9];
sprintf(str_temp,"%10s %8s ", data_str(dat), godz_str(czas) );
// cout << str_temp << endl;
return str_temp;
};
//---podaj-data--czas--jako--string------------------------
char *data_czas(char *str)
{
char dat[11], czas[9];
sprintf(str,"%10s %8s ", data_str(dat), godz_str(czas) );
// cout << str << endl;
return str;
};
char *nazwa_zbioru(char *str, double czas, double wz, double przes)
{
int w = czas;
int re = (czas-w)*10;
int wzn = wz;
int re_w = (wz-wzn) *10;
int prz = przes;
int w_prz = (przes-prz) * 10;
sprintf(str,"TAWS37-38__%2d_%1d_czas__%1d_%2d_wznoszenie__%2d_%1d_przez.txt", w, re, wzn, re_w, prz, w_prz);
return str;
};
Program napisany jak najprściej (specjalnie nie obiektowo)
mozna potestować rózne warianty,
np/ wystartować z najnizszego punktu, według oficjalnej komisji
i zobaczyć wyniki...
Inne tematy w dziale Technologie