Klasse 'Mengengerüst' fertiggestellt, Ausgabe in zwei json Files: Zusammenfassung und detailliert mit allen Werten aller Klassen

This commit is contained in:
Simon Schmutzler
2022-03-23 14:19:12 +01:00
parent 3f76a2cf2f
commit f8d82c3e6d
2 changed files with 532 additions and 34 deletions
+4
View File
@@ -152,3 +152,7 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# rieter ekalk json outputs
json_mengengeruest.json
zusammenfassung_mengengeruest.json
+528 -34
View File
@@ -1,13 +1,14 @@
#from distutils.log import debug
import math
import sys
#from pickle import FALSE
import unittest
import json
JSON_IDENT =5
# Press Umschalt+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
class MG():
def __init__(self, deckblatt:dict, rsm_direct:dict, rsm_fa:dict, flyer_f40:dict, neuenhauser:dict, flyer:dict, puffer:dict, turm:dict):
def __init__(self, deckblatt:dict, rsm_direct:dict, rsm_fa:dict, flyer_f40:dict, neuenhauser:dict, flyer:dict, verbindungsstrecken_w:dict, puffer:dict, turm:dict):
mengen = {
#"SYSTEM":"",
#"RSM":0,
@@ -28,6 +29,12 @@ class MG():
#"Turm":0,
#"Turm_Anzahl_Wendlungen":0,
}
# wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein
# wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein
# wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein
# wenn Puffer, dann mindestens 2 Strecken
# Bypass, wenn mindestens 2 Flyer oder 2 RSM
# Turm: kein Kriterium
self._RSM_Anzahl = deckblatt.get("RSM", 0)
rsm_direct_mengen = rsm_direct
rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt
@@ -51,17 +58,186 @@ class MG():
turm_mengen = turm
turm_mengen["Turm"] = deckblatt.get("Turm", 0)
turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0)
print(turm_mengen["Anzahl_Wendlungen"])
verbindungsstrecken_w_mengen = verbindungsstrecken_w
self._rsm_direct = RSM_direct(rsm_direct_mengen)
self._rsm_fa = RSM_FA(rsm_fa_mengen)
#überprüfe welche Art von System, setze dict der unrelevanten klasse = 0
system = deckblatt.get("SYSTEM", "")
self._rsm_direct = RSM_direct({})
self._rsm_fa = RSM_FA({})
if(system.lower() == "direct"):
self._rsm_direct = RSM_direct(rsm_direct_mengen)
elif(system.lower() == "fa"):
self._rsm_fa = RSM_FA(rsm_fa_mengen)
self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen)
self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen)
self._flyer = Flyer_EJet(flyer_mengen)
self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen)
self._puffer = Puffer(puffer_mengen)
self._turm = Turm(turm_mengen)
def getresult(self):
res = {
"RSM direct": self._rsm_direct._Mengen,
"RSM FA": self._rsm_fa._Mengen,
"Flyer F40 (Electrojet) incl. Putzmaschine": self._flyer_f40._Mengen,
"Putzmaschine (Neuenhauser)": self._neuenhauser._Mengen,
"Flyer (Electrojet)": self._flyer._Mengen,
"Verbindungsstrecken/Wechsel": self._verbindungsstrecken_w._Mengen,
"Puffer": self._puffer._Mengen,
"Turm": self._turm._Mengen,
}
return res
def tojson(self, input:dict):
return json.dumps(input, sort_keys=False, indent=4)
def tofile(self):
json = self.tojson(self.getresult())
with open("json_mengengeruest.json", "w") as file:
file.write(json)
def ztofile(self):
json = self.tojson(self.zusammenfassung())
with open("zusammenfassung_mengengeruest.json", "w") as file:
file.write(json)
def zusammenfassung(self):
#in Excel Zellwerte und Bezüge der Spalte "G" können ignoriert werden
zmengen = {
"Sensor_optisch_Traverse": 0,
"Sensor_induktiv_Spulenalter_(Zug_positionierung)": 0,
"Sensor_Spulenprüfung_voll/leer": 0,
"Seilzugsschalter": 0,
"Drucktaster_automatische_Umfahrung": 0,
"Bedientableau_1-fach": 0,
"Bedientableau_2-fach": 0,
"Bedientableau_14-fach": 0,
"Interface_Putzmaschine": 0,
"Interface_Doffer": 0,
"Weiche": 0,
"Dreifachweiche": 0,
"Wechsel": 0,
"Stopper": 0,
"Meldelampe_Überstrom": 0,
"Hauptschalter_Ein-Meldung": 0,
"Werma_Rundumleuchte_Störung": 0,
"Weiche_nach_PM_(bipolar)": 0,
"Kreuzungsweiche": 0,
"RA_uni": 0,
"RA_uni_abhebbar": 0,
"RA_uni_ohne_SPS-Ansteuerung": 0,
"RA_bi": 0,
"RA_bi_ohne_SPS-Ansteuerung": 0,
"RA_bi_abhebbar": 0,
"Doppelstreckenantrieb": 0,
"gemeinsame_Wendung": 0,
"Gesamtanzahl_Antriebe": 0,
}
zmengen["Sensor_optisch_Traverse"] = self._rsm_direct._Mengen.get("Sensor_optisch_Traverse", 0) +\
self._rsm_fa._Mengen.get("Sensor_optisch_Traverse", 0) +\
self._flyer_f40._Mengen.get("Sensor_optisch_Traverse", 0) +\
self._neuenhauser._Mengen.get("Sensor_optisch_Traverse", 0) +\
self._flyer._Mengen.get("Sensor_optisch_Traverse", 0) +\
self._verbindungsstrecken_w._Mengen.get("Sensor_optisch_Traverse",0) +\
self._verbindungsstrecken_w._Mengen.get("Dreifachweiche",0) * 2 +\
self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche",0) * 4 +\
self._puffer._Mengen.get("Sensor_optisch_Traverse",0) +\
self._turm._Mengen.get("Sensor_optisch_Traverse",0)
zmengen["Sensor_induktiv_Spulenalter_(Zug_positionierung)"] = self._flyer_f40._Mengen.get("Sensor_induktiv_Spulenhalter",0) +\
self._neuenhauser._Mengen.get("Sensorik_Zugpositionierung",0)
zmengen["Sensor_Spulenprüfung_voll/leer"] = self._neuenhauser._Mengen.get("Sensor_WT18_Spulenprüfung_voll/leer",0)
zmengen["Seilzugsschalter"] = self._rsm_fa._Mengen.get("Seilzugsschalter", 0)
zmengen["Drucktaster_automatische_Umfahrung"] = self._rsm_fa._Mengen.get("Mit_Drucktaster", 0)
zmengen["Bedientableau_1-fach"] = self._rsm_fa._Mengen.get("Bedientableau_1-fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1-fach", 0)
zmengen["Bedientableau_2-fach"] = self._rsm_direct._Mengen.get("Bedientableau_2-fach", 0) +\
self._rsm_fa._Mengen.get("Bedientableau_2-fach", 0) +\
self._flyer_f40._Mengen.get("Bedientableau_2-fach", 0) +\
self._neuenhauser._Mengen.get("Bedientableau_2-fach", 0) +\
self._flyer._Mengen.get("Bedientableau_2-fach", 0) +\
self._verbindungsstrecken_w._Mengen.get("Bedientableau_2-fach", 0) +\
self._turm._Mengen.get("Bedientableau_2-fach", 0)
zmengen["Bedientableau_14-fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14-fach", 0)
zmengen["Interface_Putzmaschine"] = self._neuenhauser._Mengen.get("Interface_Putzmaschine", 0)
zmengen["Interface_Doffer"] = self._flyer_f40._Mengen.get("Interface_Doffer", 0) + self._flyer._Mengen.get("Interface_Doffer", 0)
zmengen["Weiche"] = self._rsm_direct._Mengen.get("Weiche", 0) +\
self._rsm_fa._Mengen.get("Weiche", 0) +\
self._flyer_f40._Mengen.get("Weiche", 0) +\
self._neuenhauser._Mengen.get("Weiche", 0) +\
self._flyer._Mengen.get("Weiche", 0) +\
self._verbindungsstrecken_w._Mengen.get("Weiche", 0) +\
self._puffer._Mengen.get("Weiche", 0) +\
self._turm._Mengen.get("Weiche", 0)
zmengen["Dreifachweiche"] = self._rsm_direct._Mengen.get("Weiche_Gemeinsame_Rückstellung", 0) +\
self._flyer_f40._Mengen.get("Dreifachweiche", 0) +\
self._flyer._Mengen.get("Dreifachweiche", 0) #TODO: ist "Weiche_Gemeinsame_Rückstellung" == "Dreifachweiche"?
zmengen["Wechsel"] = self._flyer_f40._Mengen.get("Wechsel", 0) +\
self._flyer._Mengen.get("Wechsel", 0)
zmengen["Stopper"] = self._flyer_f40._Mengen.get("Stopper", 0)
zmengen["Meldelampe_Überstrom"] = self._rsm_direct._Mengen.get("Meldelampe_Überstrom", 0) +\
self._rsm_fa._Mengen.get("Meldelampe_Überstrom", 0) +\
self._flyer_f40._Mengen.get("Meldelampe_Überstrom", 0) +\
self._neuenhauser._Mengen.get("Meldelampe_Überstrom", 0) +\
self._flyer._Mengen.get("Meldelampe_Überstrom", 0) +\
self._puffer._Mengen.get("Meldelampe_Überstrom", 0)
zmengen["Hauptschalter_Ein-Meldung"] = self._rsm_direct._Mengen.get("Hauptschalter_Ein-Meldung", 0) +\
self._rsm_fa._Mengen.get("Hauptschalter_Ein-Meldung", 0) +\
self._flyer_f40._Mengen.get("Hauptschalter_Ein-Meldung", 0) +\
self._neuenhauser._Mengen.get("Hauptschalter_Ein-Meldung", 0) +\
self._flyer._Mengen.get("Hauptschalter_Ein-Meldung", 0) +\
self._puffer._Mengen.get("Hauptschalter_Ein-Meldung", 0)
zmengen["Werma_Rundumleuchte_Störung"] = self._rsm_direct._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
self._rsm_fa._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
self._flyer_f40._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
self._neuenhauser._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
self._flyer._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
self._verbindungsstrecken_w._Mengen.get("Werma_Rundumleuchte_Störung", 0)
zmengen["Weiche_nach_PM_(bipolar)"] = self._flyer_f40._Mengen.get("Weiche_nach_PM_(bipolar)", 0) +\
self._neuenhauser._Mengen.get("Weiche_nach_PM_(bipolar)", 0)
zmengen["Kreuzungsweiche"] = self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche", 0)
zmengen["RA_uni"] = self._verbindungsstrecken_w._Mengen.get("RA_uni", 0) +\
self._flyer_f40._Mengen.get("RA_uni", 0)
zmengen["RA_uni_abhebbar"] = self._flyer_f40._Mengen.get("RA_uni_abhebbar", 0) +\
self._neuenhauser._Mengen.get("RA_uni_abhebbar", 0)
zmengen["RA_uni_ohne_SPS-Ansteuerung"] = self._flyer_f40._Mengen.get("RA_uni_ohne_SPS-Ansteuerung", 0) +\
self._neuenhauser._Mengen.get("RA_uni_ohne_SPS-Ansteuerung", 0) +\
self._verbindungsstrecken_w._Mengen.get("RA_uni_ohne_SPS-Ansteuerung", 0)
zmengen["RA_bi"] = self._rsm_fa._Mengen.get("RRA_bi", 0) +\
self._flyer_f40._Mengen.get("RA_bi", 0) +\
self._flyer._Mengen.get("RA_bi", 0) +\
self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\
self._puffer._Mengen.get("RA_bi", 0) +\
self._turm._Mengen.get("RA_bi", 0)
zmengen["RA_bi_ohne_SPS-Ansteuerung"] = self._rsm_fa._Mengen.get("RRA_bi_ohne_SPS-Ansteuerung", 0) +\
self._flyer_f40._Mengen.get("RRA_bi_ohne_SPS-Ansteuerung", 0) +\
self._flyer._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
self._verbindungsstrecken_w._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
self._turm._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) #TODO: Notation beachten: RA_bi, RRA_bi
zmengen["RA_bi_abhebbar"] = self._rsm_direct._Mengen.get("RA_bi_abhebbar", 0) +\
self._flyer_f40._Mengen.get("RRA_BI_abhebbar", 0) +\
self._flyer._Mengen.get("RA_bi_abhebbar", 0) #TODO: Notation beachten: RA_bi, RRA_bi
zmengen["Doppelstreckenantrieb"] = self._rsm_direct._Mengen.get("Doppelstreckenantrieb", 0) +\
self._flyer_f40._Mengen.get("Doppelstreckenantrieb", 0) +\
self._neuenhauser._Mengen.get("Doppelstreckenantrieb", 0) +\
self._flyer._Mengen.get("Doppelstreckenantrieb", 0) +\
self._verbindungsstrecken_w._Mengen.get("Doppelstreckenantrieb", 0) +\
self._puffer._Mengen.get("Doppelstreckenantrieb", 0)
zmengen["gemeinsame_Wendung"] = self._rsm_direct._Mengen.get("gemeinsame_Wendung", 0) +\
self._rsm_fa._Mengen.get("gemeinsame_Wendung", 0)
zmengen["Gesamtanzahl_Antriebe"] = zmengen.get("RA_uni", 0) +\
zmengen.get("RA_uni_abhebbar", 0) +\
zmengen.get("RA_uni_ohne_SPS-Ansteuerung", 0) +\
zmengen.get("RA_bi", 0) +\
zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
zmengen.get("RA_bi_abhebbar", 0) +\
zmengen.get("Doppelstreckenantrieb", 0)
return zmengen
# RSM_direct:
class RSM_direct():
def __init__(self, anzahl:dict):
@@ -117,6 +293,11 @@ class RSM_direct():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# RSM_FA:
class RSM_FA():
def __init__(self, anzahl:dict):
@@ -129,7 +310,6 @@ class RSM_FA():
"RSM-Einfahrt_Ein-/Beidseitig":False,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_zusätzlich":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Bedientableau_1-fach":0,
"Bedientableau_1-fach_Korrektur":0,
#"Bedientableau_2-fach":0,
@@ -143,7 +323,6 @@ class RSM_FA():
"gemeinsame_Wendung":0,
#"Seilzugschalter":0,
#"Mit_Drucktaster":0,
"Mit_Drucktaster_Korrektur":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
@@ -164,9 +343,9 @@ class RSM_FA():
sensorfaktor_premium = 4
if(anzahl.get("RSM-Einfahrt_Ein-/Beidseitig", False)):
sensorfaktor_beidseitig = 1
self._Mengen["Sensor_optisch_Traverse"] = self._RSM_Anzahl*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) # TODO Korrekturfaktor hier auch anwenden, da in Excel Zelle (C30) nicht grau, wird aber addiert?
self._Mengen["Sensor_optisch_Traverse"] = self._RSM_Anzahl*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0)
self._Mengen["Sensor_optisch_Traverse_zusätzlich"] = anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0)
self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) #TODO: hier auch Korrektur anwenden? Zelle nicht ausgegraut
#hier keine Korrektur, dafür "Zusätzlich" vorgesehen
tableaufaktor_premium = 1
tableaufaktor_beidseitig = 0
@@ -214,9 +393,9 @@ class RSM_FA():
self._Mengen["Seilzugschalter"] = self._RSM_Anzahl * (seilzfaktor_premium + seilzfaktor_getriebe_mitte)
if(anzahl.get("Flex-A_Premium", False)):
self._Mengen["Mit_Drucktaster"] = self._RSM_Anzahl * 8 + anzahl.get("Mit_Drucktaster_Korrektur",0)# TODO + C40 in excel, allerdings gelbe Zelle ohne Bezüge, Korrektur?
self._Mengen["Mit_Drucktaster"] = self._RSM_Anzahl * 8
else:
self._Mengen["Mit_Drucktaster"] = anzahl.get("Mit_Drucktaster_Korrektur",0) # + C40 (s.o.)
self._Mengen["Mit_Drucktaster"] = 0
self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0)
self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
@@ -227,7 +406,12 @@ class RSM_FA():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Flyer_F40_(Electrojet)_incl._Putzmaschine:
class Flyer_F40_EJet_inc_Putz():
def __init__(self, anzahl:dict):
@@ -290,10 +474,6 @@ class Flyer_F40_EJet_inc_Putz():
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0)
self._Mengen["Single-Line_/_Durchfahrt"] = anzahl.get("Single-Line_/_Durchfahrt", False)
self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False)
print(self._Mengen.get("Anzahl_Schienen", 0))
#SensoroptTraverse=WENN(B49="ja";B46*(B47*1)+(B46*5)+C50+(B56*2);B46*(B47*1)+(B46*7)+(B56*2))+C50 TODO: Achtung, hier wird C50 zweimal addiert, wenn Nachpuffer==True
# nachpuffer == True: B46*(B47*1)+(B56*2)+(B46*5)+C50
#else: B46*(B47*1)+(B56*2)+(B46*7)) +C50
sensorfaktor_nachpuffer = 7
if(anzahl.get("Nachpuffer", False)):
sensorfaktor_nachpuffer = 5
@@ -315,7 +495,7 @@ class Flyer_F40_EJet_inc_Putz():
self._Mengen["Weiche_nach_Flyer_(bipolar)_Korrektur"] = anzahl.get("Weiche_nach_Flyer_(bipolar)_Korrektur", 0)
self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0)
self._Mengen["Wechsel"] = anzahl.get("Wechsel", 0)
self._Mengen["Stopper"] = anzahl.get("Stopper", 0) # TODO: Korrekturfaktor überflüssig da manuelle Eingabe?
self._Mengen["Stopper"] = anzahl.get("Stopper", 0)
self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0)
rraunifaktor_durchfahrt = 0
@@ -328,18 +508,18 @@ class Flyer_F40_EJet_inc_Putz():
self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0)
if(anzahl.get("Single-Line_/_Durchfahrt", False)):
self._Mengen["RA_uni_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl # TODO: Korrekturfaktor nur wenn Durchfahrt==False?
self._Mengen["RA_uni_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl
else:
self._Mengen["RA_uni_ohne_SPS-Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS-Ansteuerung_Korrektur", 0)
self._Mengen["RA_uni_ohne_SPS-Ansteuerung_Korrektur"] = anzahl.get("RA_uni_ohne_SPS-Ansteuerung_Korrektur", 0)
if(anzahl.get("Single-Line_/_Durchfahrt", False)): # TODO: =WENN($B$48="nein";$B$46*1;0+C62)+WENN($B$48="ja";$B$46*1;0) -> etwas kompliziert ausgedrückt...
self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
else:
if(anzahl.get("Single-Line_/_Durchfahrt", False)):
self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl
else:
self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
self._Mengen["RRA_BI_abhebbar_Korrektur"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
self._Mengen["RRA_bi"] = anzahl.get("RRA_bi", 0) # TODO: Rote Zelle?
self._Mengen["RRA_bi"] = anzahl.get("RRA_bi", 0)
if(anzahl.get("Single-Line_/_Durchfahrt", False)):
self._Mengen["RRA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RRA_bi_ohne_SPS-Ansteuerung_Korrektur", 0)
@@ -347,9 +527,9 @@ class Flyer_F40_EJet_inc_Putz():
self._Mengen["RRA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl
if(anzahl.get("Single-Line_/_Durchfahrt", False)):
self._Mengen["Doppelstreckenantrieb"] = (self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0))/4 + self._Flyer_Anzahl
self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + self._Flyer_Anzahl
else:
self._Mengen["Doppelstreckenantrieb"] = (self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0))/4 + anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
self._Mengen["RA_bi_abhebbar_(unger._Schiene)"] = anzahl.get("RA_bi_abhebbar_(unger._Schiene)", 0)
@@ -363,6 +543,11 @@ class Flyer_F40_EJet_inc_Putz():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Putzmaschine_(Neuenhauser):
class Putzmaschine_Neuenhauser():
def __init__(self, anzahl:dict):
@@ -415,13 +600,13 @@ class Putzmaschine_Neuenhauser():
self._Mengen["Sensorik_Zugpositionierung"] = self._Putze_Anzahl * 4
self._Mengen["Sensor_WT18_Spulenprüfung_voll/leer"] = self._Putze_Anzahl * 2
self._Mengen["Bedientableau_2-fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2-fach_Korrektur", 0)#=Mengengerüst!B72+Mengengerüst!G72 TODO: ist G72 Korrektur?
self._Mengen["Bedientableau_2-fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2-fach_Korrektur", 0)
self._Mengen["Bedientableau_2-fach_Korrektur"] = anzahl.get("Bedientableau_2-fach_Korrektur", 0)
self._Mengen["Interface_Putzmaschine"] = self._Putze_Anzahl
self._Mengen["Weiche"] = self._Putze_Anzahl * self._Vorpuffer_Anzahl + anzahl.get("Weiche_Korrektur", 0)
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
self._Mengen["Weiche_nach_PM_(bipolar)"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1) # TODO: Wert kann negativ sein...
self._Mengen["Weiche_nach_PM_(bipolar)"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1)
self._Mengen["RA_uni_abhebbar"] = self._Putze_Anzahl + anzahl.get("RA_uni_abhebbar_Korrektur", 0)
self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0)
self._Mengen["RA_uni_ohne_SPS-Ansteuerung"] = self._Putze_Anzahl
@@ -438,6 +623,11 @@ class Putzmaschine_Neuenhauser():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Flyer_(Electrojet):
class Flyer_EJet():
def __init__(self, anzahl:dict):
@@ -454,7 +644,6 @@ class Flyer_EJet():
#"Weiche":0,
"Weiche_Korrektur":0,
#"Weiche_nach_Flyer_(bipolar)":0,
"Weiche_nach_Flyer_(bipolar)_Korrektur":0,
"Dreifachweiche":0,
#"Wechsel":0,
"Wechsel_Korrektur":0,
@@ -486,8 +675,7 @@ class Flyer_EJet():
self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl
self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Schienen_Anzahl + anzahl.get("Weiche_Korrektur", 0)
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
self._Mengen["Weiche_nach_Flyer_(bipolar)"] = self._Flyer_Anzahl # + anzahl.get("Weiche_nach_Flyer_(bipolar)_Korrektur", 0) TODO: Kein Korrekturfaktor?
#self._Mengen["Weiche_nach_Flyer_(bipolar)_Korrektur"] = anzahl.get("Weiche_nach_Flyer_(bipolar)_Korrektur", 0)
self._Mengen["Weiche_nach_Flyer_(bipolar)"] = self._Flyer_Anzahl
self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0)
self._Mengen["Wechsel"] = self._Flyer_Anzahl + anzahl.get("Wechsel_Korrektur", 0)
self._Mengen["Wechsel_Korrektur"] = anzahl.get("Wechsel_Korrektur", 0)
@@ -507,6 +695,10 @@ class Flyer_EJet():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Verbindungsstrecken/_Wechsel:
class Verbindungsstrecken_Wechsel():
def __init__(self, anzahl:dict):
@@ -541,6 +733,11 @@ class Verbindungsstrecken_Wechsel():
self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RA_bi_ohne_SPS-Ansteuerung", 0)
self._Mengen["Doppelstreckenantrieb"] = anzahl.get("Doppelstreckenantrieb", 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Puffer
class Puffer():
def __init__(self, anzahl:dict):
@@ -582,6 +779,11 @@ class Puffer():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# Turm
class Turm():
mengen = {
@@ -605,7 +807,7 @@ class Turm():
self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0)
self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl
self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5 #TODO: kein Korrekturfaktor?
self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5
self._Mengen["Weiche"] = self._Turm_Anzahl*3
self._Mengen["RA_bi"] = self._Turm_Anzahl*2 + anzahl.get("RA_bi_Korrektur", 0)
self._Mengen["RA_bi_Korrektur"] = anzahl.get("RA_bi_Korrektur", 0)
@@ -616,8 +818,47 @@ class Turm():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
#EMO
class EMO():
montagezeiten = {
"Schaltschrank_aufstellen": 6.0, #(h/St)
"Unterverteiler_montieren": 3.0, #(h/St)
"Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h)
"Pritsche_in_RSM_montieren": 21.0,
"Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor)
"Tableau_befestigen_und_anschliessen": 1.0, #(h/St)
"Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St)
"Sensoren_montieren": 0.45, #(h/St)
"Seilzugschalter_installieren": 4.0, #(h/St)
"Blitzleuchte_installieren": 0.5, #(h/St)
"Weiche_Stopper_anschliessen": 0.45, #(h/St)
"Erdung": 0.5, #(h)
}
def __init__(self, anzahl:dict):
#für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt
mengen = {
"Schaltschrank_aufstellen": 0,
"Unterverteiler_montieren": 0,
"Pritsche_montieren_umbauen_demontieren": 0,
"Pritsche_in_RSM_montieren": 0,
"Motor_verdrahten_und_anschliessen": 0,
"Tableau_befestigen_und_anschliessen": 0,
"Schnittstelle_Flyer_Putzmaschine": 0,
"Sensoren_montieren": 0,
"Seilzugschalter_installieren": 0,
"Blitzleuchte_installieren": 0,
"Weiche_Stopper_anschliessen": 0,
"Erdung": 0,
}
self._Mengen = {} #TODO: Formeln...
print(self._Mengen)
class EA():
@@ -1592,7 +1833,7 @@ class TestObjectMethods(unittest.TestCase):
self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl"), 6)
self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl_Schienen"), 5)
#self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_optisch_Traverse"), 80) # TODO: Wenn Nachpuffer == True, dann wird Sensor_optisch_Traverse_Korrektur doppelt addiert
#self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_optisch_Traverse"), 80) # TODO: Wenn Nachpuffer == True, dann wird Sensor_optisch_Traverse_Korrektur doppelt addiert => =WENN(B49="ja";B46*(B47*1)+(B46*5)+(B56*2);B46*(B47*1)+(B46*7)+(B56*2))+C50
self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_induktiv_Spulenhalter"), 14)
self.assertEqual(deckblatt._flyer_f40.anzahl("Bedientableau_2-fach"), 9)
self.assertEqual(deckblatt._flyer_f40.anzahl("Interface_Doffer"), 8)
@@ -1663,7 +1904,12 @@ class TestObjectMethods(unittest.TestCase):
self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26)
self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2-fach"), 4)
'''
self.assertEqual(deckblatt._turm.anzahl("Anzahl"), 2)
self.assertEqual(deckblatt._turm.anzahl("Anzahl_Staustrecken"), 5)
self.assertEqual(deckblatt._turm.anzahl("Weiche"), 6)
self.assertEqual(deckblatt._turm.anzahl("RA_bi"), 9)
self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26)
self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2-fach"), 4)
@@ -1975,5 +2221,253 @@ class TestObjectMethods(unittest.TestCase):
# }
# eas
#if __name__ == '__main__':
# unittest.main()
if __name__ == '__main__':
unittest.main()
# Anzahl der für das Projekt benutzten
Anzahl_MG = {
"SYSTEM":"DIRECT",
"RSM":11,
"Flyer":0,
"Flyer_Puffer":2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine":1,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2,
"Neuenhauser-Putzmaschine":0,
"Neuenhauser-Putzmaschine_Vorpuffer":0,
"Neuenhauser-Putzmaschine_Nachpuffer":0,
"Cason-Putzmaschine":0,
"Cason-Putzmaschine_Vorpuffer":0,
"Cason-Putzmaschine_Nachpuffer":0,
"Puffer":1,
"Anzahl_der_Pufferstrecken_pro_Puffer":2,
"Begegnungsstrecke_Bypass":0,
"Turm":0,
"Turm_Anzahl_Wendlungen":0,
}
rsm_direct_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0, # wird in deckblatt-Klasse berechnet
#"Anzahl_Strecken/RSM":8,
"Sensor_optisch_Traverse":0,
#"Lichtschranke_Traverse":0,
#"Bedientableau_2-fach":0,
"Bedientableau_2-fach_Korrektur":0,
#"Bedientableau_2-fach_Direct":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"Weiche_Gemeinsame_Rückstellung":0,
"Weiche_Gemeinsame_Rückstellung_Korrektur":0,
#"RA_bi_abhebbar":0,
"RA_bi_abhebbar_Korrektur":0,
#"Doppelstreckenantrieb":0,
#"gemeinsame_Wendung":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":0,
}
rsm_fa_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl_RSM":0,
#"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex-A_Premium' sind eine Zelle -> identischer Wert
"Flex-A_Premium":False,
"Getriebe_in_der_Mitte":False,
"RSM-Einfahrt_Ein-/Beidseitig":False,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_zusätzlich":0,
#"Bedientableau_1-fach":0,
"Bedientableau_1-fach_Korrektur":0,
#"Bedientableau_2-fach":0,
"Bedientableau_2-fach_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"RRA_bi":0,
"RRA_bi_Korrektur":0,
"RRA_bi_auf_Haupstrecke":0,
#"RRA_bi_ohne_SPS-Ansteuerung":0,
"gemeinsame_Wendung":0,
#"Seilzugschalter":0,
#"Mit_Drucktaster":0,
"Mit_Drucktaster_Korrektur":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":0,
}
flyer_f40_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0,
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet
#"Anzahl_Schienen":0,
"Single-Line_/_Durchfahrt":False,
"Nachpuffer":False,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Sensor_induktiv_Spulenhalter":0,
"Sensor_induktiv_Spulenhalter_Korrektur":0,
#"Bedientableau_2-fach":0,
"Bedientableau_2-fach_Korrektur":0,
#"Interface_Doffer":0,
"Interface_Doffer_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"Weiche_nach_Flyer_(bipolar)":0,
"Weiche_nach_Flyer_(bipolar)_Korrektur":0,
"Dreifachweiche":0,
"Wechsel":0,
"Stopper":0,
"RA_uni":0,
#"RA_uni_abhebbar":0,
"RA_uni_abhebbar_Korrektur":0,
#"RA_uni_ohne_SPS-Ansteuerung":0,
"RA_uni_ohne_SPS-Ansteuerung_Korrektur":0,
#"RRA_BI_abhebbar":0,
"RRA_BI_abhebbar_Korrektur":0,
"RRA_bi":0,
#"RRA_bi_Korrektur":0,
#"RRA_bi_ohne_SPS-Ansteuerung":0,
"RRA_bi_ohne_SPS-Ansteuerung_Korrektur":0,
#"Doppelstreckenantrieb":0,
"Doppelstreckenantrieb_Korrektur":0,
"RA_bi_abhebbar_(unger._Schiene)":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":0,
}
neuenhauser_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen
#"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen
#"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen
#"Anzahl_Vorstaustrecken":0,
#"Anzahl_Nachstaustrecken":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Sensorik_Zugpositionierung":0,
#"Sensor_WT18_Spulenprüfung_voll/leer":0,
#"Bedientableau_2-fach":0,
"Bedientableau_2-fach_Korrektur":0,
#"Interface_Putzmaschine":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"Weiche_nach_PM_(bipolar)":0,
#"RA_uni_abhebbar":0,
"RA_uni_abhebbar_Korrektur":0,
#"RA_uni_ohne_SPS-Ansteuerung":0,
#"RA_uni_abhebbar_(unger._Sch.)":0,
#"Doppelstreckenantrieb":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":0,
}
flyer_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Flyer":0, # äquivalent zu 'Anzahl'
#"Anzahl_Schienen:":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Sensor_induktiv_Spulenalter_(Zug_positionierung)":0,
#"Bedientableau_2-fach":0,
#"Interface_Doffer":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"Weiche_nach_Flyer_(bipolar)":0,
"Dreifachweiche":0,
#"Wechsel":0,
"Wechsel_Korrektur":0,
#"RA_bi_ohne_SPS-Ansteuerung":0,
#"RA_bi_abhebbar":0,
"RA_bi_abhebbar_Korrektur":0,
"RA_bi":0,
#"Doppelstreckenantrieb":0,
"RA_bi_abhebbar_(unger._Schiene)":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":0,
}
verbindungsstrecken_w_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
"Sensor_optisch_Traverse":0,
"Bedientableau_1-fach":0,
"Bedientableau_2-fach":0,
"Bedientableau_14-fach":0,
"Weiche":0,
"Dreifachweiche":0,
"Kreuzungsweiche":0,
"Werma_Rundumleuchte_Störung":0,
"RA_uni":0,
"RA_uni_ohne_SPS-Ansteuerung":0,
"RA_bi":0,
"RA_bi_ohne_SPS-Ansteuerung":0,
"Doppelstreckenantrieb":0
}
puffer_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Puffer":0, #äquivalent zu Anzahl
#"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken
#"Anzahl_Staustrecken":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
"RA_bi_(ungerade_Schiene)":0,
#"Doppelstreckenantrieb":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein-Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
}
turm_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Turm":0, #äquivalent zu Anzahl
#"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken
#"Anzahl_Staustrecken":0,
#"Sensor_optisch_Traverse":0,
#"Weiche":0,
#"RA_bi":0,
"RA_bi_Korrektur":0,
#"RA_bi_ohne_SPS":0,
"RA_bi_ohne_SPS_Korrektur":0,
#"Bedientableau_2-fach":0,
}
#mg = MG(Anzahl_MG, rsm_direct_eingabe, rsm_fa_eingabe, flyer_f40_eingabe, neuenhauser_eingabe, flyer_eingabe, verbindungsstrecken_w_eingabe, puffer_eingabe, turm_eingabe)
#mg.tofile()
#mg.ztofile()
emo_eingabe = {
"Schaltschrank_aufstellen": 1,
"Unterverteiler_montieren": 4,
"Pritsche_montieren_umbauen_demontieren": 66,
"Pritsche_in_RSM_montieren": 0,
"Motor_verdrahten_und_anschliessen": 97,
"Tableau_befestigen_und_anschliessen": 15,
"Schnittstelle_Flyer_Putzmaschine": 1,
"Sensoren_montieren": 84,
"Seilzugschalter_installieren": 0,
"Blitzleuchte_installieren": 3,
"Weiche_Stopper_anschliessen": 244,
"Erdung": 40,
}
emo = EMO(emo_eingabe)