Add support for true airspeed (TAS) in IGC files.
This commit is contained in:
parent
e680caa518
commit
753edec486
|
@ -168,7 +168,7 @@ $gpi{'qnh'} = 1013.25; # just to avoid an error if the pressure plot is issued
|
|||
# these are the data files used for Gnuplot
|
||||
@clearlist=qw(zyl.dat speed.dat press.dat plot.bat vario.dat gpsvario.dat deltah.dat
|
||||
baro.dat gpsalt.dat 3d.dat lonproj.dat latproj.dat befehl.dat
|
||||
km.dat lonlat.dat enl.dat ias.dat iashisto.dat shisto.dat vhisto.dat
|
||||
km.dat lonlat.dat enl.dat ias.dat tas.dat iashisto.dat tashisto.dat shisto.dat vhisto.dat
|
||||
vhistogps.dat plot.gpl plot.bat barohisto.dat gpshisto.dat wind.dat sat.dat tmp.png);
|
||||
|
||||
# ===16=== is this all needed... socket connection!!!
|
||||
|
@ -553,12 +553,15 @@ sub oeffnen { ### open a File
|
|||
@TASK=();
|
||||
@ENL=(); #noise level
|
||||
@IAS=(); #indicated airspeed
|
||||
@TAS=(); #true airspeed
|
||||
@SIU=(); # satellites in used
|
||||
@FXA=(); # hor/vertical accuracy
|
||||
@VXA=();
|
||||
@RPM=();
|
||||
$IAS_max=-10000;
|
||||
$IAS_min=100000;
|
||||
$TAS_max=-10000;
|
||||
$TAS_min=100000;
|
||||
@ASPEED=();
|
||||
|
||||
# $ASPEED_max=-10000;
|
||||
|
@ -586,6 +589,8 @@ sub oeffnen { ### open a File
|
|||
# I-extensions to the B-record
|
||||
$IASEXISTS = "no";
|
||||
$IASLENGTH = 0;
|
||||
$TASEXISTS = "no";
|
||||
$TASLENGTH = 0;
|
||||
$ENLEXISTS = "no";
|
||||
$ENLLENGTH = 0;
|
||||
$SIUEXISTS = "no";
|
||||
|
@ -643,7 +648,7 @@ sub oeffnen { ### open a File
|
|||
$IASSTART = $1 - 2;
|
||||
$IASLENGTH = $2 - $1 +1;
|
||||
$IASEXISTS = "yes";
|
||||
}
|
||||
}
|
||||
if ($izeile =~/(\d{2})(\d{2})SIU/) {
|
||||
$SIUSTART = $1 - 2;
|
||||
$SIULENGTH = $2 - $1 +1;
|
||||
|
@ -659,6 +664,11 @@ sub oeffnen { ### open a File
|
|||
$VXALENGTH = $2 - $1 +1;
|
||||
$VXAEXISTS = "yes";
|
||||
}
|
||||
if ($izeile =~/(\d{2})(\d{2})TAS/) {
|
||||
$TASSTART = $1 - 2;
|
||||
$TASLENGTH = $2 -$1 +1;
|
||||
$TASEXISTS = "yes";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -713,6 +723,12 @@ sub oeffnen { ### open a File
|
|||
push(@IAS, "0");
|
||||
}
|
||||
|
||||
if ($TASEXISTS eq "yes") {
|
||||
push(@TAS, substr($FIX[$z], $TASSTART, $TASLENGTH));
|
||||
} else {
|
||||
push(@TAS, "0");
|
||||
}
|
||||
|
||||
if ($SIUEXISTS eq "yes") {
|
||||
push(@SIU, substr($FIX[$z], $SIUSTART, $SIULENGTH));
|
||||
} else {
|
||||
|
@ -856,6 +872,11 @@ sub oeffnen { ### open a File
|
|||
( ( (($IAS[$i-1]/3.6)**2) - ($IAS[$i]/3.6)**2) / 19.62) ) / ($delta_time*3600);
|
||||
push(@compVARIO,$compvario);
|
||||
|
||||
} elsif ($TASEXISTS eq "yes") { ## XXX is this necessary for TAS?
|
||||
my $compvario = ( ($BARO[$i]-$BARO[$i-1]) -
|
||||
( ( (($TAS[$i-1]/3.6)**2) - ($TAS[$i]/3.6)**2) / 19.62) ) / ($delta_time*3600);
|
||||
push(@compVARIO,$compvario);
|
||||
|
||||
} elsif ($config{'te_vario_fallback'}) { # ist das hier die richtige speed?
|
||||
my $compvario = ( ($BARO[$i]-$BARO[$i-1]) -
|
||||
( ( (($nonISPEED[$i-1]/3.6)**2) - ($nonISPEED[$i]/3.6)**2) / 19.62) ) / ($delta_time*3600);
|
||||
|
@ -875,14 +896,14 @@ sub oeffnen { ### open a File
|
|||
push(@nonISPEED, 0);
|
||||
push(@nonIVARIO, 0);
|
||||
push(@nonIVARIOGPS, 0);
|
||||
if ($IASEXISTS eq "yes" || $config{'te_vario_fallback'} == 1) {
|
||||
if ($IASEXISTS eq "yes" || $TASEXISTS eq "yes" || $config{'te_vario_fallback'} == 1) {
|
||||
push(@compVARIO,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# warning
|
||||
if ($IASEXISTS ne "yes" && $config{'te_vario_fallback'} == 1 && $config{'te_warning'})
|
||||
if (($IASEXISTS ne "yes" && $TASEXISTS ne "yes") && $config{'te_vario_fallback'} == 1 && $config{'te_warning'})
|
||||
{Errorbox("total energy compensation was calculated from gps groundspeed!\nTo turn off this warning set te_warning = 0.\nAlso see te_vario_fallback");}
|
||||
|
||||
# Maximum/minimum height:
|
||||
|
@ -908,6 +929,7 @@ sub oeffnen { ### open a File
|
|||
open (KM,">${pfadftmp}km.dat");
|
||||
open (ENL, ">${pfadftmp}enl.dat");
|
||||
open (IAS, ">${pfadftmp}ias.dat");
|
||||
open (TAS, ">${pfadftmp}tas.dat");
|
||||
open (SAT, ">${pfadftmp}sat.dat");
|
||||
|
||||
# ----------------- LOOP over all data-records (fixes) --------------------
|
||||
|
@ -943,6 +965,7 @@ sub oeffnen { ### open a File
|
|||
}
|
||||
print ENL $DECTIME[$i], " ", $ENL[$i], " ", $RPM[$i], "\n";
|
||||
print IAS $DECTIME[$i], " ", $IAS[$i],"\n";
|
||||
print TAS $DECTIME[$i], " ", $TAS[$i],"\n";
|
||||
print SPACE $DECLON[$i]," ",$DECLAT[$i]," ",$BARO[$i]," ",$GPSALT[$i],"\n";
|
||||
print LATPROJ $DECLAT[$i]," ",$BARO[$i]," ",$GPSALT[$i],"\n";
|
||||
print LONPROJ $DECLON[$i]," ",$BARO[$i]," ",$GPSALT[$i],"\n";
|
||||
|
@ -968,6 +991,9 @@ sub oeffnen { ### open a File
|
|||
$IAS_max = $IAS[$i] if ($IAS[$i] > $IAS_max);
|
||||
$IAS_min = $IAS[$i] if ($IAS[$i] < $IAS_min);
|
||||
|
||||
$TAS_max = $TAS[$i] if ($TAS[$i] > $TAS_max);
|
||||
$TAS_min = $TAS[$i] if ($TAS[$i] < $TAS_min);
|
||||
|
||||
$nonIVARIO_max = $nonIVARIO[$i] if ($nonIVARIO[$i] > $nonIVARIO_max);
|
||||
$nonIVARIO_min = $nonIVARIO[$i] if ($nonIVARIO[$i] < $nonIVARIO_min);
|
||||
|
||||
|
@ -994,6 +1020,7 @@ sub oeffnen { ### open a File
|
|||
close (LONLAT);
|
||||
close (ENL);
|
||||
close (IAS);
|
||||
close (TAS);
|
||||
close (KM);
|
||||
close (SAT);
|
||||
|
||||
|
@ -1010,6 +1037,8 @@ sub oeffnen { ### open a File
|
|||
print " $nonISPEED_min \n";#= $nonISPEED[$i] if ($nonISPEED[$i] < $nonISPEED_min);
|
||||
print "IAS $IAS_max \n";#= $IAS[$i] if ($IAS[$i] > $IAS_max);
|
||||
print " $IAS_min \n";#= $IAS[$i] if ($IAS[$i] < $IAS_min);
|
||||
print "TAS $TAS_max \n";#= $TAS[$i] if ($TAS[$i] > $TAS_max);
|
||||
print " $TAS_min \n";#= $TAS[$i] if ($TAS[$i] < $TAS_min);
|
||||
print "nIV $nonIVARIO_max \n";#= $nonIVARIO[$i] if ($nonIVARIO[$i] > $nonIVARIO_max);
|
||||
print " $nonIVARIO_min \n";#= $nonIVARIO[$i] if ($nonIVARIO[$i] < $nonIVARIO_min);
|
||||
print "nIVgps $nonIVARIOGPS_max \n";#= $nonIVARIOGPS[$i] if ($nonIVARIOGPS[$i] > $nonIVARIOGPS_max);
|
||||
|
@ -1098,6 +1127,41 @@ sub oeffnen { ### open a File
|
|||
}
|
||||
close (ASHISTO);
|
||||
|
||||
### AIRSPEED HISTOGRAM
|
||||
# initialize arrays
|
||||
@speedBEREICH=();
|
||||
@speedHISTO=();
|
||||
$i = 0;
|
||||
|
||||
# initialize the histo-arrays
|
||||
for (my $bereich=$TAS_min; $bereich <= $TAS_max; $bereich+=$histo_intervall) {
|
||||
push(@speedHISTO,0);
|
||||
push(@speedBEREICH,$bereich);
|
||||
}
|
||||
|
||||
# summieren der intervalle
|
||||
for (my $z=$starttimeindex ; $z < $landtimeindex; $z++) {
|
||||
my $index = int(($TAS[$z] - $TAS_min ) / $histo_intervall);
|
||||
|
||||
#print "$index \n";
|
||||
if ($index >= 0 && $index < (($TAS_max-$TAS_min)/$histo_intervall)) {
|
||||
|
||||
#print "if $index\n";
|
||||
$speedHISTO[$index]+= $DECTIME[$z+1]-$DECTIME[$z];
|
||||
}
|
||||
}
|
||||
|
||||
#output
|
||||
open (ASHISTO,">${pfadftmp}tashisto.dat");
|
||||
|
||||
#output in % of flighttime!
|
||||
for (my $z=0; $z < $#speedHISTO; $z++) {
|
||||
|
||||
#print "$z $#speedHISTO \n";
|
||||
print ASHISTO $speedBEREICH[$z]+($histo_intervall/2)." ".(($speedHISTO[$z]/$decflighttime)*100)."\n";
|
||||
}
|
||||
close (ASHISTO);
|
||||
|
||||
### VARIO HISTO BARO
|
||||
|
||||
my @varioBEREICH=();
|
||||
|
@ -2498,6 +2562,8 @@ sub FlightView {
|
|||
|
||||
$menu_plot2d->command(-label=>"Indicated air speed",-command=>sub{$com1="set ylabel \"Indicated Airspeed [$config{'speed_unit_name'}]\" \n set xlabel \"time \" \n plot";$com2="\'${pfadftmp}ias.dat\' using (\$1):(\$2*$config{'speed_unit_factor'}) title \"Indicated Airspeed\" ".$config{'gnuplot_draw_style'}; Ausgabe("2d");});
|
||||
|
||||
$menu_plot2d->command(-label=>"True air speed",-command=>sub{$com1="set ylabel \"True Airspeed [$config{'speed_unit_name'}]\" \n set xlabel \"time \" \n plot";$com2="\'${pfadftmp}tas.dat\' using (\$1):(\$2*$config{'speed_unit_factor'}) title \"True Airspeed\" ".$config{'gnuplot_draw_style'}; Ausgabe("2d");});
|
||||
|
||||
$menu_plot2d->command(-label=>"Engine noise level / RPM",-command=>sub{$com1="set ylabel \"Noise Level / RPM\" \n set xlabel \"time \" \n plot";
|
||||
$com2="\'${pfadftmp}enl.dat\' title \"Engine noise level\" ".$config{'gnuplot_draw_style'}.", \'${pfadftmp}enl.dat\' using 1:3 title \"RPM\" ".$config{'gnuplot_draw_style'};
|
||||
Ausgabe("2d");});
|
||||
|
@ -2527,6 +2593,8 @@ sub FlightView {
|
|||
|
||||
$menu_plot2d->command(-label=>"Indicated airspeed histogram", -command=>sub{$com1="set nokey\n set ylabel \"% of flighttime\" \n set xlabel \"Indicated Airspeed [$config{'speed_unit_name'}]\" \n plot";$com2="\'${pfadftmp}iashisto.dat\' using (\$1*$config{'speed_unit_factor'}):(\$2) with boxes fs solid 1 "; Ausgabe("2d");});
|
||||
|
||||
$menu_plot2d->command(-label=>"True airspeed histogram", -command=>sub{$com1="set nokey\n set ylabel \"% of flighttime\" \n set xlabel \"True Airspeed [$config{'speed_unit_name'}]\" \n plot";$com2="\'${pfadftmp}tashisto.dat\' using (\$1*$config{'speed_unit_factor'}):(\$2) with boxes fs solid 1 "; Ausgabe("2d");});
|
||||
|
||||
$menu_plot2d->command(-label=>"Accuracy",-command=>sub{$com1="set ylabel \"Position Accuracy [$config{'altitude_unit_name'}]\" \n set xlabel \"time \" \n plot";
|
||||
$com2="\'${pfadftmp}sat.dat\' using 1:(\$3*$config{'altitude_unit_factor'}) title \"Horizontal Accuracy\" $config{'gnuplot_draw_style'}, \'${pfadftmp}sat.dat\' using 1:(\$4*$config{'altitude_unit_factor'}) title \"Vertical Accuracy\" $config{'gnuplot_draw_style'} "; Ausgabe("2d");});
|
||||
|
||||
|
@ -4225,7 +4293,8 @@ sub FVWausg {
|
|||
|
||||
# formatted strings for output
|
||||
my $speed = sprintf("%.0f",$nonISPEED[$nr]*$config{'speed_unit_factor'});
|
||||
my $aspeed = sprintf("%.0f",$IAS[$nr]*$config{'speed_unit_factor'});
|
||||
my $iaspeed = sprintf("%.0f",$IAS[$nr]*$config{'speed_unit_factor'});
|
||||
my $taspeed = sprintf("%.0f",$TAS[$nr]*$config{'speed_unit_factor'});
|
||||
|
||||
# in GPS-mode IVARIO arrays are swapped with GPS arrays
|
||||
my $vario = sprintf("%.2f", $nonIVARIO[$nr]*$config{'vertical_speed_unit_factor'});
|
||||
|
@ -4277,7 +4346,7 @@ sub FVWausg {
|
|||
}
|
||||
|
||||
$fvwtext = "Coordinates: $format_lat $format_lon Time (UTC): $htime No.: $nr $altmode_txt: $alt $config{'altitude_unit_name'} GPS: $gpsalt $config{'altitude_unit_name'}\nPressure $press hPa pO2 $opress hPa$pressline\n";
|
||||
$fvwtext.= "Groundspeed: $speed $config{'speed_unit_name'} Airspeed: $aspeed $config{'speed_unit_name'} Heading: $heading";
|
||||
$fvwtext.= "Groundspeed: $speed $config{'speed_unit_name'} IAirspeed: $iaspeed $config{'speed_unit_name'} TAirspeed: $taspeed $config{'speed_unit_name'} Heading: $heading";
|
||||
|
||||
if ($SIUEXISTS eq "yes") {
|
||||
$fvwtext .= " Sats used: $SIU[$nr]";
|
||||
|
@ -4777,7 +4846,13 @@ sub statistik {
|
|||
$cum_climb += $BARO[$z+1]-$BARO[$z] if ($BARO[$z+1]-$BARO[$z] > 0);
|
||||
$cum_sink += $BARO[$z+1]-$BARO[$z] if ($BARO[$z+1]-$BARO[$z] < 0);
|
||||
|
||||
my $diff = $IAS[$z] - (($nonISPEED[$z]+$nonISPEED[$z+1])/2) ;
|
||||
my $diff;
|
||||
if ($TASEXISTS eq "yes") {
|
||||
$diff = $TAS[$z] - (($nonISPEED[$z]+$nonISPEED[$z+1])/2) ;
|
||||
} else {
|
||||
$diff = $IAS[$z] - (($nonISPEED[$z]+$nonISPEED[$z+1])/2) ;
|
||||
};
|
||||
|
||||
|
||||
my $kurs = GPLIGCfunctions::kurs($DECLAT[$z-1], $DECLON[$z-1], $DECLAT[$z+1], $DECLON[$z+1]);
|
||||
my $roundk = int($kurs+0.5);
|
||||
|
|
Loading…
Reference in New Issue