Changeset 9:3dac12e8914d for src/acft.py


Ignore:
Timestamp:
02/05/12 13:42:53 (12 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
hg-Phase:
(<MercurialRepository 1 'hg:/home/ivaradi/mlx/hg' '/'>, 'public')
Message:

Flare calculations are handled and added some other printouts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/acft.py

    r8 r9  
    2121        self._flight = flight
    2222        self._aircraftState = None
     23       
     24        self._maxVS = -10000.0
     25        self._minVS = 10000.0
    2326
    2427        self._checkers = []
    2528
    2629        self._checkers.append(checks.StageChecker())
     30        self._checkers.append(checks.TakeOffLogger())
    2731
    2832        self._checkers.append(checks.AltimeterLogger())
     
    4145        self._checkers.append(checks.GearsLogger())
    4246
     47        self._checkers.append(checks.CruiseSpeedLogger())
     48
    4349    @property
    4450    def type(self):
     
    6874                          self._aircraftState, aircraftState)
    6975
     76        self._maxVS = max(self._maxVS, aircraftState.vs)
     77        self._minVS = min(self._minVS, aircraftState.vs)
     78
    7079        self._aircraftState = aircraftState
    7180   
     
    7382        """Set the given stage as the new one and do whatever should be
    7483        done."""
    75         self._flight.setStage(aircraftState.timestamp, newStage)
    76 
    77     def flare(self):
    78         """Called when it is detected that we are during flare.
     84        if self._flight.setStage(aircraftState.timestamp, newStage):
     85            if newStage==const.STAGE_PUSHANDTAXI:
     86                self.logger.message(aircraftState.timestamp, "Block time start")
     87                self.logFuel(aircraftState)
     88                self.logger.message(aircraftState.timestamp,
     89                                    "Zero-fuel weight: %.0f kg" % (aircraftState.zfw))
     90            elif newStage==const.STAGE_TAKEOFF:
     91                self.logger.message(aircraftState.timestamp, "Flight time start")
     92                self.logger.message(aircraftState.timestamp,
     93                                    "Takeoff weight: %.0f kg, MTOW: %.0f kg" % \
     94                                    (aircraftState.grossWeight, self.mtow))
     95                self.logger.message(aircraftState.timestamp,
     96                                    "Wind %03.0f degrees at %.0f knots" % \
     97                                    (aircraftState.windDirection,
     98                                     aircraftState.windSpeed))
     99            elif newStage==const.STAGE_TAXIAFTERLAND:
     100                self.logger.message(aircraftState.timestamp, "Flight time end")
     101                self.logFuel(aircraftState)
     102                self.logger.message(aircraftState.timestamp,
     103                                    "Landing weight: %.0f kg, MLW: %.0f" % \
     104                                    (aircraftState.grossWeight, self.mlw))
     105                self.logger.message(aircraftState.timestamp,
     106                                    "Vertical speed range: %.0f..%.0f feet/min" % \
     107                                    (self._maxVS, self._minVS))
     108            elif newStage==const.STAGE_PARKING:
     109                self.logger.message(aircraftState.timestamp, "Block time end")
     110
     111    def prepareFlare(self):
     112        """Called when it is detected that we will soon flare.
    79113
    80114        On the first call, it should start monitoring some parameters more
    81115        closely to determine flare time."""
    82         pass
     116        self.flight.simulator.startFlare()
     117
     118    def flareStarted(self, windSpeed, windDirection, visibility,
     119                     flareStart, flareStartFS):
     120        """Called when the flare has started."""
     121        self.logger.message(self._aircraftState.timestamp, "The flare has begun")
     122        self.logger.message(self._aircraftState.timestamp,
     123                            "Wind %03.0f degrees at %.0f knots" % \
     124                            (windDirection, windSpeed))
     125        self.logger.message(self._aircraftState.timestamp,
     126                            "Visibility: %.0f metres" % (visibility,))
     127        self.logger.message(self._aircraftState.timestamp,
     128                            "Altimeter setting: %.0f hPa" % \
     129                            (self._aircraftState.altimeter,))
     130        self.flight.flareStarted(flareStart, flareStartFS)
     131         
     132    def flareFinished(self, flareEnd, flareEndFS, tdRate, tdRateCalculatedByFS,
     133                      ias, pitch, bank, heading):
     134        """Called when the flare has finished."""
     135        (flareTimeFromFS, flareTime) = self.flight.flareFinished(flareEnd,
     136                                                                 flareEndFS)
     137        self.logger.message(self._aircraftState.timestamp,
     138                            "Flare time: %.1f s (from %s)" % \
     139                            (flareTime,
     140                             "the simulator" if flareTimeFromFS else "real time",))
     141        self.logger.message(self._aircraftState.timestamp,
     142                            "Touchdown rate: %.0f feet/min" % (tdRate,))
     143        self.logger.message(self._aircraftState.timestamp,
     144                            "Touchdown rate was calculated by the %s" % \
     145                            ("simulator" if tdRateCalculatedByFS else "logger",))
     146        self.logger.message(self._aircraftState.timestamp,
     147                            "Touchdown speed: %.0f knots" % (ias,))
     148        self.logger.message(self._aircraftState.timestamp,
     149                            "Touchdown pitch: %.1f degrees" % (pitch,))
     150        self.logger.message(self._aircraftState.timestamp,
     151                            "Touchdown bank: %.1f degrees" % (bank,))
     152        self.logger.message(self._aircraftState.timestamp,
     153                            "Touchdown heading: %03.0f degrees" % (heading,))
    83154
    84155    def cancelFlare(self):
    85156        """Cancel flare, if it has started."""
    86         pass
     157        self.flight.simulator.cancelFlare()
    87158
    88159    def checkFlightEnd(self, aircraftState):
     
    105176    - n1: left, right
    106177    - reverser: left, right"""
    107     pass
    108 
     178    def __init__(self, flight):
     179        super(Boeing737, self).__init__(flight)
     180        self.gearSpeedLimit = 270
     181        self.flapSpeedLimits = { 1 : 260,
     182                                 2 : 260,
     183                                 5 : 250,
     184                                 10 : 210,
     185                                 15 : 200,
     186                                 25 : 190,
     187                                 30 : 175,
     188                                 40 : 162 }
     189
     190    def logFuel(self, aircraftState):
     191        """Log the amount of fuel"""
     192        self.logger.message(aircraftState.timestamp,
     193                            "Fuel: left=%.0f kg - centre=%.0f kg - right=%.0f kg" % \
     194                            (aircraftState.fuel[1], aircraftState.fuel[0],
     195                             aircraftState.fuel[2]))
     196        self.logger.message(aircraftState.timestamp,
     197                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     198                           
    109199#---------------------------------------------------------------------------------------
    110200
     
    113203    def __init__(self, flight):
    114204        super(B736, self).__init__(flight)
     205        self.dow = 38307
     206        self.mtow = 58328
     207        self.mlw = 54657
     208        self.mzfw = 51482
    115209
    116210#---------------------------------------------------------------------------------------
     
    120214    def __init__(self, flight):
    121215        super(B737, self).__init__(flight)
     216        self.dow = 39250
     217        self.mtow = 61410
     218        self.mlw = 58059
     219        self.mzfw = 54657
    122220
    123221#---------------------------------------------------------------------------------------
     
    127225    def __init__(self, flight):
    128226        super(B738, self).__init__(flight)
     227        self.dow = 42690
     228        self.mtow = 71709
     229        self.mlw = 65317
     230        self.mzfw = 61688
     231
     232#---------------------------------------------------------------------------------------
     233
     234class B738Charter(B738):
     235    """Boeing 737-800 aircraft used for charters."""
     236    def __init__(self, flight):
     237        super(B738Charter, self).__init__(flight)
     238        self.mtow = 77791
    129239
    130240#---------------------------------------------------------------------------------------
     
    134244    def __init__(self, flight):
    135245        super(B733, self).__init__(flight)
     246        self.dow = 32700
     247        self.mtow = 62820
     248        self.mlw = 51700
     249        self.mzfw = 48410
    136250
    137251#---------------------------------------------------------------------------------------
     
    141255    def __init__(self, flight):
    142256        super(B734, self).__init__(flight)
     257        self.dow = 33200
     258        self.mtow = 68050
     259        self.mlw = 56200
     260        self.mzfw = 53100
    143261
    144262#---------------------------------------------------------------------------------------
     
    148266    def __init__(self, flight):
    149267        super(B735, self).__init__(flight)
     268        self.dow = 31300
     269        self.mtow = 60550
     270        self.mlw = 50000
     271        self.mzfw = 46700
    150272
    151273#---------------------------------------------------------------------------------------
     
    161283    def __init__(self, flight):
    162284        super(DH8D, self).__init__(flight)
     285        self.dow = 17185
     286        self.mtow = 29257
     287        self.mlw = 28009
     288        self.mzfw = 25855
     289        self.gearSpeedLimit = 215
     290        self.flapSpeedLimits = { 5 : 200,
     291                                 10 : 181,
     292                                 15 : 172,
     293                                 35 : 158 }
     294
     295    def logFuel(self, aircraftState):
     296        """Log the amount of fuel"""
     297        self.logger.message(aircraftState.timestamp,
     298                            "Fuel: left=%.0f kg - centre=%.0f kg - right=%.0f kg" % \
     299                            (aircraftState.fuel[1], aircraftState.fuel[0],
     300                             aircraftState.fuel[2]))
     301        self.logger.message(aircraftState.timestamp,
     302                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
    163303
    164304#---------------------------------------------------------------------------------------
     
    172312    - n1: left, right
    173313    - reverser: left, right"""
    174 
     314    def __init__(self, flight):
     315        super(Boeing767, self).__init__(flight)
     316        self.gearSpeedLimit = 270
     317        self.flapSpeedLimits = { 1 : 255,
     318                                 5 : 235,
     319                                 10 : 215,
     320                                 20 : 215,
     321                                 25 : 185,
     322                                 30 : 175 }
     323
     324    def logFuel(self, aircraftState):
     325        """Log the amount of fuel"""
     326        self.logger.message(aircraftState.timestamp,
     327                            "Fuel: left=%.0f kg - centre=%.0f kg - right=%.0f kg" % \
     328                            (aircraftState.fuel[1], aircraftState.fuel[0],
     329                             aircraftState.fuel[2]))
     330        self.logger.message(aircraftState.timestamp,
     331                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     332                           
    175333#---------------------------------------------------------------------------------------
    176334
     
    179337    def __init__(self, flight):
    180338        super(B762, self).__init__(flight)
     339        self.dow = 84507
     340        self.mtow = 175540
     341        self.mlw = 126098
     342        self.mzfw = 114758
    181343
    182344#---------------------------------------------------------------------------------------
     
    186348    def __init__(self, flight):
    187349        super(B763, self).__init__(cflight)
     350        self.dow = 91311
     351        self.mtow = 181436
     352        self.mlw = 137892
     353        self.mzfw = 130635
    188354
    189355#---------------------------------------------------------------------------------------
     
    199365    def __init__(self, flight):
    200366        super(CRJ2, self).__init__(flight)
    201 
     367        self.dow = 14549
     368        self.mtow = 22995
     369        self.mlw = 21319
     370        self.mzfw = 19958
     371        self.gearSpeedLimit = 240
     372        self.flapSpeedLimits = { 8 : 260,
     373                                 20 : 220,
     374                                 30 : 190,
     375                                 45 : 175 }
     376
     377    def logFuel(self, aircraftState):
     378        """Log the amount of fuel"""
     379        self.logger.message(aircraftState.timestamp,
     380                            "Fuel: left=%.0f kg - centre=%.0f kg - right=%.0f kg" % \
     381                            (aircraftState.fuel[1], aircraftState.fuel[0],
     382                             aircraftState.fuel[2]))
     383        self.logger.message(aircraftState.timestamp,
     384                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     385                           
    202386#---------------------------------------------------------------------------------------
    203387
     
    212396    def __init__(self, flight):
    213397        super(F70, self).__init__(flight)
    214 
     398        self.dow = 24283
     399        self.mtow = 38100 # FIXME: differentiate by registration number,
     400                          # MTOW of HA-LMF: 41955
     401        self.mlw = 36740
     402        self.mzfw = 32655
     403        self.gearSpeedLimit = 200
     404        self.flapSpeedLimits = { 8 : 250,
     405                                 15 : 220,
     406                                 25 : 220,
     407                                 42 : 180 }
     408
     409    def logFuel(self, aircraftState):
     410        """Log the amount of fuel"""
     411        self.logger.message(aircraftState.timestamp,
     412                            "Fuel: left=%.0f kg - centre=%.0f kg - right=%.0f kg" % \
     413                            (aircraftState.fuel[1], aircraftState.fuel[0],
     414                             aircraftState.fuel[2]))
     415        self.logger.message(aircraftState.timestamp,
     416                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     417                           
    215418#---------------------------------------------------------------------------------------
    216419
     
    225428    def __init__(self, flight):
    226429        super(DC3, self).__init__(flight)
     430        self.dow = 8627
     431        self.mtow = 11884
     432        self.mlw = 11793
     433        self.mzfw = 11780
     434        self.gearSpeedLimit = 148
     435        self.flapSpeedLimits = { 15 : 135,
     436                                 30 : 99,
     437                                 45 : 97 }
    227438
    228439    def _checkFlightEnd(self, aircraftState):
     
    234445        self._setStage(aircraftState, const.STAGE_END)
    235446
     447    def logFuel(self, aircraftState):
     448        """Log the amount of fuel"""
     449        self.logger.message(aircraftState.timestamp,
     450                            "Fuel: left aux=%.0f kg - left=%.0f kg - right=%.0f kg - right aux=%.0f kg" % \
     451                            (aircraftState.fuel[2], aircraftState.fuel[0],
     452                             aircraftState.fuel[1], aircraftState.fuel[3]))
     453        self.logger.message(aircraftState.timestamp,
     454                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     455                           
    236456#---------------------------------------------------------------------------------------
    237457
     
    247467    def __init__(self, flight):
    248468        super(T134, self).__init__(flight)
    249 
     469        self.dow = 29927
     470        self.mtow = 47600
     471        self.mlw = 43000
     472        self.mzfw = 38500
     473        self.gearSpeedLimit = 216
     474        self.flapSpeedLimits = { 10 : 240,
     475                                 20 : 216,
     476                                 30 : 161 }
     477
     478    def logFuel(self, aircraftState):
     479        """Log the amount of fuel"""
     480        self.logger.message(aircraftState.timestamp,
     481                            "Fuel: left aux=%.0f kg - left tip=%.0f kg - centre= %.0f kg - right tip=%.0f kg - right aux=%.0f kg - external 1=%.0f kg - external 2=%.0f kg" % \
     482                            (aircraftState.fuel[2], aircraftState.fuel[1],
     483                             aircraftState.fuel[0],
     484                             aircraftState.fuel[3], aircraftState.fuel[4],
     485                             aircraftState.fuel[5], aircraftState.fuel[6]))
     486        self.logger.message(aircraftState.timestamp,
     487                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     488                           
    250489#---------------------------------------------------------------------------------------
    251490
     
    260499    def __init__(self, flight):
    261500        super(T154, self).__init__(flight)
    262 
    263 #---------------------------------------------------------------------------------------
     501        self.dow = 53259
     502        self.mtow = 98000
     503        self.mlw = 78000
     504        self.mzfw = 72000
     505        self.gearSpeedLimit = 216
     506        self.flapSpeedLimits = { 15 : 227,
     507                                 28 : 194,
     508                                 45 : 162 }
     509
     510    def logFuel(self, aircraftState):
     511        """Log the amount of fuel"""
     512        self.logger.message(aircraftState.timestamp,
     513                            "Fuel: left aux=%.0f kg - left=%.0f kg - centre=%.0f kg - centre 2=%.0f kg - right=%.0f kg - right aux=%.0f kg" % \
     514                            (aircraftState.fuel[4], aircraftState.fuel[1],
     515                             aircraftState.fuel[0], aircraftState.fuel[3],
     516                             aircraftState.fuel[2], aircraftState.fuel[5]))
     517        self.logger.message(aircraftState.timestamp,
     518                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
     519
     520#---------------------------------------------------------------------------------------
     521
    264522
    265523class YK40(Aircraft):
     
    273531    def __init__(self, flight):
    274532        super(YK40, self).__init__(flight)
     533        self.dow = 9400
     534        self.mtow = 17200
     535        self.mlw = 16800
     536        self.mzfw = 12100
     537        self.gearSpeedLimit = 165
     538        self.flapSpeedLimits = { 20 : 165,
     539                                 35 : 135 }
     540
     541    def logFuel(self, aircraftState):
     542        """Log the amount of fuel"""
     543        self.logger.message(aircraftState.timestamp,
     544                            "Fuel: left=%.0f kg - right=%.0f kg" % \
     545                            (aircraftState.fuel[0], aircraftState.fuel[1]))
     546        self.logger.message(aircraftState.timestamp,
     547                            "Total fuel: %.0f kg" % (sum(aircraftState.fuel),))
    275548
    276549#---------------------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.