diff --git a/rieter_ekalk.py b/rieter_ekalk.py index 44795a0..6b9ce59 100644 --- a/rieter_ekalk.py +++ b/rieter_ekalk.py @@ -1,9 +1,6 @@ -#from distutils.log import debug - -import tests_eKalkulationen -import math - import unittest +import test_jayjay +import math import json JSON_IDENT = 5 @@ -355,7 +352,6 @@ class MG(): zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) return zmengen - # RSM_direct: class RSM_direct(): def __init__(self, anzahl:dict): @@ -631,7 +627,8 @@ class Flyer_F40_EJet_inc_Putz(): else: self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) self._Mengen["RRA_BI_abhebbar_Korrektur"] = self.mengen.get("RRA_BI_abhebbar_Korrektur", 0) - +###f bei utztex auch bei false 1 * anzahl Flyer und hier 0*... +###f warum bei allen antrieben hier immer entweder anzahl oder korrektur abhängig von true or false entweder anzahl oder korrekturfaktor und bei utztex beides addiert? self._Mengen["RRA_bi"] = self.mengen.get("RRA_bi", 0) if (anzahl.get("Single_Line_Durchfahrt", False)): @@ -854,6 +851,7 @@ class Puffer(): "Weiche_Korrektur":0, "RA_bi_ungerade_Schiene":0, #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, #"Meldelampe_Überstrom":0, "Meldelampe_Überstrom_Korrektur":0, #"Hauptschalter_Ein_Meldung":0, @@ -870,8 +868,9 @@ class Puffer(): self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0) self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0) self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) - + self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0) + self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) +\ + anzahl.get("Doppelstreckenantrieb_Korrektur", 0) self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) @@ -1361,7 +1360,7 @@ class HW(): "halter_bedientableau_3fach": 46, # 825304007 "bedienstation_4fach_kpl": 121, # 790000045 "halter_bedientableau_4fach": 52, # 825304003 - "bedienstation_6fach_kpl": 14.58, # 790000033 + "bedienstation_6fach_kpl": 145.8, # 790000033 "halter_bedientableau_6fach": 56, # 825304002 "drucktaster_automatische_umfahrung": 28, "halter_fuer_drucktaster": 33, @@ -1388,7 +1387,7 @@ class HW(): "slio_ausgangskarte_8_do": 46, # 709000021 "slio_power_modul": 18.22, # 709000014 "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 - "slio_8_x_dc_24v": 138, # 709000011 + "slio_8_x_dc_24v": 18, # 709000011 "slio_8_x_dc_0v": 13, # 709000010 # Summe_material_in_ll @@ -1581,7 +1580,7 @@ class HW(): "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]): + def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]): 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) @@ -1650,22 +1649,19 @@ class HW(): mg.zusammenfassung().get("RA_uni_abhebbar") +\ mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung") - temp1 = pu.anzahl("RA_bi_ungerade_Schiene") +\ - pu.anzahl("Doppelstreckenantrieb") - temp2 = fa.anzahl("RRA_bi") +\ - fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung") - temp3 = 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") - self._anzahl["antrieb_bidirektional_halbleiter"] = ejpu.anzahl("RRA_bi") +\ - ejpu.anzahl("RRA_BI_abhebbar") +\ - ejpu.anzahl("RRA_bi_ohne_SPS_Ansteuerung") +\ - ejpu.anzahl("Doppelstreckenantrieb") +\ - temp3 +\ - temp1 +\ - temp2 + self._anzahl["antrieb_bidirektional_halbleiter"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_BI_abhebbar") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_ohne_SPS_Ansteuerung") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_ohne_SPS-Ansteuerung") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi") +\ + mg.get_value_of_object("flyer_ejet", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar_unger_Schiene") +\ + mg.get_value_of_object("Puffer", "RA_bi_ungerade_Schiene") +\ + mg.get_value_of_object("Puffer", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("rsm_fa", "RRA_bi") +\ + mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung") self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0) @@ -2043,6 +2039,8 @@ class HW(): res += dauer return res + def get_h_of(self, partname): + return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60) def summe_h_bedienstationen(self): """ gibt die Summer der Stunden zur Montage der Bedienstationen zurück""" keys_bedienstationen = [ @@ -2340,7 +2338,7 @@ class EMO(): ] keys_1 = 0 for k in keys_tätigkeiten_1: - dauer = math.ceil((self.montagezeiten.get(k) * self._Mengen.get(k))) + dauer = self.montagezeiten.get(k) * self._Mengen.get(k) keys_1 += dauer keys_tätigkeiten_2 = [ @@ -2349,14 +2347,14 @@ class EMO(): ] keys_2 = 0 for k in keys_tätigkeiten_2: - dauer = math.ceil((self._Mengen.get(k) / self.montagezeiten.get(k))) + dauer = 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 @@ -2407,35 +2405,110 @@ class Anschlussl(): self.mengen.get("x_Wurzel_3") / 1000 self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung"))) -#tests_eKalkulationen.test_A_JayJay(self) - - +class Ergebnis(): ###f was sind die grünen zahlen auf dem deckblatt? + preis_kostenart_h = { + "E_Werkstatt": 32, + "Schaltschrankbau_extern_Mehrkosten": 0, #Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel: extern = 50€ intern 32 € = Wert: 18€ + "Dienstleistung_in_LL": 45, #aufwandeduzierung oder mehraufwand + "Pflichtenheft": 60, + "SPS_Programmierung": 75, #aufwandreduzierung oder mehraufwand softwareerstellung + "PC_Programmierung_Visualisierung": 60, + "Montage_elektrisch": 36, + "Inbetriebnahmetest_Hardware_durch_Montage": 36, + "SPS_Inbetriebsetzung": 75, + "PC_Inbetriebsetzung": 60, + "Inbetriebnahmeunterstützung_durch_Montage": 36, + "Dokumentation": 35, + "Bedienungsanleitung_Emmert": 75, + "Schulung_vor_Ort_beim_Kunden": 36, + "Abnahme": 36, + "SPS_Anlagenbetreuung": 75, + "PC_Anlagenbetreuung": 60, + "Anlagenbetreuung_durch_Montage": 36 + } + def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]): + self._anzahl = anzahl_h + self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt() + self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\ + hw.get_h_of("unterverteiler_fuer_1flyer") +\ + hw.get_h_of("unterverteiler_fuer_2flyer") +\ + hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ + hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ + hw.get_h_of("unterverteiler_fuer_puffer") +\ + hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\ + hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") + self._anzahl["Dienstleistung_in_LL"] = dl.stunden_hardwareplanung_test_installation() + self._anzahl["Pflichtenheft"] = 0 ###f immer 0? + self._anzahl["SPS_Programmierung"] = 0 ###f immer reduziert? + self._anzahl["PC_Programmierung_Visualisierung"] = 0 ###f immer reduziert? + self._anzahl["Montage_elektrisch"] = emo.mehraufwand_emo() ###f mehraufwand einzeln nötig oder reicht am Schluss zur Übersichtlichkeit? + self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch") * 0.1 + self._anzahl["SPS_Inbetriebsetzung"] = 130 ###f immer 130 oder immer extra anzugeben? Lässt sich das evtl vereinfachen? + self._anzahl["PC_Inbetriebsetzung"] = 0 ###f immer 0 oder immer manuell anzuegebn? + self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung") * 1 ###f prozentualer anteil der inbetriebnahmeunterstützung durch montage###f bei PC Progammierung auch % wird aber nicht verwendet; absicht? + self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch") + self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku") + self._anzahl["Schulung_vor_Ort_beim_Kunden"] = 0 ###f immer manuell? + self._anzahl["Abnahme"] = 0 ###f immer manuell? + self._anzahl["SPS_Anlagenbetreuung"] = 0 ###f immer manuell? + self._anzahl["PC_Anlagenbetreuung"] = 0 ###f immer manuell? + self._anzahl["Anlagenbetreuung_durch_Montage"] = 0 ###f immer manuell? + def get_sum_of_costs(self, hw: type[HW]): + keys_costs = { + "E_Werkstatt", + "Schaltschrankbau_extern_Mehrkosten", + "Dienstleistung_in_LL", + "Pflichtenheft", + "SPS_Programmierung", + "PC_Programmierung_Visualisierung", + "Montage_elektrisch", + "Inbetriebnahmetest_Hardware_durch_Montage", + "SPS_Inbetriebsetzung", + "PC_Inbetriebsetzung", + "Inbetriebnahmeunterstützung_durch_Montage", + "Dokumentation", + "Bedienungsanleitung_Emmert", + "Schulung_vor_Ort_beim_Kunden", + "Abnahme", + "SPS_Anlagenbetreuung", + "PC_Anlagenbetreuung", + "Anlagenbetreuung_durch_Montage" + } + res = 0 + for k in keys_costs: + cost = self._anzahl[k] * self.preis_kostenart_h[k] + res += cost + return (res + hw.summe_vorort() + hw.summe_in_LL()) + def get_cost_of(self, partname): + return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname)) class TestObjectMethods(unittest.TestCase): - def test_A_JayJay(self): - # Anzahl der für das Projekt benutzten + + def test_eas(self): + # eas.gesamt_E() + # eas.gesamt_A() + Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } - rsm_direct_eingabe = { - } + rsm_direct_eingabe = {} rsm_fa_eingabe = { "Flex_A_Premium":False, # braucht man das noch? "Getriebe_in_der_Mitte":False, # braucht man das noch? @@ -2606,7 +2679,7 @@ class TestObjectMethods(unittest.TestCase): "RA_bi_ohne_SPS_Korrektur":0, #"Bedientableau_2fach":0, } - mg = MG(Anzahl_MG, + mg = MG(Anzahl_MG, rsm_direct=rsm_direct_eingabe, rsm_fa=rsm_fa_eingabe, flyer_f40=flyer_f40_eingabe, @@ -2616,133 +2689,8 @@ class TestObjectMethods(unittest.TestCase): puffer=puffer_eingabe, turm=turm_eingabe) - # check data of Mengengerüst - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Anzahl_RSM'), 14) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Flex_A_Premium'), False) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Getriebe_in_der_Mitte'), False) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'RSM_Einfahrt_Ein_Beidseitig'), False) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse'), 20) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse_zusätzlich'), 6) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach'), 14) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach'), 6) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach_Korrektur'), 4) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche'), 18) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche_Korrektur'), 4) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi'), 24) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_auf_Haupstrecke'), 10) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_ohne_SPS_Ansteuerung'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'gemeinsame_Wendung'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Seilzugschalter'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom'), 2) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein_Meldung'), 2) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung'), 2) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('rsm_fa', 'klemmkasten_rsm'), 2) - - # check data of the flyer - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl_Schienen'), 2) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Flyer'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse'), 28) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_induktiv_Spulenalter_Zug_positionierung'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Bedientableau_2fach'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Interface_Doffer'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche'), 8) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_nach_Flyer_bipolar'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Dreifachweiche'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_ohne_SPS-Ansteuerung'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Doppelstreckenantrieb'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_unger_Schiene'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein_Meldung'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung'), 4) - self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) - - # Verbindungsstrecken Wechsel - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Sensor_optisch_Traverse'), 10) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_1fach'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_2fach'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_14fach'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Weiche'), 4) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Dreifachweiche'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Kreuzungsweiche'), 1) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Werma_Rundumleuchte_Störung'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni_ohne_SPS_Ansteuerung'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi_ohne_SPS-Ansteuerung'), 0) - self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Doppelstreckenantrieb'), 0) - - # Puffer - self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl'), 1) - self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl_Staustrecken'), 5) - self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse'), 6) - self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse_Korrektur'), 1) - self.assertEqual(mg.get_value_of_object('puffer', 'Weiche'), 5) - self.assertEqual(mg.get_value_of_object('puffer', 'RA_bi_ungerade_Schiene'), 2) - self.assertEqual(mg.get_value_of_object('puffer', 'Weiche_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('puffer', 'Doppelstreckenantrieb'), 2) - self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom'), 1) - self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom_Korrektur'), 0) - self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein_Meldung'), 1) - self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - - zf = mg.zusammenfassung() - #self.assertEqual(zf['Gesamtanzahl_Antriebe'], 44) - self.assertEqual(zf['Sensor_optisch_Traverse'], 68) - self.assertEqual(zf['Sensor_induktiv_Spulenalter_Zug_positionierung'], 4) - self.assertEqual(zf['Sensor_Spulenprüfung_voll_leer'], 0) - self.assertEqual(zf['Seilzugsschalter'], 0) - self.assertEqual(zf['Drucktaster_automatische_Umfahrung'], 0) - self.assertEqual(zf['Bedientableau_1fach'], 14) - self.assertEqual(zf['Bedientableau_2fach'], 10) - self.assertEqual(zf['Bedientableau_14fach'], 0) - self.assertEqual(zf['Interface_Putzmaschine'], 0) - self.assertEqual(zf['Interface_Doffer'], 4) - self.assertEqual(zf['Weiche'], 35) - self.assertEqual(zf['Dreifachweiche'], 0) - self.assertEqual(zf['Wechsel'], 4) - self.assertEqual(zf['Stopper'], 0) - self.assertEqual(zf['Meldelampe_Überstrom'], 7) - self.assertEqual(zf['Hauptschalter_Ein_Meldung'], 7) - self.assertEqual(zf['Werma_Rundumleuchte_Störung'], 6) - self.assertEqual(zf['Weiche_nach_PM_bipolar'], 0) - self.assertEqual(zf['Kreuzungsweiche'], 1) - self.assertEqual(zf['RA_uni'], 4) - self.assertEqual(zf['RA_uni_abhebbar'], 0) - self.assertEqual(zf['RA_uni_ohne_SPS_Ansteuerung'], 0) - self.assertEqual(zf['RA_bi'], 30) - self.assertEqual(zf['RA_bi_ohne_SPS-Ansteuerung'], 4) - self.assertEqual(zf['RA_bi_abhebbar'], 4) - self.assertEqual(zf['Doppelstreckenantrieb'], 6) - self.assertEqual(zf['gemeinsame_Wendung'], 0) - self.assertEqual(zf['klemmkasten_rsm'], 2) - - Anzahl_EAS = {} - - eas = EA(Anzahl_EAS, mg) - - - - # eas.gesamt_E() - # eas.gesamt_A() - + eas = EA(Anzahl_EAS, mg) # Prüfe die Summe aller Eingänge und Ausgänge für jeden Elementtyp # Bedienstation @@ -2800,17 +2748,238 @@ class TestObjectMethods(unittest.TestCase): (eingänge, ausgänge) = eas.Anzahl_notwendigen_Siemens_EAKarten() self.assertEqual(eingänge, 5) self.assertEqual(ausgänge, 7) - Anzahl_HW = { + + def test_HW(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, } - 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) + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + emo_eingabe = { + "Schaltschrank_aufstellen": 1, + "Unterverteiler_montieren": 4, + "Pritsche_montieren_umbauen_demontieren": 66, + "Pritsche_in_RSM_montieren": 0, + "Motor_verdrahten_und_anschliessen": 97, + "Tableau_befestigen_und_anschliessen": 15, + "Schnittstelle_Flyer_Putzmaschine": 1, + "Sensoren_montieren": 84, + "Seilzugschalter_installieren": 0, + "Blitzleuchte_installieren": 3, + "Weiche_Stopper_anschliessen": 244, + "Erdung": 40, + } + emo = EMO(eas, hw, mg) + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) + + 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) @@ -2948,6 +3117,216 @@ class TestObjectMethods(unittest.TestCase): # 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) + + def test_emo(self): + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) emo_eingabe = { "Schaltschrank_aufstellen": 1, "Unterverteiler_montieren": 4, @@ -2962,13 +3341,243 @@ class TestObjectMethods(unittest.TestCase): "Weiche_Stopper_anschliessen": 244, "Erdung": 40, } - emo = EMO(eas, hw, mg) - self.assertAlmostEqual(emo.dauer_emo(), 243) - self.assertAlmostEqual(emo.mehraufwand_emo(), 267.3) - #DL + emo = EMO(eas, hw, mg) Anzahl_DL = {} - dl = Dienstleistung(Anzahl_DL, hw) + dl = Dienstleistung(Anzahl_DL, hw) + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) + self.assertAlmostEqual(emo.dauer_emo(), 241) + self.assertAlmostEqual(emo.mehraufwand_emo(), 265.1) + def test_dienstleistung(self): + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenantieb_Korrektur":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + emo_eingabe = { + "Schaltschrank_aufstellen": 1, + "Unterverteiler_montieren": 4, + "Pritsche_montieren_umbauen_demontieren": 66, + "Pritsche_in_RSM_montieren": 0, + "Motor_verdrahten_und_anschliessen": 97, + "Tableau_befestigen_und_anschliessen": 15, + "Schnittstelle_Flyer_Putzmaschine": 1, + "Sensoren_montieren": 84, + "Seilzugschalter_installieren": 0, + "Blitzleuchte_installieren": 3, + "Weiche_Stopper_anschliessen": 244, + "Erdung": 40, + } + emo = EMO(eas, hw, mg) + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) 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) @@ -2991,8 +3600,235 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(dl.get_hours_of("Bedientableaubau"), 10.83) self.assertEqual(dl.get_hours_of("Vormontage_im_Haus"), 0) + def test_anschlussleistung(self): + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + emo_eingabe = { + "Schaltschrank_aufstellen": 1, + "Unterverteiler_montieren": 4, + "Pritsche_montieren_umbauen_demontieren": 66, + "Pritsche_in_RSM_montieren": 0, + "Motor_verdrahten_und_anschliessen": 97, + "Tableau_befestigen_und_anschliessen": 15, + "Schnittstelle_Flyer_Putzmaschine": 1, + "Sensoren_montieren": 84, + "Seilzugschalter_installieren": 0, + "Blitzleuchte_installieren": 3, + "Weiche_Stopper_anschliessen": 244, + "Erdung": 40, + } + emo = EMO(eas, hw, mg) + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) Anzahl_AL ={} - al = Anschlussl(Anzahl_AL, mg) + 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) @@ -3003,861 +3839,260 @@ class TestObjectMethods(unittest.TestCase): self.assertAlmostEqual(al._ANZAHL.get("Spannung"), 400) self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 12.345696) self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 13) - - - - - - - - - - - # def test_deckblatt(self): - # deckblatt_eingabe = { - # "SYSTEM":"fa", - # "RSM":13, - # "Flyer":7, - # "Flyer_Puffer":13, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine":4, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3, - # "Neuenhauser-Putzmaschine":11, - # "Neuenhauser-Putzmaschine_Vorpuffer":12, - # "Neuenhauser-Putzmaschine_Nachpuffer":14, - # "Cason-Putzmaschine":0, - # "Cason-Putzmaschine_Vorpuffer":0, - # "Cason-Putzmaschine_Nachpuffer":0, - # "Puffer":5, - # "Anzahl_der_Pufferstrecken_pro_Puffer":11, - # "Begegnungsstrecke_Bypass":0, - # "Turm":2, - # "Turm_Anzahl_Wendlungen":5, - # } - - # #auskommentiert Zeilen sind nicht einzugeben - # rsm_direct_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, # wird in deckblatt-Klasse berechnet - # #"Anzahl_Strecken_RSM":8, - # "Sensor_optisch_Traverse":4, - # #"Lichtschranke_Traverse":0, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":4, - # #"Bedientableau_2fach_Direct":0, - # #"Weiche":0, - # "Weiche_Korrektur":4, - # #"Weiche_Gemeinsame_Rückstellung":0, - # "Weiche_Gemeinsame_Rückstellung_Korrektur":4, - # #"RA_bi_abhebbar":0, - # "RA_bi_abhebbar_Korrektur":4, - # #"Doppelstreckenantrieb":0, - # #"gemeinsame_Wendung":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":4, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":4, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":4, - # } - # rsm_fa_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl_RSM":0, - # #"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert - # "Flex_A_Premium":False, - # "Getriebe_in_der_Mitte":True, - # "RSM_Einfahrt_Ein_Beidseitig":True, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_zusätzlich":3, - # "Sensor_optisch_Traverse_Korrektur":3, - # #"Bedientableau_1fach":0, - # "Bedientableau_1fach_Korrektur":3, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":3, - # #"Weiche":0, - # "Weiche_Korrektur":3, - # #"RRA_bi":0, - # "RRA_bi_Korrektur":3, - # "RRA_bi_auf_Haupstrecke":3, - # #"RRA_bi_ohne_SPS_Ansteuerung":0, - # "gemeinsame_Wendung":3, - # #"Seilzugschalter":0, - # #"Mit_Drucktaster":0, - # "Mit_Drucktaster_Korrektur":3, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":3, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":3, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":3, - # } - # flyer_f40_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":2, - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - # #"Anzahl_Schienen":0, - # "Single_Line_Durchfahrt":True, - # "Nachpuffer":True, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":3, - # #"Sensor_induktiv_Spulenhalter":0, - # "Sensor_induktiv_Spulenhalter_Korrektur":2, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":3, - # #"Interface_Doffer":0, - # "Interface_Doffer_Korrektur":2, - # #"Weiche":0, - # "Weiche_Korrektur":3, - # #"Weiche_nach_Flyer_bipolar":0, - # "Weiche_nach_Flyer_bipolar_Korrektur":2, - # "Dreifachweiche":7, - # "Wechsel":6, - # "Stopper":5, - # "RA_uni":4, - # #"RA_uni_abhebbar":0, - # "RA_uni_abhebbar_Korrektur":3, - # #"RA_uni_ohne_SPS_Ansteuerung":0, - # "RA_uni_ohne_SPS_Ansteuerung_Korrektur":2, - # #"RRA_BI_abhebbar":0, - # "RRA_BI_abhebbar_Korrektur":3, - # "RRA_bi":0, - # #"RRA_bi_Korrektur":0, - # #"RRA_bi_ohne_SPS_Ansteuerung":0, - # "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":3, - # #"Doppelstreckenantrieb":0, - # "Doppelstreckenantrieb_Korrektur":2, - # "RA_bi_abhebbar_unger_Schiene":3, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":3, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":2, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":3, - # } - # neuenhauser_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - # #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - # #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - # #"Anzahl_Vorstaustrecken":0, - # #"Anzahl_Nachstaustrecken":0, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":3, - # #"Sensorik_Zugpositionierung":0, - # #"Sensor_WT18_Spulenprüfung_voll_leer":0, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":3, - # #"Interface_Putzmaschine":0, - # #"Weiche":0, - # "Weiche_Korrektur":2, - # #"Weiche_nach_PM_bipolar":0, - # #"RA_uni_abhebbar":0, - # "RA_uni_abhebbar_Korrektur":3, - # #"RA_uni_ohne_SPS_Ansteuerung":0, - # #"RA_uni_abhebbar_unger_Sch":0, - # #"Doppelstreckenantrieb":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":2, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":3, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":2, - # } - # flyer_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Flyer":0, # äquivalent zu 'Anzahl' - # #"Anzahl_Schienen:":0, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":3, - # #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - # #"Bedientableau_2fach":0, - # #"Interface_Doffer":0, - # #"Weiche":0, - # "Weiche_Korrektur":4, - # #"Weiche_nach_Flyer_bipolar":0, - # "Weiche_nach_Flyer_bipolar_Korrektur":3, - # "Dreifachweiche":3, - # #"Wechsel":0, - # "Wechsel_Korrektur":4, - # #"RA_bi_ohne_SPS-Ansteuerung":0, - # #"RA_bi_abhebbar":0, - # "RA_bi_abhebbar_Korrektur":3, - # "RA_bi":3, - # #"Doppelstreckenantrieb":0, - # "RA_bi_abhebbar_unger_Schiene":4, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":3, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":4, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":3, - # } - # puffer_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Puffer":0, #äquivalent zu Anzahl - # #"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # #"Anzahl_Staustrecken":0, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":5, - # #"Weiche":0, - # "Weiche_Korrektur":6, - # "RA_bi_ungerade_Schiene":7, - # #"Doppelstreckenantrieb":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":6, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":5, - # } - # turm_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Turm":0, #äquivalent zu Anzahl - # #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - # #"Anzahl_Staustrecken":0, - # #"Sensor_optisch_Traverse":0, - # #"Weiche":0, - # #"RA_bi":0, - # "RA_bi_Korrektur":5, - # #"RA_bi_ohne_SPS":0, - # "RA_bi_ohne_SPS_Korrektur":6, - # #"Bedientableau_2fach":0, - # } - - - # deckblatt = MG(deckblatt_eingabe, - # rsm_direct=rsm_direct_eingabe, - # rsm_fa=rsm_fa_eingabe, - # flyer_f40=flyer_f40_eingabe, - # neuenhauser=neuenhauser_eingabe, - # flyer=flyer_eingabe, - # #verbindungsstrecken_w=, - # puffer=puffer_eingabe, - # turm=turm_eingabe) - # #Testmethoden: - # ''' - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Anzahl"), 13) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Sensor_optisch_Traverse"), 4) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Lichtschranke_Traverse"), 78) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Bedientableau_2fach"), 6) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 13) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Weiche"), 56) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 6) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("RA_bi_abhebbar"), 9) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Doppelstreckenantrieb"), 104) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("gemeinsame_Wendung"), 6) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Meldelampe_Überstrom"), 6) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 6) - # # self.assertEqual(deckblatt._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 6) - - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Anzahl_RSM"), 13) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Sensor_optisch_Traverse"), 32) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Sensor_optisch_Traverse_zusätzlich"), 3) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Bedientableau_1fach"), 29) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Bedientableau_2fach"), 5) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Weiche"), 29) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi"), 32) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi_auf_Haupstrecke"), 3) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 0) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("gemeinsame_Wendung"), 3) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Seilzugschalter"), 26) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Mit_Drucktaster"), 3) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Meldelampe_Überstrom"), 5) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Hauptschalter_Ein_Meldung"), 5) - # # self.assertEqual(deckblatt._rsm_fa.anzahl("Werma_Rundumleuchte_Störung"), 5) - - # self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl"), 6) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl_Schienen"), 5) - # #self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_optisch_Traverse"), 80) # TODO: Wenn Nachpuffer == True, dann wird Sensor_optisch_Traverse_Korrektur doppelt addiert => =WENN(B49="ja";B46*(B47*1)+(B46*5)+(B56*2);B46*(B47*1)+(B46*7)+(B56*2))+C50 - # self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_induktiv_Spulenhalter"), 14) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Bedientableau_2fach"), 9) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Interface_Doffer"), 8) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Weiche"), 39) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Weiche_nach_Flyer_bipolar"), 8) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Dreifachweiche"), 7) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Wechsel"), 6) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Stopper"), 5) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni"), 4) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni_abhebbar"), 9) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 6) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RRA_BI_abhebbar"), 9) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 3) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Doppelstreckenantrieb"), 13.5) - # self.assertEqual(deckblatt._flyer_f40.anzahl("RA_bi_abhebbar_unger_Schiene"), 3) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Meldelampe_Überstrom"), 9) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Hauptschalter_Ein_Meldung"), 8) - # self.assertEqual(deckblatt._flyer_f40.anzahl("Werma_Rundumleuchte_Störung"), 9) - - # self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl"), 11) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl_Vorstaustrecken"), 12) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl_Nachstaustrecken"), 14) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Sensor_optisch_Traverse"), 322) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Sensorik_Zugpositionierung"), 44) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Sensor_WT18_Spulenprüfung_voll_leer"), 22) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Bedientableau_2fach"), 14) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Interface_Putzmaschine"), 11) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Weiche"), 134) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Weiche_nach_PM_bipolar"), 143) - # self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_abhebbar"), 14) - # self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 11) - # self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_abhebbar_unger_Sch"), 88) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Doppelstreckenantrieb"), 143) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Meldelampe_Überstrom"), 13) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Hauptschalter_Ein_Meldung"), 14) - # self.assertEqual(deckblatt._neuenhauser.anzahl("Werma_Rundumleuchte_Störung"), 13) - - # self.assertEqual(deckblatt._flyer.anzahl("Anzahl"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("Anzahl_Schienen"), 13) - # self.assertEqual(deckblatt._flyer.anzahl("Sensor_optisch_Traverse"), 206) - # self.assertEqual(deckblatt._flyer.anzahl("Sensor_induktiv_Spulenalter_Zug_positionierung"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("Bedientableau_2fach"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("Interface_Doffer"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("Weiche"), 95) - # self.assertEqual(deckblatt._flyer.anzahl("Weiche_nach_Flyer_bipolar"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("Wechsel"), 11) - # self.assertEqual(deckblatt._flyer.anzahl("Dreifachweiche"), 3) - # self.assertEqual(deckblatt._flyer.anzahl("RA_bi_ohne_SPS-Ansteuerung"), 7) - # self.assertEqual(deckblatt._flyer.anzahl("RA_bi_abhebbar"), 14) - # self.assertEqual(deckblatt._flyer.anzahl("Doppelstreckenantrieb"), 42) - # self.assertEqual(deckblatt._flyer.anzahl("Meldelampe_Überstrom"), 10) - # self.assertEqual(deckblatt._flyer.anzahl("Hauptschalter_Ein_Meldung"), 11) - # self.assertEqual(deckblatt._flyer.anzahl("Werma_Rundumleuchte_Störung"), 10) - - # self.assertEqual(deckblatt._puffer.anzahl("Anzahl"), 5) - # self.assertEqual(deckblatt._puffer.anzahl("Anzahl_Staustrecken"), 11) - # self.assertEqual(deckblatt._puffer.anzahl("Sensor_optisch_Traverse"), 60) - # self.assertEqual(deckblatt._puffer.anzahl("Weiche"), 61) - # self.assertEqual(deckblatt._puffer.anzahl("RA_bi_ungerade_Schiene"), 7) - # self.assertEqual(deckblatt._puffer.anzahl("Doppelstreckenantrieb"), 25) - # self.assertEqual(deckblatt._puffer.anzahl("Meldelampe_Überstrom"), 11) - # self.assertEqual(deckblatt._puffer.anzahl("Hauptschalter_Ein_Meldung"), 10) - - # self.assertEqual(deckblatt._turm.anzahl("Anzahl"), 2) - # self.assertEqual(deckblatt._turm.anzahl("Anzahl_Staustrecken"), 5) - # self.assertEqual(deckblatt._turm.anzahl("Weiche"), 6) - # self.assertEqual(deckblatt._turm.anzahl("RA_bi"), 9) - # self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26) - # self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2fach"), 4) - # ''' - # self.assertEqual(deckblatt._turm.anzahl("Anzahl"), 2) - # self.assertEqual(deckblatt._turm.anzahl("Anzahl_Staustrecken"), 5) - # self.assertEqual(deckblatt._turm.anzahl("Weiche"), 6) - # self.assertEqual(deckblatt._turm.anzahl("RA_bi"), 9) - # self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26) - # self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2fach"), 4) - - # def test_Mengengerüst_Zusammenfassung_RSM_DIRECT_Electrojet(self): - # Anzahl_MG = { - # "SYSTEM": "DIRECT", - # "RSM": 10, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine": 1, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer": 2, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer": 2, - # } - # mg = MG(Anzahl_MG) - - # # check data of the rsm - # self.assertEqual(mg._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8) - # self.assertEqual(mg._rsm_direct.anzahl("Lichtschranke_Traverse"), 60) - # self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 10) - # self.assertEqual(mg._rsm_direct.anzahl("Weiche"), 40) - # self.assertEqual(mg._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("RA_bi_abhebbar"), 4) - # self.assertEqual(mg._rsm_direct.anzahl("Doppelstreckenantrieb"), 80) - # self.assertEqual(mg._rsm_direct.anzahl("gemeinsame_Wendung"), 4) - # self.assertEqual(mg._rsm_direct.anzahl("Meldelampe_Überstrom"), 2) - # self.assertEqual(mg._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 2) - # self.assertEqual(mg._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 2) - - # # check data of the f40 flyer - # self.assertEqual(mg._flyer_f40.anzahl("Anzahl_Schienen"), 4) - # self.assertEqual(mg._flyer_f40.anzahl("Single_Line_Durchfahrt"), False) - # self.assertEqual(mg._flyer_f40.anzahl("Nachpuffer"), False) - # self.assertEqual(mg._flyer_f40.anzahl("Sensor_optisch_Traverse"), 11) - # self.assertEqual(mg._flyer_f40.anzahl("Sensor_induktiv_Spulenhalter"), 2) - # self.assertEqual(mg._flyer_f40.anzahl("Bedientableau_2fach"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("Interface_Doffer"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("Weiche"), 4) - # self.assertEqual(mg._flyer_f40.anzahl("Weiche_nach_Flyer_bipolar"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("Dreifachweiche"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("Wechsel"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("Stopper"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("RA_uni"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("RA_uni_abhebbar"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("RRA_BI_abhebbar"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("RRA_bi"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("Doppelstreckenantrieb"), 2) - # self.assertEqual(mg._flyer_f40.anzahl("RA_bi_abhebbar_unger_Schiene"), 0) - # self.assertEqual(mg._flyer_f40.anzahl("Meldelampe_Überstrom"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("Hauptschalter_Ein_Meldung"), 1) - # self.assertEqual(mg._flyer_f40.anzahl("Werma_Rundumleuchte_Störung"), 1) - - # zmengen = mg.zusammenfassung() - # self.assertEqual(zmengen["Sensor_optisch_Traverse"], 11) - # self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 2) - # self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0) - # self.assertEqual(zmengen["Seilzugsschalter"], 0) - # self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0) - # self.assertEqual(zmengen["Bedientableau_1fach"], 0) - # self.assertEqual(zmengen["Bedientableau_2fach"], 2) - # self.assertEqual(zmengen["Bedientableau_14fach"], 0) - # self.assertEqual(zmengen["Interface_Putzmaschine"], 0) - # self.assertEqual(zmengen["Interface_Doffer"], 1) - # self.assertEqual(zmengen["Weiche"], 44) - # self.assertEqual(zmengen["Dreifachweiche"], 1) - # self.assertEqual(zmengen["Wechsel"], 0) - # self.assertEqual(zmengen["Stopper"], 0) - # self.assertEqual(zmengen["Meldelampe_Überstrom"], 3) - # self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3) - # self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3) - # self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0) - # self.assertEqual(zmengen["Kreuzungsweiche"], 0) - # self.assertEqual(zmengen["RA_uni"], 0) - # self.assertEqual(zmengen["RA_uni_abhebbar"], 1) - # self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0) - # self.assertEqual(zmengen["RA_bi"], 0) - # self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1) - # self.assertEqual(zmengen["RA_bi_abhebbar"], 4) - # self.assertEqual(zmengen["Doppelstreckenantrieb"], 82) - # self.assertEqual(zmengen["gemeinsame_Wendung"], 4) - # self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 88) - - # def test_Mengengerüst_Zusammenfassung_RSMFA_Flyer(self): - # Anzahl_MG = { - # "SYSTEM": "FA", - # "RSM": 11, - # "Flyer":1, - # "Flyer_Puffer":2, - # } - # mg = MG(Anzahl_MG) - - # # check data of the rsm fa - # self.assertEqual(mg._rsm_fa.anzahl("Anzahl_RSM"), 11) - # self.assertEqual(mg._rsm_fa.anzahl("Sensor_optisch_Traverse"), 11) - # self.assertEqual(mg._rsm_fa.anzahl("Bedientableau_1fach"), 11) - # self.assertEqual(mg._rsm_fa.anzahl("Bedientableau_2fach"), 2) - # self.assertEqual(mg._rsm_fa.anzahl("Weiche"), 11) - # self.assertEqual(mg._rsm_fa.anzahl("RRA_bi"), 11) - # self.assertEqual(mg._rsm_fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(mg._rsm_fa.anzahl("Seilzugschalter"), 0) - # self.assertEqual(mg._rsm_fa.anzahl("Mit_Drucktaster"), 0) - # self.assertEqual(mg._rsm_fa.anzahl("Meldelampe_Überstrom"), 2) - # self.assertEqual(mg._rsm_fa.anzahl("Hauptschalter_Ein_Meldung"), 2) - # self.assertEqual(mg._rsm_fa.anzahl("Werma_Rundumleuchte_Störung"),2) - - # # check the data of the flyer - # self.assertEqual(mg._flyer.anzahl("Anzahl_Schienen"), 2) - # self.assertEqual(mg._flyer.anzahl("Sensor_optisch_Traverse"), 7) - # self.assertEqual(mg._flyer.anzahl("Sensor_induktiv_Spulenalter_Zug_positionierung"), 1) - # self.assertEqual(mg._flyer.anzahl("Bedientableau_2fach"), 1) - # self.assertEqual(mg._flyer.anzahl("Interface_Doffer"), 1) - # self.assertEqual(mg._flyer.anzahl("Weiche"), 2) - # self.assertEqual(mg._flyer.anzahl("Weiche_nach_Flyer_bipolar"), 1) - # self.assertEqual(mg._flyer.anzahl("Wechsel"), 1) - # self.assertEqual(mg._flyer.anzahl("RA_bi_ohne_SPS-Ansteuerung"), 1) - # self.assertEqual(mg._flyer.anzahl("RA_bi_abhebbar"), 1) - # self.assertEqual(mg._flyer.anzahl("Doppelstreckenantrieb"), 1) - # self.assertEqual(mg._flyer.anzahl("Meldelampe_Überstrom"), 1) - # self.assertEqual(mg._flyer.anzahl("Hauptschalter_Ein_Meldung"), 1) - # self.assertEqual(mg._flyer.anzahl("Werma_Rundumleuchte_Störung"), 1) - - # zmengen = mg.zusammenfassung() - # self.assertEqual(zmengen["Sensor_optisch_Traverse"], 18) - # self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 1) - # self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0) - # self.assertEqual(zmengen["Seilzugsschalter"], 0) - # self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0) - # self.assertEqual(zmengen["Bedientableau_1fach"], 11) - # self.assertEqual(zmengen["Bedientableau_2fach"], 3) - # self.assertEqual(zmengen["Bedientableau_14fach"], 0) - # self.assertEqual(zmengen["Interface_Putzmaschine"], 0) - # self.assertEqual(zmengen["Interface_Doffer"], 1) - # self.assertEqual(zmengen["Weiche"], 13) - # self.assertEqual(zmengen["Dreifachweiche"], 0) - # self.assertEqual(zmengen["Wechsel"], 1) - # self.assertEqual(zmengen["Stopper"], 0) - # self.assertEqual(zmengen["Meldelampe_Überstrom"], 3) - # self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3) - # self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3) - # self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0) - # self.assertEqual(zmengen["Kreuzungsweiche"], 0) - # self.assertEqual(zmengen["RA_uni"], 0) - # self.assertEqual(zmengen["RA_uni_abhebbar"], 0) - # self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0) - # self.assertEqual(zmengen["RA_bi"], 11) - # self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1) - # self.assertEqual(zmengen["RA_bi_abhebbar"], 1) - # self.assertEqual(zmengen["Doppelstreckenantrieb"], 1) - # self.assertEqual(zmengen["gemeinsame_Wendung"], 0) - # self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 14) - - # def test_Mengengerüst_Zusammenfassung_RSM_Neuenhauser(self): - # Anzahl_MG = { - # "SYSTEM": "DIRECT", - # "RSM": 2, - # "Neuenhauser-Putzmaschine": 1, - # "Neuenhauser-Putzmaschine_Vorpuffer": 2, - # "Neuenhauser-Putzmaschine_Nachpuffer": 2, - # } - # mg = MG(Anzahl_MG) - - # # check data of the rsm - # self.assertEqual(mg._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8) - # self.assertEqual(mg._rsm_direct.anzahl("Lichtschranke_Traverse"), 12) - # self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 2) - # self.assertEqual(mg._rsm_direct.anzahl("Weiche"), 8) - # self.assertEqual(mg._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("RA_bi_abhebbar"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("Doppelstreckenantrieb"), 16) - # self.assertEqual(mg._rsm_direct.anzahl("gemeinsame_Wendung"), 2) - # self.assertEqual(mg._rsm_direct.anzahl("Meldelampe_Überstrom"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 1) - # self.assertEqual(mg._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 0) - - # # check the data of neuenhauser - # self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Vorstaustrecken"), 2) - # self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Nachstaustrecken"), 2) - # self.assertEqual(mg._neuenhauser.anzahl("Sensor_optisch_Traverse"), 7) - # self.assertEqual(mg._neuenhauser.anzahl("Sensorik_Zugpositionierung"), 4) - # self.assertEqual(mg._neuenhauser.anzahl("Sensor_WT18_Spulenprüfung_voll_leer"), 2) - # self.assertEqual(mg._neuenhauser.anzahl("Bedientableau_2fach"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("Interface_Putzmaschine"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("Weiche"), 2) - # self.assertEqual(mg._neuenhauser.anzahl("Weiche_nach_PM_bipolar"), 1) # TODO negativ? - # self.assertEqual(mg._neuenhauser.anzahl("RA_uni_abhebbar"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("RA_uni_abhebbar_unger_Sch"), 0) - # self.assertEqual(mg._neuenhauser.anzahl("Doppelstreckenantrieb"), 2) - # self.assertEqual(mg._neuenhauser.anzahl("Meldelampe_Überstrom"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("Hauptschalter_Ein_Meldung"), 1) - # self.assertEqual(mg._neuenhauser.anzahl("Werma_Rundumleuchte_Störung"), 1) - - # zmengen = mg.zusammenfassung() - # self.assertEqual(zmengen["Sensor_optisch_Traverse"], 7) - # self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 4) - # self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 2) - # self.assertEqual(zmengen["Seilzugsschalter"], 0) - # self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0) - # self.assertEqual(zmengen["Bedientableau_1fach"], 0) - # self.assertEqual(zmengen["Bedientableau_2fach"], 2) - # self.assertEqual(zmengen["Bedientableau_14fach"], 0) - # self.assertEqual(zmengen["Interface_Putzmaschine"], 1) - # self.assertEqual(zmengen["Interface_Doffer"], 0) - # self.assertEqual(zmengen["Weiche"], 10) - # self.assertEqual(zmengen["Dreifachweiche"], 1) - # self.assertEqual(zmengen["Wechsel"], 0) - # self.assertEqual(zmengen["Stopper"], 0) - # self.assertEqual(zmengen["Meldelampe_Überstrom"], 2) - # self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 2) - # self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 1) - # self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 1) - # self.assertEqual(zmengen["Kreuzungsweiche"], 0) - # self.assertEqual(zmengen["RA_uni"], 0) - # self.assertEqual(zmengen["RA_uni_abhebbar"], 1) - # self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 1) - # self.assertEqual(zmengen["RA_bi"], 0) - # self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 0) - # self.assertEqual(zmengen["RA_bi_abhebbar"], 1) - # self.assertEqual(zmengen["Doppelstreckenantrieb"], 18) - # self.assertEqual(zmengen["gemeinsame_Wendung"], 2) - # self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 21) - - # def test_EA(self): - # Anzahl_MG = { - # "SYSTEM": "DIRECT", - # "RSM": 10, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine": 1, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer": 2, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer": 2, - # } - # mg = MG(Anzahl_MG) - - # zmengen = mg.zusammenfassung() - # self.assertEqual(zmengen["Sensor_optisch_Traverse"], 11) - # self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 2) - # self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0) - # self.assertEqual(zmengen["Seilzugsschalter"], 0) - # self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0) - # self.assertEqual(zmengen["Bedientableau_1fach"], 0) - # self.assertEqual(zmengen["Bedientableau_2fach"], 2) - # self.assertEqual(zmengen["Bedientableau_14fach"], 0) - # self.assertEqual(zmengen["Interface_Putzmaschine"], 0) - # self.assertEqual(zmengen["Interface_Doffer"], 1) - # self.assertEqual(zmengen["Weiche"], 44) - # self.assertEqual(zmengen["Dreifachweiche"], 1) - # self.assertEqual(zmengen["Wechsel"], 0) - # self.assertEqual(zmengen["Stopper"], 0) - # self.assertEqual(zmengen["Meldelampe_Überstrom"], 3) - # self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3) - # self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3) - # self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0) - # self.assertEqual(zmengen["Kreuzungsweiche"], 0) - # self.assertEqual(zmengen["RA_uni"], 0) - # self.assertEqual(zmengen["RA_uni_abhebbar"], 1) - # self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0) - # self.assertEqual(zmengen["RA_bi"], 0) - # self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1) - # self.assertEqual(zmengen["RA_bi_abhebbar"], 4) - # self.assertEqual(zmengen["Doppelstreckenantrieb"], 82) - # self.assertEqual(zmengen["gemeinsame_Wendung"], 4) - # self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 88) - - # Anzahl_EAS = { - # "bedienstation_einfach_Zug_Wechseln": 9, - # "Weiche": 16, - # "bedienst_sechsfach": 1, - # "EAs_Unterverteiler_direct": 10, - # } - # eas = EA(Anzahl_EAS, mg) - - - # ### first test the input channels - # self.assertEqual(eas.getE("Bedienelemente_Steuerschrank"), 24) - - # # Bedienstation - # self.assertEqual(eas.getE("bedienstation_1fach_Not_Aus"), 1) - # self.assertEqual(eas.getE("bedienstation_einfach_Zug_Wechseln"), 1) - # self.assertEqual(eas.getE("bedienstation_automatische_Umfahrung"), 1) - # self.assertEqual(eas.getE("bedienstation_zweifach_Wechs_BCD_10f"), 5) - # self.assertEqual(eas.getE("bedienstation_zweifach_Not_Aus_Reset"), 2) - # self.assertEqual(eas.getE("bedienst_dreifach"), 3) - # self.assertEqual(eas.getE("bedienst_vierfach"), 4) - # self.assertEqual(eas.getE("bedienst_sechsfach"), 6) - # self.assertEqual(eas.getE("EAs_Unterverteiler_direct"), 7) - - # # Ermittlung_Mengengeruest_Anzahl - # self.assertEqual(eas.getE("Sensor_Traversenabfrage_optisch"), 1) - # self.assertEqual(eas.getE("Reflexionslichtschranke_RSM_DIRECT"), 1) - # self.assertEqual(eas.getE("Sensor induktiv Flyer+PM"), 1) - # self.assertEqual(eas.getE("Seilzugschalter"), 1) - - # self.assertEqual(eas.getE("Weiche"), 0) - # self.assertEqual(eas.getE("Weiche_nach_PM_bipolar"), 0) - # self.assertEqual(eas.getE("gemeinsame_Weichenrueckstellung"), 0) - # self.assertEqual(eas.getE("Dreifach_Weiche_DIRECT"), 0) - # self.assertEqual(eas.getE("Kreuzungsweiche"), 0) - # self.assertEqual(eas.getE("Stopper"), 0) - # self.assertEqual(eas.getE("Ventil_RA_3_2_abhebbar"), 0) - # self.assertEqual(eas.getE("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 0) - # self.assertEqual(eas.getE("Blitzleuchte_Stoerung"), 0) - - # self.assertEqual(eas.getE("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.getE("Schnittstelle_Putzmaschine_Neuhauser"), 4) - # self.assertEqual(eas.getE("FEldbux_UV_EinAusgang"), 2) - - # self.assertEqual(eas.getE("Spulenumsetzstation"), 40) - - # self.assertEqual(eas.getE("RA_unidirektional"), 0) - # self.assertEqual(eas.getE("RA_unidirektional_abhebbar"), 0) - # self.assertEqual(eas.getE("RA_unidirektional_mit_gemeinsamer_Wendung"), 0) - # self.assertEqual(eas.getE("RA_unidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.getE("RA_bidirektional"), 0) - # self.assertEqual(eas.getE("RA_bidirektional_abhebbar"), 0) - # self.assertEqual(eas.getE("RA_bidirektional_abhebbar_gemeinsWend"), 0) - # self.assertEqual(eas.getE("RA_bidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.getE("RA_in_RSM_bidirektional"), 0) - # self.assertEqual(eas.getE("Doppelstreckenantrieb"), 0) - # self.assertEqual(eas.getE("Doppelstreckenantriebgemeinsame_Wendung"), 0) - # self.assertEqual(eas.getE("gemeinsame_Wendung"), 0) - # self.assertEqual(eas.getE("Frequenzumrichter"), 1) - - # ### then the output channels ### - # self.assertEqual(eas.getA("Bedienelemente_Steuerschrank"), 16) - - # # Bedienstation - # self.assertEqual(eas.getA("bedienstation_1fach_Not_Aus"), 1) - # self.assertEqual(eas.getA("bedienstation_einfach_Zug_Wechseln"), 1) - # self.assertEqual(eas.getA("bedienstation_automatische_Umfahrung"), 1) - # self.assertEqual(eas.getA("bedienstation_zweifach_Wechs_BCD_10f"), 1) - # self.assertEqual(eas.getA("bedienstation_zweifach_Not_Aus_Reset"), 2) - # self.assertEqual(eas.getA("bedienst_dreifach"), 3) - # self.assertEqual(eas.getA("bedienst_vierfach"), 4) - # self.assertEqual(eas.getA("bedienst_sechsfach"), 6) - # self.assertEqual(eas.getA("EAs_Unterverteiler_direct"), 6) - - # # Ermittlung_Mengengeruest_Anzahl - # self.assertEqual(eas.getA("Sensor_Traversenabfrage_optisch"), 0) - # self.assertEqual(eas.getA("Reflexionslichtschranke_RSM_DIRECT"), 0) - # self.assertEqual(eas.getA("Sensor induktiv Flyer+PM"), 0) - # self.assertEqual(eas.getA("Seilzugschalter"), 0) - - # self.assertEqual(eas.getA("Weiche"), 1) - # self.assertEqual(eas.getA("Weiche_nach_PM_bipolar"), 2) - # self.assertEqual(eas.getA("gemeinsame_Weichenrueckstellung"), 1) - # self.assertEqual(eas.getA("Dreifach_Weiche_DIRECT"), 2) - # self.assertEqual(eas.getA("Kreuzungsweiche"), 10) - # self.assertEqual(eas.getA("Stopper"), 1) - # self.assertEqual(eas.getA("Ventil_RA_3_2_abhebbar"), 1) - # self.assertEqual(eas.getA("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 2) - # self.assertEqual(eas.getA("Blitzleuchte_Stoerung"), 1) - - # self.assertEqual(eas.getA("Schnittstelle_Flyer_ElectroJet"), 2) - # self.assertEqual(eas.getA("Schnittstelle_Putzmaschine_Neuhauser"), 4) - # self.assertEqual(eas.getA("FEldbux_UV_EinAusgang"), 1) - - # self.assertEqual(eas.getA("Spulenumsetzstation"), 20) - - # self.assertEqual(eas.getA("RA_unidirektional"), 1) - # self.assertEqual(eas.getA("RA_unidirektional_abhebbar"), 1) - # self.assertEqual(eas.getA("RA_unidirektional_mit_gemeinsamer_Wendung"), 1) - # self.assertEqual(eas.getA("RA_unidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.getA("RA_bidirektional"), 2) - # self.assertEqual(eas.getA("RA_bidirektional_abhebbar"), 2) - # self.assertEqual(eas.getA("RA_bidirektional_abhebbar_gemeinsWend"), 1) - # self.assertEqual(eas.getA("RA_bidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.getA("RA_in_RSM_bidirektional"), 1) - # self.assertEqual(eas.getA("Doppelstreckenantrieb"), 2) - # self.assertEqual(eas.getA("Doppelstreckenantriebgemeinsame_Wendung"), 1) - # self.assertEqual(eas.getA("gemeinsame_Wendung"), 2) - # self.assertEqual(eas.getA("Frequenzumrichter"), 3) - - - # # Test of Sum. - # self.assertEqual(eas.get_SE("bedienstation_1fach_Not_Aus"), 0) - # self.assertEqual(eas.get_SE("bedienstation_einfach_Zug_Wechseln"), 0) - # self.assertEqual(eas.get_SE("bedienstation_automatische_Umfahrung"), 0) - # self.assertEqual(eas.get_SE("bedienstation_zweifach_Wechs_BCD_10f"), 50) - # self.assertEqual(eas.get_SE("bedienstation_zweifach_Not_Aus_Reset"), 4) - # self.assertEqual(eas.get_SE("bedienst_dreifach"), 0) - # self.assertEqual(eas.get_SE("bedienst_vierfach"), 0) - # self.assertEqual(eas.get_SE("bedienst_sechsfach"), 6) - # self.assertEqual(eas.get_SE("EAs_Unterverteiler_direct"), 70) - - # # 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 induktiv Flyer+PM"), 2) - # self.assertEqual(eas.get_SE("Seilzugschalter"), 0) - - # self.assertEqual(eas.get_SE("Weiche"), 0) - # self.assertEqual(eas.get_SE("Weiche_nach_PM_bipolar"), 0) - # self.assertEqual(eas.get_SE("gemeinsame_Weichenrueckstellung"), 0) - # self.assertEqual(eas.get_SE("Dreifach_Weiche_DIRECT"), 0) - # self.assertEqual(eas.get_SE("Kreuzungsweiche"), 0) - # self.assertEqual(eas.get_SE("Stopper"), 0) - # self.assertEqual(eas.get_SE("Ventil_RA_3_2_abhebbar"), 0) - # self.assertEqual(eas.get_SE("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 0) - # self.assertEqual(eas.get_SE("Blitzleuchte_Stoerung"), 0) - - # self.assertEqual(eas.get_SE("Schnittstelle_Flyer_ElectroJet"), 2) - # #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) - - # self.assertEqual(eas.get_SE("RA_unidirektional"), 0) - # self.assertEqual(eas.get_SE("RA_unidirektional_abhebbar"), 0) - # self.assertEqual(eas.get_SE("RA_unidirektional_mit_gemeinsamer_Wendung"), 0) - # self.assertEqual(eas.get_SE("RA_unidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.get_SE("RA_bidirektional"), 0) - # self.assertEqual(eas.get_SE("RA_bidirektional_abhebbar"), 0) - # self.assertEqual(eas.get_SE("RA_bidirektional_abhebbar_gemeinsWend"), 0) - # self.assertEqual(eas.get_SE("RA_bidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.get_SE("RA_in_RSM_bidirektional"), 0) - # self.assertEqual(eas.get_SE("Doppelstreckenantrieb"), 0) - # self.assertEqual(eas.get_SE("Doppelstreckenantriebgemeinsame_Wendung"), 0) - # self.assertEqual(eas.get_SE("gemeinsame_Wendung"), 0) - # self.assertEqual(eas.get_SE("Frequenzumrichter"), 0) - - # ### output #### - # self.assertEqual(eas.get_SA("bedienstation_1fach_Not_Aus"), 0) - # self.assertEqual(eas.get_SA("bedienstation_einfach_Zug_Wechseln"), 0) - # self.assertEqual(eas.get_SA("bedienstation_automatische_Umfahrung"), 0) - # self.assertEqual(eas.get_SA("bedienstation_zweifach_Wechs_BCD_10f"), 10) - # self.assertEqual(eas.get_SA("bedienstation_zweifach_Not_Aus_Reset"), 4) - # self.assertEqual(eas.get_SA("bedienst_dreifach"), 0) - # self.assertEqual(eas.get_SA("bedienst_vierfach"), 0) - # self.assertEqual(eas.get_SA("bedienst_sechsfach"), 6) - # self.assertEqual(eas.get_SA("EAs_Unterverteiler_direct"), 60) - - # # 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 induktiv Flyer+PM"), 0) - # self.assertEqual(eas.get_SA("Seilzugschalter"), 0) - - # self.assertEqual(eas.get_SA("Weiche"), 44) - # self.assertEqual(eas.get_SA("Weiche_nach_PM_bipolar"), 0) - # self.assertEqual(eas.get_SA("gemeinsame_Weichenrueckstellung"), 0) - # self.assertEqual(eas.get_SA("Dreifach_Weiche_DIRECT"), 2) - # self.assertEqual(eas.get_SA("Kreuzungsweiche"), 0) - # self.assertEqual(eas.get_SA("Stopper"), 0) - # self.assertEqual(eas.get_SA("Ventil_RA_3_2_abhebbar"), 5) - # self.assertEqual(eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 164) - # self.assertEqual(eas.get_SA("Blitzleuchte_Stoerung"), 3) - - # self.assertEqual(eas.get_SA("Schnittstelle_Flyer_ElectroJet"), 2) - # 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) - - # self.assertEqual(eas.get_SA("RA_unidirektional"), 0) - # self.assertEqual(eas.get_SA("RA_unidirektional_abhebbar"), 1) - # self.assertEqual(eas.get_SA("RA_unidirektional_mit_gemeinsamer_Wendung"), 0) - # self.assertEqual(eas.get_SA("RA_unidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.get_SA("RA_bidirektional"), 0) - # self.assertEqual(eas.get_SA("RA_bidirektional_abhebbar"), 8) - # self.assertEqual(eas.get_SA("RA_bidirektional_abhebbar_gemeinsWend"), 0) - # self.assertEqual(eas.get_SA("RA_bidirektional_ohne_SPS_Ansteuerung"), 0) - # self.assertEqual(eas.get_SA("RA_in_RSM_bidirektional"), 0) - # self.assertEqual(eas.get_SA("Doppelstreckenantrieb"), 164) - # self.assertEqual(eas.get_SA("Doppelstreckenantriebgemeinsame_Wendung"), 0) - # self.assertEqual(eas.get_SA("gemeinsame_Wendung"), 0) - # self.assertEqual(eas.get_SA("Frequenzumrichter"), 0) - - # Zusammenfassung - # self.assertEqual(eas.gesamt_E(), 152) - # self.assertEqual(eas.gesamt_A(), 216) - - # def test_EA_implicit(self): - # pass - - # def test_HW(self): - # Anzahl_EAS = { - # "bedienstation_einfach_Zug_Wechseln": 1, - # "Weiche": 2, - # "RA_unidirektional": 1 - # } - # Anzahl_HW = { - # "hauptschalter": 2, - # "panel_pc": 1, - # "antrieb_unidirektional_halbleiter": 1, - # } - # mg = MG(deckblatt, {}) - # eas = EA(Anzahl_EAS) - # hw = HW(Anzahl_HW, eas) - - # hw = HW(Anzahl_HW, mg, eas) - # self.assertEqual(hw.anzahl("hauptschalter"), 2) - # self.assertEqual(hw.anzahl("panel_pc"), 1) - # print (hw) - # #self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 1) - # self.assertEqual(hw.summe_gesamt(), 460.736) - # self.assertEqual(hw.summe_in_LL(), 294) - # self.assertEqual(hw.summe_vorort(), 166.736) - - #def test_DL(self): - # Anzahl_EAS = { - # "bedienstation_einfach_Zug_Wechseln": 9, - # "Weiche": 16, - # } - - + + def test_ergebnis(self): + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + emo_eingabe = { + "Schaltschrank_aufstellen": 1, + "Unterverteiler_montieren": 4, + "Pritsche_montieren_umbauen_demontieren": 66, + "Pritsche_in_RSM_montieren": 0, + "Motor_verdrahten_und_anschliessen": 97, + "Tableau_befestigen_und_anschliessen": 15, + "Schnittstelle_Flyer_Putzmaschine": 1, + "Sensoren_montieren": 84, + "Seilzugschalter_installieren": 0, + "Blitzleuchte_installieren": 3, + "Weiche_Stopper_anschliessen": 244, + "Erdung": 40, + } + emo = EMO(eas, hw, mg) + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) + Anzahl_Ergebnis = {} + erg = Ergebnis(Anzahl_Ergebnis, hw, dl, emo) + self.assertAlmostEqual(erg.get_cost_of("E_Werkstatt"), 6298.56) + self.assertEqual(erg.get_cost_of("Schaltschrankbau_extern_Mehrkosten"), 0) + self.assertEqual(erg.get_cost_of("Dienstleistung_in_LL"), 10129.5) + self.assertEqual(erg.get_cost_of("Pflichtenheft"), 0) + #self.assertEqual(erg.get_cost_of("SPS_Programmierung"), ) + #self.assertEqual(erg.get_cost_of("PC_Programmierung_Visualisierung"), ) + self.assertEqual(erg.get_cost_of("Montage_elektrisch"), 9543.6) + self.assertAlmostEqual(erg.get_cost_of("Inbetriebnahmetest_Hardware_durch_Montage"), 954.36) + self.assertEqual(erg.get_cost_of("SPS_Inbetriebsetzung"), 9750) + self.assertEqual(erg.get_cost_of("PC_Inbetriebsetzung"), 0) + self.assertEqual(erg.get_cost_of("Inbetriebnahmeunterstützung_durch_Montage"), 4680) + self.assertEqual(erg.get_cost_of("Dokumentation"), 560) + self.assertEqual(erg.get_cost_of("Bedienungsanleitung_Emmert"), 1125) + self.assertEqual(erg.get_cost_of("Schulung_vor_Ort_beim_Kunden"), 0) + self.assertEqual(erg.get_cost_of("Abnahme"), 0) + self.assertEqual(erg.get_cost_of("SPS_Anlagenbetreuung"), 0) + self.assertEqual(erg.get_cost_of("PC_Anlagenbetreuung"), 0) + self.assertEqual(erg.get_cost_of("Anlagenbetreuung_durch_Montage"), 0) + self.assertEqual(erg.get_sum_of_costs(hw), 103957) def test_Unittests(): unittest.main() if __name__ == '__main__': - # test2() test_Unittests() diff --git a/test_jayjay.py b/test_jayjay.py new file mode 100644 index 0000000..6a322ec --- /dev/null +++ b/test_jayjay.py @@ -0,0 +1,332 @@ +import rieter_ekalk as rek +import unittest +class TestObjectMethods(unittest.TestCase): + def test_A_JayJay(self): + # Anzahl der für das Projekt benutzten + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":14, + "Flyer":4, + "Flyer_Puffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":1, + "Anzahl_der_Pufferstrecken_pro_Puffer":5, + "Begegnungsstrecke_Bypass":2, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = { + } + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":6, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":4, + "Weiche_Korrektur":4, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":10, + "RRA_uni_Begegnung":4, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":2, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":0, + "Dreifachweiche":0, + "Wechsel":0, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":0, + "RRA_bi":0, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":1, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 1, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = rek.MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + # check data of Mengengerüst + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Anzahl_RSM'), 14) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Flex_A_Premium'), False) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Getriebe_in_der_Mitte'), False) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'RSM_Einfahrt_Ein_Beidseitig'), False) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse'), 20) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse_zusätzlich'), 6) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach'), 14) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach'), 6) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach_Korrektur'), 4) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche'), 18) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche_Korrektur'), 4) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi'), 24) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_auf_Haupstrecke'), 10) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_ohne_SPS_Ansteuerung'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'gemeinsame_Wendung'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Seilzugschalter'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom'), 2) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein_Meldung'), 2) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung'), 2) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('rsm_fa', 'klemmkasten_rsm'), 2) + + # check data of the flyer + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl_Schienen'), 2) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Flyer'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse'), 28) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_induktiv_Spulenalter_Zug_positionierung'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Bedientableau_2fach'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Interface_Doffer'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche'), 8) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_nach_Flyer_bipolar'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Dreifachweiche'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_ohne_SPS-Ansteuerung'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Doppelstreckenantrieb'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_unger_Schiene'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein_Meldung'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung'), 4) + self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) + + # Verbindungsstrecken Wechsel + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Sensor_optisch_Traverse'), 10) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_1fach'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_2fach'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_14fach'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Weiche'), 4) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Dreifachweiche'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Kreuzungsweiche'), 1) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Werma_Rundumleuchte_Störung'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni_ohne_SPS_Ansteuerung'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi_ohne_SPS-Ansteuerung'), 0) + self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Doppelstreckenantrieb'), 0) + + # Puffer + self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl'), 1) + self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl_Staustrecken'), 5) + self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse'), 6) + self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse_Korrektur'), 1) + self.assertEqual(mg.get_value_of_object('puffer', 'Weiche'), 5) + self.assertEqual(mg.get_value_of_object('puffer', 'RA_bi_ungerade_Schiene'), 2) + self.assertEqual(mg.get_value_of_object('puffer', 'Weiche_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('puffer', 'Doppelstreckenantrieb'), 2) + self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom'), 1) + self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom_Korrektur'), 0) + self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein_Meldung'), 1) + self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) + + zf = mg.zusammenfassung() + #self.assertEqual(zf['Gesamtanzahl_Antriebe'], 44) + self.assertEqual(zf['Sensor_optisch_Traverse'], 68) + self.assertEqual(zf['Sensor_induktiv_Spulenalter_Zug_positionierung'], 4) + self.assertEqual(zf['Sensor_Spulenprüfung_voll_leer'], 0) + self.assertEqual(zf['Seilzugsschalter'], 0) + self.assertEqual(zf['Drucktaster_automatische_Umfahrung'], 0) + self.assertEqual(zf['Bedientableau_1fach'], 14) + self.assertEqual(zf['Bedientableau_2fach'], 10) + self.assertEqual(zf['Bedientableau_14fach'], 0) + self.assertEqual(zf['Interface_Putzmaschine'], 0) + self.assertEqual(zf['Interface_Doffer'], 4) + self.assertEqual(zf['Weiche'], 35) + self.assertEqual(zf['Dreifachweiche'], 0) + self.assertEqual(zf['Wechsel'], 4) + self.assertEqual(zf['Stopper'], 0) + self.assertEqual(zf['Meldelampe_Überstrom'], 7) + self.assertEqual(zf['Hauptschalter_Ein_Meldung'], 7) + self.assertEqual(zf['Werma_Rundumleuchte_Störung'], 6) + self.assertEqual(zf['Weiche_nach_PM_bipolar'], 0) + self.assertEqual(zf['Kreuzungsweiche'], 1) + self.assertEqual(zf['RA_uni'], 4) + self.assertEqual(zf['RA_uni_abhebbar'], 0) + self.assertEqual(zf['RA_uni_ohne_SPS_Ansteuerung'], 0) + self.assertEqual(zf['RA_bi'], 30) + self.assertEqual(zf['RA_bi_ohne_SPS-Ansteuerung'], 4) + self.assertEqual(zf['RA_bi_abhebbar'], 4) + self.assertEqual(zf['Doppelstreckenantrieb'], 6) + self.assertEqual(zf['gemeinsame_Wendung'], 0) + self.assertEqual(zf['klemmkasten_rsm'], 2) + + + +def test_Unittests(): + unittest.main() + +if __name__ == '__main__': + test_Unittests() diff --git a/utztex_group.py b/utztex_group.py new file mode 100644 index 0000000..c44fff7 --- /dev/null +++ b/utztex_group.py @@ -0,0 +1,4025 @@ +import unittest +import test_jayjay +import math +import json +JSON_IDENT = 5 + +class MG(): + def __init__(self, deckblatt:dict, **kwargs): + """ + kwargs can contain the keys + rsm_direct + rsm_fa + flyer_f40 + neuenhauser + flyer + verbindungsstrecken_w + puffer + turm + """ + mengen = { + #"SYSTEM":"", + #"RSM":0, + #"Flyer":2, + #"Flyer_Puffer":2, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":2, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3, + #"Neuenhauser-Putzmaschine":0, + #"Neuenhauser-Putzmaschine_Vorpuffer":0, + #"Neuenhauser-Putzmaschine_Nachpuffer":0, + #"Cason-Putzmaschine":0, + #"Cason-Putzmaschine_Vorpuffer":0, + #"Cason-Putzmaschine_Nachpuffer":0, + #"Puffer":0, + #"Anzahl_der_Pufferstrecken_pro_Puffer":0, + #"Begegnungsstrecke_Bypass":0, + #"Turm":0, + #"Turm_Anzahl_Wendlungen":0, + } + + + self._deckblatt = deckblatt + #self.remove_empty(self._deckblatt) + ### Prüfungen: + # wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein + if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) > 0: + if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) < 2: + raise Exception("Vorpuffer sollte grösser 1 sein") + if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) < 2: + raise Exception("Nachpuffer sollte grösser 1 sein") + # wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein + if deckblatt.get("Neuenhauser-Putzmaschine", 0) > 0: + if deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) < 2: + raise Exception("Vorpuffer der Neuenhauser sollte grösser 1 sein") + if deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) < 2: + raise Exception("Nachpuffer der Neuenhauser sollte grösser 1 sein") + # wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein + if deckblatt.get("Cason-Putzmaschine", 0) > 0: + if deckblatt.get("Cason-Putzmaschine_Vorpuffer", 0) < 2: + raise Exception("Vorpuffer der Cason sollte grösser 1 sein") + if deckblatt.get("Cason-Putzmaschine_Nachpuffer", 0) < 2: + raise Exception("Nachpuffer der Cason sollte grösser 1 sein") + # wenn Puffer, dann mindestens 2 Strecken + if deckblatt.get("Puffer", 0) > 0: + if deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) < 2: + raise Exception("mind. 2 Strecken sollten im Puffer existieren") + + # Bypass, wenn mindestens 2 Flyer oder 2 RSM + # Turm: kein Kriterium + self._RSM_Anzahl = deckblatt.get("RSM", 0) + rsm_direct_mengen = {} + if "rsm_direct" in kwargs: + rsm_direct_mengen = kwargs['rsm_direct'] + self.remove_empty(rsm_direct_mengen) + rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt + + rsm_fa_mengen = {} + if "rsm_fa" in kwargs: + rsm_fa_mengen = kwargs['rsm_fa'] + self.remove_empty(rsm_fa_mengen) + rsm_fa_mengen["Anzahl_RSM"] = self._RSM_Anzahl #übernahme aus deckblatt + + flyer_f40_mengen = {} + if "flyer_f40" in kwargs: + flyer_f40_mengen = kwargs['flyer_f40'] + self.remove_empty(flyer_f40_mengen) + flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) #übernahme aus deckblatt + flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) #übernahme aus deckblatt + flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) #übernahme aus deckblatt + + neuenhauser_mengen = {} + if "neuenhauser" in kwargs: + neuenhauser_mengen = kwargs['neuenhauser'] + self.remove_empty(neuenhauser_mengen) + neuenhauser_mengen["Neuenhauser-Putzmaschine"] = deckblatt.get("Neuenhauser-Putzmaschine", 0) + neuenhauser_mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) + neuenhauser_mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) + + flyer_mengen = {} + if "flyer" in kwargs: + flyer_mengen = kwargs['flyer'] + self.remove_empty(flyer_mengen) + flyer_mengen["Anzahl"] = deckblatt.get("Flyer", 0) + flyer_mengen["Flyer"] = deckblatt.get("Flyer", 0) + flyer_mengen["Anzahl_Schienen"] = deckblatt.get("Flyer_Puffer", 0) + + puffer_mengen = {} + if "puffer" in kwargs: + puffer_mengen = kwargs['puffer'] + self.remove_empty(puffer_mengen) + puffer_mengen["Puffer"] = deckblatt.get("Puffer", 0) + puffer_mengen["Anzahl_Pufferstrecken"] = deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) + + turm_mengen = {} + if "turm" in kwargs: + turm_mengen = kwargs['turm'] + self.remove_empty(turm_mengen) + turm_mengen["Turm"] = deckblatt.get("Turm", 0) + turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0) + verbindungsstrecken_w_mengen = {} + if "verbindungsstrecken_w" in kwargs: + verbindungsstrecken_w_mengen = kwargs['verbindungsstrecken_w'] + self.remove_empty(verbindungsstrecken_w_mengen) + + #überprüfe welche Art von System, setze dict der unrelevanten klasse = 0 + system = deckblatt.get("SYSTEM", "") + if (system.lower() == "direct"): + self._rsm_fa = RSM_FA({}) + self._rsm_direct = RSM_direct(rsm_direct_mengen) + elif (system.lower() == "fa"): + self._rsm_fa = RSM_FA(rsm_fa_mengen) + self._rsm_direct = RSM_direct({}) + else: + raise Exception("unkown Flyer. Either direct or fa") + + self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen) + self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen) + self._flyer = Flyer_EJet(flyer_mengen) + n_begegnung = deckblatt.get('Begegnungsstrecke_Bypass', 0) + self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen, n_begegnung) + self._puffer = Puffer(puffer_mengen) + self._turm = Turm(turm_mengen) + + + def get_deckblatt_value(self, key): + return self._deckblatt.get(key, 0) + + def get_value_of_object(self, objectname, key): + # Deckblatt + if (objectname.lower() == "deckblatt"): + return self._deckblatt.get(key) + # RSM_direct + if (objectname.lower() == "rsm_direct"): + return self._rsm_direct.anzahl(key) + # RSM_FA + if (objectname.lower() == "rsm_fa"): + return self._rsm_fa.anzahl(key) + # Flyer_F40_EJet_inc_Putz + if (objectname.lower() == "flyer_f40_ejet_inc_putz"): + return self._flyer_f40.anzahl(key) + # Putzmaschine_Neuenhauser + if (objectname.lower() == "putzmaschine_neuenhauser"): + return self._neuenhauser.anzahl(key) + # Flyer_EJet + if (objectname.lower() == "flyer_ejet"): + return self._flyer.anzahl(key) + # Verbindungsstrecken_Wechsel + if (objectname.lower() == "verbindungsstrecken_wechsel"): + return self._verbindungsstrecken_w.anzahl(key) + # Puffer + if (objectname.lower() == "puffer"): + return self._puffer.anzahl(key) + # Turm + if (objectname.lower() == "turm"): + return self._turm.anzahl(key) + + raise Exception("unkown element") + + + def getresult(self): + res = { + "RSM direct": self._rsm_direct._Mengen, + "RSM FA": self._rsm_fa._Mengen, + "Flyer F40 (Electrojet) incl. Putzmaschine": self._flyer_f40._Mengen, + "Putzmaschine (Neuenhauser)": self._neuenhauser._Mengen, + "Flyer (Electrojet)": self._flyer._Mengen, + "Verbindungsstrecken/Wechsel": self._verbindungsstrecken_w._Mengen, + "Puffer": self._puffer._Mengen, + "Turm": self._turm._Mengen, + } + return res + + def tojson(self, input:dict): + return json.dumps(input, sort_keys=False, indent=4) + + def tofile(self): + json = self.tojson(self.getresult()) + with open("json_mengengeruest.json", "w") as file: + file.write(json) + + def ztofile(self): + json = self.tojson(self.zusammenfassung()) + with open("zusammenfassung_mengengeruest.json", "w") as file: + file.write(json) + + def remove_empty(self, toclean): + # remove all elements with the number of 0. They are of no use + l = [] + for k,v in toclean.items(): + if v == 0: + l.append(k) + for item in l: + del toclean[item] + + def zusammenfassung(self): + #in Excel Zellwerte und Bezüge der Spalte "G" können ignoriert werden + zmengen = { + "Sensor_optisch_Traverse": 0, + "Sensor_induktiv_Spulenalter_Zug_positionierung": 0, + "Sensor_Spulenprüfung_voll_leer": 0, + "Seilzugsschalter": 0, + "Drucktaster_automatische_Umfahrung": 0, + "Bedientableau_1fach": 0, + "Bedientableau_2fach": 0, + "Bedientableau_14fach": 0, + "Interface_Putzmaschine": 0, + "Interface_Doffer": 0, + "Weiche": 0, + "Dreifachweiche": 0, + "Wechsel": 0, + "Stopper": 0, + "Meldelampe_Überstrom": 0, + "Hauptschalter_Ein_Meldung": 0, + "Werma_Rundumleuchte_Störung": 0, + "Weiche_nach_PM_bipolar": 0, + "Kreuzungsweiche": 0, + "RA_uni": 0, + "RA_uni_abhebbar": 0, + "RA_uni_ohne_SPS_Ansteuerung": 0, + "RA_bi": 0, + "RA_bi_ohne_SPS-Ansteuerung": 0, + "RA_bi_abhebbar": 0, + "Doppelstreckenantrieb": 0, + "gemeinsame_Wendung": 0, + "Gesamtanzahl_Antriebe": 0, + "klemmkasten_rsm": 0 + } + zmengen["Sensor_optisch_Traverse"] = self._rsm_direct._Mengen.get("Sensor_optisch_Traverse", 0) +\ + self._rsm_fa._Mengen.get("Sensor_optisch_Traverse", 0) +\ + self._flyer_f40._Mengen.get("Sensor_optisch_Traverse", 0) +\ + self._neuenhauser._Mengen.get("Sensor_optisch_Traverse", 0) +\ + self._flyer._Mengen.get("Sensor_optisch_Traverse", 0) +\ + self._verbindungsstrecken_w._Mengen.get("Sensor_optisch_Traverse",0) +\ + self._verbindungsstrecken_w._Mengen.get("Dreifachweiche",0) * 2 +\ + self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche",0) * 4 +\ + self._puffer._Mengen.get("Sensor_optisch_Traverse",0) +\ + self._turm._Mengen.get("Sensor_optisch_Traverse",0) + 15 + + + zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._flyer_f40._Mengen.get("Sensor_induktiv_Spulenhalter",0) +\ + self._neuenhauser._Mengen.get("Sensorik_Zugpositionierung",0) +\ + self._flyer._Mengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung",0) + + zmengen["Sensor_Spulenprüfung_voll_leer"] = self._neuenhauser._Mengen.get("Sensor_WT18_Spulenprüfung_voll_leer",0) + zmengen["Seilzugsschalter"] = self._rsm_fa._Mengen.get("Seilzugsschalter", 0) + zmengen["Drucktaster_automatische_Umfahrung"] = self._rsm_fa._Mengen.get("Mit_Drucktaster", 0) + zmengen["Bedientableau_1fach"] = self._rsm_fa._Mengen.get("Bedientableau_1fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1fach", 0) + zmengen["Bedientableau_2fach"] = self._rsm_direct._Mengen.get("Bedientableau_2fach", 0) +\ + self._rsm_fa._Mengen.get("Bedientableau_2fach", 0) +\ + self._flyer_f40._Mengen.get("Bedientableau_2fach", 0) +\ + self._neuenhauser._Mengen.get("Bedientableau_2fach", 0) +\ + self._flyer._Mengen.get("Bedientableau_2fach", 0) +\ + self._verbindungsstrecken_w._Mengen.get("Bedientableau_2fach", 0) +\ + self._turm._Mengen.get("Bedientableau_2fach", 0) + zmengen["Bedientableau_14fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14fach", 0) + zmengen["Interface_Putzmaschine"] = self._neuenhauser._Mengen.get("Interface_Putzmaschine", 0) + zmengen["Interface_Doffer"] = self._flyer_f40._Mengen.get("Interface_Doffer", 0) + self._flyer._Mengen.get("Interface_Doffer", 0) + zmengen["Weiche"] = self._rsm_direct._Mengen.get("Weiche", 0) +\ + self._rsm_fa._Mengen.get("Weiche", 0) +\ + self._flyer_f40._Mengen.get("Weiche", 0) +\ + self._neuenhauser._Mengen.get("Weiche", 0) +\ + self._flyer._Mengen.get("Weiche", 0) +\ + self._verbindungsstrecken_w._Mengen.get("Weiche", 0) +\ + self._puffer._Mengen.get("Weiche", 0) +\ + self._turm._Mengen.get("Weiche", 0) + 4 + zmengen["Dreifachweiche"] = self._rsm_direct._Mengen.get("Weiche_Gemeinsame_Rückstellung", 0) +\ + self._flyer_f40._Mengen.get("Dreifachweiche", 0) +\ + self._flyer._Mengen.get("Dreifachweiche", 0) +\ + self._verbindungsstrecken_w.anzahl("Dreifachweiche") + zmengen["Wechsel"] = self._flyer_f40._Mengen.get("Wechsel", 0) +\ + self._flyer._Mengen.get("Wechsel", 0) + zmengen["Stopper"] = self._flyer_f40._Mengen.get("Stopper", 0) + zmengen["Meldelampe_Überstrom"] = self._rsm_direct._Mengen.get("Meldelampe_Überstrom", 0) +\ + self._rsm_fa._Mengen.get("Meldelampe_Überstrom", 0) +\ + self._flyer_f40._Mengen.get("Meldelampe_Überstrom", 0) +\ + self._neuenhauser._Mengen.get("Meldelampe_Überstrom", 0) +\ + self._flyer._Mengen.get("Meldelampe_Überstrom", 0) +\ + self._puffer._Mengen.get("Meldelampe_Überstrom", 0) + zmengen["Hauptschalter_Ein_Meldung"] = self._rsm_direct._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ + self._rsm_fa._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ + self._flyer_f40._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ + self._neuenhauser._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ + self._flyer._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ + self._puffer._Mengen.get("Hauptschalter_Ein_Meldung", 0) + zmengen["Werma_Rundumleuchte_Störung"] = self._rsm_direct._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ + self._rsm_fa._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ + self._flyer_f40._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ + self._neuenhauser._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ + self._flyer._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ + self._verbindungsstrecken_w._Mengen.get("Werma_Rundumleuchte_Störung", 0) + zmengen["Weiche_nach_PM_bipolar"] = self._flyer_f40._Mengen.get("Weiche_nach_PM_bipolar", 0) +\ + self._neuenhauser._Mengen.get("Weiche_nach_PM_bipolar", 0) + zmengen["Kreuzungsweiche"] = self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche", 0) + zmengen["RA_uni"] = self._verbindungsstrecken_w._Mengen.get("RA_uni", 0) +\ + self._rsm_fa._Mengen.get("RRA_uni_Begegnung", 0) +\ + self._flyer_f40._Mengen.get("RA_uni", 0) + #RRA_bi_uni_Begegnung + zmengen["RA_uni_abhebbar"] = self._flyer_f40._Mengen.get("RA_uni_abhebbar", 0) +\ + self._neuenhauser._Mengen.get("RA_uni_abhebbar", 0) + zmengen["RA_uni_ohne_SPS_Ansteuerung"] = self._flyer_f40._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ + self._neuenhauser._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ + self._verbindungsstrecken_w._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) + zmengen["RA_bi"] = self._rsm_fa._Mengen.get("RRA_bi", 0) +\ + self._flyer_f40._Mengen.get("RRA_bi", 0) +\ + self._flyer._Mengen.get("RA_bi", 0) +\ + self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\ + self._puffer._Mengen.get("RA_bi_ungerade_Schiene", 0) +\ + self._turm._Mengen.get("RA_bi", 0) + zmengen["RA_bi_ohne_SPS-Ansteuerung"] = self._rsm_fa._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ + self._flyer_f40._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ + self._flyer._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ + self._verbindungsstrecken_w._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ + self._turm._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) #TODO: Notation beachten: RA_bi, RRA_bi + zmengen["RA_bi_abhebbar"] = self._rsm_direct._Mengen.get("RA_bi_abhebbar", 0) +\ + self._flyer_f40._Mengen.get("RRA_BI_abhebbar", 0) +\ + self._flyer._Mengen.get("RA_bi_abhebbar", 0) #TODO: Notation beachten: RA_bi, RRA_bi + zmengen["Doppelstreckenantrieb"] = self._rsm_direct._Mengen.get("Doppelstreckenantrieb", 0) +\ + self._flyer_f40._Mengen.get("Doppelstreckenantrieb", 0) +\ + self._neuenhauser._Mengen.get("Doppelstreckenantrieb", 0) +\ + self._flyer._Mengen.get("Doppelstreckenantrieb", 0) +\ + self._verbindungsstrecken_w._Mengen.get("Doppelstreckenantrieb", 0) +\ + self._puffer._Mengen.get("Doppelstreckenantrieb", 0) + zmengen["gemeinsame_Wendung"] = self._rsm_direct._Mengen.get("gemeinsame_Wendung", 0) +\ + self._rsm_fa._Mengen.get("gemeinsame_Wendung", 0) + zmengen["Gesamtanzahl_Antriebe"] = zmengen.get("RA_uni", 0) +\ + zmengen.get("RA_uni_abhebbar", 0) +\ + zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ + zmengen.get("RA_bi", 0) +\ + zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ + zmengen.get("RA_bi_abhebbar", 0) +\ + zmengen.get("Doppelstreckenantrieb", 0) + zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) + return zmengen + +# RSM_direct: +class RSM_direct(): + def __init__(self, anzahl:dict): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + "Anzahl":0, + #"Anzahl_Strecken_RSM":8, + "Sensor_optisch_Traverse":0, + #"Lichtschranke_Traverse":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Bedientableau_2fach_Direct":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_Gemeinsame_Rückstellung":0, + "Weiche_Gemeinsame_Rückstellung_Korrektur":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + #"Doppelstreckenantrieb":0, + #"gemeinsame_Wendung":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + #Berechnungen basieren auf der Anzahl der Ringspinnmaschinen (rsm_anzahl) mit Ausnahme 'Sensor_optisch_Traverse' + #sowie teilweise manueller Eingaben von Korrekturfaktoren, hier mit dem Anhang '_Korrektur' + self._Mengen = {} + self._RSM_Anzahl = anzahl.get("Anzahl", 0) + self._Mengen["Anzahl"] = anzahl.get("Anzahl", 0) + self._Mengen["Anzahl_Strecken_RSM"] = 8 + self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Sensor_optisch_Traverse", 0) + self._Mengen["Lichtschranke_Traverse"] = self._RSM_Anzahl * 6 + self._Mengen["Bedientableau_2fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) + self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) + self._Mengen["Bedientableau_2fach_Direct"] = self._RSM_Anzahl + self._Mengen["Weiche"] = self._RSM_Anzahl * 4 + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_Gemeinsame_Rückstellung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) + self._Mengen["Weiche_Gemeinsame_Rückstellung_Korrektur"] = anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) + self._Mengen["RA_bi_abhebbar"] = math.ceil(self._RSM_Anzahl * 0.31) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) + self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) + self._Mengen["Doppelstreckenantrieb"] = self._RSM_Anzahl * self._Mengen.get("Anzahl_Strecken_RSM", 0) + self._Mengen["gemeinsame_Wendung"] = math.ceil(self._RSM_Anzahl / 6) * 2 + self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung"] = math.floor(self._RSM_Anzahl / 5) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + def anzahl(self, partname): + return self._Mengen.get(partname, 0) +# RSM_FA: +class RSM_FA(): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + "Anzahl_RSM":30, + #"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":8, + #"Bedientableau_1fach":0, + "Bedientableau_1fach_Korrektur":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":1, + #"Weiche":0, + "Weiche_Korrektur":6, + #"RRA_bi":0, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + #"Seilzugschalter":0, + #"Mit_Drucktaster":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + def __init__(self, anzahl:dict): + self._Mengen = {} + self._Mengen["Anzahl_RSM"] = anzahl.get("Anzahl_RSM", 0) + self._Mengen["Flex_A_Premium"] = anzahl.get("Flex_A_Premium", False) + self._Mengen["Getriebe_in_der_Mitte"] = anzahl.get("Getriebe_in_der_Mitte", False) + self._Mengen["RSM_Einfahrt_Ein_Beidseitig"] = anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False) + + sensorfaktor_premium = 1 + sensorfaktor_beidseitig = 0 + if self.flex_a_premium(): + sensorfaktor_premium = 4 + if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): + sensorfaktor_beidseitig = 1 + self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Anzahl_RSM", 0)*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) + self._Mengen["Sensor_optisch_Traverse_zusätzlich"] = anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) + #hier keine Korrektur, dafür "Zusätzlich" vorgesehen + + tableaufaktor_premium = 1 + tableaufaktor_beidseitig = 0 + if self.flex_a_premium(): + tableaufaktor_premium = 0 + if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): + tableaufaktor_beidseitig = 1 + self._Mengen["Bedientableau_1fach"] = anzahl.get("Anzahl_RSM", 0)*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0) + self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0) + self._Mengen["Bedientableau_2fach"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) + self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) + + weichefaktor_premium = 1 + weichefaktor_beidseitig = 0 + if self.flex_a_premium(): + weichefaktor_premium = 3 + if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): + weichefaktor_beidseitig = 1 + self._Mengen["Weiche"] = anzahl.get("Anzahl_RSM", 0) * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) + + rrafaktor_premium = 1 + rrafaktor_beidseitig = 0 + if self.flex_a_premium(): + rrafaktor_premium = 2 + if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): + rrafaktor_beidseitig = 1 + self._Mengen["RRA_bi"] = anzahl.get("Anzahl_RSM", 0) * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0) + self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0) + self._Mengen["RRA_bi_auf_Haupstrecke"] = anzahl.get("RRA_bi_auf_Haupstrecke", 0) + self._Mengen["RRA_uni_Begegnung"] = anzahl.get("RRA_uni_Begegnung", 0) + + if self.flex_a_premium(): + self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4 + else: + self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0 + + self._Mengen["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) + + seilzfaktor_premium = 0 + seilzfaktor_getriebe_mitte = 0 + if self.flex_a_premium(): + seilzfaktor_premium = 2 + if (anzahl.get("Getriebe_in_der_Mitte", False)): + seilzfaktor_getriebe_mitte = 2 + self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) + + if self.flex_a_premium(): + self._Mengen["Mit_Drucktaster"] = anzahl.get("Anzahl_RSM", 0) * 8 + else: + self._Mengen["Mit_Drucktaster"] = 0 + self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0) + self._Mengen["Meldelampe_Überstrom"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/3) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) ###f bei jayjay durch 10 statt 3... generelle änderung oder immer manuell? + self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/3) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + self._Mengen["klemmkasten_rsm"] = anzahl.get("klemmkasten_rsm", 0) + + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) + def flex_a_premium(self): + return self._Mengen.get("Flex_A_Premium", False) + +# Flyer_F40_(Electrojet)_incl._Putzmaschine: +class Flyer_F40_EJet_inc_Putz(): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":True, + "Nachpuffer":True, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + #"RRA_bi":0, + "RRA_bi_Korrektur":9, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + def __init__(self, anzahl:dict): + + self._Mengen = self.mengen + anzahl = self._Mengen + + self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\ + anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) + self._Mengen["Anzahl"] = self._Flyer_Anzahl + self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\ + anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) + self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) + self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) + self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) + self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) + self._Mengen["Single_Line_Durchfahrt"] = anzahl.get("Single_Line_Durchfahrt", False) + self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False) + sensorfaktor_nachpuffer = 7 + if (anzahl.get("Nachpuffer", False)): + sensorfaktor_nachpuffer = 5 + self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_optisch_Traverse_Korrektur"] = self.mengen.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 1 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) ###f bei jayjay * 2 + 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"] = 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"] = 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"] = 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"] = 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 + if (anzahl.get("Single_Line_Durchfahrt", False)): + rraunifaktor_durchfahrt = 1 + if (anzahl.get("Nachpuffer", False)): + rraunifaktor_nachpuffer = 0 + self._Mengen["RA_uni_abhebbar"] = self._Flyer_Anzahl * (rraunifaktor_durchfahrt + rraunifaktor_nachpuffer) + anzahl.get("RA_uni_abhebbar_Korrektur", 0) + self._Mengen["RA_uni_abhebbar_Korrektur"] = 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 +\ + anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) + else: + self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) +\ + self._Flyer_Anzahl + 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._Flyer_Anzahl + self._Mengen["RRA_BI_abhebbar_Korrektur"] = self.mengen.get("RRA_BI_abhebbar_Korrektur", 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) + else: + self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl + + if (anzahl.get("Single_Line_Durchfahrt", False)): + self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + self._Flyer_Anzahl + else: + self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + anzahl.get("Doppelstreckenantrieb_Korrektur", 0) + self._Mengen["Doppelstreckenantrieb_Korrektur"] = 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"] = 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"] = 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"] = 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(): + def __init__(self, anzahl:dict): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + + self._Mengen = {} + self._Putze_Anzahl = anzahl.get("Neuenhauser-Putzmaschine", 0) + self._Vorpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) + self._Nachpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) + self._Mengen["Anzahl"] = self._Putze_Anzahl + + self._Mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = self._Vorpuffer_Anzahl #'Neuenhauser-Putzmaschine_Vorpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Vorstaustrecken' (Mengengerüst/Putzmaschine) + self._Mengen["Anzahl_Vorstaustrecken"] = self._Vorpuffer_Anzahl + + self._Mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = self._Nachpuffer_Anzahl #'Neuenhauser-Putzmaschine_Nachpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Nachstaustrecken' (Mengengerüst/Putzmaschine) + self._Mengen["Anzahl_Nachstaustrecken"] = self._Nachpuffer_Anzahl + + self._Mengen["Sensor_optisch_Traverse"] = self._Putze_Anzahl * (self._Vorpuffer_Anzahl + self._Nachpuffer_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + + self._Mengen["Sensorik_Zugpositionierung"] = self._Putze_Anzahl * 4 + self._Mengen["Sensor_WT18_Spulenprüfung_voll_leer"] = self._Putze_Anzahl * 2 + + self._Mengen["Bedientableau_2fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) + self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) + + self._Mengen["Interface_Putzmaschine"] = self._Putze_Anzahl + self._Mengen["Weiche"] = self._Putze_Anzahl * self._Vorpuffer_Anzahl + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_nach_PM_bipolar"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1) + self._Mengen["RA_uni_abhebbar"] = self._Putze_Anzahl + anzahl.get("RA_uni_abhebbar_Korrektur", 0) + self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) + self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Putze_Anzahl + + self._Mengen["RA_uni_abhebbar_unger_Sch"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/3) + math.floor(self._Nachpuffer_Anzahl/3)) + self._Mengen["Doppelstreckenantrieb"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/2) + math.floor(self._Nachpuffer_Anzahl/2)) + self._Mengen["Meldelampe_Überstrom"] = self._Putze_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Hauptschalter_Ein_Meldung"] = self._Putze_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung"] = self._Putze_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) + +# Flyer_(Electrojet): +class Flyer_EJet(): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + "Flyer":0, # äquivalent zu 'Anzahl' + "Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":0, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + def __init__(self, anzahl:dict): + + + self._Mengen = {} + self._Flyer_Anzahl = anzahl.get("Flyer", 0) + self._Mengen["Anzahl"] = self._Flyer_Anzahl + self._Mengen["Flyer"] = self._Flyer_Anzahl + self._Schienen_Anzahl = anzahl.get("Anzahl_Schienen", 0) + self._Mengen["Anzahl_Schienen"] = anzahl.get("Anzahl_Schienen", 0) + + self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (2*self._Schienen_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._Flyer_Anzahl + self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl + self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl + self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Schienen_Anzahl + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl + self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) + self._Mengen["Wechsel"] = self._Flyer_Anzahl + anzahl.get("Wechsel_Korrektur", 0) + self._Mengen["Wechsel_Korrektur"] = anzahl.get("Wechsel_Korrektur", 0) + self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl + self._Mengen["RA_bi_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) + self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) + self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) + self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Schienen_Anzahl/2) + self._Mengen["RA_bi_abhebbar_unger_Schiene"] = anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) + self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) + +# Verbindungsstrecken/_Wechsel: +class Verbindungsstrecken_Wechsel(): + def __init__(self, anzahl:dict, Begegnungsstrecke_bypass:int): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + #"Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + + self._Mengen = {} + self._Mengen["Sensor_optisch_Traverse"] = Begegnungsstrecke_bypass * 3 + \ + anzahl.get('Dreifachweiche', 0) * 2 + \ + anzahl.get('Kreuzungsweiche', 0) * 4 + \ + anzahl.get('Sensor_optisch_Traverse_Korrektur', 0) + self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Bedientableau_1fach"] = anzahl.get("Bedientableau_1fach", 0) + self._Mengen["Bedientableau_2fach"] = anzahl.get("Bedientableau_2fach", 0) + self._Mengen["Bedientableau_14fach"] = anzahl.get("Bedientableau_14fach", 0) + self._Mengen["Weiche"] = Begegnungsstrecke_bypass * 2 + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) + self._Mengen["Kreuzungsweiche"] = anzahl.get("Kreuzungsweiche", 0) + self._Mengen["Werma_Rundumleuchte_Störung"] = anzahl.get("Werma_Rundumleuchte_Störung", 0) + self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) + self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung", 0) + self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) + self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RA_bi_ohne_SPS-Ansteuerung", 0) + self._Mengen["Doppelstreckenantrieb"] = anzahl.get("Doppelstreckenantrieb", 0) + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) + +# Puffer +class Puffer(): + def __init__(self, anzahl:dict): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + "Puffer":2, #äquivalent zu Anzahl + "Anzahl_Pufferstrecken":7, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Weiche":0, + "Weiche_Korrektur":0, + "RA_bi_ungerade_Schiene":2, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":2, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + } + + self._Mengen = anzahl + self._Puffer_Anzahl = anzahl.get("Puffer", 0) + self._Strecken_Anzahl = anzahl.get("Anzahl_Pufferstrecken", 0) + self._Mengen["Anzahl"] = self._Puffer_Anzahl + self._Mengen["Anzahl_Staustrecken"] = self._Strecken_Anzahl + self._Mengen["Sensor_optisch_Traverse"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) + self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0) + self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0) + self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) + self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0) + self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) + self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) + self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) +# Turm +class Turm(): + mengen = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + "Turm":0, #äquivalent zu Anzahl + "Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + def __init__(self, anzahl:dict): + self._Mengen = {} + self._Turm_Anzahl = anzahl.get("Turm", 0) + self._Mengen["Anzahl"] = self._Turm_Anzahl + self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0) + self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl + + self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5 + self._Mengen["Weiche"] = self._Turm_Anzahl*3 + self._Mengen["RA_bi"] = self._Turm_Anzahl*2 + anzahl.get("RA_bi_Korrektur", 0) + self._Mengen["RA_bi_Korrektur"] = anzahl.get("RA_bi_Korrektur", 0) + self._Mengen["RA_bi_ohne_SPS"] = self._Turm_Anzahl*self._Staustrecken_Anzahl*2 + anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) + self._Mengen["RA_bi_ohne_SPS_Korrektur"] = anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) + self._Mengen["Bedientableau_2fach"] = self._Turm_Anzahl*2 + def anzahl(self, partname, defaultv = 0): + return self._Mengen.get(partname, defaultv) + + +class EA(): + stueckzahl = { + "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), + "Meldeleuchte_Komm_PC_SPS_gestoert": (0, 1), + "Sammeleingang_Ueberstrom": (5, 1), + "Sammeleingang_Not_Aus": (2, 1), + "Sammeleingang_Druckluft_fehlt": (1, 1), + "Drucktaster_Reset": (1, 0), + "Sammeleingang_Antriebe_abheben": (1, 2), + "Reserve": (9, 7), + "Bedienelemente_Steuerschrank": (24, 16), + + # Bedienstation, + "bedienstation_1fach_Not_Aus": (1, 1), + "bedienstation_einfach_Zug_Wechseln": (1, 1), + "bedienstation_automatische_Umfahrung": (1, 1), # 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": (3, 3), + "bedienst_vierfach": (4, 4), + "bedienst_sechsfach": (6, 6), + "EAs_Unterverteiler_direct": (7, 6), + + # Ermittlung_Mengengeruest_Anzahl, + "Sensor_Traversenabfrage_optisch": (1, 0), + "Reflexionslichtschranke_RSM_DIRECT": (1, 0), + "Sensor induktiv Flyer+PM": (1, 0), + "Seilzugschalter": (1, 0), + + "Weiche": (0, 1), + "Weiche_nach_PM_bipolar": (0, 2), + "gemeinsame_Weichenrueckstellung": (0, 1), + "Dreifach_Weiche_DIRECT": (0, 2), + "Kreuzungsweiche": (0, 10), + "Stopper": (0, 1), + "Ventil_RA_3_2_abhebbar": (0, 1), + "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), + "Blitzleuchte_Stoerung": (0, 1), + + "Schnittstelle_Flyer_ElectroJet": (2, 2), + "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), + "FEldbux_UV_EinAusgang": (2, 1), + + "Spulenumsetzstation": (40, 20), + + "RA_unidirektional": (0, 1), + "RA_unidirektional_abhebbar": (0, 1), + "RA_unidirektional_mit_gemeinsamer_Wendung": (0, 1), + "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), + "RA_bidirektional": (0, 2), + "RA_bidirektional_abhebbar": (0, 2), + "RA_bidirektional_abhebbar_gemeinsWend": (0, 1), + "RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), + "RA_in_RSM_bidirektional": (0, 1), + "Doppelstreckenantrieb": (0, 2), + "Doppelstreckenantriebgemeinsame_Wendung": (0, 1), + "gemeinsame_Wendung": (0, 2), + "Frequenzumrichter": (1, 3) + } + self._Anzahl = anzahl + 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"] = 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 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"] = 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["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") + 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"] = self.stueckzahl.get("Spulenumsetzstation", 0) + + def getEA(self, partname): + return (self.EAs[partname][0], self.EAs[partname][1]) + def getE(self, partname): + return self.EAs[partname][0] + def getA(self, partname): + return self.EAs[partname][1] + def anzahl(self, partname, defaultv = 0): + return self._Anzahl.get(partname, defaultv) + + def get_SE(self, partname): + num_of_e = self.getE(partname) + zahl = self.anzahl(partname) + return num_of_e * zahl + def get_SA(self, partname): + num_of_a = self.getA(partname) + zahl = self.anzahl(partname) + return num_of_a * zahl + def get_SEA(self, partname): + return (self.get_SE(partname), self.get_SA(partname)) +###f dezentraleraufbau fehlt + def __repr__(self): + return repr(self._Anzahl) + + + def gesamt_E(self): + res = 0 + self.EAs + a = list(self._Anzahl.keys()) + a.sort() + with open('convert_.txt', 'w') as convert_file: + convert_file.write(json.dumps(self._Anzahl)) + for k,n in self._Anzahl.items(): + res += self.EAs[k][0] * n + return res + + def gesamt_A(self): + res = 0 + for k,n in self._Anzahl.items(): + res += self.EAs[k][1] * n + return res + + def Anzahl_notwendigen_Siemens_EAKarten(self): + SiemensS7_32DE = math.ceil(self.gesamt_E()/32) + SiemensS7_32DA = math.ceil(self.gesamt_A()/32) + return (SiemensS7_32DE, SiemensS7_32DA) + +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, ###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_1517_3": 1, + "sps_simatic_s7_1518_4": 0, + "sps_et200_1512sp": 0, + #"memory_card_256_mb": 0 + #"memory_card_2_gb": 0 + "et200_sp_ea_ebene":2, + "netzwerk_fernwartung":1, + "abgang_400v":2, + "abgang_24_v":2, + "anlagenrechner":1, + "anlagenrechner_ohne_bildschirm": 0, + "pulteinbau_monitor_srline_rflat_24fhd": 0, + "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, + "netzwerk_display_adapter_lindy": 0, + "zusaetzlicher_bildschirm":0, + #"schaltschrank":1, + + #"unterverteiler_fuer_1neuenhauser_pm":0, + "unterverteiler_fuer_1flyer":0, + "unterverteiler_fuer_2flyer":0, + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1, + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":4, + "unterverteiler_fuer_puffer":2, + + #"unterverteiler_fuer_5_rsm_fa":0, + "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-6, + + #"unterverteiler_fuer_10_rsm_fa":0, + "korrektur_10_rsm_zusaetzlich_im_unterverteiler":0, + + #"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0, + "korrektur_3_rsm_zusaetzlich_im_unterverteiler":0, + + "unterverteiler_fuer_4_rsm_direct":0, + "korrektur_4_rsm_zusaetzlich_im_unterverteiler":0, + + #"unterverteiler_fuer_12_rsm_direct":0, + "korrektur_12_rsm_zusaetzlich_im_unterverteiler":0, + "unterverteiler_fuer_8_rsm_direct":0, + "korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler":0, + + #"busverteiler_6_rsm_direct":0, + "korrektur_6_rsm_zusaetzlich_im_busverteiler":0, + + #"busverteiler_8_rsm_direct":0, + "korrektur_8_rsm_zusaetzlich_im_busverteiler":0, + + #"antrieb_unidirektional_halbleiter":0, + #"antrieb_bidirektional_halbleiter":0, + "antrieb_unidirektional_schuetz":0, + "antrieb_bidirektional_schuetz":0, + "motorschutzschalter":0, + "wendeschuetzschaltung":0, + #"frequenzumrichter":0, + ## summe_motorstarter + + # "bedienstation_1fach_kpl":0, + # "bedienst_2fach_wechs_bcd_10f":0, + # "bedienstation_2fach_kpl":0, + # "halter_bedientableau_2fach":0, + # "bedienstation_3fach_kpl":0, + # "halter_bedientableau_3fach":0, + # "bedienstation_4fach_kpl":0, + # "halter_bedientableau_4fach":0, + # "bedienstation_6fach_kpl":0, + # "halter_bedienstation_6fach":0, + # "drucktaster_automatische_umfahrung":0, + # "halter_fuer_drucktaster":0, + ## summe_bedienstationen + + "ET200_SP":1, + #"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, + "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, + #"et200_sp_eingangskarte_8_de":0, + "korrektur_et200_sp_eingangskarte_8_de":0, + "et200_sp_eingangskarte_16_de":0, + #"et200_sp_eingangskarte_8_do":0, + "korrektur_et200_sp_eingangskarte_8_do":0, + "et200_sp_eingangskarte_16_do":0, + # "et200_sp_base_unit_neue_last_mit_potKlemmen":0, + "korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen":0, + # "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen":0, + # "et200_sp_base_unit_neue_last":0, + "korrektur_et200_sp_base_unit_neue_last":-26, + # "et200_sp_base_unit_links_gebrueckt":0, + "korrektur_et200_sp_base_unit_links_gebrueckt":0, + + "SLIO":0, + # "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, + "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, + # "slio_eingangskarte_4_de":0, + "korrektur_slio_eingangskarte_4_de":0, + # "slio_eingangskarte_8_de":0, + "korrektur_slio_eingangskarte_8_de":0, + # "slio_ausgangskarte_4_do":0, + "korrektur_slio_ausgangskarte_4_do":0, + # "slio_ausgangskarte_8_do":0, + "korrektur_slio_ausgangskarte_8_do":0, + # "slio_power_modul":0, + "korrektur_slio_power_modul":0, + # "slio_4_x_dc_24v_4_x_dc_0v":0, + "korrektur_slio_4_x_dc_24v_4_x_dc_0v":0, + # "slio_8_x_dc_24v":0, + # "slio_8_x_dc_0v":0, + "korrektur_slio_8_x_dc_0v":0, + + # MATERIAL VOR ORT + "movimot_fu_mit_anschaltung":0, + # "sensor_optisch_traverse":0, + "sensorhalter_ohne_sensor":0, + # "reflexionslichtschranke_rsm_direct":0, + # "stoppersensor_induktiv_mit_halter":0, + # "sensor_spulenpruefung_voll_leer":0, + # "seilzugschalter":0, + "seil_fuer_seilzugschalter":0, + # "blitzleuchte":0, + # "spulenumsetzstation":0, + # "sensorkabel_je_20m":0, + # "stopper_weichenkabel_je_5m":0, + # "motorkabel_je_30m":0, + "kabelpritschen_leitern_200_60":669, + "kabelpritsche_rsm_100_60":0, + "kabelpritsche_rsm_50_35":0, + # "klemmkasten_rsm":0, + # "klemmkasten_direct_in_rsm":0, + # "erdung":0, + "kleinteile_rohre_schellen_kabelbinder_ect":2, + # "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, ###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":0, + # "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0, + "korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0, + # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":0, + # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":0, + # "profinetkabel":0, + "korrektur_profinetkabel":0, + # "schnittstellen_8x1mm2_30m":0, + } + + # Einzelteilpreise in € + ep = { + # Schaltschrank Einzelpreis + "schaltschrankgehaeuse_b1x800_zubehoer": 2000, # + "schaltschrankgehaeuse_b2x800_zubehoer": 4375, # 790821101 + "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5135, # 790821102 + "sps_simatic_s7_cpu315_2_pn_dp": 1880, # 708003004 + "speicherkarte_fuer_sps_512_kb": 150, # 708003012 + "sps_simatic_s7_cpu317_2_pn_dp": 3324, # 708003007 + "speicherkarte_fuer_sps2_mb": 215, # 708003027 + "sps_simatic_s7_1515_2": 1927, # 790008100 + "sps_simatic_s7_1517_3": 3828, # 790008101 + "sps_simatic_s7_1518_4": 5402, # 6ES7518-4AP00-0AB0 + "sps_et200_1512sp": 623, # 709000003 + "memory_card_256_mb": 250, # 708015093 + "memory_card_2_gb": 474, # 708015094 + "et200_sp_ea_ebene": 0, # 790009001 + "netzwerk_fernwartung": 750, # 790011001 + "abgang_400v": 250, # ---- + "abgang_24_v": 250, # ---- + "anlagenrechner": 1657, # 790011000 + "anlagenrechner_ohne_bildschirm": 1487, # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS + "pulteinbau_monitor_srline_rflat_24fhd": 1200, # 400009058 + "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 350, # 400009057 + "netzwerk_display_adapter_lindy": 650, # + "zusaetzlicher_bildschirm": 750, # + # _summe_schaltschrank + # "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210 + "unterverteiler_fuer_1flyer": 1000, # 790820207_A + "unterverteiler_fuer_2flyer": 2046, # 790820209_A + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 700, # 790820210 + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1100, # 790820210 + "unterverteiler_fuer_puffer": 700, # 790820210_F + + "unterverteiler_fuer_5_rsm_fa": 700, # 790820210_D + # korrektur_1_rsm_zusaetzlich_im_unterverteiler + + "unterverteiler_fuer_10_rsm_fa": 900, # 790820210_F + # + + "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C + # korrektur_3_rsm_zusaetzlich_im_unterverteiler + + "unterverteiler_fuer_4_rsm_direct": 5027, # 790820300 + # korrektur_4_rsm_zusaetzlich_im_unterverteiler + + "unterverteiler_fuer_12_rsm_direct": 7930, # 790820302 + # korrektur_12_rsm_zusaetzlich_im_unterverteiler + + "unterverteiler_fuer_8_rsm_direct": 6443, # 790820301 + # korrektur_8_rsm_zusaetzlich_im_unterverteiler + + "busverteiler_6_rsm_direct": 1578, # 790801002 + # korrektur_6_rsm_zusaetzlich_im_unterverteiler + + "busverteiler_8_rsm_direct": 1843, # 790801001 + # korrektur_8_rsm_zusaetzlich_im_unterverteiler + + "antrieb_unidirektional_halbleiter": 90, + "antrieb_bidirektional_halbleiter": 105, + "antrieb_unidirektional_schuetz": 0, + "antrieb_bidirektional_schuetz": 0, + "motorschutzschalter": 0, + "wendeschuetzschaltung": 75, + "frequenzumrichter": 250, + # summe_motorstarter + + "bedienstation_1fach_kpl": 59, + "bedienst_2fach_wechs_bcd_10f": 105, # 790002024 + "bedienstation_2fach_kpl": 65.63, # 790000020 + "halter_bedientableau_2fach": 42, # 825304006 + "bedienstation_3fach_kpl": 99, # 790000040 + "halter_bedientableau_3fach": 46, # 825304007 + "bedienstation_4fach_kpl": 121, # 790000045 + "halter_bedientableau_4fach": 52, # 825304003 + "bedienstation_6fach_kpl": 146, # 790000033 + "halter_bedientableau_6fach": 56, # 825304002 + "drucktaster_automatische_umfahrung": 28, + "halter_fuer_drucktaster": 33, + # summe_bedienstationen + + # ET200_SP + "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 198.90, # 709000006 + # "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45" + "et200_sp_eingangskarte_8_de": 35, + # "korrektur_et200_sp_eingangskarte_8_de" # 709000021 + "et200_sp_eingangskarte_16_de": 58, # 709000022 + "et200_sp_eingangskarte_8_do": 46, # 709000031_A + "et200_sp_eingangskarte_16_do": 66.30, # 709000032 + "et200_sp_base_unit_neue_last_mit_potKlemmen": 23, # 709000014 + "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen": 15, # 709000015 + "et200_sp_base_unit_neue_last": 19, # 709000011 + "et200_sp_base_unit_links_gebrueckt": 11, # 709000010 + + # SLIO + "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO": 175, # 709000500 + "slio_eingangskarte_4_de": 31, # 709000510 + "slio_eingangskarte_8_de": 38, # 709000511 + "slio_ausgangskarte_4_do": 39, # 709000021 + "slio_ausgangskarte_8_do": 46, # 709000021 + "slio_power_modul": 18.22, # 709000014 + "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 + "slio_8_x_dc_24v": 18, # 709000011 + "slio_8_x_dc_0v": 13, # 709000010 + # Summe_material_in_ll + + # MATERIAL VOR ORT + "movimot_fu_mit_anschaltung": 550, + "sensor_optisch_traverse": 27, # 827072200 + "sensorhalter_ohne_sensor": 8, # 827072xxx + "reflexionslichtschranke_rsm_direct": 45, # 827072207 + "stoppersensor_induktiv_mit_halter": 63, # 827072205 + "sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041 + "seilzugschalter": 150, + "seil_fuer_seilzugschalter": 0.40, + "blitzleuchte": 72, # 790000006 + "spulenumsetzstation": 0, + "sensorkabel_je_20m": 25, # 722001xxx + "stopper_weichenkabel_je_5m": 20, # 722001xxx + "motorkabel_je_30m": 26, + "kabelpritschen_leitern_200_60": 15, + "kabelpritsche_rsm_100_60": 12, # 715000020 + "kabelpritsche_rsm_50_35": 9, # 715003010 + "klemmkasten_rsm": 120, + "klemmkasten_direct_in_rsm": 122, # 790000703 + "erdung": 13, + "kleinteile_rohre_schellen_kabelbinder_ect": 750, + + "kabel_fuer_klemmkasten_und_bts_60m": 145, + "kabel_fuer_1fach_bts_zug_wechseln": 50, + "zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146, # 725000050 + "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450, # 725000057 + "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 280, # 725000057 + "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145, # 725000007 + "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136, # 725000004 + "profinetkabel": 42, # 726001xxx + "schnittstellen_8x1mm2_30m": 35.4, # 725000019 + } + # Zeit pro Einheit in min + zpe_dienstl_hardwareplanung = { + "schaltschrankgehaeuse_b1x1200_zubehoer": 4200, + "schaltschrankgehaeuse_b2x800_zubehoer": 4200, + "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800, + "sps_simatic_s7_cpu315_2_pn_dp": 0, + "speicherkarte_fuer_sps_512_kb": 0, + "sps_simatic_s7_cpu317_2_pn_dp": 0, + "speicherkarte_fuer_sps2_mb": 0, + "sps_simatic_s7_1515_2": 0, + "sps_simatic_s7_1517_3": 0, + "sps_simatic_s7_1518_4": 0, + "sps_et200_1512sp": 0, + "memory_card_256_mb": 0, + "memory_card_2_gb": 0, + "et200_sp_ea_ebene":60, + "netzwerk_fernwartung":0, + "abgang_400v":60, + "abgang_24_v":60, + "anlagenrechner":0, + "anlagenrechner_ohne_bildschirm": 0, + "pulteinbau_monitor_srline_rflat_24fhd": 60, + "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, + "netzwerk_display_adapter_lindy": 30, + "zusaetzlicher_bildschirm":0, + "schaltschrank":0, + "unterverteiler_fuer_1neuenhauser_pm":1200, + "unterverteiler_fuer_1flyer":720, + "unterverteiler_fuer_2flyer":1020, + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":810, + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1110, + "unterverteiler_fuer_puffer":1200, + "unterverteiler_fuer_5_rsm_fa":960, + "unterverteiler_fuer_10_rsm_fa":1020, + "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1200, + "unterverteiler_fuer_4_rsm_direct":3000, + "unterverteiler_fuer_12_rsm_direct":4800, + "unterverteiler_fuer_8_rsm_direct":3900, + "busverteiler_6_rsm_direct":600, + "busverteiler_8_rsm_direct":960 + } + zpe_e_werkstatt = { + "schaltschrankgehaeuse_b1x1200_zubehoer": 2400, + "schaltschrankgehaeuse_b2x800_zubehoer": 4800, + "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160, + "sps_simatic_s7_cpu315_2_pn_dp": 0, + "speicherkarte_fuer_sps_512_kb": 0, + "sps_simatic_s7_cpu317_2_pn_dp": 0, + "speicherkarte_fuer_sps2_mb": 0, + "sps_simatic_s7_1515_2": 0, + "sps_simatic_s7_1517_3": 0, + "sps_simatic_s7_1518_4": 0, + "sps_et200_1512sp": 0, + "memory_card_256_mb": 0, + "memory_card_2_gb": 0, + "et200_sp_ea_ebene":120, + "netzwerk_fernwartung":0, + "abgang_400v":90, + "abgang_24_v":90, + "anlagenrechner":0, + "anlagenrechner_ohne_bildschirm": 0, + "pulteinbau_monitor_srline_rflat_24fhd": 240, + "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, + "netzwerk_display_adapter_lindy": 120, + "zusaetzlicher_bildschirm":0, + "schaltschrank":0, + "unterverteiler_fuer_1neuenhauser_pm":1200, + "unterverteiler_fuer_1flyer":1020, + "unterverteiler_fuer_2flyer":1200, + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1140, + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1200, + "unterverteiler_fuer_puffer":1200, + "unterverteiler_fuer_5_rsm_fa":1020, + "unterverteiler_fuer_10_rsm_fa":1140, + "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1500, + "unterverteiler_fuer_4_rsm_direct":3600, + "unterverteiler_fuer_12_rsm_direct":4800, + "unterverteiler_fuer_8_rsm_direct":4200, + "busverteiler_6_rsm_direct":480, + "busverteiler_8_rsm_direct":480, + "antrieb_unidirektional_halbleiter":10, + "antrieb_bidirektional_halbleiter":10, + "antrieb_unidirektional_schuetz":0, + "antrieb_bidirektional_schuetz":0, + "motorschutzschalter":0, + "wendeschuetzschaltung":0, + "frequenzumrichter":0, + "bedienstation_1fach_kpl":25, + "bedienst_2fach_wechs_bcd_10f":90, + "bedienstation_2fach_kpl":30, + "halter_bedientableau_2fach":30, + "bedienstation_3fach_kpl":25, + "halter_bedientableau_3fach":30, + "bedienstation_4fach_kpl":30, + "halter_bedientableau_4fach":30, + "bedienstation_6fach_kpl":45, + "halter_bedienstation_6fach":30, + "drucktaster_automatische_umfahrung":15, + "halter_fuer_drucktaster":0, + } + Keys_of_Vor_Ort = [ + "movimot_fu_mit_anschaltung", + "sensor_optisch_traverse", + "sensorhalter_ohne_sensor", + "reflexionslichtschranke_rsm_direct", + "stoppersensor_induktiv_mit_halter", + "sensor_spulenpruefung_voll_leer", + "seilzugschalter", + "seil_fuer_seilzugschalter", + "blitzleuchte", + "spulenumsetzstation", + "sensorkabel_je_20m", + "stopper_weichenkabel_je_5m", + "motorkabel_je_30m", + "kabelpritschen_leitern_200_60", + "kabelpritsche_rsm_100_60", + "kabelpritsche_rsm_50_35", + "klemmkasten_rsm", + "klemmkasten_direct_in_rsm", + "erdung", + "kleinteile_rohre_schellen_kabelbinder_ect", + "kabel_fuer_klemmkasten_und_bts_60m", + "kabel_fuer_1fach_bts_zug_wechseln", + "zuleitung_75_m_unterverteiler_4x4mm2_400vac", + "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", + "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", + "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm", + "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm", + "profinetkabel", + "korrektur_profinetkabel", + "schnittstellen_8x1mm2_30m" + ] + Keys_of_Schaltschrank = [ + "schaltschrankgehaeuse_b1x1200_zubehoer", ###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]): + 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) + self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = self.mengen.get("sps_simatic_s7_cpu315_2_pn_dp", 0) + self._anzahl["speicherkarte_fuer_sps_512_kb"] = self.mengen.get("speicherkarte_fuer_sps_512_kb", 0) + self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = self.mengen.get("sps_simatic_s7_cpu317_2_pn_dp", 0) + self._anzahl["speicherkarte_fuer_sps2_mb"] = self.mengen.get("speicherkarte_fuer_sps2_mb", 0) + self._anzahl["sps_simatic_s7_1515_2"] = self.mengen.get("sps_simatic_s7_1515_2", 0) + self._anzahl["sps_simatic_s7_1517_3"] = self.mengen.get("sps_simatic_s7_1517_3", 0) + self._anzahl["sps_simatic_s7_1518_4"] = self.mengen.get("sps_simatic_s7_1518_4", 0) + self._anzahl["sps_et200_1512sp"] = self.mengen.get("sps_et200_1512sp", 0) + + self._anzahl["memory_card_256_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb") + \ + anzahl.get("sps_simatic_s7_1515_2") + \ + anzahl.get("sps_simatic_s7_1517_3") + \ + anzahl.get("sps_simatic_s7_1518_4") + + 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) + 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) + self._anzahl["anlagenrechner"] = self.mengen.get("anlagenrechner", 0) + self._anzahl["anlagenrechner_ohne_bildschirm"] = self.mengen.get("anlagenrechner_ohne_bildschirm", 0) + 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) + 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) + self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = self.mengen.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) + 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) + + if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): + num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") + self._anzahl["unterverteiler_fuer_10_rsm_fa"] = math.ceil(num_rsms/10) + anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) + else: + num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") + self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3) + self._anzahl["unterverteiler_fuer_4_rsm_direct"] = anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) + self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0) + self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) + self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") / 12) +\ + anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) + self._anzahl["unterverteiler_fuer_8_rsm_direct"] = anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) + self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) + self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) + self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) + self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0) + self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) + + self._anzahl["antrieb_unidirektional_halbleiter"] = \ + mg.zusammenfassung().get("RA_uni") +\ + mg.zusammenfassung().get("RA_uni_abhebbar") +\ + mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung") + + self._anzahl["antrieb_bidirektional_halbleiter"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_BI_abhebbar") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_ohne_SPS_Ansteuerung") +\ + mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_ohne_SPS-Ansteuerung") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi") +\ + mg.get_value_of_object("flyer_ejet", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar_unger_Schiene") +\ + mg.get_value_of_object("Puffer", "RA_bi_ungerade_Schiene") +\ + mg.get_value_of_object("Puffer", "Doppelstreckenantrieb") +\ + mg.get_value_of_object("rsm_fa", "RRA_bi") +\ + mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung") + + self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0) + + # # summe_motorstarter + self._anzahl["bedienstation_1fach_kpl"] = eas.anzahl("bedienstation_1fach_Not_Aus", 0) + eas.anzahl("bedienstation_einfach_Zug_Wechseln", 0) + self._anzahl["bedienst_2fach_wechs_bcd_10f"] = eas.anzahl("bedienst_2fach_wechs_bcd_10f", 0) + self._anzahl["bedienstation_2fach_kpl"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Reset", 0) + self._anzahl["halter_bedientableau_2fach"] = 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) + self._anzahl["bedienstation_4fach_kpl"] = eas.anzahl("bedienstation_4fach_kpl", 0) + self._anzahl["halter_bedientableau_4fach"] = anzahl.get("bedienstation_4fach_kpl", 0) + self._anzahl["bedienstation_6fach_kpl"] = eas.anzahl("bedienstation_6fach_kpl", 0) + self._anzahl["halter_bedientableau_6fach"] = anzahl.get("bedienstation_6fach_kpl", 0) + self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0) + self._anzahl["halter_fuer_drucktaster"] = anzahl.get("drucktaster_automatische_umfahrung", 0) + # # summe_bedienstationen + + self._anzahl["ET200_SP"] = self.mengen.get("ET200_SP", 0) + self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * 2 * anzahl.get("schaltschrank", 0) +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_puffer", 0) +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ + anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0)) + self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = self.mengen.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) + self._anzahl["et200_sp_eingangskarte_8_de"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 3 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 3 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 5 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 4 +\ + anzahl.get("korrektur_et200_sp_eingangskarte_8_de", 0) +\ + mg.zusammenfassung().get("Kreuzungsweiche")) + self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = self.mengen.get("korrektur_et200_sp_eingangskarte_8_de", 0) + self._anzahl["et200_sp_eingangskarte_16_de"] = self.mengen.get("et200_sp_eingangskarte_16_de", 0) + + self._anzahl["et200_sp_eingangskarte_8_do"] = \ + anzahl.get("ET200_SP", 0) *\ + (math.ceil((anzahl.get("et200_sp_ea_ebene", 0) *\ + anzahl.get("schaltschrank", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 9 / 1.5)) + + anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0) + + mg.zusammenfassung().get("Kreuzungsweiche") * 2) + self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = self.mengen.get("korrektur_et200_sp_eingangskarte_8_do", 0) + self._anzahl["et200_sp_eingangskarte_16_do"] = anzahl.get("et200_sp_eingangskarte_16_do", 0) + self._anzahl["et200_sp_base_unit_neue_last_mit_potKlemmen"] = 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_mit_potKlemmen", 0)) + self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = self.mengen.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) + 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["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))) - + anzahl.get("et200_sp_base_unit_neue_last", 0) + + anzahl.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0)) + self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = self.mengen.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0) + + self._anzahl["SLIO"] = self.mengen.get("SLIO", 0) + + self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_puffer", 0) +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ + anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ + anzahl.get("busverteiler_6_rsm_direct", 0) +\ + anzahl.get("busverteiler_8_rsm_direct", 0) +\ + anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0)) + self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = self.mengen.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) + self._anzahl["slio_eingangskarte_4_de"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 6 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 13 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 9 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 15 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 7 +\ + anzahl.get("busverteiler_8_rsm_direct", 0) * 16 +\ + anzahl.get("korrektur_slio_eingangskarte_4_de", 0)) + self._anzahl["korrektur_slio_eingangskarte_4_de"] = self.mengen.get("korrektur_slio_eingangskarte_4_de", 0) + self._anzahl["slio_eingangskarte_8_de"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 3 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 3 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 3 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 5 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 2 +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 4 +\ + anzahl.get("busverteiler_8_rsm_direct", 0) * 8 +\ + anzahl.get("korrektur_slio_eingangskarte_8_de", 0)) + self._anzahl["korrektur_slio_eingangskarte_8_de"] = self.mengen.get("korrektur_slio_eingangskarte_8_de", 0) + self._anzahl["slio_ausgangskarte_4_do"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 12 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 7 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 14 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 22 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 16 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 22 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 24 +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 44 +\ + anzahl.get("busverteiler_8_rsm_direct", 0) * 16 +\ + anzahl.get("korrektur_slio_ausgangskarte_4_do", 0)) + self._anzahl["korrektur_slio_ausgangskarte_4_do"] = self.mengen.get("korrektur_slio_ausgangskarte_4_do", 0) + self._anzahl["slio_ausgangskarte_8_do"] = anzahl.get("SLIO", 0) * ((anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 +\ + anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 12 +\ + anzahl.get("unterverteiler_fuer_1flyer", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 8 +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 14 +\ + anzahl.get("unterverteiler_fuer_puffer", 0) * 22 +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 16 +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 22 +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 24 +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 44 +\ + anzahl.get("busverteiler_8_rsm_direct", 0) * 16) / 2 +\ + anzahl.get("korrektur_slio_ausgangskarte_8_do", 0)) + self._anzahl["korrektur_slio_ausgangskarte_8_do"] = self.mengen.get("korrektur_slio_ausgangskarte_8_do", 0) + self._anzahl["slio_power_modul"] = anzahl.get("SLIO", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) * 1 +\ + anzahl.get("korrektur_slio_power_modul", 0)) + self._anzahl["korrektur_slio_power_modul"] = self.mengen.get("korrektur_slio_power_modul") + 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) + 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)) + + + # # Summe_material_in_ll + + # # MATERIAL VOR ORT + + self._anzahl["movimot_fu_mit_anschaltung"] = anzahl.get("movimot_fu_mit_anschaltung", 0) + self._anzahl["sensor_optisch_traverse"] = eas.anzahl('Sensor_Traversenabfrage_optisch') + self._anzahl["sensorhalter_ohne_sensor"] = anzahl.get("sensorhalter_ohne_sensor", 0) + self._anzahl["reflexionslichtschranke_rsm_direct"] = eas.anzahl("Reflexionslichtschranke_RSM_DIRECT", 0) + self._anzahl["stoppersensor_induktiv_mit_halter"] = eas.anzahl("Sensor induktiv Flyer+PM") + self._anzahl["sensor_spulenpruefung_voll_leer"] = mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer", 0) + self._anzahl["seilzugschalter"] = eas.anzahl("Seilzugschalter", 0) + self._anzahl["seil_fuer_seilzugschalter"] = 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") +\ + mg.zusammenfassung().get("Sensor_optisch_Traverse") +\ + mg.zusammenfassung().get("Sensor_induktiv_Spulenalter_Zug_positionierung") +\ + mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer") +\ + mg.zusammenfassung().get("Werma_Rundumleuchte_Störung") + self._anzahl["stopper_weichenkabel_je_5m"] = eas.get_SA("Weiche") +\ + eas.get_SA("Weiche_nach_PM_bipolar") +\ + eas.get_SA("gemeinsame_Weichenrueckstellung") +\ + eas.get_SA("Dreifach_Weiche_DIRECT") +\ + eas.get_SA("Kreuzungsweiche") +\ + eas.get_SA("Stopper") +\ + eas.get_SA("Ventil_RA_3_2_abhebbar") +\ + eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar") +\ + eas.get_SA("Blitzleuchte_Stoerung") + self._anzahl["motorkabel_je_30m"] = mg.zusammenfassung().get("RA_uni", 0) +\ + mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ + mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ + mg.zusammenfassung().get("RA_bi", 0) +\ + mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ + mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ + mg.zusammenfassung().get("Doppelstreckenantrieb", 0) + self._anzahl["kabelpritschen_leitern_200_60"] = 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["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) +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_puffer", 0) +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ + 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) +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_puffer", 0) +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ + 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["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) +\ + anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ + anzahl.get("unterverteiler_fuer_puffer", 0) +\ + anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ + anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ + anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ + anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ + anzahl.get("busverteiler_8_rsm_direct", 0) +\ + anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) + self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) + if 'direct' in mg.get_deckblatt_value("SYSTEM"): + self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = mg.get_deckblatt_value("RSM") + else: + self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = 0 + if 'direct' in mg.get_deckblatt_value("SYSTEM"): + self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = mg.get_deckblatt_value("RSM") +\ + anzahl.get("klemmkasten_rsm", 0) + else: + self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = anzahl.get("klemmkasten_rsm", 0) + self._anzahl["profinetkabel"] = anzahl.get("sps_simatic_s7_1517_3", 0) +\ + anzahl.get("sps_simatic_s7_1515_2", 0) +\ + anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0) +\ + anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0) +\ + anzahl.get("sps_et200_1512sp", 0) +\ + anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) +\ + anzahl.get("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) +\ + anzahl.get("korrektur_profinetkabel", 0) + self._anzahl["korrektur_profinetkabel"] = anzahl.get("korrektur_profinetkabel", 0) + self._anzahl["schnittstellen_8x1mm2_30m"] = mg.zusammenfassung().get("Interface_Putzmaschine", 0) +\ + mg.zusammenfassung().get("Interface_Doffer", 0) + + + # remove all elements with the number of 0. They are of no use + l = [] + for k,v in self._anzahl.items(): + if v == 0: + l.append(k) + for item in l: + del self._anzahl[item] + + def __repr__(self): + return repr(self._anzahl) + + def anzahl(self, partname, default_val = 0): + return self._anzahl.get(partname, default_val) + + def summe_gesamt(self): + """ + :return: price sum of all given items within self._anzahl + """ + return (self.summe_in_LL() + self.summe_vorort()) + + def summe_in_LL(self): + res = 0 + for k,anz in self._anzahl.items(): + if k 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 + return res + + def summe_vorort(self): + res = 0 + for k,anz in self._anzahl.items(): + if k in self.Keys_of_Vor_Ort: + preis = anz * self.ep[k] + res += preis + return res + + def summe_h_unterverteiler_hardware(self): + """ gibt dies Summer der Stunden zur Montage der Unterverteiler hardware zurück""" + keys_unterverteiler = [ + "unterverteiler_fuer_1neuenhauser_pm", + "unterverteiler_fuer_1flyer", + "unterverteiler_fuer_2flyer", + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", + "unterverteiler_fuer_puffer", + "unterverteiler_fuer_5_rsm_fa", + "unterverteiler_fuer_10_rsm_fa", + "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", + "unterverteiler_fuer_4_rsm_direct", + "unterverteiler_fuer_12_rsm_direct", + "unterverteiler_fuer_8_rsm_direct", + "busverteiler_6_rsm_direct", + "busverteiler_8_rsm_direct", + ] + zeiten = dict() + res = 0 + for k in keys_unterverteiler: + anz = self._anzahl.get(k, 0) + dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 + zeiten[k] = dauer + res += dauer + return res + + def summe_h_unterverteiler_e_werkstatt(self): + """ gibt dies Summer der Stunden zur Montage der Unterverteiler E-Werkstatt zurück""" + keys_unterverteiler = [ + "unterverteiler_fuer_1neuenhauser_pm", + "unterverteiler_fuer_1flyer", + "unterverteiler_fuer_2flyer", + "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", + "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", + "unterverteiler_fuer_puffer", + "unterverteiler_fuer_5_rsm_fa", + "unterverteiler_fuer_10_rsm_fa", + "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", + "unterverteiler_fuer_4_rsm_direct", + "unterverteiler_fuer_12_rsm_direct", + "unterverteiler_fuer_8_rsm_direct", + "busverteiler_6_rsm_direct", + "busverteiler_8_rsm_direct", + ] + res = 0 + for k in keys_unterverteiler: + anz = self._anzahl.get(k, 0) + dauer = anz * self.zpe_e_werkstatt[k] / 60 + res += dauer + return res + + def get_h_of(self, partname): + return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60) + def summe_h_bedienstationen(self): + """ gibt die Summer der Stunden zur Montage der Bedienstationen zurück""" + keys_bedienstationen = [ + "bedienstation_1fach_kpl", + "bedienst_2fach_wechs_bcd_10f", + "bedienstation_2fach_kpl", + "halter_bedientableau_2fach", + "bedienstation_3fach_kpl", + "halter_bedientableau_3fach", + "bedienstation_4fach_kpl", + "halter_bedientableau_4fach", + "bedienstation_6fach_kpl", + "halter_bedienstation_6fach", + "drucktaster_automatische_umfahrung", + "halter_fuer_drucktaster" + ] + + res = 0 + for k in keys_bedienstationen: + anz = self._anzahl.get(k, 0) + dauer = anz * self.zpe_e_werkstatt[k] / 60 + res += dauer + return res + def summe_h_schaltschrank_hardware(self): + """ gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück""" + keys_schaltschrank = [ + "schaltschrankgehaeuse_b1x1200_zubehoer", + "schaltschrankgehaeuse_b2x800_zubehoer", + "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", + "sps_simatic_s7_cpu315_2_pn_dp", + "speicherkarte_fuer_sps_512_kb", + "sps_simatic_s7_cpu317_2_pn_dp", + "speicherkarte_fuer_sps2_mb", + "sps_simatic_s7_1515_2", + "sps_simatic_s7_1517_3", + "sps_simatic_s7_1518_4", + "sps_et200_1512sp", + "memory_card_256_mb", + "memory_card_2_gb", + "et200_sp_ea_ebene", + "netzwerk_fernwartung", + "abgang_400v", + "abgang_24_v", + "anlagenrechner", + "anlagenrechner_ohne_bildschirm", + "pulteinbau_monitor_srline_rflat_24fhd", + "kurzhubtastatur_kbt06_mit_touchpad_uslayout", + "netzwerk_display_adapter_lindy", + "zusaetzlicher_bildschirm", + ] + + res = 0 + for k in keys_schaltschrank: + anz = self._anzahl.get(k, 0) + dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 + res += dauer + return res + def summe_h_schaltschrank_e_werkstatt(self): + """ gibt die Summer der Stunden zur Montage des Schaltschranks in der E-Werkstatt zurück""" + keys_schaltschrank = [ + "schaltschrankgehaeuse_b1x1200_zubehoer", + "schaltschrankgehaeuse_b2x800_zubehoer", + "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", + "sps_simatic_s7_cpu315_2_pn_dp", + "speicherkarte_fuer_sps_512_kb", + "sps_simatic_s7_cpu317_2_pn_dp", + "speicherkarte_fuer_sps2_mb", + "sps_simatic_s7_1515_2", + "sps_simatic_s7_1517_3", + "sps_simatic_s7_1518_4", + "sps_et200_1512sp", + "memory_card_256_mb", + "memory_card_2_gb", + "et200_sp_ea_ebene", + "netzwerk_fernwartung", + "abgang_400v", + "abgang_24_v", + "anlagenrechner", + "anlagenrechner_ohne_bildschirm", + "pulteinbau_monitor_srline_rflat_24fhd", + "kurzhubtastatur_kbt06_mit_touchpad_uslayout", + "netzwerk_display_adapter_lindy", + "zusaetzlicher_bildschirm", + ] + + res = 0 + for k in keys_schaltschrank: + anz = self._anzahl.get(k, 0) + dauer = anz * self.zpe_e_werkstatt[k] / 60 + res += dauer + return res + def summe_h_zeiten_hardwareplanung(self): + summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware() + summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware() + return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware) + +class Dienstleistung(): + # Angaben in h + mengen = { ###m unauskommentierte alle nur bedingt änderbar + "Pflichtenheft_Autom_Schnittstellen": 0, + + ## Hardwareplanung + #"Erstellung_Steuerungslayout": 1, + #"Schaltplanerstellung_incl_Korrekturen": 1, + #"Projektkoordination": 1, + #"Materialdispo": 1, + #"Abstimmung_mit_E_Werkstatt": 1, + #"Erstellen_E_Montageunterlagen": 1, + + # Test_und_Installation + # "PC_Installation": 0, + "Oberfläche_Simulation": 0, + "SPS_Test_im_Haus_Simulation": 0, + ## Dokumentation + "Bedienerhandbuch": 8, + "SPS_Doku": 0, + "PC_Doku": 0, + + ## Elektrowerkstatt + #Schaltschrankbau + #Unterverteilerbau + #Klemmkastenbau_je_2h + #Bedientableaubau + "Vormontage_im_Haus": 0 + } + + def __init__(self, Anzahl_DL, hw: type[HW]): + # hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet + + self._Hours = Anzahl_DL + + # "Pflichtenheft_Autom_Schnittstellen": 0, + + ## Hardwareplanung + FaktorLayout = 0.25 + FaktorSchaltplan = 0.6 + FaktorProjektkoord = 0.15 + FaktorDispo = 0.2 + FaktorAbstimmung = 0.05 + FaktorMontageUnterlagen = 0.05 + self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_zeiten_hardwareplanung() * FaktorLayout + self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorSchaltplan + self._Hours["Projektkoordination"] = hw.summe_h_zeiten_hardwareplanung() * FaktorProjektkoord + self._Hours["Materialdispo"] = hw.summe_h_zeiten_hardwareplanung() * FaktorDispo + self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_zeiten_hardwareplanung() * FaktorAbstimmung + self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorMontageUnterlagen + # Test_und_Installation + self._Hours["PC_Installation"] = hw.anzahl("anlagenrechner") * 8 * hw.anzahl("schaltschrank", 0) + + self._Hours["Oberfläche_Simulation"] = 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"] = 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() + + self._Hours["Klemmkastenbau_je_2h"] = (hw.anzahl("klemmkasten_rsm") + + hw.anzahl("klemmkasten_direct_in_rsm")) * 2 + 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"), 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_dienstleistung_in_landsberg(self): + """returns hours necessary""" + hours_necessary = self.stunden_hardwareplanung_test_installation() +\ + self.stunden_elektrowerkstatt() + return hours_necessary + def stunden_hardwareplanung_test_installation(self): + """return hours of hardware-bucheting, test and installation""" + keys_hardwareplanung = [ + "Pflichtenheft_Autom_Schnittstellen", + "Erstellung_Steuerungslayout", + "Schaltplanerstellung_incl_Korrekturen", + "Projektkoordination", + "Materialdispo", + "Abstimmung_mit_E_Werkstatt", + "Erstellen_E_Montageunterlagen", + "PC_Installation", + "Oberfläche_Simulation", + "SPS_Test_im_Haus_Simulation" + ] + res = 0 + for k in keys_hardwareplanung: + dauer = self.get_hours_of(k) + res += dauer + return res + def stunden_elektrowerkstatt(self): + keys_elektrowerkstatt = [ + "Schaltschrankbau", + "Unterverteilerbau", + "Klemmkastenbau_je_2h", + "Bedientableaubau", + "Vormontage_im_Haus" + ] + res = 0 + for k in keys_elektrowerkstatt: + dauer = self.get_hours_of(k) + res += dauer + return res + + def stunden_elektro_Landsberg(self): + return 0 + +#EMO +class EMO(): + montagezeiten = { + "Schaltschrank_aufstellen": 6.0, #(h/St) + "Unterverteiler_montieren": 3.0, #(h/St) + "Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h) + "Pritsche_in_RSM_montieren": 21.0, + "Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor) + "Tableau_befestigen_und_anschliessen": 0.75, #(h/St) + "Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St) + "Sensoren_montieren": 0.45, #(h/St) + "Seilzugschalter_installieren": 4.0, #(h/St) + "Blitzleuchte_installieren": 0.5, #(h/St) + "Weiche_Stopper_anschliessen": 0.35, #(h/St) ###f blitzleuchte und weiche vertauscht? + "Erdung": 0.5, #(h) + } + def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]): + #für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt + mengen = { + "Schaltschrank_aufstellen": 0, + "Unterverteiler_montieren": 0, + "Pritsche_montieren_umbauen_demontieren": 0, + "Pritsche_in_RSM_montieren": 0, + "Motor_verdrahten_und_anschliessen": 0, + "Tableau_befestigen_und_anschliessen": 0, + "Schnittstelle_Flyer_Putzmaschine": 0, + "Sensoren_montieren": 0, + "Seilzugschalter_installieren": 0, + "Blitzleuchte_installieren": 0, + "Weiche_Stopper_anschliessen": 0, + "Erdung": 0, + } + self._Mengen = {} + self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ + hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\ + hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer") + self._Mengen["Unterverteiler_montieren"] = hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") + self._Mengen["Pritsche_montieren_umbauen_demontieren"] = hw.anzahl("kabelpritschen_leitern_200_60") + self._Mengen["Pritsche_in_RSM_montieren"] = hw.anzahl("kabelpritsche_rsm_100_60") + + self._Mengen["Motor_verdrahten_und_anschliessen"] = mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0) + self._Mengen["Tableau_befestigen_und_anschliessen"] = \ + hw.anzahl( "bedienstation_1fach_kpl") +\ + hw.anzahl("bedienst_2fach_wechs_bcd_10f") +\ + hw.anzahl("bedienstation_2fach_kpl") +\ + hw.anzahl("halter_bedientableau_2fach") +\ + hw.anzahl("bedienstation_3fach_kpl") +\ + hw.anzahl("halter_bedientableau_3fach") +\ + hw.anzahl("bedienstation_4fach_kpl") +\ + hw.anzahl("halter_bedientableau_4fach") +\ + hw.anzahl("bedienstation_6fach_kpl") +\ + hw.anzahl("halter_bedientableau_6fach") +\ + hw.anzahl("drucktaster_automatische_umfahrung") + + self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\ + ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") + + self._Mengen["Sensoren_montieren"] = hw.anzahl("sensorkabel_je_20m") + self._Mengen["Seilzugschalter_installieren"] = ea.anzahl("Seilzugschalter") + self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung") + self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m") + self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10 + + def 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 = self.montagezeiten.get(k) * self._Mengen.get(k) + keys_1 += dauer + + keys_tätigkeiten_2 = [ + "Pritsche_montieren_umbauen_demontieren", + "Pritsche_in_RSM_montieren" + ] + keys_2 = 0 + for k in keys_tätigkeiten_2: + dauer = self._Mengen.get(k) / self.montagezeiten.get(k) + keys_2 += dauer + + + return math.ceil((keys_1 + keys_2)) + def 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 Ergebnis(): ###f was sind die grünen zahlen auf dem deckblatt? + preis_kostenart_h = { + "E_Werkstatt": 32, + "Schaltschrankbau_extern_Mehrkosten": 0, #Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel: extern = 50€ intern 32 € = Wert: 18€ + "Dienstleistung_in_LL": 45, #aufwandeduzierung oder mehraufwand + "Pflichtenheft": 60, + "SPS_Programmierung": 75, #aufwandreduzierung oder mehraufwand softwareerstellung + "PC_Programmierung_Visualisierung": 60, + "Montage_elektrisch": 36, + "Inbetriebnahmetest_Hardware_durch_Montage": 36, + "SPS_Inbetriebsetzung": 75, + "PC_Inbetriebsetzung": 60, + "Inbetriebnahmeunterstützung_durch_Montage": 36, + "Dokumentation": 35, + "Bedienungsanleitung_Emmert": 75, + "Schulung_vor_Ort_beim_Kunden": 36, + "Abnahme": 36, + "SPS_Anlagenbetreuung": 75, + "PC_Anlagenbetreuung": 60, + "Anlagenbetreuung_durch_Montage": 36 + } + def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]): + self._anzahl = anzahl_h + self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt() + self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\ + hw.get_h_of("unterverteiler_fuer_1flyer") +\ + hw.get_h_of("unterverteiler_fuer_2flyer") +\ + hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ + hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ + hw.get_h_of("unterverteiler_fuer_puffer") +\ + hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\ + hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") + self._anzahl["Dienstleistung_in_LL"] = dl.stunden_hardwareplanung_test_installation() + self._anzahl["Pflichtenheft"] = 0 ###f immer 0? + self._anzahl["SPS_Programmierung"] = 0 ###f immer reduziert? + self._anzahl["PC_Programmierung_Visualisierung"] = 0 ###f immer reduziert? + self._anzahl["Montage_elektrisch"] = emo.mehraufwand_emo() ###f mehraufwand einzeln nötig oder reicht am Schluss zur Übersichtlichkeit? + self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch") * 0.1 + self._anzahl["SPS_Inbetriebsetzung"] = 130 ###f immer 130 oder immer extra anzugeben? Lässt sich das evtl vereinfachen? + self._anzahl["PC_Inbetriebsetzung"] = 0 ###f immer 0 oder immer manuell anzuegebn? + self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung") * 1 ###f prozentualer anteil der inbetriebnahmeunterstützung durch montage###f bei PC Progammierung auch % wird aber nicht verwendet; absicht? + self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch") + self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku") + self._anzahl["Schulung_vor_Ort_beim_Kunden"] = 0 ###f immer manuell? + self._anzahl["Abnahme"] = 0 ###f immer manuell? + self._anzahl["SPS_Anlagenbetreuung"] = 0 ###f immer manuell? + self._anzahl["PC_Anlagenbetreuung"] = 0 ###f immer manuell? + self._anzahl["Anlagenbetreuung_durch_Montage"] = 0 ###f immer manuell? + def get_sum_of_costs(self, hw: type[HW]): + keys_costs = { + "E_Werkstatt", + "Schaltschrankbau_extern_Mehrkosten", + "Dienstleistung_in_LL", + "Pflichtenheft", + "SPS_Programmierung", + "PC_Programmierung_Visualisierung", + "Montage_elektrisch", + "Inbetriebnahmetest_Hardware_durch_Montage", + "SPS_Inbetriebsetzung", + "PC_Inbetriebsetzung", + "Inbetriebnahmeunterstützung_durch_Montage", + "Dokumentation", + "Bedienungsanleitung_Emmert", + "Schulung_vor_Ort_beim_Kunden", + "Abnahme", + "SPS_Anlagenbetreuung", + "PC_Anlagenbetreuung", + "Anlagenbetreuung_durch_Montage" + } + res = 0 + for k in keys_costs: + cost = self._anzahl[k] * self.preis_kostenart_h[k] + res += cost + return (res + hw.summe_vorort() + hw.summe_in_LL()) + def get_cost_of(self, partname): + return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname)) +class TestObjectMethods(unittest.TestCase): + + def test_eas(self): + # eas.gesamt_E() + # eas.gesamt_A() + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + # Prüfe die Summe aller Eingänge und Ausgänge für jeden Elementtyp + # Bedienstation + self.assertEqual(eas.get_SEA('bedienstation_1fach_Not_Aus'), (0, 0)) + self.assertEqual(eas.get_SEA('bedienstation_einfach_Zug_Wechseln'), (14, 14)) + self.assertEqual(eas.get_SEA('bedienstation_automatische_Umfahrung'), (0, 0)) + self.assertEqual(eas.get_SEA('bedienstation_zweifach_Wechs_BCD_10f'), (0, 0)) + self.assertEqual(eas.get_SEA('bedienstation_zweifach_Not_Aus_Reset'), (20, 20)) + self.assertEqual(eas.get_SEA('bedienst_dreifach'), (0, 0)) + self.assertEqual(eas.get_SEA('bedienst_vierfach'), (0, 0)) + self.assertEqual(eas.get_SEA('bedienst_sechsfach'), (0, 0)) + self.assertEqual(eas.get_SEA('EAs_Unterverteiler_direct'), (0, 0)) + + # 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 induktiv Flyer+PM'), (4, 0)) + self.assertEqual(eas.get_SEA('Seilzugschalter'), (0, 0)) + + self.assertEqual(eas.get_SEA('Weiche'), (0, 35)) + self.assertEqual(eas.get_SEA('Weiche_nach_PM_bipolar'), (0, 0)) + self.assertEqual(eas.get_SEA('gemeinsame_Weichenrueckstellung'), (0, 0)) + self.assertEqual(eas.get_SEA('Dreifach_Weiche_DIRECT'), (0, 0)) + self.assertEqual(eas.get_SEA('Kreuzungsweiche'), (0, 10)) + self.assertEqual(eas.get_SEA('Stopper'), (0, 0)) + self.assertEqual(eas.get_SEA('Ventil_RA_3_2_abhebbar'), (0, 4)) + self.assertEqual(eas.get_SEA('Ventil_Doppelstreckenantrieb_5_2_abhebbar'), (0, 12)) + 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_Putzmaschine_Neuhauser'), (0, 0)) + self.assertEqual(eas.get_SEA('FEldbux_UV_EinAusgang'), (14, 7)) + + self.assertEqual(eas.get_SEA('Spulenumsetzstation'), (0, 0)) + + self.assertEqual(eas.get_SEA('RA_unidirektional'), (0, 4)) + self.assertEqual(eas.get_SEA('RA_unidirektional_abhebbar'), (0, 0)) + self.assertEqual(eas.get_SEA('RA_unidirektional_mit_gemeinsamer_Wendung'), (0, 0)) + self.assertEqual(eas.get_SEA('RA_unidirektional_ohne_SPS_Ansteuerung'), (0, 0)) + self.assertEqual(eas.get_SEA('RA_bidirektional'), (0, 60)) + self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar'), (0, 8)) + self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar_gemeinsWend'), (0, 0)) + self.assertEqual(eas.get_SEA('RA_bidirektional_ohne_SPS_Ansteuerung'), (0, 0)) + self.assertEqual(eas.get_SEA('RA_in_RSM_bidirektional'), (0, 0)) + self.assertEqual(eas.get_SEA('Doppelstreckenantrieb'), (0, 12)) + self.assertEqual(eas.get_SEA('Doppelstreckenantriebgemeinsame_Wendung'), (0, 0)) + self.assertEqual(eas.get_SEA('gemeinsame_Wendung'), (0, 0)) + self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) + + + self.assertEqual(eas.gesamt_E(), 323) + self.assertEqual(eas.gesamt_A(), 557) + + self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) + (eingänge, ausgänge) = eas.Anzahl_notwendigen_Siemens_EAKarten() + self.assertEqual(eingänge, 11) + self.assertEqual(ausgänge, 19) + + def test_HW(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + + + 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"), 0) + self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 1) + 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"), 2) + self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1) + self.assertEqual(hw.anzahl("abgang_400v"), 2) + self.assertEqual(hw.anzahl("abgang_24_v"), 2) + 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"), 0) + self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"), 1) + self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"), 4) + self.assertEqual(hw.anzahl("unterverteiler_fuer_puffer"), 2) + self.assertEqual(hw.anzahl("unterverteiler_fuer_5_rsm_fa"),0) + self.assertEqual(hw.anzahl("korrektur_5_rsm_zusaetzlich_im_unterverteiler"), -6) + self.assertEqual(hw.anzahl("unterverteiler_fuer_10_rsm_fa"), 3) + self.assertEqual(hw.anzahl("korrektur_10_rsm_zusaetzlich_im_unterverteiler"), 0) + 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"), 36) + self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 100) + 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"), 30) + self.assertEqual(hw.anzahl("bedienst_2fach_wechs_bcd_10f"), 0) + self.assertEqual(hw.anzahl("bedienstation_2fach_kpl"), 13) + self.assertEqual(hw.anzahl("halter_bedientableau_2fach"), 13) + 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"), 14) + 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"), 80) + 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"), 108) + 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"), 28) + 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"), 160) + self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last"), 2) + self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last"), -26) + self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt"), -2) + 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"), 163) + self.assertEqual(hw.anzahl("sensorhalter_ohne_sensor"), 0) + self.assertEqual(hw.anzahl("reflexionslichtschranke_rsm_direct"), 0) + self.assertEqual(hw.anzahl("stoppersensor_induktiv_mit_halter"), 18) + 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"), 12) + self.assertEqual(hw.anzahl("spulenumsetzstation"), 0) + self.assertEqual(hw.anzahl("sensorkabel_je_20m"), 193) + self.assertEqual(hw.anzahl("stopper_weichenkabel_je_5m"), 218) + self.assertEqual(hw.anzahl("motorkabel_je_30m"), 136) + self.assertEqual(hw.anzahl("kabelpritschen_leitern_200_60"), 669) + self.assertEqual(hw.anzahl("kabelpritsche_rsm_100_60"), 0) + self.assertEqual(hw.anzahl("kabelpritsche_rsm_50_35"), 0) + self.assertEqual(hw.anzahl("klemmkasten_rsm"), 0) + self.assertEqual(hw.anzahl("klemmkasten_direct_in_rsm"), 0) + self.assertEqual(hw.anzahl("erdung"), 101) + self.assertEqual(hw.anzahl("kleinteile_rohre_schellen_kabelbinder_ect"), 2) + self.assertEqual(hw.anzahl("kabel_fuer_klemmkasten_und_bts_60m"), 43) + self.assertEqual(hw.anzahl("kabel_fuer_1fach_bts_zug_wechseln"), 30) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac"), 10) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), 0) + self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), 0) + self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 10) + 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"), 0) + self.assertEqual(hw.anzahl("profinetkabel"), 11) + self.assertEqual(hw.anzahl("korrektur_profinetkabel"), 0) + self.assertEqual(hw.anzahl("schnittstellen_8x1mm2_30m"), 18) + + self.assertAlmostEqual(hw.summe_vorort(), 39155) + self.assertEqual(hw.summe_gesamt(), 91522) + self.assertEqual(hw.summe_in_LL(), 52367) + self.assertEqual(hw.summe_h_zeiten_hardwareplanung(), 265) + self.assertEqual(hw.summe_h_unterverteiler_e_werkstatt(), 190) + + def test_emo(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + + emo = EMO(eas, hw, mg) + self.assertAlmostEqual(emo.dauer_emo(), 560) + self.assertAlmostEqual(emo.mehraufwand_emo(), 616) + + def test_dienstleistung(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) + + self.assertEqual(dl.stunden_hardwareplanung_test_installation(), 347) + self.assertEqual(dl.stunden_elektrowerkstatt(), 305) + self.assertEqual(dl.summe_stunden_dienstleistung_in_landsberg(), 652) + self.assertEqual(dl.get_hours_of("Pflichtenheft_Autom_Schnittstellen"), 0) + self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 80) + self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 146) + self.assertEqual(dl.get_hours_of("Projektkoordination"), 27) + self.assertEqual(dl.get_hours_of("Materialdispo"), 53) + self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 13) + self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 13) + 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) + self.assertEqual(dl.get_hours_of("Bedienerhandbuch"), 8) + self.assertEqual(dl.get_hours_of("SPS_Doku"), 0) + self.assertEqual(dl.get_hours_of("PC_Doku"), 0) + self.assertEqual(dl.get_hours_of("Schaltschrankbau"), 96) + self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 190) + self.assertEqual(dl.get_hours_of("Klemmkastenbau_je_2h"), 0) + self.assertEqual(dl.get_hours_of("Bedientableaubau"), 19) + self.assertEqual(dl.get_hours_of("Vormontage_im_Haus"), 0) + + def test_anschlussleistung(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + + + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + + Anzahl_AL ={} + al = Anschlussl(Anzahl_AL, mg) + self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 136) + self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 74.8) + self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 77.8) + self.assertAlmostEqual(al._ANZAHL.get("GZF"), 40.4) + self.assertAlmostEqual(al._ANZAHL.get("Res"), 4.04) + self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 44.44) + self.assertAlmostEqual(al._ANZAHL.get("x_Strom"), 44.44) + self.assertAlmostEqual(al._ANZAHL.get("Spannung"), 400) + self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 30.79) + self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 31) + + def test_ergebnis(self): + + Anzahl_MG = { + "SYSTEM": "FA", + "RSM":30, + "Flyer":0, + "Flyer_Puffer":0, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, + "Neuenhauser-Putzmaschine":0, + "Neuenhauser-Putzmaschine_Vorpuffer":0, + "Neuenhauser-Putzmaschine_Nachpuffer":0, + "Cason-Putzmaschine":0, + "Cason-Putzmaschine_Vorpuffer":0, + "Cason-Putzmaschine_Nachpuffer":0, + "Puffer":2, + "Anzahl_der_Pufferstrecken_pro_Puffer":7, + "Begegnungsstrecke_Bypass":1, + "Turm":0, + "Turm_Anzahl_Wendlungen":0, + } + + rsm_direct_eingabe = {} + rsm_fa_eingabe = { + "Flex_A_Premium":False, # braucht man das noch? + "Getriebe_in_der_Mitte":False, # braucht man das noch? + "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? + "Sensor_optisch_Traverse_zusätzlich":8, + "Bedientableau_1fach_Korrektur":0, + "Bedientableau_2fach_Korrektur":1, + "Weiche_Korrektur":6, + "RRA_bi_Korrektur":0, + "RRA_bi_auf_Haupstrecke":6, + "RRA_uni_Begegnung":0, + "gemeinsame_Wendung":0, + "Mit_Drucktaster_Korrektur":0, + "Meldelampe_Überstrom_Korrektur":-4, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + "Werma_Rundumleuchte_Störung_Korrektur":0, + "klemmkasten_rsm":0, + } + flyer_f40_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet + "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet + #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet + #"Anzahl_Schienen":0, + "Single_Line_Durchfahrt":False, + "Nachpuffer":False, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":9, + #"Sensor_induktiv_Spulenhalter":0, + "Sensor_induktiv_Spulenhalter_Korrektur":9, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Doffer":0, + "Interface_Doffer_Korrektur":9, + #"Weiche":0, + "Weiche_Korrektur":3, + #"Weiche_nach_Flyer_bipolar":0, + "Weiche_nach_Flyer_bipolar_Korrektur":-9, + "Dreifachweiche":3, + "Wechsel":1, + "Stopper":0, + "RA_uni":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":9, + #"RA_uni_ohne_SPS_Ansteuerung":0, + "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, + #"RRA_BI_abhebbar":0, + "RRA_BI_abhebbar_Korrektur":9, + "RRA_bi":9, + #"RRA_bi_Korrektur":0, + #"RRA_bi_ohne_SPS_Ansteuerung":0, + "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, + #"Doppelstreckenantrieb":0, + "Doppelstreckenantrieb_Korrektur":9, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":-4, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":-4, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + neuenhauser_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen + #"Anzahl_Vorstaustrecken":0, + #"Anzahl_Nachstaustrecken":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensorik_Zugpositionierung":0, + #"Sensor_WT18_Spulenprüfung_voll_leer":0, + #"Bedientableau_2fach":0, + "Bedientableau_2fach_Korrektur":0, + #"Interface_Putzmaschine":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_PM_bipolar":0, + #"RA_uni_abhebbar":0, + "RA_uni_abhebbar_Korrektur":0, + #"RA_uni_ohne_SPS_Ansteuerung":0, + #"RA_uni_abhebbar_unger_Sch":0, + #"Doppelstreckenantrieb":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + flyer_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Flyer":0, # äquivalent zu 'Anzahl' + #"Anzahl_Schienen:":0, + #"Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur":0, + #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, + #"Bedientableau_2fach":0, + #"Interface_Doffer":0, + #"Weiche":0, + "Weiche_Korrektur":0, + #"Weiche_nach_Flyer_bipolar":0, + "Dreifachweiche":0, + #"Wechsel":0, + "Wechsel_Korrektur":0, + #"RA_bi_ohne_SPS-Ansteuerung":0, + #"RA_bi_abhebbar":0, + "RA_bi_abhebbar_Korrektur":0, + "RA_bi":4, + #"Doppelstreckenantrieb":0, + "RA_bi_abhebbar_unger_Schiene":0, + #"Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur":0, + #"Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur":0, + #"Werma_Rundumleuchte_Störung":0, + "Werma_Rundumleuchte_Störung_Korrektur":0, + } + verbindungsstrecken_w_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Sensor_optisch_Traverse":0, + "Bedientableau_1fach":0, + "Bedientableau_2fach":0, + "Bedientableau_14fach":0, + "Weiche":0, + "Dreifachweiche":0, + "Kreuzungsweiche":0, + "Werma_Rundumleuchte_Störung":0, + "RA_uni":0, + "RA_uni_ohne_SPS_Ansteuerung":0, + "RA_bi":0, + "RA_bi_ohne_SPS-Ansteuerung":0, + "Doppelstreckenantrieb":0 + } + puffer_eingabe = { + # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + # "Anzahl":0, + # "Puffer":0, #äquivalent zu Anzahl + # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken + # "Anzahl_Staustrecken":0, + # "Sensor_optisch_Traverse":0, + "Sensor_optisch_Traverse_Korrektur": 0, + # "Weiche":0, + "Weiche_Korrektur": 0, + "RA_bi_ungerade_Schiene": 2, + # "Doppelstreckenantrieb":0, + "Doppelstreckenatrieb_Korrektur":2, + # "Meldelampe_Überstrom":0, + "Meldelampe_Überstrom_Korrektur": 0, + # "Hauptschalter_Ein_Meldung":0, + "Hauptschalter_Ein-Meldung_Korrektur": 0, + } + turm_eingabe = { + #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet + #"Anzahl":0, + #"Turm":0, #äquivalent zu Anzahl + #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken + #"Anzahl_Staustrecken":0, + #"Sensor_optisch_Traverse":0, + #"Weiche":0, + #"RA_bi":0, + "RA_bi_Korrektur":0, + #"RA_bi_ohne_SPS":0, + "RA_bi_ohne_SPS_Korrektur":0, + #"Bedientableau_2fach":0, + } + mg = MG(Anzahl_MG, + rsm_direct=rsm_direct_eingabe, + rsm_fa=rsm_fa_eingabe, + flyer_f40=flyer_f40_eingabe, + neuenhauser=neuenhauser_eingabe, + flyer=flyer_eingabe, + verbindungsstrecken_w=verbindungsstrecken_w_eingabe, + puffer=puffer_eingabe, + turm=turm_eingabe) + + Anzahl_EAS = {} + eas = EA(Anzahl_EAS, mg) + Anzahl_HW = {} + + hw = HW(Anzahl_HW, mg, eas) + emo = EMO(eas, hw, mg) + Anzahl_DL = {} + dl = Dienstleistung(Anzahl_DL, hw) + + Anzahl_Ergebnis = {} + erg = Ergebnis(Anzahl_Ergebnis, hw, dl, emo) + self.assertAlmostEqual(erg.get_cost_of("E_Werkstatt"), 6760) + self.assertEqual(erg.get_cost_of("Schaltschrankbau_extern_Mehrkosten"), 0) + self.assertEqual(erg.get_cost_of("Dienstleistung_in_LL"), 15626) + self.assertEqual(erg.get_cost_of("Pflichtenheft"), 0) + #self.assertEqual(erg.get_cost_of("SPS_Programmierung"), ) + #self.assertEqual(erg.get_cost_of("PC_Programmierung_Visualisierung"), ) + self.assertEqual(erg.get_cost_of("Montage_elektrisch"), 22176) + self.assertAlmostEqual(erg.get_cost_of("Inbetriebnahmetest_Hardware_durch_Montage"), 2218) + self.assertEqual(erg.get_cost_of("SPS_Inbetriebsetzung"), 22120) + self.assertEqual(erg.get_cost_of("PC_Inbetriebsetzung"), 0) + self.assertEqual(erg.get_cost_of("Inbetriebnahmeunterstützung_durch_Montage"), 10080) + self.assertEqual(erg.get_cost_of("Dokumentation"), 525) + self.assertEqual(erg.get_cost_of("Bedienungsanleitung_Emmert"), 0) + self.assertEqual(erg.get_cost_of("Schulung_vor_Ort_beim_Kunden"), 0) + self.assertEqual(erg.get_cost_of("Abnahme"), 0) + self.assertEqual(erg.get_cost_of("SPS_Anlagenbetreuung"), 0) + self.assertEqual(erg.get_cost_of("PC_Anlagenbetreuung"), 0) + self.assertEqual(erg.get_cost_of("Anlagenbetreuung_durch_Montage"), 0) + self.assertEqual(erg.get_sum_of_costs(hw), 216407) + +def test_Unittests(): + unittest.main() + +if __name__ == '__main__': + test_Unittests()