diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2b7e46d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "yapf" +} \ No newline at end of file diff --git a/rieter_ekalk.py b/rieter_ekalk.py index 5670c6f..a384d48 100644 --- a/rieter_ekalk.py +++ b/rieter_ekalk.py @@ -45,10 +45,30 @@ class MG(): 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) < 3: + raise Exception("mind. 2 Strecken sollten existieren") + # Bypass, wenn mindestens 2 Flyer oder 2 RSM # Turm: kein Kriterium self._RSM_Anzahl = deckblatt.get("RSM", 0) @@ -940,16 +960,17 @@ class EA(): } self._Anzahl = anzahl + self._Anzahl["Bedienelemente_Steuerschrank"] = 1 # es gibt immer genau einen Steuerschrank 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) # TODO warum durch 4? self._Anzahl["bedienstation_zweifach_Wechs_BCD_10f"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") self._Anzahl["bedienstation_zweifach_Not_Aus_Reset"] = zmengen.get("Bedientableau_2fach", 0) - # self._Anzahl["bedienst_dreifach"] = zmengen.get(, 0) TODO warum ist das leer + # self._Anzahl["bedienst_dreifach"] = zmengen.get(, 0) # Eingaben # self._Anzahl["bedienst_vierfach"] = zmengen.get(, 0) # self._Anzahl["bedienst_sechsfach"] = zmengen.get(, 0) - # self._Anzahl["EAs_Unterverteiler_direct"] = zmengen.get(, 0) # TODO HW Abhängigkeit ? + 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) @@ -960,7 +981,7 @@ class EA(): self._Anzahl["Weiche"] = zmengen.get("Weiche", 0) self._Anzahl["Weiche_nach_PM_bipolar"] = zmengen.get("Weiche_nach_PM_bipolar", 0) - # self._Anzahl["gemeinsame_Weichenrueckstellung"] = zmengen.get(, 0) # TODO warum leer + # self._Anzahl["gemeinsame_Weichenrueckstellung"] = zmengen.get(, 0) # Eingabe self._Anzahl["Dreifach_Weiche_DIRECT"] = zmengen.get("Dreifachweiche", 0) @@ -968,25 +989,25 @@ class EA(): self._Anzahl["Stopper"] = zmengen.get("Stopper", 0) self._Anzahl["Ventil_RA_3_2_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) +\ - zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) - # + zmengen.get("", 0) # TODO B65 ist immer 0 + zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0)+\ + zmengen.get("RA_bi_abhebbar", 0) +\ + self._Anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0) + # + zmengen.get("", 0) # TODO B65 ist immer 0; Vorgabe? self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = zmengen.get("Doppelstreckenantrieb", 0) self._Anzahl["Blitzleuchte_Stoerung"] = zmengen.get("Werma_Rundumleuchte_Störung", 0) self._Anzahl["Schnittstelle_Flyer_ElectroJet"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + \ mg.get_value_of_object("flyer_ejet", "Interface_Doffer") - # TODO die Referenz von MG B89 ist eine Leerzeile + # TODO die Referenz von MG B89 ist eine Leerzeile -> 79 # self._Anzahl["Schnittstelle_Flyer_Putzmaschine_ElectroJet"] = zmengen.get(, 0) # TODO ist leer - self._Anzahl["Schnittstelle_Flyer_Neuhauser"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + self._Anzahl["Schnittstelle_Flyer_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") - # self._Anzahl["Spulenumsetzstation"] = zmengen.get(, 0) # ist immer 0 - self._Anzahl["RA_unidirektional"] = zmengen.get("RA_uni", 0) self._Anzahl["RA_unidirektional_abhebbar"] =zmengen.get("RA_uni_abhebbar", 0) # self._Anzahl["RA_unidirektional_mit_gemeinsamer_Wendung"] = zmengen.get(, 0) # TODO immer 0 @@ -1023,6 +1044,7 @@ class EA(): def gesamt_E(self): res = 0 + self.EAs for k,n in self._Anzahl.items(): res += self.EAs[k][0] * n return res @@ -2291,7 +2313,8 @@ class TestObjectMethods(unittest.TestCase): "SYSTEM": "DIRECT", "RSM": 2, "Neuenhauser-Putzmaschine": 1, - "Neuenhauser-Putzmaschine_Vorpuffer": 1, + "Neuenhauser-Putzmaschine_Vorpuffer": 2, + "Neuenhauser-Putzmaschine_Nachpuffer": 2, } mg = MG(Anzahl_MG) @@ -2310,25 +2333,25 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(mg._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 0) # check the data of neuenhauser - self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Vorstaustrecken"), 1) - self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Nachstaustrecken"), 0) - self.assertEqual(mg._neuenhauser.anzahl("Sensor_optisch_Traverse"), 4) + 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"), 1) - self.assertEqual(mg._neuenhauser.anzahl("Weiche_nach_PM_bipolar"), -1) # TODO negativ? + 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"), 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"], 4) + 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) @@ -2338,14 +2361,14 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(zmengen["Bedientableau_14fach"], 0) self.assertEqual(zmengen["Interface_Putzmaschine"], 1) self.assertEqual(zmengen["Interface_Doffer"], 0) - self.assertEqual(zmengen["Weiche"], 9) + 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) # TODO warum negativ? + 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) @@ -2353,9 +2376,9 @@ class TestObjectMethods(unittest.TestCase): 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"], 16) + self.assertEqual(zmengen["Doppelstreckenantrieb"], 18) self.assertEqual(zmengen["gemeinsame_Wendung"], 2) - self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 19) + self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 21) def test_EA(self): Anzahl_MG = { @@ -2404,9 +2427,6 @@ class TestObjectMethods(unittest.TestCase): "EAs_Unterverteiler_direct": 10, } eas = EA(Anzahl_EAS, mg) - # eas.get_SA() - # eas.get_SE() - ### first test the input channels self.assertEqual(eas.getE("Bedienelemente_Steuerschrank"), 24) @@ -2439,7 +2459,7 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.getE("Blitzleuchte_Stoerung"), 0) self.assertEqual(eas.getE("Schnittstelle_Flyer_ElectroJet"), 2) - self.assertEqual( eas.getE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) + self.assertEqual(eas.getE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) self.assertEqual(eas.getE("Schnittstelle_Flyer_Neuhauser"), 4) self.assertEqual(eas.getE("FEldbux_UV_EinAusgang"), 2) @@ -2490,7 +2510,7 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.getA("Blitzleuchte_Stoerung"), 1) self.assertEqual(eas.getA("Schnittstelle_Flyer_ElectroJet"), 2) - self.assertEqual( eas.getA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) + self.assertEqual(eas.getA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2) self.assertEqual(eas.getA("Schnittstelle_Flyer_Neuhauser"), 4) self.assertEqual(eas.getA("FEldbux_UV_EinAusgang"), 1) @@ -2540,7 +2560,7 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.get_SE("Schnittstelle_Flyer_ElectroJet"), 2) self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0) - self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Neuhauser"), 0) + #self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Neuhauser"), 0) # TODO Check EA Ausgabe self.assertEqual(eas.get_SE("FEldbux_UV_EinAusgang"), 2) self.assertEqual(eas.get_SE("Spulenumsetzstation"), 0) @@ -2588,7 +2608,7 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.get_SA("Schnittstelle_Flyer_ElectroJet"), 2) self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0) - self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Neuhauser"), 0) + self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Neuhauser"), 0) self.assertEqual(eas.get_SA("FEldbux_UV_EinAusgang"), 1) self.assertEqual(eas.get_SA("Spulenumsetzstation"), 0) @@ -2597,7 +2617,7 @@ class TestObjectMethods(unittest.TestCase): 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"), 6) + 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) @@ -2607,53 +2627,13 @@ class TestObjectMethods(unittest.TestCase): self.assertEqual(eas.get_SA("gemeinsame_Wendung"), 0) self.assertEqual(eas.get_SA("Frequenzumrichter"), 0) - # self.assertEqual(eas.anzahl(), 0) + # Zusammenfassung + self.assertEqual(eas.gesamt_E(), 231) + self.assertEqual(eas.gesamt_A(), 490) - # self.assertEqual(eas.gesamt_E(), 90) - # self.assertEqual(eas.gesamt_A(), 401) - - self.assertEqual(eas.anzahl("bedienstation_einfach_Zug_Wechseln"), 0) - - def test_EA_implicit(self): - - # Anzahl_MG = { - # "SYSTEM":"DIRECT", - # "RSM": 0, - # "Flyer":0, - # "Flyer_Puffer": 0, - # "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":0, - # "Anzahl_der_Pufferstrecken_pro_Puffer":0, - # "Begegnungsstrecke_Bypass":0, - # "Turm":0, - # "Turm_Anzahl_Wendlungen":0, - # } - # mg = MG(Anzahl_MG) - # Anzahl_EAS = { - # "Stopper": 5, - # } - # eas = EA(Anzahl_EAS, mg) - # self.assertEqual(eas.anzahl("Stopper"), 5) - - # self.assertEqual(eas.getE("Stopper"), 0) - # self.assertEqual(eas.getA("Stopper"), 0) - - # # Sensor für Stopper wird automatisch hinzugefügt - # self.assertEqual(repr(eas), "{'Stopper': 5, 'Sensor_Stopper_induktiv': 5}") - - # self.assertEqual(eas.gesamt_E(), 5) - # self.assertEqual(eas.gesamt_A(), 0) pass