/
fuelPlannerDc930.py
executable file
·180 lines (140 loc) · 6.76 KB
/
fuelPlannerDc930.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!/usr/bin/env python3
import sys
from datetime import timedelta
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import Qt
from interfaz import Ui_MainWindow
from bdatos import baseDatos
class FuelPlanner(QtWidgets.QMainWindow):
def __init__(self, parent = None):
super(FuelPlanner,self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.msgBox = QtWidgets.QMessageBox()
#Pesos
self.MRW = 106000
self.MTOW = 105000
self.MZFW = 87000
self.SOW = 61252
self.MLW = 95300
#inicializando aeronave vacia
self.ZFW = 61252
self.TOW = 61252
#inicializando combustible
self.combustible_minimo_vuelo = 8040
self.combustible_maximo = 24649
self.combustible_reserva_final = 4000
self.tiempo_reserva_final = timedelta(minutes = 45)
self.tiempo_extra = timedelta()
self.ui.timeEdit_reserva_final.setTime(QtCore.QTime(0,45))
self.ui.lineEdit_num_app.setText("650")#por defecto una sola app instrumental
self.ui.comboBox_num_app.currentIndexChanged.connect(self.calcular_combustible_apps)
self.ui.spinBox_extra.valueChanged.connect(self.calcular_tiempo_extra)
self.ui.pushButton.clicked.connect(self.calcular)
def calcular_combustible_apps(self):
combustible_app_instrumental = int(self.ui.comboBox_num_app.currentText()) * 650
self.ui.lineEdit_num_app.setText(str(combustible_app_instrumental))
def calcular_tiempo_extra(self):
combustible_extra = self.ui.spinBox_extra.value()
tiempo_extra_minutos = combustible_extra * 60 / 2700
self.tiempo_extra = timedelta(minutes = tiempo_extra_minutos)
tiempo = QtCore.QTime(int(tiempo_extra_minutos/60), tiempo_extra_minutos % 60)
self.ui.timeEdit_extra.setTime(tiempo)
def calcular(self):
#TODO obtener valores desde la interfaz
combustible_extra = self.ui.spinBox_extra.value()
combustible_taxeo = self.ui.spinBox_taxeo.value()
combustible_app_instrumental = int(self.ui.comboBox_num_app.currentText()) * 650 #650 por cada app por instrumentos
distancia_vuelo = self.ui.comboBox_distancia.currentText()
distancia_alterno = self.ui.comboBox_distancia_alterno.currentText()
altura_vuelo = self.ui.comboBox_altura.currentText()
viento_vuelo = self.ui.comboBox_viento.currentText()
carga_vuelo = self.ui.spinBox_payload.value()
self.ZFW = self.SOW + carga_vuelo
plan_ruta = baseDatos.calcularCombustibleRuta(altura_vuelo,distancia_vuelo,viento_vuelo)
if not plan_ruta:
self.msgBox.setWindowTitle('Error')
self.msgBox.setText('Error: The current parameters are out of a JT8D-7 equiped Dc-9-31 flight envelope.')
self.msgBox.setIcon(QtWidgets.QMessageBox.Critical)
self.msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
self.msgBox.exec_()
self.ui.lineEdit_combustible_total.setText("")
self.ui.lineEdit_combustible_ruta.setText("")
self.ui.lineEdit_combustible_alterno.setText("")
return
plan_alterno = baseDatos.calcularCombustibleAlterno(distancia_alterno)
combustible_total = combustible_extra + combustible_taxeo + combustible_app_instrumental + self.combustible_reserva_final + (plan_ruta['combustible']*1000) + plan_alterno['combustible']
tiempo_ruta = plan_ruta['tiempo'].split(":")
tiempo_alterno = plan_alterno['tiempo'].split(":")
tiempo_ruta_delta = timedelta(hours = int(tiempo_ruta[0]), minutes = int(tiempo_ruta[1]))
tiempo_alterno_delta = timedelta(hours = int(tiempo_alterno[0]), minutes = int(tiempo_alterno[1]))
tiempo_total = tiempo_ruta_delta + tiempo_alterno_delta + self.tiempo_extra + self.tiempo_reserva_final
#el manual indica añadir 150 lbs de combustible por cada 5000 libras
#que el LW supere las 85000 libras
LW = self.ZFW + (combustible_total - ((plan_ruta['combustible']*1000) + 300 + 650))
if LW > 85000:
diferencia = LW - 85000
extra = diferencia * 150 / 5000
combustible_total = combustible_total + extra
if combustible_total > self.combustible_maximo:
exceso = int(combustible_total - self.combustible_maximo)
self.msgBox.setWindowTitle('Too much fuel')
self.msgBox.setText("There's an excess of " + str(exceso) + " pounds of fuel.")
self.msgBox.setIcon(QtWidgets.QMessageBox.Critical)
self.msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
self.msgBox.exec_()
self.ui.lineEdit_combustible_total.setText("")
return
if combustible_total < self.combustible_minimo_vuelo:
self.msgBox.setWindowTitle('Low fuel')
self.msgBox.setText("The FAA requires a minimum of " + str(self.combustible_minimo_vuelo) + " for dispatch. Current fuel: " + str(combustible_total))
self.msgBox.setIcon(QtWidgets.QMessageBox.Critical)
self.msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
self.msgBox.exec_()
self.ui.lineEdit_combustible_total.setText("")
return
self.TOW = self.ZFW + combustible_total
#---------------- Modificando interfaz -----------------
#Combustible
self.ui.lineEdit_combustible_ruta.setText(str(plan_ruta['combustible']*1000))
self.ui.lineEdit_combustible_alterno.setText(str(plan_alterno['combustible']))
self.ui.lineEdit_num_app.setText(str(combustible_app_instrumental))
self.ui.lineEdit_combustible_total.setText(str(combustible_total))
#Tiempos
horas, minutos = tiempo_ruta
self.ui.timeEdit_combustible_ruta.setTime(QtCore.QTime(int(horas),int(minutos)))
horas, minutos = tiempo_alterno
self.ui.timeEdit_combustible_alterno.setTime(QtCore.QTime(int(horas),int(minutos)))
minutos = int(tiempo_total.seconds / 60) % 60
horas = int((tiempo_total.seconds / 60) / 60 )
self.ui.timeEdit_tiempo_total.setTime(QtCore.QTime(horas, minutos))
#Pesos
self.ui.lcdNumber_ZFW.display(self.ZFW)
self.ui.lcdNumber_TOW.display(self.TOW)
self.ui.lcdNumber_LW.display(LW)
paletaLcdZfw = self.ui.lcdNumber_ZFW.palette()
paletaLcdTow = self.ui.lcdNumber_TOW.palette()
paletaLcdLw = self.ui.lcdNumber_LW.palette()
if self.TOW > self.MTOW:
paletaLcdTow.setColor(paletaLcdTow.WindowText, QtGui.QColor(255,45,30))
else:
paletaLcdTow.setColor(paletaLcdTow.WindowText, QtGui.QColor(24,28,21))
if self.ZFW > self.MZFW:
paletaLcdZfw.setColor(paletaLcdZfw.WindowText, QtGui.QColor(255,45,30))
else:
paletaLcdZfw.setColor(paletaLcdZfw.WindowText, QtGui.QColor(24,28,21))
if LW > self.MLW:
paletaLcdLw.setColor(paletaLcdLw.WindowText, QtGui.QColor(255,45,30))
else:
paletaLcdLw.setColor(paletaLcdLw.WindowText, QtGui.QColor(24,28,21))
self.ui.lcdNumber_TOW.setPalette(paletaLcdTow)
self.ui.lcdNumber_ZFW.setPalette(paletaLcdZfw)
self.ui.lcdNumber_LW.setPalette(paletaLcdLw)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
aplicacion = FuelPlanner()
x = app.desktop().screenGeometry().center().x()
y = app.desktop().screenGeometry().center().y()
aplicacion.move(x - aplicacion.geometry().width()/2, y - aplicacion.geometry().height()/2)
aplicacion.show()
sys.exit(app.exec_())