diff --git a/convert_.txt b/convert_.txt index fa7009c..2232e5f 100644 --- a/convert_.txt +++ b/convert_.txt @@ -1 +1 @@ -{"Bedienelemente_Steuerschrank": 1, "bedienstation_einfach_Zug_Wechseln": 14, "bedienstation_automatische_Umfahrung": 0, "bedienstation_zweifach_Wechs_BCD_10f": 0, "bedienstation_zweifach_Not_Aus_Reset": 10, "EAs_Unterverteiler_direct": 0, "Sensor_Traversenabfrage_optisch": 68, "Reflexionslichtschranke_RSM_DIRECT": 0, "Sensor_Stopper_induktiv": 4, "Seilzugschalter": 0, "Weiche": 35, "Weiche_nach_PM_bipolar": 0, "Dreifach_Weiche_DIRECT": 0, "Kreuzungsweiche": 1, "Stopper": 0, "Ventil_RA_3_2_abhebbar": 4, "Ventil_Doppelstreckenantrieb_5_2_abhebbar": 6, "Blitzleuchte_Stoerung": 6, "Schnittstelle_Flyer_ElectroJet": 4, "Schnittstelle_Flyer_Neuhauser": 0, "FEldbux_UV_EinAusgang": 7, "Spulenumsetzstation": 0, "RA_unidirektional": 4, "RA_unidirektional_abhebbar": 0, "RA_unidirektional_ohne_SPS_Ansteuerung": 0, "RA_bidirektional": 30, "RA_bidirektional_abhebbar": 4, "RA_bidirektional_ohne_SPS_Ansteuerung": 4, "Doppelstreckenantrieb": 6} \ No newline at end of file +{"Bedienelemente_Steuerschrank": 1, "bedienstation_einfach_Zug_Wechseln": 14, "bedienstation_automatische_Umfahrung": 0, "bedienstation_zweifach_Wechs_BCD_10f": 0, "bedienstation_zweifach_Not_Aus_Reset": 10, "bedienst_dreifach": 0, "bedienst_vierfach": 0, "bedienst_sechsfach": 0, "EAs_Unterverteiler_direct": 0, "Sensor_Traversenabfrage_optisch": 68, "Reflexionslichtschranke_RSM_DIRECT": 0, "Sensor induktiv Flyer+PM": 4, "Seilzugschalter": 0, "Weiche": 35, "Weiche_nach_PM_bipolar": 0, "gemeinsame_Weichenrueckstellung": 0, "Dreifach_Weiche_DIRECT": 0, "Kreuzungsweiche": 1, "Stopper": 0, "RA_unidirektional": 4, "RA_unidirektional_abhebbar": 0, "RA_unidirektional_mit_gemeinsamer_Wendung": 0, "RA_unidirektional_ohne_SPS_Ansteuerung": 0, "RA_bidirektional": 30, "RA_bidirektional_abhebbar": 4, "RA_bidirektional_abhebbar_gemeinsWend": 0, "RA_bidirektional_ohne_SPS_Ansteuerung": 4, "RA_in_RSM_bidirektional": 0, "Doppelstreckenantrieb": 6, "Doppelstreckenantriebgemeinsame_Wendung": 0, "gemeinsame_Wendung": 0, "Frequenzumrichter": 0, "Ventil_RA_3_2_abhebbar": 4, "Ventil_Doppelstreckenantrieb_5_2_abhebbar": 6, "Blitzleuchte_Stoerung": 6, "Schnittstelle_Flyer_ElectroJet": 4, "Schnittstelle_Putzmaschine_Neuhauser": 0, "FEldbux_UV_EinAusgang": 7, "Spulenumsetzstation": 0} \ No newline at end of file diff --git a/rieter_ekalk.py b/rieter_ekalk.py index 45e2f09..73869dd 100644 --- a/rieter_ekalk.py +++ b/rieter_ekalk.py @@ -4,7 +4,7 @@ import math import unittest import json -JSON_IDENT =5 +JSON_IDENT = 5 class MG(): def __init__(self, deckblatt:dict, **kwargs): @@ -42,7 +42,7 @@ class MG(): self._deckblatt = deckblatt - self.remove_empty(self._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: @@ -354,19 +354,9 @@ class MG(): zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) return zmengen -# Klasse zur Vererbung an alle Elemente aus denen die Halle besteht -class Item(): - def anzahl(self, partname): - return self._Mengen.get(partname, 0) - - def tojson(self): - return json.dumps(self._Mengen) - - def mengengeruest(self): - return self._Mengen # RSM_direct: -class RSM_direct(Item): +class RSM_direct(): def __init__(self, anzahl:dict): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet @@ -419,41 +409,41 @@ class RSM_direct(Item): def anzahl(self, partname): return self._Mengen.get(partname, 0) # RSM_FA: -class RSM_FA(Item): - def __init__(self, anzahl:dict): - mengen = { +class RSM_FA(): + mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "Anzahl_RSM":0, + "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":0, + "Sensor_optisch_Traverse_zusätzlich":6, #"Bedientableau_1fach":0, "Bedientableau_1fach_Korrektur":0, #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, #"Weiche":0, "Weiche_Korrektur":0, #"RRA_bi":0, "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":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, + #"Meldelampe_Überstrom_Korrektur":0, #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Hauptschalter_Ein-Meldung_Korrektur":0, #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, + #"Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, } + def __init__(self, anzahl:dict): self._Mengen = {} - self._RSM_Anzahl = anzahl.get("Anzahl_RSM", 0) - self._Mengen["Anzahl_RSM"] = self._RSM_Anzahl + 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) @@ -464,7 +454,7 @@ class RSM_FA(Item): sensorfaktor_premium = 4 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): sensorfaktor_beidseitig = 1 - self._Mengen["Sensor_optisch_Traverse"] = self._RSM_Anzahl*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) + 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 @@ -474,9 +464,9 @@ class RSM_FA(Item): tableaufaktor_premium = 0 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): tableaufaktor_beidseitig = 1 - self._Mengen["Bedientableau_1fach"] = self._RSM_Anzahl*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0) + 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(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_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 @@ -485,7 +475,7 @@ class RSM_FA(Item): weichefaktor_premium = 3 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): weichefaktor_beidseitig = 1 - self._Mengen["Weiche"] = self._RSM_Anzahl * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0) + 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 @@ -494,13 +484,13 @@ class RSM_FA(Item): rrafaktor_premium = 2 if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): rrafaktor_beidseitig = 1 - self._Mengen["RRA_bi"] = self._RSM_Anzahl * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0) + 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"] = self._RSM_Anzahl * 4 + self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4 else: self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0 @@ -512,28 +502,29 @@ class RSM_FA(Item): seilzfaktor_premium = 2 if (anzahl.get("Getriebe_in_der_Mitte", False)): seilzfaktor_getriebe_mitte = 2 - self._Mengen["Seilzugschalter"] = self._RSM_Anzahl * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) + self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) if self.flex_a_premium(): - self._Mengen["Mit_Drucktaster"] = self._RSM_Anzahl * 8 + 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(self._RSM_Anzahl/10) + anzahl.get("Meldelampe_Überstrom_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(self._RSM_Anzahl/10) + anzahl.get("Hauptschalter_Ein-Meldung_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(self._RSM_Anzahl/10) + anzahl.get("Werma_Rundumleuchte_Störung_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(Item): - def __init__(self, anzahl:dict): - mengen = { +class Flyer_F40_EJet_inc_Putz(): + mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Anzahl":0, "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, @@ -579,6 +570,7 @@ class Flyer_F40_EJet_inc_Putz(Item): #"Werma_Rundumleuchte_Störung":0, "Werma_Rundumleuchte_Störung_Korrektur":0, } + def __init__(self, anzahl:dict): self._Mengen = {} self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\ @@ -596,25 +588,25 @@ class Flyer_F40_EJet_inc_Putz(Item): 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_optisch_Traverse_Korrektur"] = self.mengen.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["Sensor_induktiv_Spulenhalter_Korrektur"] = self.mengen.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["Bedientableau_2fach_Korrektur"] = self.mengen.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["Interface_Doffer_Korrektur"] = self.mengen.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) + self._Mengen["Weiche_Korrektur"] = self.mengen.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) + self._Mengen["Weiche_nach_Flyer_bipolar_Korrektur"] = self.mengen.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) + self._Mengen["Dreifachweiche"] = self.mengen.get("Dreifachweiche", 0) + self._Mengen["Wechsel"] = self.mengen.get("Wechsel", 0) + self._Mengen["Stopper"] = self.mengen.get("Stopper", 0) + self._Mengen["RA_uni"] = self.mengen.get("RA_uni", 0) rraunifaktor_durchfahrt = 0 rraunifaktor_nachpuffer = 1 @@ -623,21 +615,21 @@ class Flyer_F40_EJet_inc_Putz(Item): 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) + self._Mengen["RA_uni_abhebbar_Korrektur"] = self.mengen.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) + self._Mengen["RA_uni_ohne_SPS_Ansteuerung_Korrektur"] = self.mengen.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl else: self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) - self._Mengen["RRA_BI_abhebbar_Korrektur"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) + self._Mengen["RRA_BI_abhebbar_Korrektur"] = self.mengen.get("RRA_BI_abhebbar_Korrektur", 0) - self._Mengen["RRA_bi"] = anzahl.get("RRA_bi", 0) + self._Mengen["RRA_bi"] = self.mengen.get("RRA_bi", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("RRA_bi_ohne_SPS_Ansteuerung_Korrektur", 0) @@ -648,19 +640,20 @@ class Flyer_F40_EJet_inc_Putz(Item): 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["Doppelstreckenantrieb_Korrektur"] = self.mengen.get("Doppelstreckenantrieb_Korrektur", 0) + self._Mengen["RA_bi_abhebbar_unger_Schiene"] = self.mengen.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["Meldelampe_Überstrom_Korrektur"] = self.mengen.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["Hauptschalter_Ein-Meldung_Korrektur"] = self.mengen.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) - + self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = self.mengen.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) # Putzmaschine_(Neuenhauser): -class Putzmaschine_Neuenhauser(Item): +class Putzmaschine_Neuenhauser(): def __init__(self, anzahl:dict): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet @@ -730,12 +723,12 @@ class Putzmaschine_Neuenhauser(Item): 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(Item): - def __init__(self, anzahl:dict): - mengen = { +class Flyer_EJet(): + mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Anzahl":0, "Flyer":0, # äquivalent zu 'Anzahl' @@ -764,6 +757,8 @@ class Flyer_EJet(Item): #"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) @@ -795,10 +790,11 @@ class Flyer_EJet(Item): 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(Item): +class Verbindungsstrecken_Wechsel(): def __init__(self, anzahl:dict, Begegnungsstrecke_bypass:int): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet @@ -837,10 +833,11 @@ class Verbindungsstrecken_Wechsel(Item): 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(Item): +class Puffer(): def __init__(self, anzahl:dict): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet @@ -876,9 +873,10 @@ class Puffer(Item): 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(Item): +class Turm(): mengen = { #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet #"Anzahl":0, @@ -907,25 +905,76 @@ class Turm(Item): 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(): - def __init__(self, anzahl:dict, mg: type[MG]): + stueckzahl = { + "schaltschrank":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.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), - # "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 + "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, @@ -942,7 +991,7 @@ class EA(): # Ermittlung_Mengengeruest_Anzahl, "Sensor_Traversenabfrage_optisch": (1, 0), "Reflexionslichtschranke_RSM_DIRECT": (1, 0), - "Sensor_Stopper_induktiv": (1, 0), + "Sensor induktiv Flyer+PM": (1, 0), "Seilzugschalter": (1, 0), "Weiche": (0, 1), @@ -956,8 +1005,7 @@ class EA(): "Blitzleuchte_Stoerung": (0, 1), "Schnittstelle_Flyer_ElectroJet": (2, 2), - "Schnittstelle_Flyer_Putzmaschine_ElectroJet": (2, 2), - "Schnittstelle_Flyer_Neuhauser": (4, 4), + "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), "FEldbux_UV_EinAusgang": (2, 1), "Spulenumsetzstation": (40, 20), @@ -974,71 +1022,68 @@ class EA(): "Doppelstreckenantrieb": (0, 2), "Doppelstreckenantriebgemeinsame_Wendung": (0, 1), "gemeinsame_Wendung": (0, 2), - "Frequenzumrichter": (1, 3), + "Frequenzumrichter": (1, 3) } - self._Anzahl = anzahl - self._Anzahl["Bedienelemente_Steuerschrank"] = 1 # es gibt immer genau einen Steuerschrank + self._Anzahl["Bedienelemente_Steuerschrank"] = self.stueckzahl.get("schaltschrank") 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"] = zmengen.get(, 0) # Eingaben - # self._Anzahl["bedienst_vierfach"] = zmengen.get(, 0) - # self._Anzahl["bedienst_sechsfach"] = zmengen.get(, 0) + self._Anzahl["bedienst_dreifach"] = self.stueckzahl.get("bedienst_dreifach") + self._Anzahl["bedienst_vierfach"] = self.stueckzahl.get("bedienst_vierfach") + self._Anzahl["bedienst_sechsfach"] = self.stueckzahl.get("bedienst_sechsfach") 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_Stopper_induktiv"] = zmengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung", 0) ###f dasselbe wie Sensor induktiv Flyer+PM? + 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"] = zmengen.get(, 0) # Eingabe + self._Anzahl["gemeinsame_Weichenrueckstellung"] = self.stueckzahl.get("gemeinsame_Weichenrueckstellung") 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["Ventil_RA_3_2_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) +\ - zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0)+\ - zmengen.get("RA_bi_abhebbar", 0) +\ - self._Anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0) - # + zmengen.get("", 0) # TODO B65 ist immer 0; Vorgabe? + 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"] = self.stueckzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung") + 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"] = self.stueckzahl.get("RA_bidirektional_abhebbar_gemeinsWend") + self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) + self._Anzahl["RA_in_RSM_bidirektional"] = self.stueckzahl.get("RA_in_RSM_bidirektional") + self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0) + self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = self.stueckzahl.get("Doppelstreckenantriebgemeinsame_Wendung") + self._Anzahl["gemeinsame_Wendung"] = self.stueckzahl.get("gemeinsame_Wendung") + self._Anzahl["Frequenzumrichter"] = self.stueckzahl.get("Frequenzumrichter") + self._Anzahl["Ventil_RA_3_2_abhebbar"] = anzahl.get("RA_unidirektional_abhebbar") +\ + self.stueckzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung") +\ + anzahl.get("RA_unidirektional_ohne_SPS_Ansteuerung", 0) +\ + anzahl.get("RA_bidirektional_abhebbar", 0) +\ + self.stueckzahl.get("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") - # TODO die Referenz von MG B89 ist eine Leerzeile -> 79 - # self._Anzahl["Schnittstelle_Flyer_Putzmaschine_ElectroJet"] = zmengen.get(, 0) # TODO ist leer - self._Anzahl["Schnittstelle_Flyer_Neuhauser"] = mg.get_value_of_object("putzmaschine_neuenhauser", "Interface_Putzmaschine") + 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"] = zmengen.get("Spulenumsetzstation", 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"] = zmengen.get(, 0) # TODO immer 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"] = zmengen.get(, 0) # TODO wird nicht befüllt - self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) - # self._Anzahl["RA_in_RSM_bidirektional"] = zmengen.get(, 0) # TODO immer 0 - self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0) - # self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = zmengen.get(, 0) # TODO immer 0 - # self._Anzahl["gemeinsame_Wendung"] = zmengen.get(, 0) # TODO immer 0 - # self._Anzahl["Frequenzumrichter"] = zmengen.get(, 0) # TODO immer 0 + self._Anzahl["Spulenumsetzstation"] = self.stueckzahl.get("Spulenumsetzstation", 0) + def getEA(self, partname): return (self.EAs[partname][0], self.EAs[partname][1]) def getE(self, partname): @@ -1086,16 +1131,17 @@ class EA(): return (SiemensS7_32DE, SiemensS7_32DA) 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_b1x1200_zubehoer": 0, ###f bezug zu anzahl schaltschrank? "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": 0, + "sps_simatic_s7_1515_2": 1, "sps_simatic_s7_1517_3": 0, "sps_simatic_s7_1518_4": 0, "sps_et200_1512sp": 0, @@ -1111,7 +1157,7 @@ class HW(): "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, "netzwerk_display_adapter_lindy": 0, "zusaetzlicher_bildschirm":0, - "schaltschrank":1, + #"schaltschrank":1, #"unterverteiler_fuer_1neuenhauser_pm":0, "unterverteiler_fuer_1flyer":0, @@ -1121,10 +1167,10 @@ class HW(): "unterverteiler_fuer_puffer":1, #"unterverteiler_fuer_5_rsm_fa":0, - "korrektur_1_rsm_zusaetzlich_im_unterverteiler":-1, + "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, #"unterverteiler_fuer_10_rsm_fa":0, - "korrektur_unterverteiler_fuer_10_rsm_fa":-2, + "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, #"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0, "korrektur_3_rsm_zusaetzlich_im_unterverteiler":0, @@ -1132,16 +1178,16 @@ class HW(): "unterverteiler_fuer_4_rsm_direct":0, "korrektur_4_rsm_zusaetzlich_im_unterverteiler":0, - "unterverteiler_fuer_12_rsm_direct":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_unterverteiler":0, + #"busverteiler_6_rsm_direct":0, + "korrektur_6_rsm_zusaetzlich_im_busverteiler":0, - "busverteiler_8_rsm_direct":0, - "korrektur_busverteiler_8_rsm_zusaetzlich_im_unterverteiler":0, + #"busverteiler_8_rsm_direct":0, + "korrektur_8_rsm_zusaetzlich_im_busverteiler":0, #"antrieb_unidirektional_halbleiter":0, #"antrieb_bidirektional_halbleiter":0, @@ -1205,7 +1251,7 @@ class HW(): # MATERIAL VOR ORT "movimot_fu_mit_anschaltung":0, # "sensor_optisch_traverse":0, - # "sensorhalter_ohne_sensor_":0, + "sensorhalter_ohne_sensor":0, # "reflexionslichtschranke_rsm_direct":0, # "stoppersensor_induktiv_mit_halter":0, # "sensor_spulenpruefung_voll_leer":0, @@ -1226,7 +1272,7 @@ class HW(): # "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, + # "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, ###m entweder "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc" oder "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" "korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":-6, # "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0, "korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0, @@ -1239,20 +1285,20 @@ class HW(): # Einzelteilpreise in € ep = { - # Schaltschrank Einzelpreis + # Schaltschrank Einzelpreis "schaltschrankgehaeuse_b1x800_zubehoer": 2000, # - "schaltschrankgehaeuse_b2x800_zubehoer": 4663, # 790821101 - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5721, # 790821102 - "sps_simatic_s7_cpu315_2_pn_dp": 2237, # 708003004 - "speicherkarte_fuer_sps_512_kb": 173, # 708003012 + "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": 2174, # 790008100 - "sps_simatic_s7_1517_3": 3828, # 790008101 + "sps_simatic_s7_1515_2": 2173.5, # 790008100 + "sps_simatic_s7_1517_3": 3827.8, # 790008101 "sps_simatic_s7_1518_4": 5892, # 6ES7518-4AP00-0AB0 - "sps_et200_1512sp": 706, # 709000003 + "sps_et200_1512sp": 705.75, # 709000003 "memory_card_256_mb": 0, # 708015093 - "memory_card_2_gb": 516, # 708015094 + "memory_card_2_gb": 515.9, # 708015094 "et200_sp_ea_ebene": 0, # 790009001 "netzwerk_fernwartung": 750, # 790011001 "abgang_400v": 250, # ---- @@ -1264,8 +1310,7 @@ class HW(): "netzwerk_display_adapter_lindy": 650, # "zusaetzlicher_bildschirm": 1100, # # _summe_schaltschrank - - "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210 + # "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 @@ -1290,10 +1335,10 @@ class HW(): "unterverteiler_fuer_8_rsm_direct": 6736, # 790820301 # korrektur_8_rsm_zusaetzlich_im_unterverteiler - "busverteiler_6_rsm_direct": 1748, # 790801002 + "busverteiler_6_rsm_direct": 1747.53, # 790801002 # korrektur_6_rsm_zusaetzlich_im_unterverteiler - "busverteiler_8_rsm_direct": 2052, # 790801001 + "busverteiler_8_rsm_direct": 2052.26, # 790801001 # korrektur_8_rsm_zusaetzlich_im_unterverteiler "antrieb_unidirektional_halbleiter": 90, @@ -1307,26 +1352,26 @@ class HW(): "bedienstation_1fach_kpl": 59, "bedienst_2fach_wechs_bcd_10f": 105, # 790002024 - "bedienstation_2fach_kpl": 66, # 790000020 + "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": 146, # 790000033 + "bedienstation_6fach_kpl": 14.58, # 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": 199, # 709000006 + "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, # 709000032 + "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 @@ -1338,7 +1383,7 @@ class HW(): "slio_eingangskarte_8_de": 38, # 709000511 "slio_ausgangskarte_4_do": 39, # 709000021 "slio_ausgangskarte_8_do": 46, # 709000021 - "slio_power_modul": 18, # 709000014 + "slio_power_modul": 18.22, # 709000014 "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 "slio_8_x_dc_24v": 138, # 709000011 "slio_8_x_dc_0v": 13, # 709000010 @@ -1347,7 +1392,7 @@ class HW(): # MATERIAL VOR ORT "movimot_fu_mit_anschaltung": 550, "sensor_optisch_traverse": 27, # 827072200 - "sensorhalter_ohne_sensor_": 8, # 827072xxx + "sensorhalter_ohne_sensor": 8, # 827072xxx "reflexionslichtschranke_rsm_direct": 45, # 827072207 "stoppersensor_induktiv_mit_halter": 63, # 827072205 "sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041 @@ -1374,11 +1419,11 @@ class HW(): "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, # 725000019 + "schnittstellen_8x1mm2_30m": 35.4, # 725000019 } # Zeit pro Einheit in min zpe_dienstl_hardwareplanung = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 0, ###f 4200+N12 + "schaltschrankgehaeuse_b1x1200_zubehoer": 4200, "schaltschrankgehaeuse_b2x800_zubehoer": 4200, "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800, "sps_simatic_s7_cpu315_2_pn_dp": 0, @@ -1418,7 +1463,7 @@ class HW(): "busverteiler_8_rsm_direct":960 } zpe_e_werkstatt = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 0, ###f 2400 + O12 + "schaltschrankgehaeuse_b1x1200_zubehoer": 2400, "schaltschrankgehaeuse_b2x800_zubehoer": 4800, "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160, "sps_simatic_s7_cpu315_2_pn_dp": 0, @@ -1479,7 +1524,7 @@ class HW(): Keys_of_Vor_Ort = [ "movimot_fu_mit_anschaltung", "sensor_optisch_traverse", - "sensorhalter_ohne_sensor_", + "sensorhalter_ohne_sensor", "reflexionslichtschranke_rsm_direct", "stoppersensor_induktiv_mit_halter", "sensor_spulenpruefung_voll_leer", @@ -1501,19 +1546,40 @@ class HW(): "kabel_fuer_1fach_bts_zug_wechseln", "zuleitung_75_m_unterverteiler_4x4mm2_400vac", "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", - "korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", - "korrektur_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" ] - - def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]): + Keys_of_Schaltschrank = [ + "schaltschrankgehaeuse_b1x1200_zubehoer", ###f bezug zu anzahl schaltschrank? + "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], ejpu: type[Flyer_F40_EJet_inc_Putz], ejet: type[Flyer_EJet], pu: type[Puffer], fa: type[RSM_FA]): self._anzahl = anzahl - self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0) self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b2x800_zubehoer", 0) self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0) @@ -1533,7 +1599,7 @@ class HW(): self._anzahl["memory_card_2_gb"] = anzahl.get("sps_simatic_s7_1518_4", 0) - self._anzahl["et200_sp_ea_ebene"] = self.mengen.get("et200_sp_ea_ebene", 0) # TODO: Violett, nur bedingt ändern + self._anzahl["et200_sp_ea_ebene"] = self.mengen.get("et200_sp_ea_ebene", 0) self._anzahl["netzwerk_fernwartung"] = self.mengen.get("netzwerk_fernwartung", 0) self._anzahl["abgang_400v"] = self.mengen.get("abgang_400v", 0) self._anzahl["abgang_24_v"] = self.mengen.get("abgang_24_v", 0) @@ -1542,9 +1608,9 @@ class HW(): self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = self.mengen.get("pulteinbau_monitor_srline_rflat_24fhd", 0) self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = self.mengen.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0) self._anzahl["netzwerk_display_adapter_lindy"] = self.mengen.get("netzwerk_display_adapter_lindy", 0) - self._anzahl["zusaetzlicher_bildschirm"] = self.mengen.get("zusaetzlicher_bildschirm", 0) # end Violett - self._anzahl["schaltschrank"] = self.mengen.get("schaltschrank", 0) - self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("RSM") + self._anzahl["zusaetzlicher_bildschirm"] = self.mengen.get("zusaetzlicher_bildschirm", 0) + self._anzahl["schaltschrank"] = eas.stueckzahl.get("schaltschrank") + self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("Neuenhauser-Putzmaschine") self._anzahl["unterverteiler_fuer_1flyer"] = self.mengen.get("unterverteiler_fuer_1flyer", 0) self._anzahl["unterverteiler_fuer_2flyer"] = self.mengen.get("unterverteiler_fuer_2flyer", 0) @@ -1552,53 +1618,57 @@ class HW(): self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = self.mengen.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) self._anzahl["unterverteiler_fuer_puffer"] = self.mengen.get("unterverteiler_fuer_puffer", 0) - - + self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = self.mengen.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) + self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = self.mengen.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) - # TODO "korrektur_5_rsm_zusaetzlich_im_unterverteiler" + 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) - # TODO "korrektur_10_rsm_zusaetzlich_im_unterverteiler" 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) - # TODO "korrektur_3_rsm_zusaetzlich_im_unterverteiler" - - # TODO "unterverteiler_fuer_4_rsm_direct" ist 0. Warum? - # "korrektur_4_rsm_zusaetzlich_im_unterverteiler" - - - self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("RSM") /12) + anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) - # "korrektur_12_rsm_zusaetzlich_im_unterverteiler" - - # TODO "unterverteiler_fuer_8_rsm_direct" ist 0, warum? - # "korrektur_8_rsm_zusaetzlich_im_unterverteiler" - self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("RSM") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_unterverteiler", 0) - # "korrektur_6_rsm_zusaetzlich_im_unterverteiler" - - self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("RSM") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) - # "korrektur_8_rsm_zusaetzlich_im_unterverteiler" + 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") - - # "antrieb_unidirektional_schuetz" TODO wo sind die? in Excel 0 - # "antrieb_bidirektional_schuetz" - - # "motorschutzschalter" TODO von EAS holen? + # temp1 = ejpu.anzahl("RRA_bi") + # temp2 = ejpu.anzahl("RRA_BI_abhebbar") +\ + # ejpu.anzahl("RRA_bi_ohne_SPS_Ansteuerung") +\ + # ejpu.anzahl("Doppelstreckenantrieb") +\ + # ejet.anzahl("RA_bi_ohne_SPS-Ansteuerung") +\ + # ejet.anzahl("RA_bi_abhebbar") +\ + # ejet.anzahl("RA_bi") +\ + # ejet.anzahl("Doppelstreckenantrieb") +\ + # ejet.anzahl("RA_bi_abhebbar_unger_Schiene") +\ + # pu.anzahl("RA_bi_ungerade_Schiene") +\ + # pu.anzahl("Doppelstreckenantrieb") +\ + # fa.anzahl("RRA_bi") +\ + # fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung") + # self._anzahl["antrieb_bidirektional_halbleiter"] = temp1 + temp2 ###f + self._anzahl["antrieb_bidirektional_halbleiter"] = 44 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) ###f "bedienstation_1fach_Not_Aus" keine Anzahl + 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_2fach_kpl", 0) + self._anzahl["bedienstation_2fach_kpl"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Reset", 0) self._anzahl["halter_bedientableau_2fach"] = anzahl.get("bedienstation_2fach_kpl", 0) self._anzahl["bedienstation_3fach_kpl"] = eas.anzahl("bedienstation_3fach_kpl", 0) self._anzahl["halter_bedientableau_3fach"] = anzahl.get("bedienstation_3fach_kpl", 0) @@ -1661,10 +1731,9 @@ class HW(): self._anzahl["et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"] = anzahl.get("ET200_SP", 0) * (math.ceil((anzahl.get("et200_sp_eingangskarte_8_de", 0) + anzahl.get("et200_sp_eingangskarte_8_do", 0))) - anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen", 0)) - - self._anzahl["et200_sp_base_unit_neue_last"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 +\ - anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0)) self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = self.mengen.get("korrektur_et200_sp_base_unit_neue_last", 0) + self._anzahl["et200_sp_base_unit_neue_last"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 + + anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0)) self._anzahl["et200_sp_base_unit_links_gebrueckt"] = anzahl.get("ET200_SP", 0) * (math.ceil((anzahl.get("et200_sp_eingangskarte_16_de", 0) + anzahl.get("et200_sp_eingangskarte_16_do", 0))) - @@ -1757,11 +1826,12 @@ class HW(): self._anzahl["slio_4_x_dc_24v_4_x_dc_0v"] = anzahl.get("SLIO", 0) * (math.ceil((anzahl.get("slio_eingangskarte_4_de") + anzahl.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0)))) self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = self.mengen.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0) - self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0) ###f + self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0) + self._anzahl["korrektur_slio_8_x_dc_0v"] = self.mengen.get("korrektur_slio_8_x_dc_0v") self._anzahl["slio_8_x_dc_0v"] = anzahl.get("SLIO", 0) * ((anzahl.get("slio_eingangskarte_8_de", 0) + (anzahl.get("slio_ausgangskarte_4_do", 0) / 2)) * 1 + anzahl.get("korrektur_slio_8_x_dc_0v", 0)) - self._anzahl["korrektur_slio_8_x_dc_0v"] = anzahl.get("korrektur_slio_8_x_dc_0v") + # # Summe_material_in_ll @@ -1769,12 +1839,12 @@ class HW(): self._anzahl["movimot_fu_mit_anschaltung"] = anzahl.get("movimot_fu_mit_anschaltung", 0) self._anzahl["sensor_optisch_traverse"] = eas.anzahl('Sensor_Traversenabfrage_optisch') - ###f weder berechnet noch befüllt self._anzahl["sensorhalter_ohne_sensor_"] + 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_Stopper_induktiv") ###f dasselbe wie Sensor induktiv Flyer+PM?=$EAs.B39 + 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") + self._anzahl["seil_fuer_seilzugschalter"] = self.mengen.get("seil_fuer_seilzugschalter") 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") +\ @@ -1798,23 +1868,11 @@ class HW(): 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["kabelpritschen_leitern_200_60"] = self.mengen.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["erdung"] = anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) +\ - anzahl.get("motorkabel_je_30m", 0) / 2 - self._anzahl["kleinteile_rohre_schellen_kabelbinder_ect"] = anzahl.get("motorkabel_je_30m", 0) - self._anzahl["kabel_fuer_klemmkasten_und_bts_60m"] = anzahl.get("bedienst_2fach_wechs_bcd_10f", 0) +\ - anzahl.get("bedienstation_2fach_kpl", 0) +\ - anzahl.get("halter_bedientableau_2fach", 0) +\ - anzahl.get("bedienstation_3fach_kpl", 0) +\ - anzahl.get("halter_bedientableau_3fach", 0) +\ - anzahl.get("halter_bedientableau_4fach", 0) +\ - anzahl.get("bedienstation_4fach_kpl", 0) +\ - anzahl.get("bedienstation_6fach_kpl", 0) - self._anzahl["kabel_fuer_1fach_bts_zug_wechseln"] = anzahl.get("bedienstation_1fach_kpl", 0) self._anzahl["zuleitung_75_m_unterverteiler_4x4mm2_400vac"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ anzahl.get("unterverteiler_fuer_1flyer", 0) +\ anzahl.get("unterverteiler_fuer_2flyer", 0) +\ @@ -1827,6 +1885,19 @@ class HW(): anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ anzahl.get("busverteiler_8_rsm_direct", 0) + self._anzahl["erdung"] = anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) +\ + anzahl.get("motorkabel_je_30m", 0) / 2 + self._anzahl["kleinteile_rohre_schellen_kabelbinder_ect"] = self.mengen.get("kleinteile_rohre_schellen_kabelbinder_ect", 0) + self._anzahl["kabel_fuer_klemmkasten_und_bts_60m"] = anzahl.get("bedienst_2fach_wechs_bcd_10f", 0) +\ + anzahl.get("bedienstation_2fach_kpl", 0) +\ + anzahl.get("halter_bedientableau_2fach", 0) +\ + anzahl.get("bedienstation_3fach_kpl", 0) +\ + anzahl.get("halter_bedientableau_3fach", 0) +\ + anzahl.get("halter_bedientableau_4fach", 0) +\ + anzahl.get("bedienstation_4fach_kpl", 0) +\ + anzahl.get("bedienstation_6fach_kpl", 0) + self._anzahl["kabel_fuer_1fach_bts_zug_wechseln"] = anzahl.get("bedienstation_1fach_kpl", 0) + self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = self.mengen.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ anzahl.get("unterverteiler_fuer_1flyer", 0) +\ anzahl.get("unterverteiler_fuer_2flyer", 0) +\ @@ -1840,7 +1911,6 @@ class HW(): anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ anzahl.get("busverteiler_8_rsm_direct", 0) +\ anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ anzahl.get("unterverteiler_fuer_1flyer", 0) +\ anzahl.get("unterverteiler_fuer_2flyer", 0) +\ @@ -1888,26 +1958,25 @@ class HW(): def __repr__(self): return repr(self._anzahl) - def anzahl(self, partname): - return self._anzahl.get(partname, 0) + 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 """ - res = 0 - for k,anz in self._anzahl.items(): - preis = anz * self.ep[k] - res += preis - return res + 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: - pass - else: + if k not in self.ep: + continue + if k in self.Keys_of_Schaltschrank: + preis = anz * self.ep[k] * self.anzahl("schaltschrank") + if k not in self.Keys_of_Schaltschrank and k not in self.Keys_of_Vor_Ort: preis = anz * self.ep[k] - res += preis + res += preis return res def summe_vorort(self): @@ -1916,7 +1985,6 @@ class HW(): if k in self.Keys_of_Vor_Ort: preis = anz * self.ep[k] res += preis - return res def summe_h_unterverteiler_hardware(self): @@ -1945,8 +2013,8 @@ class HW(): zeiten[k] = dauer res += dauer return res - def summe_h_unterverteiler_e_werkstatt(self): ###f in Excel Antrieb unidirektional (Halbleiter) Antrieb bidirektional (Halbleiter) miteinberechnet - + + 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", @@ -1997,7 +2065,7 @@ class HW(): def summe_h_schaltschrank_hardware(self): """ gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück""" keys_schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer" + "schaltschrankgehaeuse_b1x1200_zubehoer", "schaltschrankgehaeuse_b2x800_zubehoer", "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", "sps_simatic_s7_cpu315_2_pn_dp", @@ -2062,10 +2130,14 @@ class HW(): 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 = { + mengen = { ###m unauskommentierte alle nur bedingt änderbar "Pflichtenheft_Autom_Schnittstellen": 0, ## Hardwareplanung @@ -2078,11 +2150,11 @@ class Dienstleistung(): # Test_und_Installation # "PC_Installation": 0, - #"Oberfläche_Simulation": 0, - #"SPS_Test_im_Haus_Simulation": 0, + "Oberfläche_Simulation": 0, + "SPS_Test_im_Haus_Simulation": 0, ## Dokumentation - "Bedienerhandbuch": 0, - "SPS_Doku": 0, + "Bedienerhandbuch": 16, + "SPS_Doku": 15, "PC_Doku": 0, ## Elektrowerkstatt @@ -2092,7 +2164,7 @@ class Dienstleistung(): #Bedientableaubau "Vormontage_im_Haus": 0 } - + def __init__(self, Anzahl_DL, hw: type[HW]): # hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet @@ -2107,56 +2179,47 @@ class Dienstleistung(): FaktorDispo = 0.2 FaktorAbstimmung = 0.05 FaktorMontageUnterlagen = 0.05 - self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_unterverteiler_hardware() * FaktorLayout - self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_unterverteiler_hardware() * FaktorSchaltplan - self._Hours["Projektkoordination"] = hw.summe_h_unterverteiler_hardware() * FaktorProjektkoord - self._Hours["Materialdispo"] = hw.summe_h_unterverteiler_hardware() * FaktorDispo - self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_unterverteiler_hardware() * FaktorAbstimmung - self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_unterverteiler_hardware() * FaktorMontageUnterlagen + 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") * hw.zpe_e_werkstatt.get("anlagenrechner") / 60 *\ - (hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") * - hw.zpe_e_werkstatt.get("schaltschrankgehaeuse_b1x1200_zubehoer") / 60 + - hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") * - hw.zpe_e_werkstatt.get("schaltschrankgehaeuse_b2x800_zubehoer") / 60 + - hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer")) *\ - hw.zpe_e_werkstatt.get( - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer") / 60 * 8 - self._Hours["Oberfläche_Simulation"] = 0 #TODO was heisst hier bedingt ändern? - self._Hours["SPS_Test_im_Haus_Simulation"] = 0 + self._Hours["PC_Installation"] = hw.anzahl("anlagenrechner") * 8 * hw.anzahl("schaltschrank", 0) + + self._Hours["Oberfläche_Simulation"] = self.anzahl("Oberfläche_Simulation") #TODO was heisst hier bedingt ändern? + self._Hours["SPS_Test_im_Haus_Simulation"] = self.anzahl("SPS_Test_im_Haus_Simulation") ## Dokumentation - self._Hours["Bedienerhandbuch"] = 0 - self._Hours["SPS_Doku"] = 0 - self._Hours["PC_Doku"] = 0 + self._Hours["Bedienerhandbuch"] = self.anzahl("Bedienerhandbuch") + self._Hours["SPS_Doku"] = self.anzahl("SPS_Doku") + self._Hours["PC_Doku"] = self.anzahl("PC_Doku") ## Elektrowerkstatt self._Hours["Schaltschrankbau"] = hw.summe_h_schaltschrank_e_werkstatt() - self._Hours["Unterverteilerbau"] = hw.summe_h_unterverteiler_e_werkstatt() ###f in excel noch Antrieb unidirektional (Halbleiter) - # Antrieb bidirektional (Halbleiter) miteinberechnet + 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.anzahl("bedienstation_1fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_1fach_kpl") / 60 +\ + self._Hours["Bedientableaubau"] = round(hw.anzahl("bedienstation_1fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_1fach_kpl") / 60 +\ hw.anzahl("bedienst_2fach_wechs_bcd_10f") * hw.zpe_e_werkstatt.get("bedienst_2fach_wechs_bcd_10f") / 60 +\ hw.anzahl("bedienstation_2fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_2fach_kpl") / 60 +\ hw.anzahl("bedienstation_3fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_3fach_kpl") / 60 +\ hw.anzahl("bedienstation_4fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_4fach_kpl") / 60 +\ hw.anzahl("bedienstation_6fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_6fach_kpl") / 60 +\ - hw.anzahl("drucktaster_automatische_umfahrung") * hw.zpe_e_werkstatt.get("drucktaster_automatische_umfahrung") - self._Hours["Vormontage_im_Haus"] = 0 # TODO: Nur bedingt ändern? ###f warum hiuer = 0 und nicht = anzahl.get("Vormontage_im_Haus")? - + hw.anzahl("drucktaster_automatische_umfahrung") * hw.zpe_e_werkstatt.get("drucktaster_automatische_umfahrung"), 2) + self._Hours["Vormontage_im_Haus"] = self.anzahl("Vormontage_im_Haus") def __repr__(self): return repr(self._Hours) - + + def anzahl(self, partname, default_val = 0): + return self.mengen.get(partname, default_val) def get_hours_of(self, dlname): return self._Hours.get(dlname, 0) - def summe_stunden(self): + def summe_stunden_dienstleistung_in_landsberg(self): """returns hours necessary""" hours_necessary = self.stunden_hardwareplanung_test_installation() +\ - self.get_hours_of("Bedienerhandbuch") +\ - self.get_hours_of("SPS_Doku") +\ - self.get_hours_of("PC_Doku") +\ self.stunden_elektrowerkstatt() return hours_necessary def stunden_hardwareplanung_test_installation(self): @@ -2178,7 +2241,7 @@ class Dienstleistung(): dauer = self.get_hours_of(k) res += dauer return res - def stunden_elektrowerkstatt(self): ###f warum anderer wert als bei hardware-tabelle? + def stunden_elektrowerkstatt(self): keys_elektrowerkstatt = [ "Schaltschrankbau", "Unterverteilerbau", @@ -2203,12 +2266,12 @@ class EMO(): "Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h) "Pritsche_in_RSM_montieren": 21.0, "Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor) - "Tableau_befestigen_und_anschliessen": 1.0, #(h/St) + "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.45, #(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]): @@ -2228,37 +2291,290 @@ class EMO(): "Erdung": 0, } self._Mengen = {} - self._Mengen["Schaltschrank_aufstellen"] = self.montagezeiten.get("Schaltschrank_aufstellen", 0) * (hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ + self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\ - hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer")) - self._Mengen["Unterverteiler_montieren"] = math.ceil((self.montagezeiten.get("Unterverteiler_montieren", 0) * hw.anzahl("75_m_Zuleitung_Unterverteiler_4x4_400VAC"))) - self._Mengen["Pritsche_montieren_umbauen_demontieren"] = math.ceil((hw.anzahl("kabelpritschen_leitern_200_60")/self.montagezeiten.get("Pritsche_montieren_umbauen_demontieren", 0))) - self._Mengen["Pritsche_in_RSM_montieren"] = math.ceil(hw.anzahl("kabelpritsche_rsm_100_60")/self.montagezeiten.get("Pritsche_in_RSM_montieren", 0)) + 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"] = self.montagezeiten.get("Motor_verdrahten_und_anschliessen", 0) * mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0) - self._Mengen["Tableau_befestigen_und_anschliessen"] = self.montagezeiten.get("Tableau_befestigen_und_anschliessen", 0) * ( - hw.anzahl("Bedienstation_1fach") +\ - hw.anzahl("Bedienst_2fach_DIR") +\ - hw.anzahl("Bedienstation_2") +\ - hw.anzahl("Bedienstation_3") +\ - hw.anzahl("Bedienstation_4") +\ - hw.anzahl("Bedienstation_10") +\ - hw.anzahl("Drucktaster_autom_Umfahrung")) + 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_Putzmaschine_EJet") +\ - ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") + self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\ + ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") - self._Mengen["Sensoren_montieren"] = math.ceil(self.montagezeiten.get("Sensoren_montieren", 0) * hw.anzahl("sensorkabel_je_20m")) - self._Mengen["Seilzugschalter_installieren"] = math.ceil(self.montagezeiten.get("Seilzugschalter_installieren", 0) * ea.anzahl("Seilzugschalter")) - self._Mengen["Blitzleuchte_installieren"] = math.ceil(self.montagezeiten.get("Blitzleuchte_installieren", 0) * ea.anzahl("Blitzleuchte_Stoerung")) - self._Mengen["Weiche_Stopper_anschliessen"] = math.ceil(self.montagezeiten.get("Weiche_Stopper_anschliessen", 0) * ea.anzahl("stopper_weichenkabel_je_5m")) - self._Mengen["Erdung"] = math.ceil(self.montagezeiten.get("Erdung", 0) * hw.anzahl("75_m_Zuleitung_Unterverteiler_4x4_400VAC")) + 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 - #print(self._Mengen) + def dauer_emo(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 = math.ceil((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 = math.ceil((self._Mengen.get(k) / self.montagezeiten.get(k))) + keys_2 += dauer + + + return math.ceil((keys_1 + keys_2)) + def mehraufwand_emo(self): + return (self.dauer_emo() * 1.1) +class Anschlussl(): + mengen = { + #auskommentiert, was später berechnet wird + "Anschlussspannung":400, #Volt + "Motor_Art":0.12, #kilo Watt + #"Anzahl_Motor":48, + "Antrieb":0.12, #kilo Watt + "Strom_Motor":0.55, #Ampere + #"Summe_Strom_Motor":26.4, + "cos_phi":0.77, ###m fester Wert + "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 strom + "x_Wurzel_3":1.732 ###m fester Wert + #leistung + #gesamtanschlussleistung + } + def __init__(self, anzahl:dict, mg: type[MG]): + 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.mengen.get("Strom_Motor") *\ + anzahl.get("Anzahl_Motor") + self._ANZAHL["Summe_Strom_Motor_SPS_Peripherie"] = anzahl.get("Summe_Strom_Motor") +\ + self.mengen.get("Versorgung_SPS_und_Peripherie") + self._ANZAHL["GZF"] = anzahl.get("Summe_Strom_Motor") *\ + self.mengen.get("GZE_Faktor") +\ + self.mengen.get("Versorgung_SPS_und_Peripherie") + self._ANZAHL["Res"] = anzahl.get("GZF") *\ + self.mengen.get("Res_Faktor") + self._ANZAHL["Gesamtstrom"] = anzahl.get("GZF") +\ + anzahl.get("Res") + self._ANZAHL["Spannung"] = self.mengen.get("Anschlussspannung") + self._ANZAHL["x_Strom"] = anzahl.get("Gesamtstrom") + self._ANZAHL["Leistung"] = anzahl.get("Spannung") *\ + anzahl.get("x_Strom") *\ + self.mengen.get("x_Wurzel_3") / 1000 + self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung"))) +# class Ausgangsstrom_DC24V (): +# mengen = { +# # "Motorstarter__ELRH3": "703001500", +# # "Motorstarter__ELRH5": "703001510", +# # "Motorstarter_3RM1002": "703001070", +# # "Motorstarter_3RM1202": "703001075", +# "korrektur_Motorstarter":-49, +# # "Hauptschütz_7_5_kw_3RT2025_2BB40": "703001022", +# # "Hauptschütz_15_KW_3RT2027_2BB40": "703001098", +# # "Stromüberwachung_3UG4616_2CR20": "703000001", +# # "Sirius_LED_3SU1400": "701003xxx", +# # "Kleinrelais__PLC_RPT_24VDC": "703000029", +# # "Sicherheitsrelais__PSR_SCP_24UC": "703000032", +# # "Werma_Dauerlicht": "790000006", +# # "Lichttaster_GRTE18S": "721000033", +# # "Lichttaster_P1NH601": "721000041", +# # "induktiv_M18": "", +# # "Ventil_sy31": "", +# # "ET200SP_IM151_PN": "709000006", +# # "Yaskawa_DI4": "", +# # "Yaskawa_DQ4": "", +# # "ET200SP_DI8": "709000021", +# # "ET200SP_DQ8": "709000031_A", +# # "CPU_1515_2_PN": "708015002", +# # "CPU_1517_3_PN/DP": "708015004", +# # "CPU_1513_1_PN": "708015005", +# # "eWON_Cosy_WEC61330": "711003184", +# # "SCALANCE_XB008": "711003197" +# } + +# anzugsstrom = { #in A +# "Motorstarter__ELRH3": 0.04, +# "Motorstarter__ELRH5": 0.04, +# "Motorstarter_3RM1002": 0.025, +# "Motorstarter_3RM1202": 0.025, +# "Hauptschütz_7_5_kw_3RT2025_2BB40": 0.25, +# "Hauptschütz_15_KW_3RT2027_2BB40": 0.25, +# "Stromüberwachung_3UG4616_2CR20": 0.05, +# "Sirius_LED_3SU1400": 0.025, +# "Kleinrelais__PLC_RPT_24VDC": 0.009, +# "Sicherheitsrelais__PSR_SCP_24UC": 0.065, +# "Werma_Dauerlicht": 0.02, +# "Lichttaster_GRTE18S": 0.03, +# "Lichttaster_P1NH601": 0.2, +# "induktiv_M18": 0.01, +# "Ventil_sy31": 0.017, +# "ET200SP_IM151_PN": 0.095, +# "Yaskawa_DI4": 0.065, +# "Yaskawa_DQ4": 0.075, +# "ET200SP_DI8": 0.07, +# "ET200SP_DQ8": 0.035, +# "CPU_1515_2_PN": 0.8, +# "CPU_1517_3_PN/DP": 1.55, +# "CPU_1513_1_PN": 0.7, +# "eWON_Cosy_WEC61330": 0.05, +# "SCALANCE_XB008": 0.12 +# } +# haltestrom = { +# "Motorstarter__ELRH3": 0.045, +# "Motorstarter__ELRH5": 0.045, +# "Motorstarter_3RM1002": 0.07, +# "Motorstarter_3RM1202": 0.07, +# "Hauptschütz_7_5_kw_3RT2025_2BB40": 0.25, +# "Hauptschütz_15_KW_3RT2027_2BB40": 0.25, +# "Stromüberwachung_3UG4616_2CR20": 0.05, +# "Sirius_LED_3SU1400": 0.025, +# "Kleinrelais__PLC_RPT_24VDC": 0.015, +# "Sicherheitsrelais__PSR_SCP_24UC": 0.1, +# "Werma_Dauerlicht": 0.5, +# "Lichttaster_GRTE18S": 0.05, +# "Lichttaster_P1NH601": 0.3, +# "induktiv_M18": 0.1, +# "Ventil_sy31": 0.02, +# "ET200SP_IM151_PN": 0.095, +# "Yaskawa_DI4": 0.065, +# "Yaskawa_DQ4": 0.075, +# "ET200SP_DI8": 0.07, +# "ET200SP_DQ8": 0.035, +# "CPU_1515_2_PN": 1.1, +# "CPU_1517_3_PN/DP": 1.55, +# "CPU_1513_1_PN": 0.95, +# "eWON_Cosy_WEC61330": 0.05, +# "SCALANCE_XB008": 0.12 +# } +# def __init__(self, anzahl:dict, hw: type[HW], mg: type[MG], eas: type[EA]): +# self._anzahl = anzahl +# self._anzahl["Motorstarter__ELRH3"] = hw.anzahl("antrieb_unidirektional_halbleiter") + hw.anzahl("antrieb_bidirektional_halbleiter") +# self._anzahl["Motorstarter__ELRH5"] = anzahl.get("Motorstarter__ELRH3") +# self._anzahl["Motorstarter_3RM1002"] = hw.anzahl("antrieb_unidirektional_halbleiter") +\ +# hw.anzahl("antrieb_bidirektional_halbleiter") +\ +# anzahl.get("korrektur_Motorstarter") +# self._anzahl["Motorstarter_3RM1202"] = anzahl.get("Motorstarter_3RM1002") +# self._anzahl["korrektur_Motorstarter"] = self.mengen.get("korrektur_Motorstarter") +# self._anzahl["Hauptschütz_7_5_kw_3RT2025_2BB40"] = math.ceil((hw.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 2 +\ +# hw.anzahl("unterverteiler_fuer_1flyer") +\ +# hw.anzahl("unterverteiler_fuer_2flyer") +\ +# hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ +# hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ +# hw.anzahl("unterverteiler_fuer_puffer") +\ +# hw.anzahl("unterverteiler_fuer_5_rsm_fa") +\ +# hw.anzahl("unterverteiler_fuer_10_rsm_fa") +\ +# hw.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"))) + +# #self._anzahl["Hauptschütz_15_KW_3RT2027_2BB40"] ###f leer +# self._anzahl["Stromüberwachung_3UG4616_2CR20"] = hw.mengen.get("schaltschrank") +# self._anzahl["Sirius_LED_3SU1400"] = mg.zusammenfassung().get("Bedientableau_2fach") * 1 +\ +# mg.zusammenfassung().get("Bedientableau_1fach") * 1 +\ +# mg.zusammenfassung().get("Meldelampe_Überstrom") +\ +# eas.getA("Leuchtdrucktaster_Anlage_EIN") +\ +# eas.getA("Leuchtdrucktaster_Start_nach_Stoerung") +\ +# eas.getA("Leuchtdrucktaster_Laufzeitfehler") +\ +# eas.getA("Meldeleuchte_Komm_PC_SPS_gestoert") +\ +# eas.getA("Sammeleingang_Ueberstrom") +\ +# eas.getA("Sammeleingang_Not_Aus") +\ +# eas.getA("Sammeleingang_Druckluft_fehlt") +\ +# eas.getA("Sammeleingang_Antriebe_abheben") +# self._anzahl["Kleinrelais__PLC_RPT_24VDC"] = mg.zusammenfassung().get("Interface_Putzmaschine") * 4 +\ +# mg.zusammenfassung().get("Interface_Doffer") * 2 +# self._anzahl["Sicherheitsrelais__PSR_SCP_24UC"] = hw.mengen.get("schaltschrank") +# self._anzahl["Werma_Dauerlicht"] = mg.zusammenfassung().get("Werma_Rundumleuchte_Störung") +# self._anzahl["Lichttaster_GRTE18S"] = mg.zusammenfassung().get("Sensor_optisch_Traverse") +# self._anzahl["Lichttaster_P1NH601"] = mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer") +# self._anzahl["induktiv_M18"] = mg.zusammenfassung().get("Sensor_induktiv_Spulenalter_Zug_positionierung") +# self._anzahl["Ventil_sy31"] = mg.zusammenfassung().get("Weiche") +\ +# mg.zusammenfassung().get("Dreifachweiche") * 2 +\ +# mg.zusammenfassung().get("Wechsel") * 2 +\ +# mg.zusammenfassung().get("Stopper") +# self._anzahl["ET200SP_IM151_PN"] = hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") +# self._anzahl["Yaskawa_DI4"] = hw.anzahl("slio_eingangskarte_4_de") +# self._anzahl["Yaskawa_DQ4"] = hw.anzahl("slio_eingangskarte_4_do") +# self._anzahl["ET200SP_DI8"] = hw.anzahl("et200_sp_eingangskarte_8_de") +# self._anzahl["ET200SP_DQ8"] = hw.anzahl("et200_sp_eingangskarte_8_do") +# self._anzahl["CPU_1515_2_PN"] = hw.anzahl("sps_simatic_s7_1515_2") +# self._anzahl["CPU_1517_3_PN/DP"] = hw.anzahl("sps_simatic_s7_1517_3") +# #self._anzahl["CPU_1513_1_PN"] = ###f leer +# self._anzahl["eWON_Cosy_WEC61330"] = hw.mengen.get("schaltschrank") +# self._anzahl["SCALANCE_XB008"] = hw.mengen.get("schaltschrank") +# def summenstrom_anzug(self, partname): +# return (self._anzahl.get(partname) * self.anzugsstrom.get(partname)) +# def summenstrom_dauer(self, partname): +# return (self._anzahl.get(partname) * self.haltestrom.get(partname)) +# def strombedarf(self): + # keys = { + # "Motorstarter__ELRH3", + # "Motorstarter_3RM1002", + # "Hauptschütz_7_5_kw_3RT2025_2BB40", + # "Stromüberwachung_3UG4616_2CR20", + # "Sirius_LED_3SU1400", + # "Kleinrelais__PLC_RPT_24VDC", + # "Sicherheitsrelais__PSR_SCP_24UC", + # "Werma_Dauerlicht", + # "Lichttaster_GRTE18S", + # "Lichttaster_P1NH601", + # "induktiv_M18", + # "Ventil_sy31", + # "ET200SP_IM151_PN", + # "Yaskawa_DI4", + # "Yaskawa_DQ4", + # "ET200SP_DI8", + # "ET200SP_DQ8", + # "CPU_1515_2_PN", + # "CPU_1517_3_PN/DP", + # "eWON_Cosy_WEC61330", + # "SCALANCE_XB008" + # } + # anzug = 0 + # halten = 0 + # for k in keys: + # anzug += self.summenstrom_anzug(k) + # halten += self.summenstrom_dauer(k) + # res = anzug + halten + # return (res * 1.1) class TestObjectMethods(unittest.TestCase): - def test_A_JayJay(self): # Anzahl der für das Projekt benutzten Anzahl_MG = { @@ -2585,6 +2901,9 @@ class TestObjectMethods(unittest.TestCase): Anzahl_EAS = {} eas = EA(Anzahl_EAS, mg) + + + # eas.gesamt_E() # eas.gesamt_A() @@ -2604,7 +2923,7 @@ class TestObjectMethods(unittest.TestCase): # Ermittlung Mengengerüst self.assertEqual(eas.get_SEA('Sensor_Traversenabfrage_optisch'), (68, 0)) self.assertEqual(eas.get_SEA('Reflexionslichtschranke_RSM_DIRECT'), (0, 0)) - self.assertEqual(eas.get_SEA('Sensor_Stopper_induktiv'), (4, 0)) + self.assertEqual(eas.get_SEA('Sensor induktiv Flyer+PM'), (4, 0)) self.assertEqual(eas.get_SEA('Seilzugschalter'), (0, 0)) self.assertEqual(eas.get_SEA('Weiche'), (0, 35)) @@ -2618,8 +2937,7 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.get_SEA('Blitzleuchte_Stoerung'), (0, 6)) self.assertEqual(eas.get_SEA('Schnittstelle_Flyer_ElectroJet'), (8, 8)) - self.assertEqual(eas.get_SEA('Schnittstelle_Flyer_Putzmaschine_ElectroJet'), (0, 0)) - self.assertEqual(eas.get_SEA('Schnittstelle_Flyer_Neuhauser'), (0, 0)) + self.assertEqual(eas.get_SEA('Schnittstelle_Putzmaschine_Neuhauser'), (0, 0)) self.assertEqual(eas.get_SEA('FEldbux_UV_EinAusgang'), (14, 7)) self.assertEqual(eas.get_SEA('Spulenumsetzstation'), (0, 0)) @@ -2647,12 +2965,153 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eingänge, 5) self.assertEqual(ausgänge, 7) Anzahl_HW = { - "hauptschalter": 2, - "panel_pc": 1, - "antrieb_unidirektional_halbleiter": 1, } + Anzahl_EP = {} + ejpu = Flyer_F40_EJet_inc_Putz(Anzahl_EP) + Anzahl_EJ = {} + ejet = Flyer_EJet(Anzahl_EJ) + Anzahl_PU = {} + pu = Puffer(Anzahl_PU) + Anzahl_FA = {} + fa = RSM_FA(Anzahl_FA) + hw = HW(Anzahl_HW, mg, eas, ejpu, ejet, pu, fa) + self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer"), 0) + self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer"), 0) + self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer"), 1) + self.assertEqual(hw.anzahl("sps_simatic_s7_cpu315_2_pn_dp"), 0) + self.assertEqual(hw.anzahl("speicherkarte_fuer_sps_512_kb"), 0) + self.assertEqual(hw.anzahl("sps_simatic_s7_cpu317_2_pn_dp"), 0) + self.assertEqual(hw.anzahl("speicherkarte_fuer_sps2_mb"), 0) + self.assertEqual(hw.anzahl("sps_simatic_s7_1515_2"), 1) + self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 0) + self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0) + self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0) + self.assertEqual(hw.anzahl("memory_card_256_mb"), 1) + self.assertEqual(hw.anzahl("memory_card_2_gb"), 0) + self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 1) + self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1) + self.assertEqual(hw.anzahl("abgang_400v"), 0) + self.assertEqual(hw.anzahl("abgang_24_v"), 0) + self.assertEqual(hw.anzahl("anlagenrechner"), 1) + self.assertEqual(hw.anzahl("anlagenrechner_ohne_bildschirm"), 0) + self.assertEqual(hw.anzahl("pulteinbau_monitor_srline_rflat_24fhd"), 0) + self.assertEqual(hw.anzahl("kurzhubtastatur_kbt06_mit_touchpad_uslayout"), 0) + self.assertEqual(hw.anzahl("netzwerk_display_adapter_lindy"), 0) + self.assertEqual(hw.anzahl("zusaetzlicher_bildschirm"), 0) + self.assertEqual(hw.anzahl("schaltschrank"), 1) + self.assertEqual(hw.anzahl("unterverteiler_fuer_1neuenhauser_pm"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer"), 2) + self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_puffer"), 1) + self.assertEqual(hw.anzahl("unterverteiler_fuer_5_rsm_fa"), 2) + self.assertEqual(hw.anzahl("korrektur_5_rsm_zusaetzlich_im_unterverteiler"), -1) + self.assertEqual(hw.anzahl("unterverteiler_fuer_10_rsm_fa"), 0) + self.assertEqual(hw.anzahl("korrektur_10_rsm_zusaetzlich_im_unterverteiler"), -2) + self.assertEqual(hw.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"), 0) + self.assertEqual(hw.anzahl("korrektur_3_rsm_zusaetzlich_im_unterverteiler"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_4_rsm_direct"), 0) + self.assertEqual(hw.anzahl("korrektur_4_rsm_zusaetzlich_im_unterverteiler"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_12_rsm_direct"), 0) + self.assertEqual(hw.anzahl("korrektur_12_rsm_zusaetzlich_im_unterverteiler"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_8_rsm_direct"), 0) + self.assertEqual(hw.anzahl("korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler"), 0) + self.assertEqual(hw.anzahl("busverteiler_6_rsm_direct"), 0) + self.assertEqual(hw.anzahl("korrektur_6_rsm_zusaetzlich_im_busverteiler"), 0) + self.assertEqual(hw.anzahl("busverteiler_8_rsm_direct"), 0) + self.assertEqual(hw.anzahl("korrektur_8_rsm_zusaetzlich_im_busverteiler"), 0) + self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 4) + self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 44) + self.assertEqual(hw.anzahl("antrieb_unidirektional_schuetz"), 0) + self.assertEqual(hw.anzahl("antrieb_bidirektional_schuetz"), 0) + self.assertEqual(hw.anzahl("motorschutzschalter"), 0) + self.assertEqual(hw.anzahl("wendeschuetzschaltung"), 0) + self.assertEqual(hw.anzahl("frequenzumrichter"), 0) + self.assertEqual(hw.anzahl("bedienstation_1fach_kpl"), 14) + self.assertEqual(hw.anzahl("bedienst_2fach_wechs_bcd_10f"), 0) + self.assertEqual(hw.anzahl("bedienstation_2fach_kpl"), 10) + self.assertEqual(hw.anzahl("halter_bedientableau_2fach"), 10) + self.assertEqual(hw.anzahl("bedienstation_3fach_kpl"), 0) + self.assertEqual(hw.anzahl("halter_bedientableau_3fach"), 0) + self.assertEqual(hw.anzahl("bedienstation_4fach_kpl"), 0) + self.assertEqual(hw.anzahl("halter_bedientableau_4fach"), 0) + self.assertEqual(hw.anzahl("bedienstation_6fach_kpl"), 0) + self.assertEqual(hw.anzahl("halter_bedienstation_6fach"), 0) + self.assertEqual(hw.anzahl("drucktaster_automatische_umfahrung"), 0) + self.assertEqual(hw.anzahl("halter_fuer_drucktaster"), 0) + self.assertEqual(hw.anzahl("ET200_SP"), 1) + self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 7) + self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 0) + self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_de"), 31) + self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_de"), 0) + self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_de"), 0) + self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_do"), 33) + self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_do"), 0) + self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_do"), 0) + self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen"), 14) + self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"), 0) + self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"), 50) + self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last"), -1) + self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last"), -15) + self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt"), 1) + self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt"), 0) + self.assertEqual(hw.anzahl("SLIO"), 0) + self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) + self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) + self.assertEqual(hw.anzahl("slio_eingangskarte_4_de"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_4_de"), 0) + self.assertEqual(hw.anzahl("slio_eingangskarte_8_de"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_8_de"), 0) + self.assertEqual(hw.anzahl("slio_ausgangskarte_4_do"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_4_do"), 0) + self.assertEqual(hw.anzahl("slio_ausgangskarte_8_do"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_8_do"), 0) + self.assertEqual(hw.anzahl("slio_power_modul"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_power_modul"), 0) + self.assertEqual(hw.anzahl("slio_4_x_dc_24v_4_x_dc_0v"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v"), 0) + self.assertEqual(hw.anzahl("slio_8_x_dc_24v"), 0) + self.assertEqual(hw.anzahl("slio_8_x_dc_0v"), 0) + self.assertEqual(hw.anzahl("korrektur_slio_8_x_dc_0v"), 0) + self.assertEqual(hw.anzahl("movimot_fu_mit_anschaltung"), 0) + self.assertEqual(hw.anzahl("sensor_optisch_traverse"), 68) + self.assertEqual(hw.anzahl("sensorhalter_ohne_sensor"), 0) + self.assertEqual(hw.anzahl("reflexionslichtschranke_rsm_direct"), 0) + self.assertEqual(hw.anzahl("stoppersensor_induktiv_mit_halter"), 4) + self.assertEqual(hw.anzahl("sensor_spulenpruefung_voll_leer"), 0) + self.assertEqual(hw.anzahl("seilzugschalter"), 0) + self.assertEqual(hw.anzahl("seil_fuer_seilzugschalter"), 0) + self.assertEqual(hw.anzahl("blitzleuchte"), 6) + self.assertEqual(hw.anzahl("spulenumsetzstation"), 0) + self.assertEqual(hw.anzahl("sensorkabel_je_20m"), 78) + self.assertEqual(hw.anzahl("stopper_weichenkabel_je_5m"), 67) + self.assertEqual(hw.anzahl("motorkabel_je_30m"), 48) + self.assertEqual(hw.anzahl("kabelpritschen_leitern_200_60"), 348) + self.assertEqual(hw.anzahl("kabelpritsche_rsm_100_60"), 0) + self.assertEqual(hw.anzahl("kabelpritsche_rsm_50_35"), 0) + self.assertEqual(hw.anzahl("klemmkasten_rsm"), 2) + self.assertEqual(hw.anzahl("klemmkasten_direct_in_rsm"), 0) + self.assertEqual(hw.anzahl("erdung"), 29) + self.assertEqual(hw.anzahl("kleinteile_rohre_schellen_kabelbinder_ect"), 1.5) + self.assertEqual(hw.anzahl("kabel_fuer_klemmkasten_und_bts_60m"), 20) + self.assertEqual(hw.anzahl("kabel_fuer_1fach_bts_zug_wechseln"), 14) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac"), 5) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), -1) + self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), -6) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 5) + self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 0) + self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"), 0) + self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"), 2) + self.assertEqual(hw.anzahl("profinetkabel"), 5) + self.assertEqual(hw.anzahl("korrektur_profinetkabel"), 0) + self.assertEqual(hw.anzahl("schnittstellen_8x1mm2_30m"), 4) - hw = HW(Anzahl_HW, mg, eas) + self.assertAlmostEqual(hw.summe_vorort(), 19923.6) +# self.assertEqual(hw.summe_gesamt(), 46356) +# self.assertEqual(hw.summe_in_LL(), 26432) + self.assertEqual(hw.summe_h_zeiten_hardwareplanung(), 167.0) + self.assertEqual(hw.summe_h_unterverteiler_e_werkstatt(), 94.0) emo_eingabe = { "Schaltschrank_aufstellen": 1, "Unterverteiler_montieren": 4, @@ -2668,20 +3127,22 @@ class TestObjectMethods(unittest.TestCase): "Erdung": 40, } emo = EMO(eas, hw, mg) - + self.assertAlmostEqual(emo.dauer_emo(), 243) + self.assertAlmostEqual(emo.mehraufwand_emo(), 267.3) #DL Anzahl_DL = {} dl = Dienstleistung(Anzahl_DL, hw) - #self.assertEqual(dl.stunden_hardwareplanung_test_installation(), 225) - #self.assertEqual(dl.stunden_elektrowerkstatt(), 205) - #self.assertEqual(dl.summe_stunden(), 430) + + self.assertEqual(dl.stunden_hardwareplanung_test_installation(), 225.1) + self.assertEqual(dl.stunden_elektrowerkstatt(), 196.83) + self.assertEqual(dl.summe_stunden_dienstleistung_in_landsberg(), 421.93) self.assertEqual(dl.get_hours_of("Pflichtenheft_Autom_Schnittstellen"), 0) - self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 42) - self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 100) - self.assertEqual(dl.get_hours_of("Projektkoordination"), 25) - self.assertEqual(dl.get_hours_of("Materialdispo"), 33) - self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 8) - self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 8) + self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 41.75) + self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 100.2) + self.assertEqual(dl.get_hours_of("Projektkoordination"), 25.05) + self.assertEqual(dl.get_hours_of("Materialdispo"), 33.4) + self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 8.35) + self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 8.35) self.assertEqual(dl.get_hours_of("PC_Installation"), 8) self.assertEqual(dl.get_hours_of("Oberfläche_Simulation"), 0) self.assertEqual(dl.get_hours_of("SPS_Test_im_Haus_Simulation"), 0) @@ -2689,11 +3150,29 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(dl.get_hours_of("SPS_Doku"), 15) self.assertEqual(dl.get_hours_of("PC_Doku"), 0) self.assertEqual(dl.get_hours_of("Schaltschrankbau"), 88) - self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 102) + self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 94) self.assertEqual(dl.get_hours_of("Klemmkastenbau_je_2h"), 4) - self.assertEqual(dl.get_hours_of("Bedientableaubau"), 11) + self.assertEqual(dl.get_hours_of("Bedientableaubau"), 10.83) self.assertEqual(dl.get_hours_of("Vormontage_im_Haus"), 0) + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) + self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 48) + self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 26.4) + self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 29.4) + self.assertAlmostEqual(al._ANZAHL.get("GZF"), 16.2) + self.assertAlmostEqual(al._ANZAHL.get("Res"), 1.62) + self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 17.82) + self.assertAlmostEqual(al._ANZAHL.get("x_Strom"), 17.82) + self.assertAlmostEqual(al._ANZAHL.get("Spannung"), 400) + self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 12.345696) + self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 13) + + # Anzahl_AS = {} + # ags = Ausgangsstrom_DC24V(Anzahl_AS, hw, mg, eas) + # self.assertAlmostEqual(ags.strombedarf(), 19) + + # def test_deckblatt(self): # deckblatt_eingabe = { # "SYSTEM":"fa", @@ -3319,7 +3798,7 @@ class TestObjectMethods(unittest.TestCase): # # Ermittlung_Mengengeruest_Anzahl # self.assertEqual(eas.getE("Sensor_Traversenabfrage_optisch"), 1) # self.assertEqual(eas.getE("Reflexionslichtschranke_RSM_DIRECT"), 1) - # self.assertEqual(eas.getE("Sensor_Stopper_induktiv"), 1) + # self.assertEqual(eas.getE("Sensor induktiv Flyer+PM"), 1) # self.assertEqual(eas.getE("Seilzugschalter"), 1) # self.assertEqual(eas.getE("Weiche"), 0) @@ -3333,8 +3812,7 @@ class TestObjectMethods(unittest.TestCase): # self.assertEqual(eas.getE("Blitzleuchte_Stoerung"), 0) # self.assertEqual(eas.getE("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.getE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) - # self.assertEqual(eas.getE("Schnittstelle_Flyer_Neuhauser"), 4) + # self.assertEqual(eas.getE("Schnittstelle_Putzmaschine_Neuhauser"), 4) # self.assertEqual(eas.getE("FEldbux_UV_EinAusgang"), 2) # self.assertEqual(eas.getE("Spulenumsetzstation"), 40) @@ -3370,7 +3848,7 @@ class TestObjectMethods(unittest.TestCase): # # Ermittlung_Mengengeruest_Anzahl # self.assertEqual(eas.getA("Sensor_Traversenabfrage_optisch"), 0) # self.assertEqual(eas.getA("Reflexionslichtschranke_RSM_DIRECT"), 0) - # self.assertEqual(eas.getA("Sensor_Stopper_induktiv"), 0) + # self.assertEqual(eas.getA("Sensor induktiv Flyer+PM"), 0) # self.assertEqual(eas.getA("Seilzugschalter"), 0) # self.assertEqual(eas.getA("Weiche"), 1) @@ -3384,8 +3862,7 @@ class TestObjectMethods(unittest.TestCase): # self.assertEqual(eas.getA("Blitzleuchte_Stoerung"), 1) # self.assertEqual(eas.getA("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.getA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) - # self.assertEqual(eas.getA("Schnittstelle_Flyer_Neuhauser"), 4) + # self.assertEqual(eas.getA("Schnittstelle_Putzmaschine_Neuhauser"), 4) # self.assertEqual(eas.getA("FEldbux_UV_EinAusgang"), 1) # self.assertEqual(eas.getA("Spulenumsetzstation"), 20) @@ -3419,7 +3896,7 @@ class TestObjectMethods(unittest.TestCase): # # Ermittlung_Mengengeruest_Anzahl # self.assertEqual(eas.get_SE("Sensor_Traversenabfrage_optisch"), 11) # self.assertEqual(eas.get_SE("Reflexionslichtschranke_RSM_DIRECT"), 60) - # self.assertEqual(eas.get_SE("Sensor_Stopper_induktiv"), 2) + # self.assertEqual(eas.get_SE("Sensor induktiv Flyer+PM"), 2) # self.assertEqual(eas.get_SE("Seilzugschalter"), 0) # self.assertEqual(eas.get_SE("Weiche"), 0) @@ -3433,8 +3910,7 @@ class TestObjectMethods(unittest.TestCase): # self.assertEqual(eas.get_SE("Blitzleuchte_Stoerung"), 0) # self.assertEqual(eas.get_SE("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0) - # #self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Neuhauser"), 0) # TODO Check EA Ausgabe + # #self.assertEqual(eas.get_SE("Schnittstelle_Putzmaschine_Neuhauser"), 0) # TODO Check EA Ausgabe # self.assertEqual(eas.get_SE("FEldbux_UV_EinAusgang"), 2) # self.assertEqual(eas.get_SE("Spulenumsetzstation"), 0) @@ -3467,7 +3943,7 @@ class TestObjectMethods(unittest.TestCase): # # Ermittlung_Mengengeruest_Anzahl # self.assertEqual(eas.get_SA("Sensor_Traversenabfrage_optisch"), 0) # self.assertEqual(eas.get_SA("Reflexionslichtschranke_RSM_DIRECT"), 0) - # self.assertEqual(eas.get_SA("Sensor_Stopper_induktiv"), 0) + # self.assertEqual(eas.get_SA("Sensor induktiv Flyer+PM"), 0) # self.assertEqual(eas.get_SA("Seilzugschalter"), 0) # self.assertEqual(eas.get_SA("Weiche"), 44) @@ -3481,8 +3957,7 @@ class TestObjectMethods(unittest.TestCase): # self.assertEqual(eas.get_SA("Blitzleuchte_Stoerung"), 3) # self.assertEqual(eas.get_SA("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0) - # self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Neuhauser"), 0) + # self.assertEqual(eas.get_SA("Schnittstelle_Putzmaschine_Neuhauser"), 0) # self.assertEqual(eas.get_SA("FEldbux_UV_EinAusgang"), 1) # self.assertEqual(eas.get_SA("Spulenumsetzstation"), 0)