import math import json import configparser JSON_IDENT = 5 class MG(): def __init__(self, deckblatt:dict, **kwargs): """ kwargs can contain the keys rsm_direct rsm_fa flyer_f40 neuenhauser flyer verbindungsstrecken_w puffer turm """ mengen = { #"SYSTEM":"", #"RSM":0, #"Flyer":2, #"Flyer_Puffer":2, #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":2, #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3, #"Neuenhauser-Putzmaschine":0, #"Neuenhauser-Putzmaschine_Vorpuffer":0, #"Neuenhauser-Putzmaschine_Nachpuffer":0, #"Cason-Putzmaschine":0, #"Cason-Putzmaschine_Vorpuffer":0, #"Cason-Putzmaschine_Nachpuffer":0, #"Puffer":0, #"Anzahl_der_Pufferstrecken_pro_Puffer":0, #"Begegnungsstrecke_Bypass":0, #"Turm":0, #"Turm_Anzahl_Wendlungen":0, } self._deckblatt = deckblatt #self.remove_empty(self._deckblatt) ### Prüfungen: # wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) > 0: if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) < 2: raise Exception("Vorpuffer sollte grösser 1 sein") if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) < 2: raise Exception("Nachpuffer sollte grösser 1 sein") # wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein if deckblatt.get("Neuenhauser-Putzmaschine", 0) > 0: if deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) < 2: raise Exception("Vorpuffer der Neuenhauser sollte grösser 1 sein") if deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) < 2: raise Exception("Nachpuffer der Neuenhauser sollte grösser 1 sein") # wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein if deckblatt.get("Cason-Putzmaschine", 0) > 0: if deckblatt.get("Cason-Putzmaschine_Vorpuffer", 0) < 2: raise Exception("Vorpuffer der Cason sollte grösser 1 sein") if deckblatt.get("Cason-Putzmaschine_Nachpuffer", 0) < 2: raise Exception("Nachpuffer der Cason sollte grösser 1 sein") # wenn Puffer, dann mindestens 2 Strecken if deckblatt.get("Puffer", 0) > 0: if deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) < 2: raise Exception("mind. 2 Strecken sollten im Puffer existieren") # wenn Flyer, dann entweder neuenhauser- oder cason-Putzmaschine if deckblatt.get("Flyer", 0) > 0: if deckblatt.get("Neuenhauser-Putzmaschine", 0) < 0 and deckblatt.get("Cason-Putzmaschine", 0) < 0: raise Exception("bei Verwendung von Flyern müssen Neuenhauser- oder Cason-Putzmaschinen existieren") # Bypass, wenn mindestens 2 Flyer oder 2 RSM if deckblatt.get("Begegnungsstrecke_Bypass", 0) > 0: if deckblatt.get("Flyer", 0) < 2 and deckblatt.get("RSM", 0) < 0: raise Exception("Bypass, wenn mindestens 2 Flyer oder 2 RSM") # Turm: kein Kriterium self._RSM_Anzahl = deckblatt.get("RSM", 0) rsm_direct_mengen = {} if "rsm_direct" in kwargs: rsm_direct_mengen = kwargs['rsm_direct'] self.remove_empty(rsm_direct_mengen) rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt rsm_fa_mengen = {} if "rsm_fa" in kwargs: rsm_fa_mengen = kwargs['rsm_fa'] self.remove_empty(rsm_fa_mengen) rsm_fa_mengen["Anzahl_RSM"] = self._RSM_Anzahl #übernahme aus deckblatt flyer_f40_mengen = {} if "flyer_f40" in kwargs: flyer_f40_mengen = kwargs['flyer_f40'] self.remove_empty(flyer_f40_mengen) flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) #übernahme aus deckblatt flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) #übernahme aus deckblatt flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) #übernahme aus deckblatt neuenhauser_mengen = {} if "neuenhauser" in kwargs: neuenhauser_mengen = kwargs['neuenhauser'] self.remove_empty(neuenhauser_mengen) neuenhauser_mengen["Neuenhauser-Putzmaschine"] = deckblatt.get("Neuenhauser-Putzmaschine", 0) neuenhauser_mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) neuenhauser_mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) flyer_mengen = {} if "flyer" in kwargs: flyer_mengen = kwargs['flyer'] self.remove_empty(flyer_mengen) flyer_mengen["Anzahl"] = deckblatt.get("Flyer", 0) flyer_mengen["Flyer"] = deckblatt.get("Flyer", 0) flyer_mengen["Anzahl_Schienen"] = deckblatt.get("Flyer_Puffer", 0) puffer_mengen = {} if "puffer" in kwargs: puffer_mengen = kwargs['puffer'] self.remove_empty(puffer_mengen) puffer_mengen["Puffer"] = deckblatt.get("Puffer", 0) puffer_mengen["Anzahl_Pufferstrecken"] = deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) turm_mengen = {} if "turm" in kwargs: turm_mengen = kwargs['turm'] self.remove_empty(turm_mengen) turm_mengen["Turm"] = deckblatt.get("Turm", 0) turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0) verbindungsstrecken_w_mengen = {} if "verbindungsstrecken_w" in kwargs: verbindungsstrecken_w_mengen = kwargs['verbindungsstrecken_w'] self.remove_empty(verbindungsstrecken_w_mengen) #überprüfe welche Art von System, setze dict der unrelevanten klasse = 0 system = deckblatt.get("SYSTEM", "") if (system.lower() == "direct"): self._rsm_fa = RSM_FA({}) self._rsm_direct = RSM_direct(rsm_direct_mengen) elif (system.lower() == "fa"): self._rsm_fa = RSM_FA(rsm_fa_mengen) self._rsm_direct = RSM_direct({}) else: raise Exception("unkown Flyer. Either direct or fa") self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen) self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen) self._flyer = Flyer_EJet(flyer_mengen) n_begegnung = deckblatt.get('Begegnungsstrecke_Bypass', 0) self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen, n_begegnung) self._puffer = Puffer(puffer_mengen) self._turm = Turm(turm_mengen) def get_deckblatt_value(self, key): return self._deckblatt.get(key, 0) def get_value_of_object(self, objectname, key): # Deckblatt if (objectname.lower() == "deckblatt"): return self._deckblatt.get(key) # RSM_direct if (objectname.lower() == "rsm_direct"): return self._rsm_direct.anzahl(key) # RSM_FA if (objectname.lower() == "rsm_fa"): return self._rsm_fa.anzahl(key) # Flyer_F40_EJet_inc_Putz if (objectname.lower() == "flyer_f40_ejet_inc_putz"): return self._flyer_f40.anzahl(key) # Putzmaschine_Neuenhauser if (objectname.lower() == "putzmaschine_neuenhauser"): return self._neuenhauser.anzahl(key) # Flyer_EJet if (objectname.lower() == "flyer_ejet"): return self._flyer.anzahl(key) # Verbindungsstrecken_Wechsel if (objectname.lower() == "verbindungsstrecken_wechsel"): return self._verbindungsstrecken_w.anzahl(key) # Puffer if (objectname.lower() == "puffer"): return self._puffer.anzahl(key) # Turm if (objectname.lower() == "turm"): return self._turm.anzahl(key) raise Exception("unkown element") 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 remove_empty(self, toclean): # remove all elements with the number of 0. They are of no use l = [] for k,v in toclean.items(): if v == 0: l.append(k) for item in l: del toclean[item] 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_1fach": 0, "Bedientableau_2fach": 0, "Bedientableau_14fach": 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, "klemmkasten_rsm": 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) +\ self._flyer._Mengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung",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_1fach"] = self._rsm_fa._Mengen.get("Bedientableau_1fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1fach", 0) zmengen["Bedientableau_2fach"] = self._rsm_direct._Mengen.get("Bedientableau_2fach", 0) +\ self._rsm_fa._Mengen.get("Bedientableau_2fach", 0) +\ self._flyer_f40._Mengen.get("Bedientableau_2fach", 0) +\ self._neuenhauser._Mengen.get("Bedientableau_2fach", 0) +\ self._flyer._Mengen.get("Bedientableau_2fach", 0) +\ self._verbindungsstrecken_w._Mengen.get("Bedientableau_2fach", 0) +\ self._turm._Mengen.get("Bedientableau_2fach", 0) zmengen["Bedientableau_14fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14fach", 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) +\ self._verbindungsstrecken_w.anzahl("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._rsm_fa._Mengen.get("RRA_uni_Begegnung", 0) +\ self._flyer_f40._Mengen.get("RA_uni", 0) #RRA_bi_uni_Begegnung 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("RRA_bi", 0) +\ self._flyer._Mengen.get("RA_bi", 0) +\ self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\ self._puffer._Mengen.get("RA_bi_ungerade_Schiene", 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", 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) zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) return zmengen # RSM_direct: class RSM_direct(): def __init__(self, anzahl:dict): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet "Anzahl":0, #"Anzahl_Strecken_RSM":8, "Sensor_optisch_Traverse":0, #"Lichtschranke_Traverse":0, #"Bedientableau_2fach":0, "Bedientableau_2fach_Korrektur":0, #"Bedientableau_2fach_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, } #Berechnungen basieren auf der Anzahl der Ringspinnmaschinen (rsm_anzahl) mit Ausnahme 'Sensor_optisch_Traverse' #sowie teilweise manueller Eingaben von Korrekturfaktoren, hier mit dem Anhang '_Korrektur' self._Mengen = {} self._RSM_Anzahl = anzahl.get("Anzahl", 0) self._Mengen["Anzahl"] = anzahl.get("Anzahl", 0) self._Mengen["Anzahl_Strecken_RSM"] = 8 self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Sensor_optisch_Traverse", 0) self._Mengen["Lichtschranke_Traverse"] = self._RSM_Anzahl * 6 self._Mengen["Bedientableau_2fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Bedientableau_2fach_Direct"] = self._RSM_Anzahl self._Mengen["Weiche"] = self._RSM_Anzahl * 4 + anzahl.get("Weiche_Korrektur", 0) self._Mengen["Weiche_Gemeinsame_Rückstellung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) self._Mengen["Weiche_Gemeinsame_Rückstellung_Korrektur"] = anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) self._Mengen["RA_bi_abhebbar"] = math.ceil(self._RSM_Anzahl * 0.31) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) self._Mengen["Doppelstreckenantrieb"] = self._RSM_Anzahl * self._Mengen.get("Anzahl_Strecken_RSM", 0) self._Mengen["gemeinsame_Wendung"] = math.ceil(self._RSM_Anzahl / 6) * 2 self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = math.floor(self._RSM_Anzahl / 5) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) def anzahl(self, partname): return self._Mengen.get(partname, 0) # RSM_FA: class RSM_FA(): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet "Anzahl_RSM":14, #"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":6, #"Bedientableau_1fach":0, "Bedientableau_1fach_Korrektur":0, #"Bedientableau_2fach":0, "Bedientableau_2fach_Korrektur":4, #"Weiche":0, "Weiche_Korrektur":0, #"RRA_bi":0, "RRA_bi_Korrektur":0, "RRA_bi_auf_Haupstrecke":10, #"RRA_bi_ohne_SPS_Ansteuerung":0, "RRA_uni_Begegnung":4, "gemeinsame_Wendung":0, #"Seilzugschalter":0, #"Mit_Drucktaster":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, "klemmkasten_rsm":2, } def __init__(self, anzahl:dict): self._Mengen = {} self._Mengen["Anzahl_RSM"] = anzahl.get("Anzahl_RSM", 0) self._Mengen["Flex_A_Premium"] = anzahl.get("Flex_A_Premium", False) self._Mengen["Getriebe_in_der_Mitte"] = anzahl.get("Getriebe_in_der_Mitte", False) self._Mengen["RSM_Einfahrt_Ein_Beidseitig"] = anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False) sensorfaktor_premium = 1 sensorfaktor_beidseitig = 0 if self.flex_a_premium(): sensorfaktor_premium = 4 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): sensorfaktor_beidseitig = 1 self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Anzahl_RSM", 0)*(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) #hier keine Korrektur, dafür "Zusätzlich" vorgesehen tableaufaktor_premium = 1 tableaufaktor_beidseitig = 0 if self.flex_a_premium(): tableaufaktor_premium = 0 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): tableaufaktor_beidseitig = 1 self._Mengen["Bedientableau_1fach"] = anzahl.get("Anzahl_RSM", 0)*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0) self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0) self._Mengen["Bedientableau_2fach"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) weichefaktor_premium = 1 weichefaktor_beidseitig = 0 if self.flex_a_premium(): weichefaktor_premium = 3 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): weichefaktor_beidseitig = 1 self._Mengen["Weiche"] = anzahl.get("Anzahl_RSM", 0) * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0) self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) rrafaktor_premium = 1 rrafaktor_beidseitig = 0 if self.flex_a_premium(): rrafaktor_premium = 2 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): rrafaktor_beidseitig = 1 self._Mengen["RRA_bi"] = anzahl.get("Anzahl_RSM", 0) * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0) self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0) self._Mengen["RRA_bi_auf_Haupstrecke"] = anzahl.get("RRA_bi_auf_Haupstrecke", 0) self._Mengen["RRA_uni_Begegnung"] = anzahl.get("RRA_uni_Begegnung", 0) if self.flex_a_premium(): self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4 else: self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0 self._Mengen["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) seilzfaktor_premium = 0 seilzfaktor_getriebe_mitte = 0 if self.flex_a_premium(): seilzfaktor_premium = 2 if (anzahl.get("Getriebe_in_der_Mitte", False)): seilzfaktor_getriebe_mitte = 2 self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) if self.flex_a_premium(): self._Mengen["Mit_Drucktaster"] = anzahl.get("Anzahl_RSM", 0) * 8 else: self._Mengen["Mit_Drucktaster"] = 0 self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0) self._Mengen["Meldelampe_Überstrom"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["klemmkasten_rsm"] = anzahl.get("klemmkasten_rsm", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) def flex_a_premium(self): return self._Mengen.get("Flex_A_Premium", False) # Flyer_F40_(Electrojet)_incl._Putzmaschine: class Flyer_F40_EJet_inc_Putz(): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Anzahl":0, "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #"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_2fach":0, "Bedientableau_2fach_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, } def __init__(self, anzahl:dict): self._Mengen = self.mengen #anzahl = self._Mengen self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\ anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) self._Mengen["Anzahl"] = self._Flyer_Anzahl self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\ anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) 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) sensorfaktor_nachpuffer = 7 if (anzahl.get("Nachpuffer", False)): sensorfaktor_nachpuffer = 5 self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 2 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) self._Mengen["Sensor_induktiv_Spulenhalter_Korrektur"] = anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl + anzahl.get("Interface_Doffer_Korrektur", 0) self._Mengen["Interface_Doffer_Korrektur"] = anzahl.get("Interface_Doffer_Korrektur", 0) self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0) + anzahl.get("Weiche_Korrektur", 0) + anzahl.get("Wechsel", 0) self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl + anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) else: self._Mengen["Weiche_nach_Flyer_bipolar"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) 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) self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) rraunifaktor_durchfahrt = 0 rraunifaktor_nachpuffer = 1 if (anzahl.get("Single_Line_Durchfahrt", False)): rraunifaktor_durchfahrt = 1 if (anzahl.get("Nachpuffer", False)): rraunifaktor_nachpuffer = 0 self._Mengen["RA_uni_abhebbar"] = self._Flyer_Anzahl * (rraunifaktor_durchfahrt + rraunifaktor_nachpuffer) + anzahl.get("RA_uni_abhebbar_Korrektur", 0) 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 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)): self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) else: self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl self._Mengen["RRA_BI_abhebbar_Korrektur"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): self._Mengen["RRA_bi"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) + anzahl.get("RRA_bi_Korrektur", 0) else: self._Mengen["RRA_bi"] = self._Flyer_Anzahl + anzahl.get("RRA_bi_Korrektur", 0) self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("RRA_bi_ohne_SPS_Ansteuerung_Korrektur", 0) else: self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl if (anzahl.get("Single_Line_Durchfahrt", False)): 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 * 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) self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) # Putzmaschine_(Neuenhauser): class Putzmaschine_Neuenhauser(): def __init__(self, anzahl:dict): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Anzahl":0, "Neuenhauser-Putzmaschine":0, "Neuenhauser-Putzmaschine_Vorpuffer":0, "Neuenhauser-Putzmaschine_Nachpuffer":0, #"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_2fach":0, "Bedientableau_2fach_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, } self._Mengen = {} self._Putze_Anzahl = anzahl.get("Neuenhauser-Putzmaschine", 0) self._Vorpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) self._Nachpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) self._Mengen["Anzahl"] = self._Putze_Anzahl self._Mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = self._Vorpuffer_Anzahl #'Neuenhauser-Putzmaschine_Vorpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Vorstaustrecken' (Mengengerüst/Putzmaschine) self._Mengen["Anzahl_Vorstaustrecken"] = self._Vorpuffer_Anzahl self._Mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = self._Nachpuffer_Anzahl #'Neuenhauser-Putzmaschine_Nachpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Nachstaustrecken' (Mengengerüst/Putzmaschine) self._Mengen["Anzahl_Nachstaustrecken"] = self._Nachpuffer_Anzahl self._Mengen["Sensor_optisch_Traverse"] = self._Putze_Anzahl * (self._Vorpuffer_Anzahl + self._Nachpuffer_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensorik_Zugpositionierung"] = self._Putze_Anzahl * 4 self._Mengen["Sensor_WT18_Spulenprüfung_voll_leer"] = self._Putze_Anzahl * 2 self._Mengen["Bedientableau_2fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_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) 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 self._Mengen["RA_uni_abhebbar_unger_Sch"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/3) + math.floor(self._Nachpuffer_Anzahl/3)) self._Mengen["Doppelstreckenantrieb"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/2) + math.floor(self._Nachpuffer_Anzahl/2)) self._Mengen["Meldelampe_Überstrom"] = self._Putze_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = self._Putze_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = self._Putze_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) # Flyer_(Electrojet): class Flyer_EJet(): mengen = { #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_2fach":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, } def __init__(self, anzahl:dict): self._Mengen = {} self._Flyer_Anzahl = anzahl.get("Flyer", 0) self._Mengen["Anzahl"] = self._Flyer_Anzahl self._Mengen["Flyer"] = self._Flyer_Anzahl self._Schienen_Anzahl = anzahl.get("Anzahl_Schienen", 0) self._Mengen["Anzahl_Schienen"] = anzahl.get("Anzahl_Schienen", 0) self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (2*self._Schienen_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._Flyer_Anzahl self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl 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 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) self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl self._Mengen["RA_bi_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Schienen_Anzahl/2) self._Mengen["RA_bi_abhebbar_unger_Schiene"] = anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) # Verbindungsstrecken/_Wechsel: class Verbindungsstrecken_Wechsel(): def __init__(self, anzahl:dict, Begegnungsstrecke_bypass:int): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Sensor_optisch_Traverse":0, "Sensor_optisch_Traverse_Korrektur":0, "Bedientableau_1fach":0, "Bedientableau_2fach":0, "Bedientableau_14fach":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 } self._Mengen = {} self._Mengen["Sensor_optisch_Traverse"] = Begegnungsstrecke_bypass * 3 + \ anzahl.get('Dreifachweiche', 0) * 2 + \ anzahl.get('Kreuzungsweiche', 0) * 4 + \ anzahl.get('Sensor_optisch_Traverse_Korrektur', 0) self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Bedientableau_1fach"] = anzahl.get("Bedientableau_1fach", 0) self._Mengen["Bedientableau_2fach"] = anzahl.get("Bedientableau_2fach", 0) self._Mengen["Bedientableau_14fach"] = anzahl.get("Bedientableau_14fach", 0) self._Mengen["Weiche"] = Begegnungsstrecke_bypass * 2 + anzahl.get("Weiche_Korrektur", 0) self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) self._Mengen["Kreuzungsweiche"] = anzahl.get("Kreuzungsweiche", 0) self._Mengen["Werma_Rundumleuchte_Störung"] = anzahl.get("Werma_Rundumleuchte_Störung", 0) self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung", 0) self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RA_bi_ohne_SPS-Ansteuerung", 0) self._Mengen["Doppelstreckenantrieb"] = anzahl.get("Doppelstreckenantrieb", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) # Puffer class Puffer(): def __init__(self, anzahl:dict): mengen = { #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, "Doppelstreckenantrieb_Korrektur":0, #"Meldelampe_Überstrom":0, "Meldelampe_Überstrom_Korrektur":0, #"Hauptschalter_Ein_Meldung":0, "Hauptschalter_Ein-Meldung_Korrektur":0, } self._Mengen = anzahl self._Puffer_Anzahl = anzahl.get("Puffer", 0) self._Strecken_Anzahl = anzahl.get("Anzahl_Pufferstrecken", 0) self._Mengen["Anzahl"] = self._Puffer_Anzahl self._Mengen["Anzahl_Staustrecken"] = self._Strecken_Anzahl self._Mengen["Sensor_optisch_Traverse"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0) self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0) self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0) self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) +\ anzahl.get("Doppelstreckenantrieb_Korrektur", 0) self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) # Turm class Turm(): mengen = { #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_2fach":0, } def __init__(self, anzahl:dict): self._Mengen = {} self._Turm_Anzahl = anzahl.get("Turm", 0) self._Mengen["Anzahl"] = self._Turm_Anzahl self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0) self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl 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) self._Mengen["RA_bi_ohne_SPS"] = self._Turm_Anzahl*self._Staustrecken_Anzahl*2 + anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) self._Mengen["RA_bi_ohne_SPS_Korrektur"] = anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) self._Mengen["Bedientableau_2fach"] = self._Turm_Anzahl*2 def anzahl(self, partname, defaultv = 0): return self._Mengen.get(partname, defaultv) class EA(): stueckzahl = { "Bedienelemente_Steuerschrank":1, # "bedienstation_1fach_Not_Aus": (1, 1), # "bedienstation_einfach_Zug_Wechseln": (1, 1), # "bedienstation_automatische_Umfahrung": (1, 1), # in Excel Drucktaster automatische Umfahrung? ansonsten fehlt in Excel # "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), # "bedienstation_zweifach_Not_Aus_Reset": (2, 2), "bedienst_dreifach":0, "bedienst_vierfach":0, "bedienst_sechsfach":0, # "EAs_Unterverteiler_direct": (7, 6), # # Ermittlung_Mengengeruest_Anzahl, # "Sensor_Traversenabfrage_optisch": (1, 0), # "Reflexionslichtschranke_RSM_DIRECT": (1, 0), # "Sensor induktiv Flyer+PM": (1, 0), # "Seilzugschalter": (1, 0), # "Weiche": (0, 1), # "Weiche_nach_PM_bipolar": (0, 2), "gemeinsame_Weichenrueckstellung":0, # "Dreifach_Weiche_DIRECT": (0, 2), # "Kreuzungsweiche": (0, 10), # "Stopper": (0, 1), # "Ventil_RA_3_2_abhebbar": (0, 1), # "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), # "Blitzleuchte_Stoerung": (0, 1), # "Schnittstelle_Flyer_ElectroJet": (2, 2), # "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), # "FEldbux_UV_EinAusgang": (2, 1), "Spulenumsetzstation":0, # "RA_unidirektional": (0, 1), # "RA_unidirektional_abhebbar": (0, 1), "RA_unidirektional_mit_gemeinsamer_Wendung":0, # "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), # "RA_bidirektional": (0, 2), # "RA_bidirektional_abhebbar": (0, 2), "RA_bidirektional_abhebbar_gemeinsWend":0, #"RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), "RA_in_RSM_bidirektional":0, #"Doppelstreckenantrieb": (0, 2), "Doppelstreckenantriebgemeinsame_Wendung":0, "gemeinsame_Wendung":0, "Frequenzumrichter":0, } def __init__(self, anzahl:dict, mg: type[MG]): # Eingänge und Ausgänge jeder Hardwareeinheit self._reserve = 0.05 self.EAs = { # Bedienelemente_Steuerschrank "Drucktaster_Anlage_AUS": (1, 0), "Leuchtdrucktaster_Anlage_EIN": (1, 1), "Leuchtdrucktaster_Start_nach_Stoerung": (1, 1), "Leuchtdrucktaster_Laufzeitfehler": (1, 1), "Drucktaster_Lampentest": (1, 0), "Meldeleuchte_Komm_PC_SPS_gestoert": (0, 1), "Sammeleingang_Ueberstrom": (5, 1), "Sammeleingang_Not_Aus": (2, 1), "Sammeleingang_Druckluft_fehlt": (1, 1), "Drucktaster_Reset": (1, 0), "Sammeleingang_Antriebe_abheben": (1, 2), "Reserve": (9, 7), "Bedienelemente_Steuerschrank": (24, 16), # Bedienstation, "bedienstation_1fach_Not_Aus": (1, 1), "bedienstation_einfach_Zug_Wechseln": (1, 1), "bedienstation_automatische_Umfahrung": (1, 1), "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), "bedienstation_zweifach_Not_Aus_Reset": (2, 2), "bedienst_dreifach": (3, 3), "bedienst_vierfach": (4, 4), "bedienst_sechsfach": (6, 6), "EAs_Unterverteiler_direct": (7, 6), # Ermittlung_Mengengeruest_Anzahl, "Sensor_Traversenabfrage_optisch": (1, 0), "Reflexionslichtschranke_RSM_DIRECT": (1, 0), "Sensor induktiv Flyer+PM": (1, 0), "Seilzugschalter": (1, 0), "Weiche": (0, 1), "Weiche_nach_PM_bipolar": (0, 2), "gemeinsame_Weichenrueckstellung": (0, 1), "Dreifach_Weiche_DIRECT": (0, 2), "Kreuzungsweiche": (0, 10), "Stopper": (0, 1), "Ventil_RA_3_2_abhebbar": (0, 1), "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), "Blitzleuchte_Stoerung": (0, 1), "Schnittstelle_Flyer_ElectroJet": (2, 2), "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), "FEldbux_UV_EinAusgang": (2, 1), "Spulenumsetzstation": (40, 20), "RA_unidirektional": (0, 1), "RA_unidirektional_abhebbar": (0, 1), "RA_unidirektional_mit_gemeinsamer_Wendung": (0, 1), "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), "RA_bidirektional": (0, 2), "RA_bidirektional_abhebbar": (0, 2), "RA_bidirektional_abhebbar_gemeinsWend": (0, 1), "RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), "RA_in_RSM_bidirektional": (0, 1), "Doppelstreckenantrieb": (0, 2), "Doppelstreckenantriebgemeinsame_Wendung": (0, 1), "gemeinsame_Wendung": (0, 2), "Frequenzumrichter": (1, 3) } self._Anzahl = self.stueckzahl self._Anzahl["Bedienelemente_Steuerschrank"] = anzahl.get("schaltschrank", 0) zmengen = mg.zusammenfassung() self._Anzahl["bedienstation_einfach_Zug_Wechseln"] = zmengen.get("Bedientableau_1fach", 0) self._Anzahl["bedienstation_automatische_Umfahrung"] = math.ceil(zmengen.get("Drucktaster_automatische_Umfahrung", 0)/4) self._Anzahl["bedienstation_zweifach_Wechs_BCD_10f"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") self._Anzahl["bedienstation_zweifach_Not_Aus_Reset"] = zmengen.get("Bedientableau_2fach", 0) self._Anzahl["bedienst_dreifach"] = anzahl.get("bedienst_dreifach", 0) self._Anzahl["bedienst_vierfach"] = anzahl.get("bedienst_vierfach", 0) self._Anzahl["bedienst_sechsfach"] = anzahl.get("bedienst_sechsfach", 0) self._Anzahl["EAs_Unterverteiler_direct"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") # Ermittlung_Mengengeruest_Anzahl self._Anzahl["Sensor_Traversenabfrage_optisch"] = zmengen.get("Sensor_optisch_Traverse", 0) + zmengen.get("Sensor_Spulenprüfung_voll_leer", 0) self._Anzahl["Reflexionslichtschranke_RSM_DIRECT"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") self._Anzahl["Sensor induktiv Flyer+PM"] = zmengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung", 0) self._Anzahl["Seilzugschalter"] = zmengen.get("Seilzugsschalter", 0) self._Anzahl["Weiche"] = zmengen.get("Weiche", 0) self._Anzahl["Weiche_nach_PM_bipolar"] = zmengen.get("Weiche_nach_PM_bipolar", 0) self._Anzahl["gemeinsame_Weichenrueckstellung"] = anzahl.get("gemeinsame_Weichenrueckstellung", 0) self._Anzahl["Dreifach_Weiche_DIRECT"] = zmengen.get("Dreifachweiche", 0) self._Anzahl["Kreuzungsweiche"] = mg.get_value_of_object("verbindungsstrecken_wechsel", "Kreuzungsweiche") self._Anzahl["Stopper"] = zmengen.get("Stopper", 0) self._Anzahl["RA_unidirektional"] = zmengen.get("RA_uni", 0) self._Anzahl["RA_unidirektional_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) self._Anzahl["RA_unidirektional_mit_gemeinsamer_Wendung"] = anzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung", 0) self._Anzahl["RA_unidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) self._Anzahl["RA_bidirektional"] = zmengen.get("RA_bi", 0) self._Anzahl["RA_bidirektional_abhebbar"] = zmengen.get("RA_bi_abhebbar", 0) self._Anzahl["RA_bidirektional_abhebbar_gemeinsWend"] = anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0) self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) self._Anzahl["RA_in_RSM_bidirektional"] = anzahl.get("RA_in_RSM_bidirektional", 0) self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0) self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = anzahl.get("Doppelstreckenantriebgemeinsame_Wendung", 0) self._Anzahl["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) self._Anzahl["Frequenzumrichter"] = anzahl.get("Frequenzumrichter", 0) self._Anzahl["Ventil_RA_3_2_abhebbar"] = self.anzahl("RA_unidirektional_abhebbar") +\ self.anzahl("RA_unidirektional_mit_gemeinsamer_Wendung") +\ self.anzahl("RA_unidirektional_ohne_SPS_Ansteuerung") +\ self.anzahl("RA_bidirektional_abhebbar") +\ self.anzahl("RA_bidirektional_abhebbar_gemeinsWend") self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = zmengen.get("Doppelstreckenantrieb", 0) self._Anzahl["Blitzleuchte_Stoerung"] = zmengen.get("Werma_Rundumleuchte_Störung", 0) self._Anzahl["Schnittstelle_Flyer_ElectroJet"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + \ mg.get_value_of_object("flyer_ejet", "Interface_Doffer") self._Anzahl["Schnittstelle_Putzmaschine_Neuhauser"] = mg.get_value_of_object("putzmaschine_neuenhauser", "Interface_Putzmaschine") self._Anzahl["FEldbux_UV_EinAusgang"] = mg.get_value_of_object("rsm_fa", "Meldelampe_Überstrom") + \ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Meldelampe_Überstrom") + \ mg.get_value_of_object("putzmaschine_neuenhauser", "Meldelampe_Überstrom") + \ mg.get_value_of_object("flyer_ejet", "Meldelampe_Überstrom") + \ mg.get_value_of_object("puffer", "Meldelampe_Überstrom") self._Anzahl["Spulenumsetzstation"] = anzahl.get("Spulenumsetzstation", 0) def getEA(self, partname): return (self.EAs[partname][0], self.EAs[partname][1]) def getE(self, partname): return self.EAs[partname][0] def getA(self, partname): return self.EAs[partname][1] def anzahl(self, partname, defaultv = 0): return self._Anzahl.get(partname, defaultv) def get_SE(self, partname): num_of_e = self.getE(partname) zahl = self.anzahl(partname) return num_of_e * zahl def get_SA(self, partname): num_of_a = self.getA(partname) zahl = self.anzahl(partname) return num_of_a * zahl def get_SEA(self, partname): return (self.get_SE(partname), self.get_SA(partname)) def __repr__(self): return repr(self._Anzahl) def set_reserve(self, PS): if PS > 1 or PS < 0: raise Exception("Falscher Bereich") self._reserve = PS def gesamt_E(self): res = 0 self.EAs a = list(self._Anzahl.keys()) a.sort() for k,n in self._Anzahl.items(): res += self.EAs[k][0] * n return res def gesamt_E_incl_reserve(self): return (math.ceil((self.gesamt_E() * (1 + self._reserve)))) def gesamt_A(self): res = 0 for k,n in self._Anzahl.items(): res += self.EAs[k][1] * n return res def gesamt_A_incl_reserve(self): return (math.ceil((self.gesamt_A() * (1 + self._reserve)))) def Anzahl_notwendigen_Siemens_EAKarten(self): SiemensS7_32DE = math.ceil(self.gesamt_E()/32) SiemensS7_32DA = math.ceil(self.gesamt_A()/32) return (SiemensS7_32DE, SiemensS7_32DA) def Anzahl_Siemens_EAKarten_incl_reserve(self): SiemensS7_32DE_incl_reserve = math.ceil(self.gesamt_E_incl_reserve()/32) SiemensS7_32DA_incl_reserve = math.ceil(self.gesamt_A_incl_reserve()/32) return (SiemensS7_32DE_incl_reserve, SiemensS7_32DA_incl_reserve) class HW(): #TODO "bedienstation_1fach_Not_Aus" keine Anzahl manuelle eingabe aber dann noch bezüge in mengengerüst und hardware; muss noch eingepflegt werden mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet "schaltschrankgehaeuse_b1x1200_zubehoer": 0, "schaltschrankgehaeuse_b2x800_zubehoer": 0, "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, "sps_simatic_s7_cpu315_2_pn_dp": 0, "speicherkarte_fuer_sps_512_kb": 0, "sps_simatic_s7_cpu317_2_pn_dp": 0, "speicherkarte_fuer_sps2_mb": 0, "sps_simatic_s7_1515_2": 1, "sps_simatic_s7_1517_3": 0, "sps_simatic_s7_1518_4": 0, "sps_et200_1512sp": 0, #"memory_card_256_mb": 0 #"memory_card_2_gb": 0 "et200_sp_ea_ebene":1, "netzwerk_fernwartung":1, "abgang_400v":0, "abgang_24_v":0, "anlagenrechner":1, "anlagenrechner_ohne_bildschirm": 0, "pulteinbau_monitor_srline_rflat_24fhd": 0, "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, "netzwerk_display_adapter_lindy": 0, "zusaetzlicher_bildschirm":0, #"schaltschrank":1, #"unterverteiler_fuer_1neuenhauser_pm":0, "unterverteiler_fuer_1flyer":0, "unterverteiler_fuer_2flyer":2, "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":0, "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":0, "unterverteiler_fuer_puffer":1, #"unterverteiler_fuer_5_rsm_fa":0, "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, #"unterverteiler_fuer_10_rsm_fa":0, "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, #"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0, "korrektur_3_rsm_zusaetzlich_im_unterverteiler":0, "unterverteiler_fuer_4_rsm_direct":0, "korrektur_4_rsm_zusaetzlich_im_unterverteiler":0, #"unterverteiler_fuer_12_rsm_direct":0, "korrektur_12_rsm_zusaetzlich_im_unterverteiler":0, "unterverteiler_fuer_8_rsm_direct":0, "korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler":0, #"busverteiler_6_rsm_direct":0, "korrektur_6_rsm_zusaetzlich_im_busverteiler":0, #"busverteiler_8_rsm_direct":0, "korrektur_8_rsm_zusaetzlich_im_busverteiler":0, #"antrieb_unidirektional_halbleiter":0, #"antrieb_bidirektional_halbleiter":0, "antrieb_unidirektional_schuetz":0, "antrieb_bidirektional_schuetz":0, "motorschutzschalter":0, "wendeschuetzschaltung":0, #"frequenzumrichter":0, ## summe_motorstarter # "bedienstation_1fach_kpl":0, # "bedienst_2fach_wechs_bcd_10f":0, # "bedienstation_2fach_kpl":0, # "halter_bedientableau_2fach":0, # "bedienstation_3fach_kpl":0, # "halter_bedientableau_3fach":0, # "bedienstation_4fach_kpl":0, # "halter_bedientableau_4fach":0, # "bedienstation_6fach_kpl":0, # "halter_bedienstation_6fach":0, # "drucktaster_automatische_umfahrung":0, # "halter_fuer_drucktaster":0, ## summe_bedienstationen "ET200_SP":1, #"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, #"et200_sp_eingangskarte_8_de":0, "korrektur_et200_sp_eingangskarte_8_de":0, "et200_sp_eingangskarte_16_de":0, #"et200_sp_eingangskarte_8_do":0, "korrektur_et200_sp_eingangskarte_8_do":0, "et200_sp_eingangskarte_16_do":0, # "et200_sp_base_unit_neue_last_mit_potKlemmen":0, "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", #"korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen":0, # "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen":0, # "et200_sp_base_unit_neue_last":0, #"korrektur_et200_sp_base_unit_neue_last":-15, # "et200_sp_base_unit_links_gebrueckt":0, "korrektur_et200_sp_base_unit_links_gebrueckt":0, "SLIO":0, # "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, # "slio_eingangskarte_4_de":0, "korrektur_slio_eingangskarte_4_de":0, # "slio_eingangskarte_8_de":0, "korrektur_slio_eingangskarte_8_de":0, # "slio_ausgangskarte_4_do":0, "korrektur_slio_ausgangskarte_4_do":0, # "slio_ausgangskarte_8_do":0, "korrektur_slio_ausgangskarte_8_do":0, # "slio_power_modul":0, "korrektur_slio_power_modul":0, # "slio_4_x_dc_24v_4_x_dc_0v":0, "korrektur_slio_4_x_dc_24v_4_x_dc_0v":0, # "slio_8_x_dc_24v":0, # "slio_8_x_dc_0v":0, "korrektur_slio_8_x_dc_0v":0, # MATERIAL VOR ORT "movimot_fu_mit_anschaltung":0, # "sensor_optisch_traverse":0, "sensorhalter_ohne_sensor":0, # "reflexionslichtschranke_rsm_direct":0, # "stoppersensor_induktiv_mit_halter":0, # "sensor_spulenpruefung_voll_leer":0, # "seilzugschalter":0, "seil_fuer_seilzugschalter":0, # "blitzleuchte":0, # "spulenumsetzstation":0, # "sensorkabel_je_20m":0, # "stopper_weichenkabel_je_5m":0, # "motorkabel_je_30m":0, "kabelpritschen_leitern_200_60":348, "kabelpritsche_rsm_100_60":0, "kabelpritsche_rsm_50_35":0, # "klemmkasten_rsm":0, # "klemmkasten_direct_in_rsm":0, # "erdung":0, "kleinteile_rohre_schellen_kabelbinder_ect":1.5, # "kabel_fuer_klemmkasten_und_bts_60m":0, # "kabel_fuer_1fach_bts_zug_wechseln":0, # "zuleitung_75_m_unterverteiler_4x4mm2_400vac":0, # "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, #"korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":-6, # "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0, "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", #"korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0, # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":0, # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":0, # "profinetkabel":0, "korrektur_profinetkabel":0, # "schnittstellen_8x1mm2_30m":0, } # Einzelteilpreise in € ep = { # Schaltschrank Einzelpreis "schaltschrankgehaeuse_b1x800_zubehoer": 2000, # "schaltschrankgehaeuse_b2x800_zubehoer": 4663.45, # 790821101 "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5720.94, # 790821102 "sps_simatic_s7_cpu315_2_pn_dp": 2237.25, # 708003004 "speicherkarte_fuer_sps_512_kb": 172.5, # 708003012 "sps_simatic_s7_cpu317_2_pn_dp": 3957, # 708003007 "speicherkarte_fuer_sps2_mb": 246, # 708003027 "sps_simatic_s7_1515_2": 2173.9, # 790008100 "sps_simatic_s7_1517_3": 3827.8, # 790008101 "sps_simatic_s7_1518_4": 5892, # 6ES7518-4AP00-0AB0 "sps_et200_1512sp": 705.75, # 709000003 "memory_card_256_mb": 0, # 708015093 "memory_card_2_gb": 515.9, # 708015094 "et200_sp_ea_ebene": 0, # 790009001 "netzwerk_fernwartung": 750, # 790011001 "abgang_400v": 250, # ---- "abgang_24_v": 250, # ---- "anlagenrechner": 1657, # 790011000 "anlagenrechner_ohne_bildschirm": 1487, # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS "pulteinbau_monitor_srline_rflat_24fhd": 1200, # 400009058 "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 350, # 400009057 "netzwerk_display_adapter_lindy": 650, # "zusaetzlicher_bildschirm": 1100, # # _summe_schaltschrank # "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210 "unterverteiler_fuer_1flyer": 1000, # 790820207_A "unterverteiler_fuer_2flyer": 1000, # 790820209_A "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210 "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210 "unterverteiler_fuer_puffer": 1000, # 790820210_F "unterverteiler_fuer_5_rsm_fa": 1000, # 790820210_D # korrektur_1_rsm_zusaetzlich_im_unterverteiler "unterverteiler_fuer_10_rsm_fa": 1000, # 790820210_F # "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C # korrektur_3_rsm_zusaetzlich_im_unterverteiler "unterverteiler_fuer_4_rsm_direct": 5584, # 790820300 # korrektur_4_rsm_zusaetzlich_im_unterverteiler "unterverteiler_fuer_12_rsm_direct": 8258, # 790820302 # korrektur_12_rsm_zusaetzlich_im_unterverteiler "unterverteiler_fuer_8_rsm_direct": 6736, # 790820301 # korrektur_8_rsm_zusaetzlich_im_unterverteiler "busverteiler_6_rsm_direct": 1747.53, # 790801002 # korrektur_6_rsm_zusaetzlich_im_unterverteiler "busverteiler_8_rsm_direct": 2052.26, # 790801001 # korrektur_8_rsm_zusaetzlich_im_unterverteiler "antrieb_unidirektional_halbleiter": 90, "antrieb_bidirektional_halbleiter": 105, "antrieb_unidirektional_schuetz": 0, "antrieb_bidirektional_schuetz": 0, "motorschutzschalter": 0, "wendeschuetzschaltung": 75, "frequenzumrichter": 250, # summe_motorstarter "bedienstation_1fach_kpl": 59, "bedienst_2fach_wechs_bcd_10f": 105, # 790002024 "bedienstation_2fach_kpl": 65.63, # 790000020 "halter_bedientableau_2fach": 42, # 825304006 "bedienstation_3fach_kpl": 99, # 790000040 "halter_bedientableau_3fach": 46, # 825304007 "bedienstation_4fach_kpl": 121, # 790000045 "halter_bedientableau_4fach": 52, # 825304003 "bedienstation_6fach_kpl": 145.8, # 790000033 "halter_bedientableau_6fach": 56, # 825304002 "drucktaster_automatische_umfahrung": 28, "halter_fuer_drucktaster": 33, # summe_bedienstationen # ET200_SP "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 198.90, # 709000006 # "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45" "et200_sp_eingangskarte_8_de": 35, # "korrektur_et200_sp_eingangskarte_8_de" # 709000021 "et200_sp_eingangskarte_16_de": 58, # 709000022 "et200_sp_eingangskarte_8_do": 46, # 709000031_A "et200_sp_eingangskarte_16_do": 66.30, # 709000032 "et200_sp_base_unit_neue_last_mit_potKlemmen": 23, # 709000014 "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen": 15, # 709000015 "et200_sp_base_unit_neue_last": 19, # 709000011 "et200_sp_base_unit_links_gebrueckt": 11, # 709000010 # SLIO "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO": 175, # 709000500 "slio_eingangskarte_4_de": 31, # 709000510 "slio_eingangskarte_8_de": 38, # 709000511 "slio_ausgangskarte_4_do": 39, # 709000021 "slio_ausgangskarte_8_do": 46, # 709000021 "slio_power_modul": 18.22, # 709000014 "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 "slio_8_x_dc_24v": 18, # 709000011 "slio_8_x_dc_0v": 13, # 709000010 # Summe_material_in_ll # MATERIAL VOR ORT "movimot_fu_mit_anschaltung": 550, "sensor_optisch_traverse": 27, # 827072200 "sensorhalter_ohne_sensor": 8, # 827072xxx "reflexionslichtschranke_rsm_direct": 45, # 827072207 "stoppersensor_induktiv_mit_halter": 63, # 827072205 "sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041 "seilzugschalter": 150, "seil_fuer_seilzugschalter": 0.40, "blitzleuchte": 72, # 790000006 "spulenumsetzstation": 0, "sensorkabel_je_20m": 25, # 722001xxx "stopper_weichenkabel_je_5m": 20, # 722001xxx "motorkabel_je_30m": 26, "kabelpritschen_leitern_200_60": 15, "kabelpritsche_rsm_100_60": 12, # 715000020 "kabelpritsche_rsm_50_35": 9, # 715003010 "klemmkasten_rsm": 120, "klemmkasten_direct_in_rsm": 122, # 790000703 "erdung": 13, "kleinteile_rohre_schellen_kabelbinder_ect": 750, "kabel_fuer_klemmkasten_und_bts_60m": 145, "kabel_fuer_1fach_bts_zug_wechseln": 50, "zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146, # 725000050 "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450, # 725000057 "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 280, # 725000057 "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145, # 725000007 "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136, # 725000004 "profinetkabel": 42, # 726001xxx "schnittstellen_8x1mm2_30m": 35.4, # 725000019 } # Zeit pro Einheit in min zpe_dienstl_hardwareplanung = { "schaltschrankgehaeuse_b1x1200_zubehoer": 4200, "schaltschrankgehaeuse_b2x800_zubehoer": 4200, "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800, "sps_simatic_s7_cpu315_2_pn_dp": 0, "speicherkarte_fuer_sps_512_kb": 0, "sps_simatic_s7_cpu317_2_pn_dp": 0, "speicherkarte_fuer_sps2_mb": 0, "sps_simatic_s7_1515_2": 0, "sps_simatic_s7_1517_3": 0, "sps_simatic_s7_1518_4": 0, "sps_et200_1512sp": 0, "memory_card_256_mb": 0, "memory_card_2_gb": 0, "et200_sp_ea_ebene":60, "netzwerk_fernwartung":0, "abgang_400v":60, "abgang_24_v":60, "anlagenrechner":0, "anlagenrechner_ohne_bildschirm": 0, "pulteinbau_monitor_srline_rflat_24fhd": 60, "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, "netzwerk_display_adapter_lindy": 30, "zusaetzlicher_bildschirm":0, "schaltschrank":0, "unterverteiler_fuer_1neuenhauser_pm":1200, "unterverteiler_fuer_1flyer":720, "unterverteiler_fuer_2flyer":1020, "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":810, "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1110, "unterverteiler_fuer_puffer":1200, "unterverteiler_fuer_5_rsm_fa":960, "unterverteiler_fuer_10_rsm_fa":1020, "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1200, "unterverteiler_fuer_4_rsm_direct":3000, "unterverteiler_fuer_12_rsm_direct":4800, "unterverteiler_fuer_8_rsm_direct":3900, "busverteiler_6_rsm_direct":600, "busverteiler_8_rsm_direct":960 } zpe_e_werkstatt = { "schaltschrankgehaeuse_b1x1200_zubehoer": 2400, "schaltschrankgehaeuse_b2x800_zubehoer": 4800, "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160, "sps_simatic_s7_cpu315_2_pn_dp": 0, "speicherkarte_fuer_sps_512_kb": 0, "sps_simatic_s7_cpu317_2_pn_dp": 0, "speicherkarte_fuer_sps2_mb": 0, "sps_simatic_s7_1515_2": 0, "sps_simatic_s7_1517_3": 0, "sps_simatic_s7_1518_4": 0, "sps_et200_1512sp": 0, "memory_card_256_mb": 0, "memory_card_2_gb": 0, "et200_sp_ea_ebene":120, "netzwerk_fernwartung":0, "abgang_400v":90, "abgang_24_v":90, "anlagenrechner":0, "anlagenrechner_ohne_bildschirm": 0, "pulteinbau_monitor_srline_rflat_24fhd": 240, "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, "netzwerk_display_adapter_lindy": 120, "zusaetzlicher_bildschirm":0, "schaltschrank":0, "unterverteiler_fuer_1neuenhauser_pm":1200, "unterverteiler_fuer_1flyer":1020, "unterverteiler_fuer_2flyer":1200, "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1140, "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1200, "unterverteiler_fuer_puffer":1200, "unterverteiler_fuer_5_rsm_fa":1020, "unterverteiler_fuer_10_rsm_fa":1140, "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1500, "unterverteiler_fuer_4_rsm_direct":3600, "unterverteiler_fuer_12_rsm_direct":4800, "unterverteiler_fuer_8_rsm_direct":4200, "busverteiler_6_rsm_direct":480, "busverteiler_8_rsm_direct":480, "antrieb_unidirektional_halbleiter":10, "antrieb_bidirektional_halbleiter":10, "antrieb_unidirektional_schuetz":0, "antrieb_bidirektional_schuetz":0, "motorschutzschalter":0, "wendeschuetzschaltung":0, "frequenzumrichter":0, "bedienstation_1fach_kpl":25, "bedienst_2fach_wechs_bcd_10f":90, "bedienstation_2fach_kpl":30, "halter_bedientableau_2fach":30, "bedienstation_3fach_kpl":25, "halter_bedientableau_3fach":30, "bedienstation_4fach_kpl":30, "halter_bedientableau_4fach":30, "bedienstation_6fach_kpl":45, "halter_bedienstation_6fach":30, "drucktaster_automatische_umfahrung":15, "halter_fuer_drucktaster":0, } Keys_of_Vor_Ort = [ "movimot_fu_mit_anschaltung", "sensor_optisch_traverse", "sensorhalter_ohne_sensor", "reflexionslichtschranke_rsm_direct", "stoppersensor_induktiv_mit_halter", "sensor_spulenpruefung_voll_leer", "seilzugschalter", "seil_fuer_seilzugschalter", "blitzleuchte", "spulenumsetzstation", "sensorkabel_je_20m", "stopper_weichenkabel_je_5m", "motorkabel_je_30m", "kabelpritschen_leitern_200_60", "kabelpritsche_rsm_100_60", "kabelpritsche_rsm_50_35", "klemmkasten_rsm", "klemmkasten_direct_in_rsm", "erdung", "kleinteile_rohre_schellen_kabelbinder_ect", "kabel_fuer_klemmkasten_und_bts_60m", "kabel_fuer_1fach_bts_zug_wechseln", "zuleitung_75_m_unterverteiler_4x4mm2_400vac", "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm", "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm", "profinetkabel", "korrektur_profinetkabel", "schnittstellen_8x1mm2_30m" ] Keys_of_Schaltschrank = [ "schaltschrankgehaeuse_b1x1200_zubehoer", "schaltschrankgehaeuse_b2x800_zubehoer", "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", "sps_simatic_s7_cpu315_2_pn_dp", "speicherkarte_fuer_sps_512_kb", "sps_simatic_s7_cpu317_2_pn_dp", "speicherkarte_fuer_sps2_mb", "sps_simatic_s7_1515_2", "sps_simatic_s7_1517_3", "sps_simatic_s7_1518_4", "sps_et200_1512sp", "memory_card_256_mb", "memory_card_2_gb", "et200_sp_ea_ebene", "netzwerk_fernwartung", "abgang_400v", "abgang_24_v", "anlagenrechner", "anlagenrechner_ohne_bildschirm", "pulteinbau_monitor_srline_rflat_24fhd", "kurzhubtastatur_kbt06_mit_touchpad_uslayout", "netzwerk_display_adapter_lindy", "zusaetzlicher_bildschirm" ] def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]): self._anzahl = self.mengen self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0) self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b2x800_zubehoer", 0) self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0) self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0) self._anzahl["speicherkarte_fuer_sps_512_kb"] = anzahl.get("speicherkarte_fuer_sps_512_kb", 0) self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0) self._anzahl["speicherkarte_fuer_sps2_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb", 0) self._anzahl["sps_simatic_s7_1515_2"] = anzahl.get("sps_simatic_s7_1515_2", 0) self._anzahl["sps_simatic_s7_1517_3"] = anzahl.get("sps_simatic_s7_1517_3", 0) self._anzahl["sps_simatic_s7_1518_4"] = anzahl.get("sps_simatic_s7_1518_4", 0) self._anzahl["sps_et200_1512sp"] = anzahl.get("sps_et200_1512sp", 0) self._anzahl["memory_card_256_mb"] = self.anzahl("speicherkarte_fuer_sps2_mb") + \ self.anzahl("sps_simatic_s7_1515_2") + \ self.anzahl("sps_simatic_s7_1517_3") + \ self.anzahl("sps_simatic_s7_1518_4") self._anzahl["memory_card_2_gb"] = self.anzahl("sps_simatic_s7_1518_4") self._anzahl["et200_sp_ea_ebene"] = anzahl.get("et200_sp_ea_ebene", 0) self._anzahl["netzwerk_fernwartung"] = anzahl.get("netzwerk_fernwartung", 0) self._anzahl["abgang_400v"] = anzahl.get("abgang_400v", 0) self._anzahl["abgang_24_v"] = anzahl.get("abgang_24_v", 0) self._anzahl["anlagenrechner"] = anzahl.get("anlagenrechner", 0) self._anzahl["anlagenrechner_ohne_bildschirm"] = anzahl.get("anlagenrechner_ohne_bildschirm", 0) self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = anzahl.get("pulteinbau_monitor_srline_rflat_24fhd", 0) self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = anzahl.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0) self._anzahl["netzwerk_display_adapter_lindy"] = anzahl.get("netzwerk_display_adapter_lindy", 0) self._anzahl["zusaetzlicher_bildschirm"] = anzahl.get("zusaetzlicher_bildschirm", 0) self._anzahl["schaltschrank"] = eas.stueckzahl.get("Bedienelemente_Steuerschrank") self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("Neuenhauser-Putzmaschine") self._anzahl["unterverteiler_fuer_1flyer"] = anzahl.get("unterverteiler_fuer_1flyer", 0) self._anzahl["unterverteiler_fuer_2flyer"] = anzahl.get("unterverteiler_fuer_2flyer", 0) self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) self._anzahl["unterverteiler_fuer_puffer"] = anzahl.get("unterverteiler_fuer_puffer", 0) self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") self._anzahl["unterverteiler_fuer_5_rsm_fa"] = math.ceil(num_rsms/5) + anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") self._anzahl["unterverteiler_fuer_10_rsm_fa"] = math.ceil(num_rsms/10) + anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) else: num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3) self._anzahl["unterverteiler_fuer_4_rsm_direct"] = anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") / 12) +\ anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["unterverteiler_fuer_8_rsm_direct"] = anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0) self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) self._anzahl["antrieb_unidirektional_halbleiter"] = \ mg.zusammenfassung().get("RA_uni") +\ mg.zusammenfassung().get("RA_uni_abhebbar") +\ mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung") self._anzahl["antrieb_bidirektional_halbleiter"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") +\ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_BI_abhebbar") +\ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_ohne_SPS_Ansteuerung") +\ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") +\ mg.get_value_of_object("flyer_ejet", "RA_bi_ohne_SPS-Ansteuerung") +\ mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") +\ mg.get_value_of_object("flyer_ejet", "RA_bi") +\ mg.get_value_of_object("flyer_ejet", "Doppelstreckenantrieb") +\ mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar_unger_Schiene") +\ mg.get_value_of_object("Puffer", "RA_bi_ungerade_Schiene") +\ mg.get_value_of_object("Puffer", "Doppelstreckenantrieb") +\ mg.get_value_of_object("rsm_fa", "RRA_bi") +\ mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung") self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0) # # summe_motorstarter self._anzahl["bedienstation_1fach_kpl"] = eas.anzahl("bedienstation_1fach_Not_Aus", 0) + eas.anzahl("bedienstation_einfach_Zug_Wechseln", 0) self._anzahl["bedienst_2fach_wechs_bcd_10f"] = eas.anzahl("bedienst_2fach_wechs_bcd_10f", 0) self._anzahl["bedienstation_2fach_kpl"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Reset", 0) self._anzahl["halter_bedientableau_2fach"] = self.anzahl("bedienstation_2fach_kpl") self._anzahl["bedienstation_3fach_kpl"] = eas.anzahl("bedienstation_3fach_kpl", 0) self._anzahl["halter_bedientableau_3fach"] = self.anzahl("bedienstation_3fach_kpl") self._anzahl["bedienstation_4fach_kpl"] = eas.anzahl("bedienstation_4fach_kpl", 0) self._anzahl["halter_bedientableau_4fach"] = self.anzahl("bedienstation_4fach_kpl") self._anzahl["bedienstation_6fach_kpl"] = eas.anzahl("bedienstation_6fach_kpl", 0) self._anzahl["halter_bedientableau_6fach"] = self.anzahl("bedienstation_6fach_kpl") self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0) self._anzahl["halter_fuer_drucktaster"] = self.anzahl("drucktaster_automatische_umfahrung") # # summe_bedienstationen self._anzahl["ET200_SP"] = anzahl.get("ET200_SP", 0) self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * 2 * self.anzahl("schaltschrank") +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ self.anzahl("unterverteiler_fuer_1flyer") +\ self.anzahl("unterverteiler_fuer_2flyer") +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_puffer") +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45")) self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_de", 0) self._anzahl["et200_sp_eingangskarte_8_de"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\ self.anzahl("unterverteiler_fuer_1flyer") * 3 +\ self.anzahl("unterverteiler_fuer_2flyer") * 7 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 4 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 5 +\ self.anzahl("unterverteiler_fuer_puffer") * 5 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 8 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 4 +\ self.anzahl("korrektur_et200_sp_eingangskarte_8_de") +\ mg.zusammenfassung().get("Kreuzungsweiche")) self._anzahl["et200_sp_eingangskarte_16_de"] = anzahl.get("et200_sp_eingangskarte_16_de", 0) self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0) self._anzahl["et200_sp_eingangskarte_8_do"] = \ self.anzahl("ET200_SP") *\ (math.ceil((self.anzahl("et200_sp_ea_ebene") *\ self.anzahl("schaltschrank") * 4 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 6 +\ self.anzahl("unterverteiler_fuer_1flyer") * 4 +\ self.anzahl("unterverteiler_fuer_2flyer") * 6 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 5 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 5 +\ self.anzahl("unterverteiler_fuer_puffer") * 7 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 6 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 9 / 1.5)) + self.anzahl("korrektur_et200_sp_eingangskarte_8_do") + mg.zusammenfassung().get("Kreuzungsweiche") * 2) self._anzahl["et200_sp_eingangskarte_16_do"] = anzahl.get("et200_sp_eingangskarte_16_do", 0) if anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last", 0) == "et200_sp_base_unit_neue_last": # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) -\ # anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = -1 * self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = 0 elif anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last", 0) == "et200_sp_base_unit_neue_last_mit_potKlemmen": # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) -\ # anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = 0 self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = -1 * self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 else: # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = 0 self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = 0 self._anzahl["et200_sp_base_unit_neue_last_mit_potKlemmen"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + self.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen")) self._anzahl["et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"] = self.anzahl("ET200_SP", 0) * (math.ceil((self.anzahl("et200_sp_eingangskarte_8_de") + self.anzahl("et200_sp_eingangskarte_8_do"))) - self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen")) self._anzahl["et200_sp_base_unit_neue_last"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + self.anzahl("korrektur_et200_sp_base_unit_neue_last")) if self.anzahl("et200_sp_base_unit_neue_last") > 0 and self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen") > 0: raise Exception("et200_sp_base_unit_neue_last und et200_sp_base_unit_neue_last_mit_potKlemmen sollten nicht beide verwendet werden") self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = anzahl.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0) self._anzahl["et200_sp_base_unit_links_gebrueckt"] = self.anzahl("ET200_SP") * (math.ceil((self.anzahl("et200_sp_eingangskarte_16_de") + self.anzahl("et200_sp_eingangskarte_16_do"))) - self.anzahl("et200_sp_base_unit_neue_last") + self.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt")) self._anzahl["SLIO"] = anzahl.get("SLIO", 0) self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ self.anzahl("unterverteiler_fuer_1flyer") +\ self.anzahl("unterverteiler_fuer_2flyer") +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_puffer") +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ self.anzahl("unterverteiler_fuer_4_rsm_direct") +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") +\ self.anzahl("busverteiler_6_rsm_direct") +\ self.anzahl("busverteiler_8_rsm_direct") +\ self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO")) self._anzahl["korrektur_slio_eingangskarte_4_de"] = anzahl.get("korrektur_slio_eingangskarte_4_de", 0) self._anzahl["slio_eingangskarte_4_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 6 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 8 +\ self.anzahl("unterverteiler_fuer_1flyer") * 6 +\ self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 6 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 13 +\ self.anzahl("unterverteiler_fuer_puffer") * 9 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 7 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 15 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") * 4 +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") * 7 +\ self.anzahl("busverteiler_8_rsm_direct") * 16 +\ self.anzahl("korrektur_slio_eingangskarte_4_de")) self._anzahl["korrektur_slio_eingangskarte_8_de"] = anzahl.get("korrektur_slio_eingangskarte_8_de", 0) self._anzahl["slio_eingangskarte_8_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\ self.anzahl("unterverteiler_fuer_1flyer") * 3 +\ self.anzahl("unterverteiler_fuer_2flyer") * 7 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 3 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 7 +\ self.anzahl("unterverteiler_fuer_puffer") * 5 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 8 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 8 +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") * 2 +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") * 4 +\ self.anzahl("busverteiler_8_rsm_direct") * 8 +\ self.anzahl("korrektur_slio_eingangskarte_8_de", 0)) self._anzahl["korrektur_slio_ausgangskarte_4_do"] = anzahl.get("korrektur_slio_ausgangskarte_4_do", 0) self._anzahl["slio_ausgangskarte_4_do"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\ self.anzahl("unterverteiler_fuer_1flyer") * 7 +\ self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 7 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 14 +\ self.anzahl("unterverteiler_fuer_puffer") * 22 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 16 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 22 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") * 24 +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\ self.anzahl("busverteiler_8_rsm_direct") * 16 +\ self.anzahl("korrektur_slio_ausgangskarte_4_do")) self._anzahl["korrektur_slio_ausgangskarte_8_do"] = anzahl.get("korrektur_slio_ausgangskarte_8_do", 0) self._anzahl["slio_ausgangskarte_8_do"] = self.anzahl("SLIO") * ((self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\ self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\ self.anzahl("unterverteiler_fuer_1flyer") * 8 +\ self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 8 +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 14 +\ self.anzahl("unterverteiler_fuer_puffer") * 22 +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") * 16 +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") * 22 +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") * 24 +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\ self.anzahl("busverteiler_8_rsm_direct") * 16) / 2 +\ self.anzahl("korrektur_slio_ausgangskarte_8_do")) self._anzahl["korrektur_slio_power_modul"] = anzahl.get("korrektur_slio_power_modul", 0) self._anzahl["slio_power_modul"] = self.anzahl("SLIO") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO") * 1 +\ self.anzahl("korrektur_slio_power_modul")) self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = anzahl.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0) self._anzahl["slio_4_x_dc_24v_4_x_dc_0v"] = self.anzahl("SLIO") * (math.ceil((self.anzahl("slio_eingangskarte_4_de") + self.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v")))) self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0) self._anzahl["korrektur_slio_8_x_dc_0v"] = anzahl.get("korrektur_slio_8_x_dc_0v", 0) self._anzahl["slio_8_x_dc_0v"] = self.anzahl("SLIO") * ((self.anzahl("slio_eingangskarte_8_de") + (self.anzahl("slio_ausgangskarte_4_do") / 2)) * 1 + self.anzahl("korrektur_slio_8_x_dc_0v")) # # Summe_material_in_ll # # MATERIAL VOR ORT self._anzahl["movimot_fu_mit_anschaltung"] = anzahl.get("movimot_fu_mit_anschaltung", 0) self._anzahl["sensor_optisch_traverse"] = eas.anzahl('Sensor_Traversenabfrage_optisch') self._anzahl["sensorhalter_ohne_sensor"] = anzahl.get("sensorhalter_ohne_sensor", 0) self._anzahl["reflexionslichtschranke_rsm_direct"] = eas.anzahl("Reflexionslichtschranke_RSM_DIRECT", 0) self._anzahl["stoppersensor_induktiv_mit_halter"] = eas.anzahl("Sensor induktiv Flyer+PM") self._anzahl["sensor_spulenpruefung_voll_leer"] = mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer", 0) self._anzahl["seilzugschalter"] = eas.anzahl("Seilzugschalter", 0) self._anzahl["seil_fuer_seilzugschalter"] = anzahl.get("seil_fuer_seilzugschalter", 0) self._anzahl["blitzleuchte"] = eas.anzahl("Blitzleuchte_Stoerung", 0) self._anzahl["spulenumsetzstation"] = eas.anzahl("Spulenumsetzstation", 0) self._anzahl["sensorkabel_je_20m"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") +\ mg.zusammenfassung().get("Sensor_optisch_Traverse") +\ mg.zusammenfassung().get("Sensor_induktiv_Spulenalter_Zug_positionierung") +\ mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer") +\ mg.zusammenfassung().get("Werma_Rundumleuchte_Störung") self._anzahl["stopper_weichenkabel_je_5m"] = eas.get_SA("Weiche") +\ eas.get_SA("Weiche_nach_PM_bipolar") +\ eas.get_SA("gemeinsame_Weichenrueckstellung") +\ eas.get_SA("Dreifach_Weiche_DIRECT") +\ eas.get_SA("Kreuzungsweiche") +\ eas.get_SA("Stopper") +\ eas.get_SA("Ventil_RA_3_2_abhebbar") +\ eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar") +\ eas.get_SA("Blitzleuchte_Stoerung") self._anzahl["motorkabel_je_30m"] = mg.zusammenfassung().get("RA_uni", 0) +\ mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ mg.zusammenfassung().get("RA_bi", 0) +\ mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ mg.zusammenfassung().get("Doppelstreckenantrieb", 0) self._anzahl["kabelpritschen_leitern_200_60"] = anzahl.get("kabelpritschen_leitern_200_60", 0) self._anzahl["kabelpritsche_rsm_100_60"] = anzahl.get("kabelpritsche_rsm_100_60", 0) self._anzahl["kabelpritsche_rsm_50_35"] = anzahl.get("kabelpritsche_rsm_50_35", 0) self._anzahl["klemmkasten_rsm"] = mg.zusammenfassung().get("klemmkasten_rsm", 0) self._anzahl["klemmkasten_direct_in_rsm"] = eas.anzahl("bedienstation_zweifach_Wechs_BCD_10f", 0) self._anzahl["zuleitung_75_m_unterverteiler_4x4mm2_400vac"] = self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ self.anzahl("unterverteiler_fuer_1flyer") +\ self.anzahl("unterverteiler_fuer_2flyer") +\ self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ self.anzahl("unterverteiler_fuer_puffer") +\ self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ self.anzahl("unterverteiler_fuer_12_rsm_direct") +\ self.anzahl("unterverteiler_fuer_8_rsm_direct") +\ self.anzahl("busverteiler_8_rsm_direct") self._anzahl["erdung"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ self.anzahl("motorkabel_je_30m") / 2 self._anzahl["kleinteile_rohre_schellen_kabelbinder_ect"] = anzahl.get("kleinteile_rohre_schellen_kabelbinder_ect", 0) self._anzahl["kabel_fuer_klemmkasten_und_bts_60m"] = self.anzahl("bedienst_2fach_wechs_bcd_10f") +\ self.anzahl("bedienstation_2fach_kpl") +\ self.anzahl("halter_bedientableau_2fach") +\ self.anzahl("bedienstation_3fach_kpl") +\ self.anzahl("halter_bedientableau_3fach") +\ self.anzahl("halter_bedientableau_4fach") +\ self.anzahl("bedienstation_4fach_kpl") +\ self.anzahl("bedienstation_6fach_kpl") self._anzahl["kabel_fuer_1fach_bts_zug_wechseln"] = self.anzahl("bedienstation_1fach_kpl") if anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) == "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) -\ # anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = -1 * self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = 0 elif anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) == "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) -\ # anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = -1 * self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = 0 else: # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = 0 self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = 0 self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc") self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc") if self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] > 0 and self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] > 0: raise Exception("zuleitung 12x4 und 12x2.5 sollten nicht beide verwendet werden") if 'direct' in mg.get_deckblatt_value("SYSTEM"): self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = mg.get_deckblatt_value("RSM") else: self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = 0 if 'direct' in mg.get_deckblatt_value("SYSTEM"): self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = mg.get_deckblatt_value("RSM") +\ self.anzahl("klemmkasten_rsm") else: self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = self.anzahl("klemmkasten_rsm") self._anzahl["korrektur_profinetkabel"] = anzahl.get("korrektur_profinetkabel", 0) self._anzahl["profinetkabel"] = self.anzahl("sps_simatic_s7_1517_3") +\ self.anzahl("sps_simatic_s7_1515_2") +\ self.anzahl("sps_simatic_s7_cpu315_2_pn_dp") +\ self.anzahl("sps_simatic_s7_cpu317_2_pn_dp") +\ self.anzahl("sps_et200_1512sp") +\ self.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc") +\ self.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc") +\ self.anzahl("korrektur_profinetkabel") self._anzahl["schnittstellen_8x1mm2_30m"] = mg.zusammenfassung().get("Interface_Putzmaschine", 0) +\ mg.zusammenfassung().get("Interface_Doffer", 0) # remove all elements with the number of 0. They are of no use l = [] for k,v in self._anzahl.items(): if v == 0: l.append(k) for item in l: del self._anzahl[item] with open('HW_Daten.txt', 'w') as convert_file: convert_file.write(json.dumps(self._anzahl)) def __repr__(self): return repr(self._anzahl) def anzahl(self, partname, default_val = 0): return self._anzahl.get(partname, default_val) def summe_gesamt(self): """ :return: price sum of all given items within self._anzahl """ return (self.summe_in_LL() + self.summe_vorort()) def summe_in_LL(self): res = 0 for k,anz in self._anzahl.items(): if k in self.Keys_of_Vor_Ort: continue elif k not in self.ep: continue elif k in self.Keys_of_Schaltschrank: preis = anz * self.ep[k] * self.anzahl("schaltschrank") else: preis = anz * self.ep[k] res += preis return res def summe_vorort(self): res = 0 for k,anz in self._anzahl.items(): if k in self.Keys_of_Vor_Ort: preis = anz * self.ep[k] res += preis return res def summe_h_unterverteiler_hardware(self): """ gibt dies Summer der Stunden zur Montage der Unterverteiler hardware zurück""" keys_unterverteiler = [ "unterverteiler_fuer_1neuenhauser_pm", "unterverteiler_fuer_1flyer", "unterverteiler_fuer_2flyer", "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", "unterverteiler_fuer_puffer", "unterverteiler_fuer_5_rsm_fa", "unterverteiler_fuer_10_rsm_fa", "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", "unterverteiler_fuer_4_rsm_direct", "unterverteiler_fuer_12_rsm_direct", "unterverteiler_fuer_8_rsm_direct", "busverteiler_6_rsm_direct", "busverteiler_8_rsm_direct", ] zeiten = dict() res = 0 for k in keys_unterverteiler: anz = self._anzahl.get(k, 0) dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 zeiten[k] = dauer res += dauer return res def summe_h_unterverteiler_e_werkstatt(self): """ gibt dies Summer der Stunden zur Montage der Unterverteiler E-Werkstatt zurück""" keys_unterverteiler = [ "unterverteiler_fuer_1neuenhauser_pm", "unterverteiler_fuer_1flyer", "unterverteiler_fuer_2flyer", "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", "unterverteiler_fuer_puffer", "unterverteiler_fuer_5_rsm_fa", "unterverteiler_fuer_10_rsm_fa", "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", "unterverteiler_fuer_4_rsm_direct", "unterverteiler_fuer_12_rsm_direct", "unterverteiler_fuer_8_rsm_direct", "busverteiler_6_rsm_direct", "busverteiler_8_rsm_direct", ] res = 0 for k in keys_unterverteiler: anz = self._anzahl.get(k, 0) dauer = anz * self.zpe_e_werkstatt[k] / 60 res += dauer return res def get_h_of(self, partname): return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60) def summe_h_bedienstationen(self): """ gibt die Summer der Stunden zur Montage der Bedienstationen zurück""" keys_bedienstationen = [ "bedienstation_1fach_kpl", "bedienst_2fach_wechs_bcd_10f", "bedienstation_2fach_kpl", "halter_bedientableau_2fach", "bedienstation_3fach_kpl", "halter_bedientableau_3fach", "bedienstation_4fach_kpl", "halter_bedientableau_4fach", "bedienstation_6fach_kpl", "halter_bedienstation_6fach", "drucktaster_automatische_umfahrung", "halter_fuer_drucktaster" ] res = 0 for k in keys_bedienstationen: anz = self._anzahl.get(k, 0) dauer = anz * self.zpe_e_werkstatt[k] / 60 res += dauer return res def summe_h_schaltschrank_hardware(self): """ gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück""" keys_schaltschrank = [ "schaltschrankgehaeuse_b1x1200_zubehoer", "schaltschrankgehaeuse_b2x800_zubehoer", "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", "sps_simatic_s7_cpu315_2_pn_dp", "speicherkarte_fuer_sps_512_kb", "sps_simatic_s7_cpu317_2_pn_dp", "speicherkarte_fuer_sps2_mb", "sps_simatic_s7_1515_2", "sps_simatic_s7_1517_3", "sps_simatic_s7_1518_4", "sps_et200_1512sp", "memory_card_256_mb", "memory_card_2_gb", "et200_sp_ea_ebene", "netzwerk_fernwartung", "abgang_400v", "abgang_24_v", "anlagenrechner", "anlagenrechner_ohne_bildschirm", "pulteinbau_monitor_srline_rflat_24fhd", "kurzhubtastatur_kbt06_mit_touchpad_uslayout", "netzwerk_display_adapter_lindy", "zusaetzlicher_bildschirm", ] res = 0 for k in keys_schaltschrank: anz = self._anzahl.get(k, 0) dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 res += dauer return res def summe_h_schaltschrank_e_werkstatt(self): """ gibt die Summer der Stunden zur Montage des Schaltschranks in der E-Werkstatt zurück""" keys_schaltschrank = [ "schaltschrankgehaeuse_b1x1200_zubehoer", "schaltschrankgehaeuse_b2x800_zubehoer", "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", "sps_simatic_s7_cpu315_2_pn_dp", "speicherkarte_fuer_sps_512_kb", "sps_simatic_s7_cpu317_2_pn_dp", "speicherkarte_fuer_sps2_mb", "sps_simatic_s7_1515_2", "sps_simatic_s7_1517_3", "sps_simatic_s7_1518_4", "sps_et200_1512sp", "memory_card_256_mb", "memory_card_2_gb", "et200_sp_ea_ebene", "netzwerk_fernwartung", "abgang_400v", "abgang_24_v", "anlagenrechner", "anlagenrechner_ohne_bildschirm", "pulteinbau_monitor_srline_rflat_24fhd", "kurzhubtastatur_kbt06_mit_touchpad_uslayout", "netzwerk_display_adapter_lindy", "zusaetzlicher_bildschirm", ] res = 0 for k in keys_schaltschrank: anz = self._anzahl.get(k, 0) dauer = anz * self.zpe_e_werkstatt[k] / 60 res += dauer return res def summe_h_zeiten_hardwareplanung(self): summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware() summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware() return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware) class Dienstleistung(): # Angaben in h mengen = { "Pflichtenheft_Autom_Schnittstellen": 0, ## Hardwareplanung #"Erstellung_Steuerungslayout": 1, #"Schaltplanerstellung_incl_Korrekturen": 1, #"Projektkoordination": 1, #"Materialdispo": 1, #"Abstimmung_mit_E_Werkstatt": 1, #"Erstellen_E_Montageunterlagen": 1, # Test_und_Installation # "PC_Installation": 0, "Oberfläche_Simulation": 0, "SPS_Test_im_Haus_Simulation": 0, ## Dokumentation "Bedienerhandbuch": 16, "SPS_Doku": 15, "PC_Doku": 0, ## Elektrowerkstatt #Schaltschrankbau #Unterverteilerbau #Klemmkastenbau_je_2h #Bedientableaubau "Vormontage_im_Haus": 0 } def __init__(self, anzahl, hw: type[HW]): # hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet self._Hours = self.mengen # "Pflichtenheft_Autom_Schnittstellen": 0, ## Hardwareplanung FaktorLayout = 0.25 FaktorSchaltplan = 0.6 FaktorProjektkoord = 0.15 FaktorDispo = 0.2 FaktorAbstimmung = 0.05 FaktorMontageUnterlagen = 0.05 self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_zeiten_hardwareplanung() * FaktorLayout self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorSchaltplan self._Hours["Projektkoordination"] = hw.summe_h_zeiten_hardwareplanung() * FaktorProjektkoord self._Hours["Materialdispo"] = hw.summe_h_zeiten_hardwareplanung() * FaktorDispo self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_zeiten_hardwareplanung() * FaktorAbstimmung self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorMontageUnterlagen # Test_und_Installation self._Hours["PC_Installation"] = hw.anzahl("anlagenrechner") * 8 * hw.anzahl("schaltschrank", 0) self._Hours["Oberfläche_Simulation"] = anzahl.get("Oberfläche_Simulation", 0) #TODO was heisst hier bedingt ändern? self._Hours["SPS_Test_im_Haus_Simulation"] = anzahl.get("SPS_Test_im_Haus_Simulation", 0) ## Dokumentation self._Hours["Bedienerhandbuch"] = anzahl.get("Bedienerhandbuch", 0) self._Hours["SPS_Doku"] = anzahl.get("SPS_Doku", 0) self._Hours["PC_Doku"] = anzahl.get("PC_Doku", 0) ## Elektrowerkstatt self._Hours["Schaltschrankbau"] = hw.summe_h_schaltschrank_e_werkstatt() self._Hours["Unterverteilerbau"] = hw.summe_h_unterverteiler_e_werkstatt() self._Hours["Klemmkastenbau_je_2h"] = (hw.anzahl("klemmkasten_rsm") + hw.anzahl("klemmkasten_direct_in_rsm")) * 2 self._Hours["Bedientableaubau"] = hw.get_h_of("bedienstation_1fach_kpl") +\ hw.get_h_of("bedienst_2fach_wechs_bcd_10f")+\ hw.get_h_of("bedienstation_2fach_kpl") +\ hw.get_h_of("bedienstation_3fach_kpl") +\ hw.get_h_of("bedienstation_4fach_kpl") +\ hw.get_h_of("bedienstation_6fach_kpl") +\ hw.get_h_of("drucktaster_automatische_umfahrung") self._Hours["Vormontage_im_Haus"] = anzahl.get("Vormontage_im_Haus", 0) def __repr__(self): return repr(self._Hours) def anzahl(self, partname, default_val = 0): return self._Hours.get(partname, default_val) def get_hours_of(self, dlname): return self._Hours.get(dlname, 0) def summe_stunden_dienstleistung_in_landsberg(self): """returns hours necessary""" hours_necessary = self.stunden_diensleistung_hardwareplanung() +\ self.stunden_elektrowerkstatt() return hours_necessary def stunden_diensleistung_hardwareplanung(self): """return hours of hardware-bucheting, test and installation""" keys_hardwareplanung = [ "Pflichtenheft_Autom_Schnittstellen", "Erstellung_Steuerungslayout", "Schaltplanerstellung_incl_Korrekturen", "Projektkoordination", "Materialdispo", "Abstimmung_mit_E_Werkstatt", "Erstellen_E_Montageunterlagen", "PC_Installation", "Oberfläche_Simulation", "SPS_Test_im_Haus_Simulation" ] res = 0 for k in keys_hardwareplanung: dauer = self.get_hours_of(k) res += dauer return res def stunden_elektrowerkstatt(self): keys_elektrowerkstatt = [ "Schaltschrankbau", "Unterverteilerbau", "Klemmkastenbau_je_2h", "Bedientableaubau", "Vormontage_im_Haus" ] res = 0 for k in keys_elektrowerkstatt: dauer = self.get_hours_of(k) res += dauer return res def stunden_elektro_Landsberg(self): return 0 #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": 0.75, #(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.35, #(h/St) "Erdung": 0.5, #(h) } def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]): #für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt self._mehraufwand = 0.1 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 = {} self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\ hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer") self._Mengen["Unterverteiler_montieren"] = hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") self._Mengen["Pritsche_montieren_umbauen_demontieren"] = hw.anzahl("kabelpritschen_leitern_200_60") self._Mengen["Pritsche_in_RSM_montieren"] = hw.anzahl("kabelpritsche_rsm_100_60") self._Mengen["Motor_verdrahten_und_anschliessen"] = mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0) self._Mengen["Tableau_befestigen_und_anschliessen"] = \ hw.anzahl( "bedienstation_1fach_kpl") +\ hw.anzahl("bedienst_2fach_wechs_bcd_10f") +\ hw.anzahl("bedienstation_2fach_kpl") +\ hw.anzahl("halter_bedientableau_2fach") +\ hw.anzahl("bedienstation_3fach_kpl") +\ hw.anzahl("halter_bedientableau_3fach") +\ hw.anzahl("bedienstation_4fach_kpl") +\ hw.anzahl("halter_bedientableau_4fach") +\ hw.anzahl("bedienstation_6fach_kpl") +\ hw.anzahl("halter_bedientableau_6fach") +\ hw.anzahl("drucktaster_automatische_umfahrung") self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\ ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") self._Mengen["Sensoren_montieren"] = hw.anzahl("sensorkabel_je_20m") self._Mengen["Seilzugschalter_installieren"] = ea.anzahl("Seilzugschalter") self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung") self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m") self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10 def set_mehraufwand(self, PS): if PS > 1 or PS < 0: raise Exception("Falsche Spanne") self._mehraufwand = PS def dauer_emo_h(self): keys_tätigkeiten_1 = [ "Unterverteiler_montieren", "Sensoren_montieren", "Seilzugschalter_installieren", "Blitzleuchte_installieren", "Weiche_Stopper_anschliessen", "Erdung", "Schaltschrank_aufstellen", "Motor_verdrahten_und_anschliessen", "Tableau_befestigen_und_anschliessen", "Schnittstelle_Flyer_Putzmaschine" ] keys_1 = 0 for k in keys_tätigkeiten_1: dauer = self.montagezeiten.get(k) * self._Mengen.get(k) keys_1 += dauer keys_tätigkeiten_2 = [ "Pritsche_montieren_umbauen_demontieren", "Pritsche_in_RSM_montieren" ] keys_2 = 0 for k in keys_tätigkeiten_2: dauer = self._Mengen.get(k) / self.montagezeiten.get(k) keys_2 += dauer return math.ceil((keys_1 + keys_2)) def dauer_emo_h_incl_mehrauwand(self): return (self.dauer_emo_h() * (1 + self._mehraufwand)) class Anschlussl(): antrieb_cos_phi = { 0.09:0.77, 0.12:0.77, 0.18:0.77, 0.37:0.7, 0.55:0.77, 0.75:0.73, 1.1:0.81 } antrieb_strom = { 0.09:0.4, 0.12:0.55, 0.18:0.75, 0.37:1.24, 0.55:1.62, 0.75:1.75, 1.1:2.55 } mengen = { #auskommentiert, was später berechnet wird #"Anschlussspannung":400, #Volt "Motor_Art":0.12, #kilo Watt #"Anzahl_Motor":48, #"Strom_Motor":0.55, #Ampere #"Summe_Strom_Motor":26.4, #"cos_phi":0.77, #"Versorgung_SPS_und_Peripherie":3, #Ampere #"Summe_Strom_Motot_SPS_Peripherie":29.4, #Ampere #GZE #"GZE_Faktor":0.5, #"Res_Faktor":0.1, #Res #gesamtstrom #spannung #"x_Wurzel_3":1.732 #leistung #gesamtanschlussleistung } def __init__(self, anzahl:dict, mg: type[MG]): self._ANZAHL = self.mengen anzahl = self.mengen ###vorerst self._GZE_Faktor = 0.5 self._Res_Faktor = 0.1 self._Anschlussspannung = 400 self._cos_phi = self.antrieb_cos_phi.get(anzahl.get("Motor_Art", 0)) ### wird nicht verwendet, Leistungsfaktor self._x_Wurzel_3 = 1.732 self._Versorgung_SPS_und_Peripherie = 3 self._ANZAHL = anzahl self._ANZAHL["Anzahl_Motor"] = mg.zusammenfassung().get("RA_uni", 0) +\ mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ mg.zusammenfassung().get("RA_bi", 0) +\ mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ mg.zusammenfassung().get("Doppelstreckenantrieb", 0) self._ANZAHL["Summe_Strom_Motor"] = self.antrieb_strom.get(anzahl.get("Motor_Art", 0), 0) *\ anzahl.get("Anzahl_Motor", 0) self._ANZAHL["Summe_Strom_Motor_SPS_Peripherie"] = anzahl.get("Summe_Strom_Motor", 0) +\ self._Versorgung_SPS_und_Peripherie self._ANZAHL["GZF"] = anzahl.get("Summe_Strom_Motor", 0) *\ self._GZE_Faktor +\ self._Versorgung_SPS_und_Peripherie self._ANZAHL["Res"] = anzahl.get("GZF", 0) *\ self._Res_Faktor self._ANZAHL["Gesamtstrom"] = anzahl.get("GZF", 0) +\ anzahl.get("Res", 0) self._ANZAHL["Leistung"] = self._Anschlussspannung *\ anzahl.get("Gesamtstrom", 0) *\ self._x_Wurzel_3 / 1000 self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung"))) def set_Versorgung_SPS_und_Peripherie(self, Strom): self._Versorgung_SPS_und_Peripherie = Strom def set_x_Wurzel_3 (self, x): self._x_Wurzel_3 = x def set_cos_phi(self, cos): self._cos_phi = cos def set_Anschlussspannung(self, AS): self._Anschlussspannung = AS def set_GZE_Faktor(self, PS): if PS > 1 or PS < 0: raise Exception("Falsche Spanne") self._GZE_Faktor = PS def set_Res_Faktor(self, PS): if PS > 1 or PS < 0: raise Exception("Falsche Spanne") self._Res_Faktor = PS class Ergebnis(): preis_kostenart_h = { "E_Werkstatt": 32, "Schaltschrankbau_extern_Mehrkosten": 0, #Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel: extern = 50€ intern 32 € = Wert: 18€ "Dienstleistung_in_LL": 45, #aufwandeduzierung oder mehraufwand "Pflichtenheft": 60, "SPS_Programmierung": 75, "PC_Programmierung_Visualisierung": 75, "Montage_elektrisch": 36, "Inbetriebnahmetest_Hardware_durch_Montage": 36, "SPS_Inbetriebsetzung": 75, "PC_Inbetriebsetzung": 75, "Inbetriebnahmeunterstützung_durch_Montage": 36, "Dokumentation": 35, "Bedienungsanleitung_Emmert": 75, "Schulung_vor_Ort_beim_Kunden": 36, "Abnahme": 36, "SPS_Anlagenbetreuung": 75, "PC_Anlagenbetreuung": 60, "Anlagenbetreuung_durch_Montage": 36 } eingaben_h = { "Pflichtenheft":0, "SPS_Programmierung":150, "SPS_Inbetriebsetzung":130, "PC_Inbetriebsetzung":0, "Schulung_vor_Ort_beim_Kunden":0, "Abnahme":0, "SPS_Anlagenbetreuung":0, "PC_Anlagenbetreuung":0, "Anlagenbetreuung_durch_Montage":0 } def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]): self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = 1 self._Anteil_PC_Visualisierung_an_SPS = 0.3 self._Abweichung_softwareerstellung = 0 self._Abweichung_dienstleistung_in_LL = 0 self._anzahl = anzahl_h self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt() self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\ hw.get_h_of("unterverteiler_fuer_1flyer") +\ hw.get_h_of("unterverteiler_fuer_2flyer") +\ hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ hw.get_h_of("unterverteiler_fuer_puffer") +\ hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\ hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") self._anzahl["Dienstleistung_in_LL"] = dl.stunden_diensleistung_hardwareplanung() * (1 + self._Abweichung_dienstleistung_in_LL) self._anzahl["Pflichtenheft"] = anzahl_h.get("Pflichtenheft", 0) self._anzahl["SPS_Programmierung"] = anzahl_h.get("SPS_Programmierung", 0) * (1 + self._Abweichung_softwareerstellung) self._anzahl["PC_Programmierung_Visualisierung"] = anzahl_h.get("SPS_Programmierung", 0) * self._Anteil_PC_Visualisierung_an_SPS self._anzahl["Montage_elektrisch"] = emo.dauer_emo_h_incl_mehrauwand() self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch", 0) * 0.1 self._anzahl["SPS_Inbetriebsetzung"] = anzahl_h.get("SPS_Inbetriebsetzung", 0) self._anzahl["PC_Inbetriebsetzung"] = anzahl_h.get("PC_Inbetriebsetzung", 0) self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung", 0) * self._Anteil_Inbetriebnahmeunterstützung_durch_Montage self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch") self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku") self._anzahl["Schulung_vor_Ort_beim_Kunden"] = anzahl_h.get("Schulung_vor_Ort_beim_Kunden", 0) self._anzahl["Abnahme"] = anzahl_h.get("Abnahme", 0) self._anzahl["SPS_Anlagenbetreuung"] = anzahl_h.get("SPS_Anlagenbetreuung", 0) self._anzahl["PC_Anlagenbetreuung"] = anzahl_h.get("PC_Anlagenbetreuung", 0) self._anzahl["Anlagenbetreuung_durch_Montage"] = anzahl_h.get("Anlagenbetreuung_durch_Montage", 0) def set_Abweichung_dienstleistung_in_LL(self, PS): if PS > 1 : raise Exception("Falsche Spanne") self._Abweichung_dienstleistung_in_LL = PS def set_Abweichung_softwareerstellung(self, PS): if PS > 1: raise Exception("Falsche Spanne") self._Abweichung_softwareerstellung = PS def set_Anteil_PC_Visualisierung_an_SPS(self, Anteil): if Anteil > 1 or Anteil < 0: raise Exception("Falsche Spanne") self._Anteil_PC_Visualisierung_an_SPS = Anteil def set_Anteil_Inbetriebnahmeunterstützung_durch_Montage(self, Anteil): if Anteil > 1 or Anteil < 0: raise Exception("Falsche Spanne") self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = Anteil def get_sum_of_costs(self, hw: type[HW]): keys_costs = { "E_Werkstatt", "Schaltschrankbau_extern_Mehrkosten", "Dienstleistung_in_LL", "Pflichtenheft", "SPS_Programmierung", "PC_Programmierung_Visualisierung", "Montage_elektrisch", "Inbetriebnahmetest_Hardware_durch_Montage", "SPS_Inbetriebsetzung", "PC_Inbetriebsetzung", "Inbetriebnahmeunterstützung_durch_Montage", "Dokumentation", "Bedienungsanleitung_Emmert", "Schulung_vor_Ort_beim_Kunden", "Abnahme", "SPS_Anlagenbetreuung", "PC_Anlagenbetreuung", "Anlagenbetreuung_durch_Montage" } res = 0 for k in keys_costs: cost = self._anzahl[k] * self.preis_kostenart_h[k] res += cost return (res + hw.summe_gesamt()) def get_cost_of(self, partname): return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname)) def summary_costs(self, hw: type[HW]): summary = {} summary.update({"Installationsmaterial_vor_Ort": round(hw.summe_vorort(), 2)}) summary.update({"Material_in_LL": round(hw.summe_in_LL(), 2)}) keys_costs = { "E_Werkstatt", "Schaltschrankbau_extern_Mehrkosten", "Dienstleistung_in_LL", "Pflichtenheft", "SPS_Programmierung", "PC_Programmierung_Visualisierung", "Montage_elektrisch", "Inbetriebnahmetest_Hardware_durch_Montage", "SPS_Inbetriebsetzung", "PC_Inbetriebsetzung", "Inbetriebnahmeunterstützung_durch_Montage", "Dokumentation", "Bedienungsanleitung_Emmert", "Schulung_vor_Ort_beim_Kunden", "Abnahme", "SPS_Anlagenbetreuung", "PC_Anlagenbetreuung", "Anlagenbetreuung_durch_Montage" } for k in keys_costs: cost = self._anzahl[k] * self.preis_kostenart_h[k] summary.update({k: round(cost, 2)}) summary.update({"GESAMT": round(self.get_sum_of_costs(hw), 2)}) return summary