4153 lines
218 KiB
Python
4153 lines
218 KiB
Python
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)
|
|
|
|
|
|
zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._flyer_f40._Mengen.get("Sensor_induktiv_Spulenhalter",0) +\
|
|
self._neuenhauser._Mengen.get("Sensorik_Zugpositionierung",0) +\
|
|
self._flyer._Mengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung",0)
|
|
|
|
zmengen["Sensor_Spulenprüfung_voll_leer"] = self._neuenhauser._Mengen.get("Sensor_WT18_Spulenprüfung_voll_leer",0)
|
|
zmengen["Seilzugsschalter"] = self._rsm_fa._Mengen.get("Seilzugsschalter", 0)
|
|
zmengen["Drucktaster_automatische_Umfahrung"] = self._rsm_fa._Mengen.get("Mit_Drucktaster", 0)
|
|
zmengen["Bedientableau_1fach"] = self._rsm_fa._Mengen.get("Bedientableau_1fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1fach", 0)
|
|
zmengen["Bedientableau_2fach"] = self._rsm_direct._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._rsm_fa._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._flyer_f40._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._neuenhauser._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._flyer._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("Bedientableau_2fach", 0) +\
|
|
self._turm._Mengen.get("Bedientableau_2fach", 0)
|
|
zmengen["Bedientableau_14fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14fach", 0)
|
|
zmengen["Interface_Putzmaschine"] = self._neuenhauser._Mengen.get("Interface_Putzmaschine", 0)
|
|
zmengen["Interface_Doffer"] = self._flyer_f40._Mengen.get("Interface_Doffer", 0) + self._flyer._Mengen.get("Interface_Doffer", 0)
|
|
zmengen["Weiche"] = self._rsm_direct._Mengen.get("Weiche", 0) +\
|
|
self._rsm_fa._Mengen.get("Weiche", 0) +\
|
|
self._flyer_f40._Mengen.get("Weiche", 0) +\
|
|
self._neuenhauser._Mengen.get("Weiche", 0) +\
|
|
self._flyer._Mengen.get("Weiche", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("Weiche", 0) +\
|
|
self._puffer._Mengen.get("Weiche", 0) +\
|
|
self._turm._Mengen.get("Weiche", 0)
|
|
zmengen["Dreifachweiche"] = self._rsm_direct._Mengen.get("Weiche_Gemeinsame_Rückstellung", 0) +\
|
|
self._flyer_f40._Mengen.get("Dreifachweiche", 0) +\
|
|
self._flyer._Mengen.get("Dreifachweiche", 0) +\
|
|
self._verbindungsstrecken_w.anzahl("Dreifachweiche")
|
|
zmengen["Wechsel"] = self._flyer_f40._Mengen.get("Wechsel", 0) +\
|
|
self._flyer._Mengen.get("Wechsel", 0)
|
|
zmengen["Stopper"] = self._flyer_f40._Mengen.get("Stopper", 0)
|
|
zmengen["Meldelampe_Überstrom"] = self._rsm_direct._Mengen.get("Meldelampe_Überstrom", 0) +\
|
|
self._rsm_fa._Mengen.get("Meldelampe_Überstrom", 0) +\
|
|
self._flyer_f40._Mengen.get("Meldelampe_Überstrom", 0) +\
|
|
self._neuenhauser._Mengen.get("Meldelampe_Überstrom", 0) +\
|
|
self._flyer._Mengen.get("Meldelampe_Überstrom", 0) +\
|
|
self._puffer._Mengen.get("Meldelampe_Überstrom", 0)
|
|
zmengen["Hauptschalter_Ein_Meldung"] = self._rsm_direct._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\
|
|
self._rsm_fa._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\
|
|
self._flyer_f40._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\
|
|
self._neuenhauser._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\
|
|
self._flyer._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\
|
|
self._puffer._Mengen.get("Hauptschalter_Ein_Meldung", 0)
|
|
zmengen["Werma_Rundumleuchte_Störung"] = self._rsm_direct._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
|
|
self._rsm_fa._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
|
|
self._flyer_f40._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
|
|
self._neuenhauser._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
|
|
self._flyer._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("Werma_Rundumleuchte_Störung", 0)
|
|
zmengen["Weiche_nach_PM_bipolar"] = self._flyer_f40._Mengen.get("Weiche_nach_PM_bipolar", 0) +\
|
|
self._neuenhauser._Mengen.get("Weiche_nach_PM_bipolar", 0)
|
|
zmengen["Kreuzungsweiche"] = self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche", 0)
|
|
zmengen["RA_uni"] = self._verbindungsstrecken_w._Mengen.get("RA_uni", 0) +\
|
|
self._rsm_fa._Mengen.get("RRA_uni_Begegnung", 0) +\
|
|
self._flyer_f40._Mengen.get("RA_uni", 0)
|
|
#RRA_bi_uni_Begegnung
|
|
zmengen["RA_uni_abhebbar"] = self._flyer_f40._Mengen.get("RA_uni_abhebbar", 0) +\
|
|
self._neuenhauser._Mengen.get("RA_uni_abhebbar", 0)
|
|
zmengen["RA_uni_ohne_SPS_Ansteuerung"] = self._flyer_f40._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\
|
|
self._neuenhauser._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0)
|
|
zmengen["RA_bi"] = self._rsm_fa._Mengen.get("RRA_bi", 0) +\
|
|
self._flyer_f40._Mengen.get("RRA_bi", 0) +\
|
|
self._flyer._Mengen.get("RA_bi", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\
|
|
self._puffer._Mengen.get("RA_bi_ungerade_Schiene", 0) +\
|
|
self._turm._Mengen.get("RA_bi", 0)
|
|
zmengen["RA_bi_ohne_SPS-Ansteuerung"] = self._rsm_fa._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\
|
|
self._flyer_f40._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\
|
|
self._flyer._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
|
|
self._turm._Mengen.get("RA_bi_ohne_SPS-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":14,
|
|
#"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert
|
|
"Flex_A_Premium":False,
|
|
"Getriebe_in_der_Mitte":False,
|
|
"RSM_Einfahrt_Ein_Beidseitig":False,
|
|
#"Sensor_optisch_Traverse":0,
|
|
"Sensor_optisch_Traverse_zusätzlich":6,
|
|
#"Bedientableau_1fach":0,
|
|
"Bedientableau_1fach_Korrektur":0,
|
|
#"Bedientableau_2fach":0,
|
|
"Bedientableau_2fach_Korrektur":4,
|
|
#"Weiche":0,
|
|
"Weiche_Korrektur":0,
|
|
#"RRA_bi":0,
|
|
"RRA_bi_Korrektur":0,
|
|
"RRA_bi_auf_Haupstrecke":10,
|
|
#"RRA_bi_ohne_SPS_Ansteuerung":0,
|
|
"RRA_uni_Begegnung":4,
|
|
"gemeinsame_Wendung":0,
|
|
#"Seilzugschalter":0,
|
|
#"Mit_Drucktaster":0,
|
|
#"Meldelampe_Überstrom":0,
|
|
#"Meldelampe_Überstrom_Korrektur":0,
|
|
#"Hauptschalter_Ein_Meldung":0,
|
|
#"Hauptschalter_Ein-Meldung_Korrektur":0,
|
|
#"Werma_Rundumleuchte_Störung":0,
|
|
#"Werma_Rundumleuchte_Störung_Korrektur":0,
|
|
"klemmkasten_rsm":2,
|
|
}
|
|
def __init__(self, anzahl:dict):
|
|
self._Mengen = {}
|
|
self._Mengen["Anzahl_RSM"] = anzahl.get("Anzahl_RSM", 0)
|
|
self._Mengen["Flex_A_Premium"] = anzahl.get("Flex_A_Premium", False)
|
|
self._Mengen["Getriebe_in_der_Mitte"] = anzahl.get("Getriebe_in_der_Mitte", False)
|
|
self._Mengen["RSM_Einfahrt_Ein_Beidseitig"] = anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)
|
|
|
|
sensorfaktor_premium = 1
|
|
sensorfaktor_beidseitig = 0
|
|
if self.flex_a_premium():
|
|
sensorfaktor_premium = 4
|
|
if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)):
|
|
sensorfaktor_beidseitig = 1
|
|
self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Anzahl_RSM", 0)*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0)
|
|
self._Mengen["Sensor_optisch_Traverse_zusätzlich"] = anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0)
|
|
#hier keine Korrektur, dafür "Zusätzlich" vorgesehen
|
|
|
|
tableaufaktor_premium = 1
|
|
tableaufaktor_beidseitig = 0
|
|
if self.flex_a_premium():
|
|
tableaufaktor_premium = 0
|
|
if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)):
|
|
tableaufaktor_beidseitig = 1
|
|
self._Mengen["Bedientableau_1fach"] = anzahl.get("Anzahl_RSM", 0)*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2fach"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0)
|
|
|
|
weichefaktor_premium = 1
|
|
weichefaktor_beidseitig = 0
|
|
if self.flex_a_premium():
|
|
weichefaktor_premium = 3
|
|
if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)):
|
|
weichefaktor_beidseitig = 1
|
|
self._Mengen["Weiche"] = anzahl.get("Anzahl_RSM", 0) * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
|
|
|
|
rrafaktor_premium = 1
|
|
rrafaktor_beidseitig = 0
|
|
if self.flex_a_premium():
|
|
rrafaktor_premium = 2
|
|
if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)):
|
|
rrafaktor_beidseitig = 1
|
|
self._Mengen["RRA_bi"] = anzahl.get("Anzahl_RSM", 0) * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0)
|
|
self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0)
|
|
self._Mengen["RRA_bi_auf_Haupstrecke"] = anzahl.get("RRA_bi_auf_Haupstrecke", 0)
|
|
self._Mengen["RRA_uni_Begegnung"] = anzahl.get("RRA_uni_Begegnung", 0)
|
|
|
|
if self.flex_a_premium():
|
|
self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4
|
|
else:
|
|
self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0
|
|
|
|
self._Mengen["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0)
|
|
|
|
seilzfaktor_premium = 0
|
|
seilzfaktor_getriebe_mitte = 0
|
|
if self.flex_a_premium():
|
|
seilzfaktor_premium = 2
|
|
if (anzahl.get("Getriebe_in_der_Mitte", False)):
|
|
seilzfaktor_getriebe_mitte = 2
|
|
self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte)
|
|
|
|
if self.flex_a_premium():
|
|
self._Mengen["Mit_Drucktaster"] = anzahl.get("Anzahl_RSM", 0) * 8
|
|
else:
|
|
self._Mengen["Mit_Drucktaster"] = 0
|
|
self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0)
|
|
self._Mengen["Meldelampe_Überstrom"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
self._Mengen["klemmkasten_rsm"] = anzahl.get("klemmkasten_rsm", 0)
|
|
|
|
def anzahl(self, partname, defaultv = 0):
|
|
return self._Mengen.get(partname, defaultv)
|
|
def flex_a_premium(self):
|
|
return self._Mengen.get("Flex_A_Premium", False)
|
|
|
|
# Flyer_F40_(Electrojet)_incl._Putzmaschine:
|
|
class Flyer_F40_EJet_inc_Putz():
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
#"Anzahl":0,
|
|
"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0,
|
|
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0,
|
|
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2,
|
|
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2,
|
|
#"Anzahl_Schienen":0,
|
|
"Single_Line_Durchfahrt":False,
|
|
"Nachpuffer":False,
|
|
#"Sensor_optisch_Traverse":0,
|
|
"Sensor_optisch_Traverse_Korrektur":0,
|
|
#"Sensor_induktiv_Spulenhalter":0,
|
|
"Sensor_induktiv_Spulenhalter_Korrektur":0,
|
|
#"Bedientableau_2fach":0,
|
|
"Bedientableau_2fach_Korrektur":0,
|
|
#"Interface_Doffer":0,
|
|
"Interface_Doffer_Korrektur":0,
|
|
#"Weiche":0,
|
|
"Weiche_Korrektur":0,
|
|
#"Weiche_nach_Flyer_bipolar":0,
|
|
"Weiche_nach_Flyer_bipolar_Korrektur":0,
|
|
"Dreifachweiche":0,
|
|
"Wechsel":0,
|
|
"Stopper":0,
|
|
"RA_uni":0,
|
|
#"RA_uni_abhebbar":0,
|
|
"RA_uni_abhebbar_Korrektur":0,
|
|
#"RA_uni_ohne_SPS_Ansteuerung":0,
|
|
"RA_uni_ohne_SPS_Ansteuerung_Korrektur":0,
|
|
#"RRA_BI_abhebbar":0,
|
|
"RRA_BI_abhebbar_Korrektur":0,
|
|
"RRA_bi":0,
|
|
#"RRA_bi_Korrektur":0,
|
|
#"RRA_bi_ohne_SPS_Ansteuerung":0,
|
|
"RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0,
|
|
#"Doppelstreckenantrieb":0,
|
|
"Doppelstreckenantrieb_Korrektur":0,
|
|
"RA_bi_abhebbar_unger_Schiene":0,
|
|
#"Meldelampe_Überstrom":0,
|
|
"Meldelampe_Überstrom_Korrektur":0,
|
|
#"Hauptschalter_Ein_Meldung":0,
|
|
"Hauptschalter_Ein-Meldung_Korrektur":0,
|
|
#"Werma_Rundumleuchte_Störung":0,
|
|
"Werma_Rundumleuchte_Störung_Korrektur":0,
|
|
}
|
|
def __init__(self, anzahl:dict):
|
|
|
|
self._Mengen = self.mengen
|
|
anzahl = self._Mengen
|
|
|
|
self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\
|
|
anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0)
|
|
self._Mengen["Anzahl"] = self._Flyer_Anzahl
|
|
self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\
|
|
anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0)
|
|
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0)
|
|
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0)
|
|
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0)
|
|
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0)
|
|
self._Mengen["Single_Line_Durchfahrt"] = anzahl.get("Single_Line_Durchfahrt", False)
|
|
self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False)
|
|
sensorfaktor_nachpuffer = 7
|
|
if (anzahl.get("Nachpuffer", False)):
|
|
sensorfaktor_nachpuffer = 5
|
|
self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0)
|
|
self._Mengen["Sensor_optisch_Traverse_Korrektur"] = self.mengen.get("Sensor_optisch_Traverse_Korrektur", 0)
|
|
self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 2 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0)
|
|
self._Mengen["Sensor_induktiv_Spulenhalter_Korrektur"] = 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
|
|
else:
|
|
self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0)
|
|
self._Mengen["RA_uni_ohne_SPS_Ansteuerung_Korrektur"] = self.mengen.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0)
|
|
|
|
if (anzahl.get("Single_Line_Durchfahrt", False)):
|
|
self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl
|
|
else:
|
|
self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
|
|
self._Mengen["RRA_BI_abhebbar_Korrektur"] = 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":0, #äquivalent zu Anzahl
|
|
"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken
|
|
#"Anzahl_Staustrecken":0,
|
|
#"Sensor_optisch_Traverse":0,
|
|
"Sensor_optisch_Traverse_Korrektur":0,
|
|
#"Weiche":0,
|
|
"Weiche_Korrektur":0,
|
|
"RA_bi_ungerade_Schiene":0,
|
|
#"Doppelstreckenantrieb":0,
|
|
"Doppelstreckenantrieb_Korrektur":0,
|
|
#"Meldelampe_Überstrom":0,
|
|
"Meldelampe_Überstrom_Korrektur":0,
|
|
#"Hauptschalter_Ein_Meldung":0,
|
|
"Hauptschalter_Ein-Meldung_Korrektur":0,
|
|
}
|
|
|
|
self._Mengen = anzahl
|
|
self._Puffer_Anzahl = anzahl.get("Puffer", 0)
|
|
self._Strecken_Anzahl = anzahl.get("Anzahl_Pufferstrecken", 0)
|
|
self._Mengen["Anzahl"] = self._Puffer_Anzahl
|
|
self._Mengen["Anzahl_Staustrecken"] = self._Strecken_Anzahl
|
|
self._Mengen["Sensor_optisch_Traverse"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0)
|
|
self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0)
|
|
self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0)
|
|
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
|
|
self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) +\
|
|
anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
def anzahl(self, partname, defaultv = 0):
|
|
return self._Mengen.get(partname, defaultv)
|
|
# Turm
|
|
class Turm():
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
#"Anzahl":0,
|
|
"Turm":0, #äquivalent zu Anzahl
|
|
"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken
|
|
#"Anzahl_Staustrecken":0,
|
|
#"Sensor_optisch_Traverse":0,
|
|
#"Weiche":0,
|
|
#"RA_bi":0,
|
|
"RA_bi_Korrektur":0,
|
|
#"RA_bi_ohne_SPS":0,
|
|
"RA_bi_ohne_SPS_Korrektur":0,
|
|
#"Bedientableau_2fach":0,
|
|
}
|
|
def __init__(self, anzahl:dict):
|
|
self._Mengen = {}
|
|
self._Turm_Anzahl = anzahl.get("Turm", 0)
|
|
self._Mengen["Anzahl"] = self._Turm_Anzahl
|
|
self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0)
|
|
self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl
|
|
|
|
self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5
|
|
self._Mengen["Weiche"] = self._Turm_Anzahl*3
|
|
self._Mengen["RA_bi"] = self._Turm_Anzahl*2 + anzahl.get("RA_bi_Korrektur", 0)
|
|
self._Mengen["RA_bi_Korrektur"] = anzahl.get("RA_bi_Korrektur", 0)
|
|
self._Mengen["RA_bi_ohne_SPS"] = self._Turm_Anzahl*self._Staustrecken_Anzahl*2 + anzahl.get("RA_bi_ohne_SPS_Korrektur", 0)
|
|
self._Mengen["RA_bi_ohne_SPS_Korrektur"] = anzahl.get("RA_bi_ohne_SPS_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2fach"] = self._Turm_Anzahl*2
|
|
def anzahl(self, partname, defaultv = 0):
|
|
return self._Mengen.get(partname, defaultv)
|
|
|
|
|
|
class EA():
|
|
|
|
stueckzahl = {
|
|
"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._reserve = 0.05
|
|
self.EAs = {
|
|
# Bedienelemente_Steuerschrank
|
|
"Drucktaster_Anlage_AUS": (1, 0),
|
|
"Leuchtdrucktaster_Anlage_EIN": (1, 1),
|
|
"Leuchtdrucktaster_Start_nach_Stoerung": (1, 1),
|
|
"Leuchtdrucktaster_Laufzeitfehler": (1, 1),
|
|
"Drucktaster_Lampentest": (1, 0),
|
|
"Meldeleuchte_Komm_PC_SPS_gestoert": (0, 1),
|
|
"Sammeleingang_Ueberstrom": (5, 1),
|
|
"Sammeleingang_Not_Aus": (2, 1),
|
|
"Sammeleingang_Druckluft_fehlt": (1, 1),
|
|
"Drucktaster_Reset": (1, 0),
|
|
"Sammeleingang_Antriebe_abheben": (1, 2),
|
|
"Reserve": (9, 7),
|
|
"Bedienelemente_Steuerschrank": (24, 16),
|
|
|
|
# Bedienstation,
|
|
"bedienstation_1fach_Not_Aus": (1, 1),
|
|
"bedienstation_einfach_Zug_Wechseln": (1, 1),
|
|
"bedienstation_automatische_Umfahrung": (1, 1), # 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))
|
|
|
|
def __repr__(self):
|
|
return repr(self._Anzahl)
|
|
|
|
def set_reserve(self, PS):
|
|
if PS > 1 or PS < 0:
|
|
raise Exception("Falscher Bereich")
|
|
self._reserve = PS
|
|
|
|
|
|
def gesamt_E(self):
|
|
res = 0
|
|
self.EAs
|
|
a = list(self._Anzahl.keys())
|
|
a.sort()
|
|
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_E_incl_reserve(self):
|
|
return (math.ceil((self.gesamt_E() * (1 + self._reserve))))
|
|
def gesamt_A(self):
|
|
res = 0
|
|
for k,n in self._Anzahl.items():
|
|
res += self.EAs[k][1] * n
|
|
return res
|
|
def gesamt_A_incl_reserve(self):
|
|
return (math.ceil((self.gesamt_A() * (1 + self._reserve))))
|
|
def Anzahl_notwendigen_Siemens_EAKarten(self):
|
|
SiemensS7_32DE = math.ceil(self.gesamt_E()/32)
|
|
SiemensS7_32DA = math.ceil(self.gesamt_A()/32)
|
|
return (SiemensS7_32DE, SiemensS7_32DA)
|
|
def Anzahl_Siemens_EAKarten_incl_reserve(self):
|
|
SiemensS7_32DE_incl_reserve = math.ceil(self.gesamt_E_incl_reserve()/32)
|
|
SiemensS7_32DA_incl_reserve = math.ceil(self.gesamt_A_incl_reserve()/32)
|
|
return (SiemensS7_32DE_incl_reserve, SiemensS7_32DA_incl_reserve)
|
|
|
|
|
|
class HW():
|
|
#TODO "bedienstation_1fach_Not_Aus" keine Anzahl manuelle eingabe aber dann noch bezüge in mengengerüst und hardware; muss noch eingepflegt werden
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer": 0, ###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": 1,
|
|
"sps_simatic_s7_1517_3": 0,
|
|
"sps_simatic_s7_1518_4": 0,
|
|
"sps_et200_1512sp": 0,
|
|
#"memory_card_256_mb": 0
|
|
#"memory_card_2_gb": 0
|
|
"et200_sp_ea_ebene":1,
|
|
"netzwerk_fernwartung":1,
|
|
"abgang_400v":0,
|
|
"abgang_24_v":0,
|
|
"anlagenrechner":1,
|
|
"anlagenrechner_ohne_bildschirm": 0,
|
|
"pulteinbau_monitor_srline_rflat_24fhd": 0,
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0,
|
|
"netzwerk_display_adapter_lindy": 0,
|
|
"zusaetzlicher_bildschirm":0,
|
|
#"schaltschrank":1,
|
|
|
|
#"unterverteiler_fuer_1neuenhauser_pm":0,
|
|
"unterverteiler_fuer_1flyer":0,
|
|
"unterverteiler_fuer_2flyer":2,
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":0,
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":0,
|
|
"unterverteiler_fuer_puffer":1,
|
|
|
|
#"unterverteiler_fuer_5_rsm_fa":0,
|
|
"korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1,
|
|
|
|
#"unterverteiler_fuer_10_rsm_fa":0,
|
|
"korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2,
|
|
|
|
#"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0,
|
|
"korrektur_3_rsm_zusaetzlich_im_unterverteiler":0,
|
|
|
|
"unterverteiler_fuer_4_rsm_direct":0,
|
|
"korrektur_4_rsm_zusaetzlich_im_unterverteiler":0,
|
|
|
|
#"unterverteiler_fuer_12_rsm_direct":0,
|
|
"korrektur_12_rsm_zusaetzlich_im_unterverteiler":0,
|
|
"unterverteiler_fuer_8_rsm_direct":0,
|
|
"korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler":0,
|
|
|
|
#"busverteiler_6_rsm_direct":0,
|
|
"korrektur_6_rsm_zusaetzlich_im_busverteiler":0,
|
|
|
|
#"busverteiler_8_rsm_direct":0,
|
|
"korrektur_8_rsm_zusaetzlich_im_busverteiler":0,
|
|
|
|
#"antrieb_unidirektional_halbleiter":0,
|
|
#"antrieb_bidirektional_halbleiter":0,
|
|
"antrieb_unidirektional_schuetz":0,
|
|
"antrieb_bidirektional_schuetz":0,
|
|
"motorschutzschalter":0,
|
|
"wendeschuetzschaltung":0,
|
|
#"frequenzumrichter":0,
|
|
## summe_motorstarter
|
|
|
|
# "bedienstation_1fach_kpl":0,
|
|
# "bedienst_2fach_wechs_bcd_10f":0,
|
|
# "bedienstation_2fach_kpl":0,
|
|
# "halter_bedientableau_2fach":0,
|
|
# "bedienstation_3fach_kpl":0,
|
|
# "halter_bedientableau_3fach":0,
|
|
# "bedienstation_4fach_kpl":0,
|
|
# "halter_bedientableau_4fach":0,
|
|
# "bedienstation_6fach_kpl":0,
|
|
# "halter_bedienstation_6fach":0,
|
|
# "drucktaster_automatische_umfahrung":0,
|
|
# "halter_fuer_drucktaster":0,
|
|
## summe_bedienstationen
|
|
|
|
"ET200_SP":1,
|
|
#"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0,
|
|
"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0,
|
|
#"et200_sp_eingangskarte_8_de":0,
|
|
"korrektur_et200_sp_eingangskarte_8_de":0,
|
|
"et200_sp_eingangskarte_16_de":0,
|
|
#"et200_sp_eingangskarte_8_do":0,
|
|
"korrektur_et200_sp_eingangskarte_8_do":0,
|
|
"et200_sp_eingangskarte_16_do":0,
|
|
# "et200_sp_base_unit_neue_last_mit_potKlemmen":0,
|
|
"korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen":0,
|
|
# "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen":0,
|
|
# "et200_sp_base_unit_neue_last":0,
|
|
"korrektur_et200_sp_base_unit_neue_last":-15, ### dann ist die anzahl aber bei -1!
|
|
# "et200_sp_base_unit_links_gebrueckt":0, ### gesamtkosten müssten doch eigtl bei 11 sein oder?
|
|
"korrektur_et200_sp_base_unit_links_gebrueckt":0,
|
|
|
|
"SLIO":0,
|
|
# "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0,
|
|
"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0,
|
|
# "slio_eingangskarte_4_de":0,
|
|
"korrektur_slio_eingangskarte_4_de":0,
|
|
# "slio_eingangskarte_8_de":0,
|
|
"korrektur_slio_eingangskarte_8_de":0,
|
|
# "slio_ausgangskarte_4_do":0,
|
|
"korrektur_slio_ausgangskarte_4_do":0,
|
|
# "slio_ausgangskarte_8_do":0,
|
|
"korrektur_slio_ausgangskarte_8_do":0,
|
|
# "slio_power_modul":0,
|
|
"korrektur_slio_power_modul":0,
|
|
# "slio_4_x_dc_24v_4_x_dc_0v":0,
|
|
"korrektur_slio_4_x_dc_24v_4_x_dc_0v":0,
|
|
# "slio_8_x_dc_24v":0,
|
|
# "slio_8_x_dc_0v":0,
|
|
"korrektur_slio_8_x_dc_0v":0,
|
|
|
|
# MATERIAL VOR ORT
|
|
"movimot_fu_mit_anschaltung":0,
|
|
# "sensor_optisch_traverse":0,
|
|
"sensorhalter_ohne_sensor":0,
|
|
# "reflexionslichtschranke_rsm_direct":0,
|
|
# "stoppersensor_induktiv_mit_halter":0,
|
|
# "sensor_spulenpruefung_voll_leer":0,
|
|
# "seilzugschalter":0,
|
|
"seil_fuer_seilzugschalter":0,
|
|
# "blitzleuchte":0,
|
|
# "spulenumsetzstation":0,
|
|
# "sensorkabel_je_20m":0,
|
|
# "stopper_weichenkabel_je_5m":0,
|
|
# "motorkabel_je_30m":0,
|
|
"kabelpritschen_leitern_200_60":348,
|
|
"kabelpritsche_rsm_100_60":0,
|
|
"kabelpritsche_rsm_50_35":0,
|
|
# "klemmkasten_rsm":0,
|
|
# "klemmkasten_direct_in_rsm":0,
|
|
# "erdung":0,
|
|
"kleinteile_rohre_schellen_kabelbinder_ect":1.5,
|
|
# "kabel_fuer_klemmkasten_und_bts_60m":0,
|
|
# "kabel_fuer_1fach_bts_zug_wechseln":0,
|
|
# "zuleitung_75_m_unterverteiler_4x4mm2_400vac":0,
|
|
# "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, ### anzahl ist -1
|
|
"korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":-6,
|
|
# "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0,
|
|
"korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0,
|
|
# "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":0,
|
|
# "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":0,
|
|
# "profinetkabel":0,
|
|
"korrektur_profinetkabel":0,
|
|
# "schnittstellen_8x1mm2_30m":0,
|
|
}
|
|
|
|
# Einzelteilpreise in €
|
|
ep = {
|
|
# Schaltschrank Einzelpreis
|
|
"schaltschrankgehaeuse_b1x800_zubehoer": 2000, #
|
|
"schaltschrankgehaeuse_b2x800_zubehoer": 4663.45, # 790821101
|
|
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5720.94, # 790821102
|
|
"sps_simatic_s7_cpu315_2_pn_dp": 2237.25, # 708003004
|
|
"speicherkarte_fuer_sps_512_kb": 172.5, # 708003012
|
|
"sps_simatic_s7_cpu317_2_pn_dp": 3957, # 708003007
|
|
"speicherkarte_fuer_sps2_mb": 246, # 708003027
|
|
"sps_simatic_s7_1515_2": 2173.9, # 790008100
|
|
"sps_simatic_s7_1517_3": 3827.8, # 790008101
|
|
"sps_simatic_s7_1518_4": 5892, # 6ES7518-4AP00-0AB0
|
|
"sps_et200_1512sp": 705.75, # 709000003
|
|
"memory_card_256_mb": 0, # 708015093
|
|
"memory_card_2_gb": 515.9, # 708015094
|
|
"et200_sp_ea_ebene": 0, # 790009001
|
|
"netzwerk_fernwartung": 750, # 790011001
|
|
"abgang_400v": 250, # ----
|
|
"abgang_24_v": 250, # ----
|
|
"anlagenrechner": 1657, # 790011000
|
|
"anlagenrechner_ohne_bildschirm": 1487, # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS
|
|
"pulteinbau_monitor_srline_rflat_24fhd": 1200, # 400009058
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout": 350, # 400009057
|
|
"netzwerk_display_adapter_lindy": 650, #
|
|
"zusaetzlicher_bildschirm": 1100, #
|
|
# _summe_schaltschrank
|
|
# "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210
|
|
"unterverteiler_fuer_1flyer": 1000, # 790820207_A
|
|
"unterverteiler_fuer_2flyer": 1000, # 790820209_A
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210
|
|
"unterverteiler_fuer_puffer": 1000, # 790820210_F
|
|
|
|
"unterverteiler_fuer_5_rsm_fa": 1000, # 790820210_D
|
|
# korrektur_1_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"unterverteiler_fuer_10_rsm_fa": 1000, # 790820210_F
|
|
#
|
|
|
|
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C
|
|
# korrektur_3_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"unterverteiler_fuer_4_rsm_direct": 5584, # 790820300
|
|
# korrektur_4_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"unterverteiler_fuer_12_rsm_direct": 8258, # 790820302
|
|
# korrektur_12_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"unterverteiler_fuer_8_rsm_direct": 6736, # 790820301 ### immer 800 abgezogen?
|
|
# korrektur_8_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"busverteiler_6_rsm_direct": 1747.53, # 790801002
|
|
# korrektur_6_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"busverteiler_8_rsm_direct": 2052.26, # 790801001
|
|
# korrektur_8_rsm_zusaetzlich_im_unterverteiler
|
|
|
|
"antrieb_unidirektional_halbleiter": 90,
|
|
"antrieb_bidirektional_halbleiter": 105,
|
|
"antrieb_unidirektional_schuetz": 0,
|
|
"antrieb_bidirektional_schuetz": 0,
|
|
"motorschutzschalter": 0,
|
|
"wendeschuetzschaltung": 75,
|
|
"frequenzumrichter": 250,
|
|
# summe_motorstarter
|
|
|
|
"bedienstation_1fach_kpl": 59,
|
|
"bedienst_2fach_wechs_bcd_10f": 105, # 790002024
|
|
"bedienstation_2fach_kpl": 65.63, # 790000020
|
|
"halter_bedientableau_2fach": 42, # 825304006
|
|
"bedienstation_3fach_kpl": 99, # 790000040
|
|
"halter_bedientableau_3fach": 46, # 825304007
|
|
"bedienstation_4fach_kpl": 121, # 790000045
|
|
"halter_bedientableau_4fach": 52, # 825304003
|
|
"bedienstation_6fach_kpl": 145.8, # 790000033
|
|
"halter_bedientableau_6fach": 56, # 825304002
|
|
"drucktaster_automatische_umfahrung": 28,
|
|
"halter_fuer_drucktaster": 33,
|
|
# summe_bedienstationen
|
|
|
|
# ET200_SP
|
|
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 198.90, # 709000006
|
|
# "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"
|
|
"et200_sp_eingangskarte_8_de": 35,
|
|
# "korrektur_et200_sp_eingangskarte_8_de" # 709000021
|
|
"et200_sp_eingangskarte_16_de": 58, # 709000022
|
|
"et200_sp_eingangskarte_8_do": 46, # 709000031_A
|
|
"et200_sp_eingangskarte_16_do": 66.30, # 709000032
|
|
"et200_sp_base_unit_neue_last_mit_potKlemmen": 23, # 709000014
|
|
"et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen": 15, # 709000015
|
|
"et200_sp_base_unit_neue_last": 19, # 709000011
|
|
"et200_sp_base_unit_links_gebrueckt": 11, # 709000010
|
|
|
|
# SLIO
|
|
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO": 175, # 709000500
|
|
"slio_eingangskarte_4_de": 31, # 709000510
|
|
"slio_eingangskarte_8_de": 38, # 709000511
|
|
"slio_ausgangskarte_4_do": 39, # 709000021
|
|
"slio_ausgangskarte_8_do": 46, # 709000021
|
|
"slio_power_modul": 18.22, # 709000014
|
|
"slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015
|
|
"slio_8_x_dc_24v": 18, # 709000011
|
|
"slio_8_x_dc_0v": 13, # 709000010
|
|
# Summe_material_in_ll
|
|
|
|
# MATERIAL VOR ORT
|
|
"movimot_fu_mit_anschaltung": 550,
|
|
"sensor_optisch_traverse": 27, # 827072200
|
|
"sensorhalter_ohne_sensor": 8, # 827072xxx
|
|
"reflexionslichtschranke_rsm_direct": 45, # 827072207
|
|
"stoppersensor_induktiv_mit_halter": 63, # 827072205
|
|
"sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041
|
|
"seilzugschalter": 150,
|
|
"seil_fuer_seilzugschalter": 0.40,
|
|
"blitzleuchte": 72, # 790000006
|
|
"spulenumsetzstation": 0,
|
|
"sensorkabel_je_20m": 25, # 722001xxx
|
|
"stopper_weichenkabel_je_5m": 20, # 722001xxx
|
|
"motorkabel_je_30m": 26,
|
|
"kabelpritschen_leitern_200_60": 15,
|
|
"kabelpritsche_rsm_100_60": 12, # 715000020
|
|
"kabelpritsche_rsm_50_35": 9, # 715003010
|
|
"klemmkasten_rsm": 120,
|
|
"klemmkasten_direct_in_rsm": 122, # 790000703
|
|
"erdung": 13,
|
|
"kleinteile_rohre_schellen_kabelbinder_ect": 750,
|
|
|
|
"kabel_fuer_klemmkasten_und_bts_60m": 145,
|
|
"kabel_fuer_1fach_bts_zug_wechseln": 50,
|
|
"zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146, # 725000050
|
|
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450, # 725000057
|
|
"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 280, # 725000057
|
|
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145, # 725000007
|
|
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136, # 725000004
|
|
"profinetkabel": 42, # 726001xxx
|
|
"schnittstellen_8x1mm2_30m": 35.4, # 725000019
|
|
}
|
|
# Zeit pro Einheit in min
|
|
zpe_dienstl_hardwareplanung = {
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer": 4200,
|
|
"schaltschrankgehaeuse_b2x800_zubehoer": 4200,
|
|
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800,
|
|
"sps_simatic_s7_cpu315_2_pn_dp": 0,
|
|
"speicherkarte_fuer_sps_512_kb": 0,
|
|
"sps_simatic_s7_cpu317_2_pn_dp": 0,
|
|
"speicherkarte_fuer_sps2_mb": 0,
|
|
"sps_simatic_s7_1515_2": 0,
|
|
"sps_simatic_s7_1517_3": 0,
|
|
"sps_simatic_s7_1518_4": 0,
|
|
"sps_et200_1512sp": 0,
|
|
"memory_card_256_mb": 0,
|
|
"memory_card_2_gb": 0,
|
|
"et200_sp_ea_ebene":60,
|
|
"netzwerk_fernwartung":0,
|
|
"abgang_400v":60,
|
|
"abgang_24_v":60,
|
|
"anlagenrechner":0,
|
|
"anlagenrechner_ohne_bildschirm": 0,
|
|
"pulteinbau_monitor_srline_rflat_24fhd": 60,
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0,
|
|
"netzwerk_display_adapter_lindy": 30,
|
|
"zusaetzlicher_bildschirm":0,
|
|
"schaltschrank":0,
|
|
"unterverteiler_fuer_1neuenhauser_pm":1200,
|
|
"unterverteiler_fuer_1flyer":720,
|
|
"unterverteiler_fuer_2flyer":1020,
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":810,
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1110,
|
|
"unterverteiler_fuer_puffer":1200,
|
|
"unterverteiler_fuer_5_rsm_fa":960,
|
|
"unterverteiler_fuer_10_rsm_fa":1020,
|
|
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1200,
|
|
"unterverteiler_fuer_4_rsm_direct":3000,
|
|
"unterverteiler_fuer_12_rsm_direct":4800,
|
|
"unterverteiler_fuer_8_rsm_direct":3900,
|
|
"busverteiler_6_rsm_direct":600,
|
|
"busverteiler_8_rsm_direct":960
|
|
}
|
|
zpe_e_werkstatt = {
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer": 2400,
|
|
"schaltschrankgehaeuse_b2x800_zubehoer": 4800,
|
|
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160,
|
|
"sps_simatic_s7_cpu315_2_pn_dp": 0,
|
|
"speicherkarte_fuer_sps_512_kb": 0,
|
|
"sps_simatic_s7_cpu317_2_pn_dp": 0,
|
|
"speicherkarte_fuer_sps2_mb": 0,
|
|
"sps_simatic_s7_1515_2": 0,
|
|
"sps_simatic_s7_1517_3": 0,
|
|
"sps_simatic_s7_1518_4": 0,
|
|
"sps_et200_1512sp": 0,
|
|
"memory_card_256_mb": 0,
|
|
"memory_card_2_gb": 0,
|
|
"et200_sp_ea_ebene":120,
|
|
"netzwerk_fernwartung":0,
|
|
"abgang_400v":90,
|
|
"abgang_24_v":90,
|
|
"anlagenrechner":0,
|
|
"anlagenrechner_ohne_bildschirm": 0,
|
|
"pulteinbau_monitor_srline_rflat_24fhd": 240,
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0,
|
|
"netzwerk_display_adapter_lindy": 120,
|
|
"zusaetzlicher_bildschirm":0,
|
|
"schaltschrank":0,
|
|
"unterverteiler_fuer_1neuenhauser_pm":1200,
|
|
"unterverteiler_fuer_1flyer":1020,
|
|
"unterverteiler_fuer_2flyer":1200,
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1140,
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1200,
|
|
"unterverteiler_fuer_puffer":1200,
|
|
"unterverteiler_fuer_5_rsm_fa":1020,
|
|
"unterverteiler_fuer_10_rsm_fa":1140,
|
|
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1500,
|
|
"unterverteiler_fuer_4_rsm_direct":3600,
|
|
"unterverteiler_fuer_12_rsm_direct":4800,
|
|
"unterverteiler_fuer_8_rsm_direct":4200,
|
|
"busverteiler_6_rsm_direct":480,
|
|
"busverteiler_8_rsm_direct":480,
|
|
"antrieb_unidirektional_halbleiter":10,
|
|
"antrieb_bidirektional_halbleiter":10,
|
|
"antrieb_unidirektional_schuetz":0,
|
|
"antrieb_bidirektional_schuetz":0,
|
|
"motorschutzschalter":0,
|
|
"wendeschuetzschaltung":0,
|
|
"frequenzumrichter":0,
|
|
"bedienstation_1fach_kpl":25,
|
|
"bedienst_2fach_wechs_bcd_10f":90,
|
|
"bedienstation_2fach_kpl":30,
|
|
"halter_bedientableau_2fach":30,
|
|
"bedienstation_3fach_kpl":25,
|
|
"halter_bedientableau_3fach":30,
|
|
"bedienstation_4fach_kpl":30,
|
|
"halter_bedientableau_4fach":30,
|
|
"bedienstation_6fach_kpl":45,
|
|
"halter_bedienstation_6fach":30,
|
|
"drucktaster_automatische_umfahrung":15,
|
|
"halter_fuer_drucktaster":0,
|
|
}
|
|
Keys_of_Vor_Ort = [
|
|
"movimot_fu_mit_anschaltung",
|
|
"sensor_optisch_traverse",
|
|
"sensorhalter_ohne_sensor",
|
|
"reflexionslichtschranke_rsm_direct",
|
|
"stoppersensor_induktiv_mit_halter",
|
|
"sensor_spulenpruefung_voll_leer",
|
|
"seilzugschalter",
|
|
"seil_fuer_seilzugschalter",
|
|
"blitzleuchte",
|
|
"spulenumsetzstation",
|
|
"sensorkabel_je_20m",
|
|
"stopper_weichenkabel_je_5m",
|
|
"motorkabel_je_30m",
|
|
"kabelpritschen_leitern_200_60",
|
|
"kabelpritsche_rsm_100_60",
|
|
"kabelpritsche_rsm_50_35",
|
|
"klemmkasten_rsm",
|
|
"klemmkasten_direct_in_rsm",
|
|
"erdung",
|
|
"kleinteile_rohre_schellen_kabelbinder_ect",
|
|
"kabel_fuer_klemmkasten_und_bts_60m",
|
|
"kabel_fuer_1fach_bts_zug_wechseln",
|
|
"zuleitung_75_m_unterverteiler_4x4mm2_400vac",
|
|
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc",
|
|
"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc",
|
|
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm",
|
|
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm",
|
|
"profinetkabel",
|
|
"korrektur_profinetkabel",
|
|
"schnittstellen_8x1mm2_30m"
|
|
]
|
|
Keys_of_Schaltschrank = [
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer", ###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)
|
|
if self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] > 0 and self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] > 0:
|
|
raise Exception("12x4 and 12x2.5 mustn't be used simultanously")
|
|
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 in self.Keys_of_Vor_Ort:
|
|
continue
|
|
elif k not in self.ep:
|
|
continue
|
|
elif k in self.Keys_of_Schaltschrank:
|
|
preis = anz * self.ep[k] * self.anzahl("schaltschrank")
|
|
else:
|
|
preis = anz * self.ep[k]
|
|
res += preis
|
|
|
|
return res
|
|
|
|
def summe_vorort(self):
|
|
res = 0
|
|
for k,anz in self._anzahl.items():
|
|
if k in self.Keys_of_Vor_Ort:
|
|
preis = anz * self.ep[k]
|
|
res += preis
|
|
return res
|
|
|
|
def summe_h_unterverteiler_hardware(self):
|
|
""" gibt dies Summer der Stunden zur Montage der Unterverteiler hardware zurück"""
|
|
keys_unterverteiler = [
|
|
"unterverteiler_fuer_1neuenhauser_pm",
|
|
"unterverteiler_fuer_1flyer",
|
|
"unterverteiler_fuer_2flyer",
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine",
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine",
|
|
"unterverteiler_fuer_puffer",
|
|
"unterverteiler_fuer_5_rsm_fa",
|
|
"unterverteiler_fuer_10_rsm_fa",
|
|
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar",
|
|
"unterverteiler_fuer_4_rsm_direct",
|
|
"unterverteiler_fuer_12_rsm_direct",
|
|
"unterverteiler_fuer_8_rsm_direct",
|
|
"busverteiler_6_rsm_direct",
|
|
"busverteiler_8_rsm_direct",
|
|
]
|
|
zeiten = dict()
|
|
res = 0
|
|
for k in keys_unterverteiler:
|
|
anz = self._anzahl.get(k, 0)
|
|
dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60
|
|
zeiten[k] = dauer
|
|
res += dauer
|
|
return res
|
|
|
|
def summe_h_unterverteiler_e_werkstatt(self):
|
|
""" gibt dies Summer der Stunden zur Montage der Unterverteiler E-Werkstatt zurück"""
|
|
keys_unterverteiler = [
|
|
"unterverteiler_fuer_1neuenhauser_pm",
|
|
"unterverteiler_fuer_1flyer",
|
|
"unterverteiler_fuer_2flyer",
|
|
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine",
|
|
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine",
|
|
"unterverteiler_fuer_puffer",
|
|
"unterverteiler_fuer_5_rsm_fa",
|
|
"unterverteiler_fuer_10_rsm_fa",
|
|
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar",
|
|
"unterverteiler_fuer_4_rsm_direct",
|
|
"unterverteiler_fuer_12_rsm_direct",
|
|
"unterverteiler_fuer_8_rsm_direct",
|
|
"busverteiler_6_rsm_direct",
|
|
"busverteiler_8_rsm_direct",
|
|
]
|
|
res = 0
|
|
for k in keys_unterverteiler:
|
|
anz = self._anzahl.get(k, 0)
|
|
dauer = anz * self.zpe_e_werkstatt[k] / 60
|
|
res += dauer
|
|
return res
|
|
|
|
def get_h_of(self, partname):
|
|
return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60)
|
|
def summe_h_bedienstationen(self):
|
|
""" gibt die Summer der Stunden zur Montage der Bedienstationen zurück"""
|
|
keys_bedienstationen = [
|
|
"bedienstation_1fach_kpl",
|
|
"bedienst_2fach_wechs_bcd_10f",
|
|
"bedienstation_2fach_kpl",
|
|
"halter_bedientableau_2fach",
|
|
"bedienstation_3fach_kpl",
|
|
"halter_bedientableau_3fach",
|
|
"bedienstation_4fach_kpl",
|
|
"halter_bedientableau_4fach",
|
|
"bedienstation_6fach_kpl",
|
|
"halter_bedienstation_6fach",
|
|
"drucktaster_automatische_umfahrung",
|
|
"halter_fuer_drucktaster"
|
|
]
|
|
|
|
res = 0
|
|
for k in keys_bedienstationen:
|
|
anz = self._anzahl.get(k, 0)
|
|
dauer = anz * self.zpe_e_werkstatt[k] / 60
|
|
res += dauer
|
|
return res
|
|
def summe_h_schaltschrank_hardware(self):
|
|
""" gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück"""
|
|
keys_schaltschrank = [
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer",
|
|
"schaltschrankgehaeuse_b2x800_zubehoer",
|
|
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer",
|
|
"sps_simatic_s7_cpu315_2_pn_dp",
|
|
"speicherkarte_fuer_sps_512_kb",
|
|
"sps_simatic_s7_cpu317_2_pn_dp",
|
|
"speicherkarte_fuer_sps2_mb",
|
|
"sps_simatic_s7_1515_2",
|
|
"sps_simatic_s7_1517_3",
|
|
"sps_simatic_s7_1518_4",
|
|
"sps_et200_1512sp",
|
|
"memory_card_256_mb",
|
|
"memory_card_2_gb",
|
|
"et200_sp_ea_ebene",
|
|
"netzwerk_fernwartung",
|
|
"abgang_400v",
|
|
"abgang_24_v",
|
|
"anlagenrechner",
|
|
"anlagenrechner_ohne_bildschirm",
|
|
"pulteinbau_monitor_srline_rflat_24fhd",
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout",
|
|
"netzwerk_display_adapter_lindy",
|
|
"zusaetzlicher_bildschirm",
|
|
]
|
|
|
|
res = 0
|
|
for k in keys_schaltschrank:
|
|
anz = self._anzahl.get(k, 0)
|
|
dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60
|
|
res += dauer
|
|
return res
|
|
def summe_h_schaltschrank_e_werkstatt(self):
|
|
""" gibt die Summer der Stunden zur Montage des Schaltschranks in der E-Werkstatt zurück"""
|
|
keys_schaltschrank = [
|
|
"schaltschrankgehaeuse_b1x1200_zubehoer",
|
|
"schaltschrankgehaeuse_b2x800_zubehoer",
|
|
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer",
|
|
"sps_simatic_s7_cpu315_2_pn_dp",
|
|
"speicherkarte_fuer_sps_512_kb",
|
|
"sps_simatic_s7_cpu317_2_pn_dp",
|
|
"speicherkarte_fuer_sps2_mb",
|
|
"sps_simatic_s7_1515_2",
|
|
"sps_simatic_s7_1517_3",
|
|
"sps_simatic_s7_1518_4",
|
|
"sps_et200_1512sp",
|
|
"memory_card_256_mb",
|
|
"memory_card_2_gb",
|
|
"et200_sp_ea_ebene",
|
|
"netzwerk_fernwartung",
|
|
"abgang_400v",
|
|
"abgang_24_v",
|
|
"anlagenrechner",
|
|
"anlagenrechner_ohne_bildschirm",
|
|
"pulteinbau_monitor_srline_rflat_24fhd",
|
|
"kurzhubtastatur_kbt06_mit_touchpad_uslayout",
|
|
"netzwerk_display_adapter_lindy",
|
|
"zusaetzlicher_bildschirm",
|
|
]
|
|
|
|
res = 0
|
|
for k in keys_schaltschrank:
|
|
anz = self._anzahl.get(k, 0)
|
|
dauer = anz * self.zpe_e_werkstatt[k] / 60
|
|
res += dauer
|
|
return res
|
|
def summe_h_zeiten_hardwareplanung(self):
|
|
summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware()
|
|
summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware()
|
|
return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware)
|
|
|
|
class Dienstleistung():
|
|
# Angaben in h
|
|
mengen = {
|
|
"Pflichtenheft_Autom_Schnittstellen": 0,
|
|
|
|
## Hardwareplanung
|
|
#"Erstellung_Steuerungslayout": 1,
|
|
#"Schaltplanerstellung_incl_Korrekturen": 1,
|
|
#"Projektkoordination": 1,
|
|
#"Materialdispo": 1,
|
|
#"Abstimmung_mit_E_Werkstatt": 1,
|
|
#"Erstellen_E_Montageunterlagen": 1,
|
|
|
|
# Test_und_Installation
|
|
# "PC_Installation": 0,
|
|
"Oberfläche_Simulation": 0,
|
|
"SPS_Test_im_Haus_Simulation": 0,
|
|
## Dokumentation
|
|
"Bedienerhandbuch": 16,
|
|
"SPS_Doku": 15,
|
|
"PC_Doku": 0,
|
|
|
|
## Elektrowerkstatt
|
|
#Schaltschrankbau
|
|
#Unterverteilerbau
|
|
#Klemmkastenbau_je_2h
|
|
#Bedientableaubau
|
|
"Vormontage_im_Haus": 0
|
|
}
|
|
|
|
def __init__(self, Anzahl_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"] = hw.get_h_of("bedienstation_1fach_kpl") +\
|
|
hw.get_h_of("bedienst_2fach_wechs_bcd_10f")+\
|
|
hw.get_h_of("bedienstation_2fach_kpl") +\
|
|
hw.get_h_of("bedienstation_3fach_kpl") +\
|
|
hw.get_h_of("bedienstation_4fach_kpl") +\
|
|
hw.get_h_of("bedienstation_6fach_kpl") +\
|
|
hw.get_h_of("drucktaster_automatische_umfahrung")
|
|
self._Hours["Vormontage_im_Haus"] = 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_diensleistung_hardwareplanung() +\
|
|
self.stunden_elektrowerkstatt()
|
|
return hours_necessary
|
|
def stunden_diensleistung_hardwareplanung(self):
|
|
"""return hours of hardware-bucheting, test and installation"""
|
|
keys_hardwareplanung = [
|
|
"Pflichtenheft_Autom_Schnittstellen",
|
|
"Erstellung_Steuerungslayout",
|
|
"Schaltplanerstellung_incl_Korrekturen",
|
|
"Projektkoordination",
|
|
"Materialdispo",
|
|
"Abstimmung_mit_E_Werkstatt",
|
|
"Erstellen_E_Montageunterlagen",
|
|
"PC_Installation",
|
|
"Oberfläche_Simulation",
|
|
"SPS_Test_im_Haus_Simulation"
|
|
]
|
|
res = 0
|
|
for k in keys_hardwareplanung:
|
|
dauer = self.get_hours_of(k)
|
|
res += dauer
|
|
return res
|
|
def stunden_elektrowerkstatt(self):
|
|
keys_elektrowerkstatt = [
|
|
"Schaltschrankbau",
|
|
"Unterverteilerbau",
|
|
"Klemmkastenbau_je_2h",
|
|
"Bedientableaubau",
|
|
"Vormontage_im_Haus"
|
|
]
|
|
res = 0
|
|
for k in keys_elektrowerkstatt:
|
|
dauer = self.get_hours_of(k)
|
|
res += dauer
|
|
return res
|
|
|
|
def stunden_elektro_Landsberg(self):
|
|
return 0
|
|
|
|
#EMO
|
|
class EMO():
|
|
montagezeiten = {
|
|
"Schaltschrank_aufstellen": 6.0, #(h/St)
|
|
"Unterverteiler_montieren": 3.0, #(h/St)
|
|
"Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h)
|
|
"Pritsche_in_RSM_montieren": 21.0,
|
|
"Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor)
|
|
"Tableau_befestigen_und_anschliessen": 0.75, #(h/St)
|
|
"Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St)
|
|
"Sensoren_montieren": 0.45, #(h/St)
|
|
"Seilzugschalter_installieren": 4.0, #(h/St)
|
|
"Blitzleuchte_installieren": 0.5, #(h/St)
|
|
"Weiche_Stopper_anschliessen": 0.35, #(h/St)
|
|
"Erdung": 0.5, #(h)
|
|
}
|
|
def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]):
|
|
#für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt
|
|
self._mehraufwand = 0.1
|
|
mengen = {
|
|
"Schaltschrank_aufstellen": 0,
|
|
"Unterverteiler_montieren": 0,
|
|
"Pritsche_montieren_umbauen_demontieren": 0,
|
|
"Pritsche_in_RSM_montieren": 0,
|
|
"Motor_verdrahten_und_anschliessen": 0,
|
|
"Tableau_befestigen_und_anschliessen": 0,
|
|
"Schnittstelle_Flyer_Putzmaschine": 0,
|
|
"Sensoren_montieren": 0,
|
|
"Seilzugschalter_installieren": 0,
|
|
"Blitzleuchte_installieren": 0,
|
|
"Weiche_Stopper_anschliessen": 0,
|
|
"Erdung": 0,
|
|
}
|
|
self._Mengen = {}
|
|
self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\
|
|
hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\
|
|
hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer")
|
|
self._Mengen["Unterverteiler_montieren"] = hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac")
|
|
self._Mengen["Pritsche_montieren_umbauen_demontieren"] = hw.anzahl("kabelpritschen_leitern_200_60")
|
|
self._Mengen["Pritsche_in_RSM_montieren"] = hw.anzahl("kabelpritsche_rsm_100_60")
|
|
|
|
self._Mengen["Motor_verdrahten_und_anschliessen"] = mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0)
|
|
self._Mengen["Tableau_befestigen_und_anschliessen"] = \
|
|
hw.anzahl( "bedienstation_1fach_kpl") +\
|
|
hw.anzahl("bedienst_2fach_wechs_bcd_10f") +\
|
|
hw.anzahl("bedienstation_2fach_kpl") +\
|
|
hw.anzahl("halter_bedientableau_2fach") +\
|
|
hw.anzahl("bedienstation_3fach_kpl") +\
|
|
hw.anzahl("halter_bedientableau_3fach") +\
|
|
hw.anzahl("bedienstation_4fach_kpl") +\
|
|
hw.anzahl("halter_bedientableau_4fach") +\
|
|
hw.anzahl("bedienstation_6fach_kpl") +\
|
|
hw.anzahl("halter_bedientableau_6fach") +\
|
|
hw.anzahl("drucktaster_automatische_umfahrung")
|
|
|
|
self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\
|
|
ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser")
|
|
|
|
self._Mengen["Sensoren_montieren"] = hw.anzahl("sensorkabel_je_20m")
|
|
self._Mengen["Seilzugschalter_installieren"] = ea.anzahl("Seilzugschalter")
|
|
self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung")
|
|
self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m")
|
|
self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10
|
|
def set_mehraufwand(self, PS):
|
|
if PS > 1 or PS < 0:
|
|
raise Exception("Falsche Spanne")
|
|
self._mehraufwand = PS
|
|
def dauer_emo(self):
|
|
keys_tätigkeiten_1 = [
|
|
"Unterverteiler_montieren",
|
|
"Sensoren_montieren",
|
|
"Seilzugschalter_installieren",
|
|
"Blitzleuchte_installieren",
|
|
"Weiche_Stopper_anschliessen",
|
|
"Erdung",
|
|
"Schaltschrank_aufstellen",
|
|
"Motor_verdrahten_und_anschliessen",
|
|
"Tableau_befestigen_und_anschliessen",
|
|
"Schnittstelle_Flyer_Putzmaschine"
|
|
]
|
|
keys_1 = 0
|
|
for k in keys_tätigkeiten_1:
|
|
dauer = self.montagezeiten.get(k) * self._Mengen.get(k)
|
|
keys_1 += dauer
|
|
|
|
keys_tätigkeiten_2 = [
|
|
"Pritsche_montieren_umbauen_demontieren",
|
|
"Pritsche_in_RSM_montieren"
|
|
]
|
|
keys_2 = 0
|
|
for k in keys_tätigkeiten_2:
|
|
dauer = self._Mengen.get(k) / self.montagezeiten.get(k)
|
|
keys_2 += dauer
|
|
|
|
|
|
return math.ceil((keys_1 + keys_2))
|
|
def dauer_emo_incl_mehrauwand(self):
|
|
return (self.dauer_emo() * (1 + self._mehraufwand))
|
|
|
|
class Anschlussl():
|
|
mengen = {
|
|
#auskommentiert, was später berechnet wird
|
|
#"Anschlussspannung":400, #Volt
|
|
"Motor_Art":0.12, #kilo Watt ### dasselbe wie Antrieb? und eigtl regelmäßig oder immer anders?
|
|
#"Anzahl_Motor":48,
|
|
"Antrieb":0.12, #kilo Watt
|
|
"Strom_Motor":0.55, #Ampere
|
|
#"Summe_Strom_Motor":26.4,
|
|
#"cos_phi":0.77,
|
|
#"Versorgung_SPS_und_Peripherie":3, #Ampere
|
|
#"Summe_Strom_Motot_SPS_Peripherie":29.4, #Ampere
|
|
#GZE
|
|
#"GZE_Faktor":0.5,
|
|
#"Res_Faktor":0.1,
|
|
#Res
|
|
#gesamtstrom
|
|
#spannung
|
|
#"x_Wurzel_3":1.732
|
|
#leistung
|
|
#gesamtanschlussleistung
|
|
}
|
|
def __init__(self, anzahl:dict, mg: type[MG]):
|
|
self._GZE_Faktor = 0.5
|
|
self._Res_Faktor = 0.1
|
|
self._Anschlussspannung = 400
|
|
self._cos_phi = 0.77 ### wird nicht verwendet
|
|
self._x_Wurzel_3 = 1.732
|
|
self._Versorgung_SPS_und_Peripherie = 3
|
|
self._ANZAHL = anzahl
|
|
self._ANZAHL["Anzahl_Motor"] = mg.zusammenfassung().get("RA_uni", 0) +\
|
|
mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\
|
|
mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\
|
|
mg.zusammenfassung().get("RA_bi", 0) +\
|
|
mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\
|
|
mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\
|
|
mg.zusammenfassung().get("Doppelstreckenantrieb", 0)
|
|
self._ANZAHL["Summe_Strom_Motor"] = self.mengen.get("Strom_Motor") *\
|
|
anzahl.get("Anzahl_Motor")
|
|
self._ANZAHL["Summe_Strom_Motor_SPS_Peripherie"] = anzahl.get("Summe_Strom_Motor") +\
|
|
self._Versorgung_SPS_und_Peripherie
|
|
self._ANZAHL["GZF"] = anzahl.get("Summe_Strom_Motor") *\
|
|
self._GZE_Faktor +\
|
|
self._Versorgung_SPS_und_Peripherie
|
|
self._ANZAHL["Res"] = anzahl.get("GZF") *\
|
|
self._Res_Faktor
|
|
self._ANZAHL["Gesamtstrom"] = anzahl.get("GZF") +\
|
|
anzahl.get("Res")
|
|
self._ANZAHL["Leistung"] = self._Anschlussspannung *\
|
|
anzahl.get("Gesamtstrom") *\
|
|
self._x_Wurzel_3 / 1000
|
|
self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung")))
|
|
def set_Versorgung_SPS_und_Peripherie(self, Strom):
|
|
self._Versorgung_SPS_und_Peripherie = Strom
|
|
def set_x_Wurzel_3 (self, x):
|
|
self._x_Wurzel_3 = x
|
|
def set_cos_phi(self, cos):
|
|
self._cos_phi = cos
|
|
def set_Anschlussspannung(self, AS):
|
|
self._Anschlussspannung = AS
|
|
def set_GZE_Faktor(self, PS):
|
|
if PS > 1 or PS < 0:
|
|
raise Exception("Falsche Spanne")
|
|
self._GZE_Faktor = PS
|
|
def set_Res_Faktor(self, PS):
|
|
if PS > 1 or PS < 0:
|
|
raise Exception("Falsche Spanne")
|
|
self._Res_Faktor = PS
|
|
class Ergebnis(): ###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,
|
|
"PC_Programmierung_Visualisierung": 75,
|
|
"Montage_elektrisch": 36,
|
|
"Inbetriebnahmetest_Hardware_durch_Montage": 36,
|
|
"SPS_Inbetriebsetzung": 75,
|
|
"PC_Inbetriebsetzung": 75,
|
|
"Inbetriebnahmeunterstützung_durch_Montage": 36,
|
|
"Dokumentation": 35,
|
|
"Bedienungsanleitung_Emmert": 75,
|
|
"Schulung_vor_Ort_beim_Kunden": 36,
|
|
"Abnahme": 36,
|
|
"SPS_Anlagenbetreuung": 75,
|
|
"PC_Anlagenbetreuung": 60,
|
|
"Anlagenbetreuung_durch_Montage": 36
|
|
}
|
|
eingaben_h = {
|
|
"Pflichtenheft":0,
|
|
"SPS_Programmierung":150,
|
|
"SPS_Inbetriebsetzung":130,
|
|
"PC_Inbetriebsetzung":0,
|
|
"Schulung_vor_Ort_beim_Kunden":0,
|
|
"Abnahme":0,
|
|
"SPS_Anlagenbetreuung":0,
|
|
"PC_Anlagenbetreuung":0,
|
|
"Anlagenbetreuung_durch_Montage":0
|
|
}
|
|
def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]):
|
|
self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = 1
|
|
self._Anteil_PC_Visualisierung_an_SPS = 0.3
|
|
self._Abweichung_softwareerstellung = 0
|
|
self._Abweichung_dienstleistung_in_LL = 0
|
|
self._anzahl = anzahl_h
|
|
self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt()
|
|
self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\
|
|
hw.get_h_of("unterverteiler_fuer_1flyer") +\
|
|
hw.get_h_of("unterverteiler_fuer_2flyer") +\
|
|
hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\
|
|
hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\
|
|
hw.get_h_of("unterverteiler_fuer_puffer") +\
|
|
hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\
|
|
hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar")
|
|
self._anzahl["Dienstleistung_in_LL"] = dl.stunden_diensleistung_hardwareplanung() * (1 + self._Abweichung_dienstleistung_in_LL)
|
|
self._anzahl["Pflichtenheft"] = self.eingaben_h.get("Pflichtenheft")
|
|
self._anzahl["SPS_Programmierung"] = self.eingaben_h.get("SPS_Programmierung") * (1 + self._Abweichung_softwareerstellung)
|
|
self._anzahl["PC_Programmierung_Visualisierung"] = anzahl_h.get("SPS_Programmierung") * self._Anteil_PC_Visualisierung_an_SPS
|
|
self._anzahl["Montage_elektrisch"] = emo.dauer_emo_incl_mehrauwand()
|
|
self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch") * 0.1
|
|
self._anzahl["SPS_Inbetriebsetzung"] = self.eingaben_h.get("SPS_Inbetriebsetzung")
|
|
self._anzahl["PC_Inbetriebsetzung"] = self.eingaben_h.get("PC_Inbetriebsetzung")
|
|
self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung") * self._Anteil_Inbetriebnahmeunterstützung_durch_Montage
|
|
self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch")
|
|
self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku")
|
|
self._anzahl["Schulung_vor_Ort_beim_Kunden"] = self.eingaben_h.get("Schulung_vor_Ort_beim_Kunden")
|
|
self._anzahl["Abnahme"] = self.eingaben_h.get("Abnahme")
|
|
self._anzahl["SPS_Anlagenbetreuung"] = self.eingaben_h.get("SPS_Anlagenbetreuung")
|
|
self._anzahl["PC_Anlagenbetreuung"] = self.eingaben_h.get("PC_Anlagenbetreuung")
|
|
self._anzahl["Anlagenbetreuung_durch_Montage"] = self.eingaben_h.get("Anlagenbetreuung_durch_Montage")
|
|
def set_Abweichung_dienstleistung_in_LL(self, PS):
|
|
if PS > 1 :
|
|
raise Exception("Falsche Spanne")
|
|
self._Abweichung_dienstleistung_in_LL = PS
|
|
def set_Abweichung_softwareerstellung(self, PS):
|
|
if PS > 1:
|
|
raise Exception("Falsche Spanne")
|
|
self._Abweichung_softwareerstellung = PS
|
|
def set_Anteil_PC_Visualisierung_an_SPS(self, Anteil):
|
|
if Anteil > 1 or Anteil < 0:
|
|
raise Exception("Falsche Spanne")
|
|
self._Anteil_PC_Visualisierung_an_SPS = Anteil
|
|
def set_Anteil_Inbetriebnahmeunterstützung_durch_Montage(self, Anteil):
|
|
if Anteil > 1 or Anteil < 0:
|
|
raise Exception("Falsche Spanne")
|
|
self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = Anteil
|
|
def get_sum_of_costs(self, hw: type[HW]):
|
|
keys_costs = {
|
|
"E_Werkstatt",
|
|
"Schaltschrankbau_extern_Mehrkosten",
|
|
"Dienstleistung_in_LL",
|
|
"Pflichtenheft",
|
|
"SPS_Programmierung",
|
|
"PC_Programmierung_Visualisierung",
|
|
"Montage_elektrisch",
|
|
"Inbetriebnahmetest_Hardware_durch_Montage",
|
|
"SPS_Inbetriebsetzung",
|
|
"PC_Inbetriebsetzung",
|
|
"Inbetriebnahmeunterstützung_durch_Montage",
|
|
"Dokumentation",
|
|
"Bedienungsanleitung_Emmert",
|
|
"Schulung_vor_Ort_beim_Kunden",
|
|
"Abnahme",
|
|
"SPS_Anlagenbetreuung",
|
|
"PC_Anlagenbetreuung",
|
|
"Anlagenbetreuung_durch_Montage"
|
|
}
|
|
res = 0
|
|
for k in keys_costs:
|
|
cost = self._anzahl[k] * self.preis_kostenart_h[k]
|
|
res += cost
|
|
return (res + hw.summe_vorort() + hw.summe_in_LL())
|
|
def get_cost_of(self, partname):
|
|
return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname))
|
|
def summary_costs(self, hw):
|
|
summary = {}
|
|
keys_costs = {
|
|
"E_Werkstatt",
|
|
"Schaltschrankbau_extern_Mehrkosten",
|
|
"Dienstleistung_in_LL",
|
|
"Pflichtenheft",
|
|
"SPS_Programmierung",
|
|
"PC_Programmierung_Visualisierung",
|
|
"Montage_elektrisch",
|
|
"Inbetriebnahmetest_Hardware_durch_Montage",
|
|
"SPS_Inbetriebsetzung",
|
|
"PC_Inbetriebsetzung",
|
|
"Inbetriebnahmeunterstützung_durch_Montage",
|
|
"Dokumentation",
|
|
"Bedienungsanleitung_Emmert",
|
|
"Schulung_vor_Ort_beim_Kunden",
|
|
"Abnahme",
|
|
"SPS_Anlagenbetreuung",
|
|
"PC_Anlagenbetreuung",
|
|
"Anlagenbetreuung_durch_Montage"
|
|
}
|
|
for k in keys_costs:
|
|
cost = self._anzahl[k] * self.preis_kostenart_h[k]
|
|
summary.update({k: round(cost, 2)})
|
|
summary.update({"Installationsmaterial_vor_Ort": round(hw.summe_vorort(), 2)})
|
|
summary.update({"Material_in_LL": round(hw.summe_in_LL(), 2)})
|
|
summary.update({"GESAMT": round(self.get_sum_of_costs(hw), 2)})
|
|
print(summary)
|
|
|
|
class TestObjectMethods(unittest.TestCase):
|
|
|
|
def test_eas(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)
|
|
|
|
# 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(), 152)
|
|
self.assertEqual(eas.gesamt_A(), 216)
|
|
|
|
self.assertEqual(eas.gesamt_E_incl_reserve(), 160)
|
|
self.assertEqual(eas.gesamt_A_incl_reserve(), 227)
|
|
|
|
self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0))
|
|
(eingänge, ausgänge) = eas.Anzahl_notwendigen_Siemens_EAKarten()
|
|
self.assertEqual(eingänge, 5)
|
|
self.assertEqual(ausgänge, 7)
|
|
|
|
(eingänge, ausgänge) = eas.Anzahl_Siemens_EAKarten_incl_reserve()
|
|
self.assertEqual(eingänge, 5)
|
|
self.assertEqual(ausgänge, 8)
|
|
|
|
|
|
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,
|
|
}
|
|
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)
|
|
self.assertEqual(hw.anzahl("sps_simatic_s7_cpu315_2_pn_dp"), 0)
|
|
self.assertEqual(hw.anzahl("speicherkarte_fuer_sps_512_kb"), 0)
|
|
self.assertEqual(hw.anzahl("sps_simatic_s7_cpu317_2_pn_dp"), 0)
|
|
self.assertEqual(hw.anzahl("speicherkarte_fuer_sps2_mb"), 0)
|
|
self.assertEqual(hw.anzahl("sps_simatic_s7_1515_2"), 1)
|
|
self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 0)
|
|
self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0)
|
|
self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0)
|
|
self.assertEqual(hw.anzahl("memory_card_256_mb"), 1)
|
|
self.assertEqual(hw.anzahl("memory_card_2_gb"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 1)
|
|
self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1)
|
|
self.assertEqual(hw.anzahl("abgang_400v"), 0)
|
|
self.assertEqual(hw.anzahl("abgang_24_v"), 0)
|
|
self.assertEqual(hw.anzahl("anlagenrechner"), 1)
|
|
self.assertEqual(hw.anzahl("anlagenrechner_ohne_bildschirm"), 0)
|
|
self.assertEqual(hw.anzahl("pulteinbau_monitor_srline_rflat_24fhd"), 0)
|
|
self.assertEqual(hw.anzahl("kurzhubtastatur_kbt06_mit_touchpad_uslayout"), 0)
|
|
self.assertEqual(hw.anzahl("netzwerk_display_adapter_lindy"), 0)
|
|
self.assertEqual(hw.anzahl("zusaetzlicher_bildschirm"), 0)
|
|
self.assertEqual(hw.anzahl("schaltschrank"), 1)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_1neuenhauser_pm"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer"), 2)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_puffer"), 1)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_5_rsm_fa"), 2)
|
|
self.assertEqual(hw.anzahl("korrektur_5_rsm_zusaetzlich_im_unterverteiler"), -1)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_10_rsm_fa"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_10_rsm_zusaetzlich_im_unterverteiler"), -2)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_3_rsm_zusaetzlich_im_unterverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_4_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_4_rsm_zusaetzlich_im_unterverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_12_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_12_rsm_zusaetzlich_im_unterverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("unterverteiler_fuer_8_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("busverteiler_6_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_6_rsm_zusaetzlich_im_busverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("busverteiler_8_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_8_rsm_zusaetzlich_im_busverteiler"), 0)
|
|
self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 4)
|
|
self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 44)
|
|
self.assertEqual(hw.anzahl("antrieb_unidirektional_schuetz"), 0)
|
|
self.assertEqual(hw.anzahl("antrieb_bidirektional_schuetz"), 0)
|
|
self.assertEqual(hw.anzahl("motorschutzschalter"), 0)
|
|
self.assertEqual(hw.anzahl("wendeschuetzschaltung"), 0)
|
|
self.assertEqual(hw.anzahl("frequenzumrichter"), 0)
|
|
self.assertEqual(hw.anzahl("bedienstation_1fach_kpl"), 14)
|
|
self.assertEqual(hw.anzahl("bedienst_2fach_wechs_bcd_10f"), 0)
|
|
self.assertEqual(hw.anzahl("bedienstation_2fach_kpl"), 10)
|
|
self.assertEqual(hw.anzahl("halter_bedientableau_2fach"), 10)
|
|
self.assertEqual(hw.anzahl("bedienstation_3fach_kpl"), 0)
|
|
self.assertEqual(hw.anzahl("halter_bedientableau_3fach"), 0)
|
|
self.assertEqual(hw.anzahl("bedienstation_4fach_kpl"), 0)
|
|
self.assertEqual(hw.anzahl("halter_bedientableau_4fach"), 0)
|
|
self.assertEqual(hw.anzahl("bedienstation_6fach_kpl"), 0)
|
|
self.assertEqual(hw.anzahl("halter_bedienstation_6fach"), 0)
|
|
self.assertEqual(hw.anzahl("drucktaster_automatische_umfahrung"), 0)
|
|
self.assertEqual(hw.anzahl("halter_fuer_drucktaster"), 0)
|
|
self.assertEqual(hw.anzahl("ET200_SP"), 1)
|
|
self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 7)
|
|
self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_de"), 31)
|
|
self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_de"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_de"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_do"), 33)
|
|
self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_do"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_do"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen"), 14)
|
|
self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"), 0)
|
|
self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"), 50)
|
|
self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last"), -1)
|
|
self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last"), -15)
|
|
self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt"), 1)
|
|
self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt"), 0)
|
|
self.assertEqual(hw.anzahl("SLIO"), 0)
|
|
self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0)
|
|
self.assertEqual(hw.anzahl("slio_eingangskarte_4_de"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_4_de"), 0)
|
|
self.assertEqual(hw.anzahl("slio_eingangskarte_8_de"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_8_de"), 0)
|
|
self.assertEqual(hw.anzahl("slio_ausgangskarte_4_do"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_4_do"), 0)
|
|
self.assertEqual(hw.anzahl("slio_ausgangskarte_8_do"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_8_do"), 0)
|
|
self.assertEqual(hw.anzahl("slio_power_modul"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_power_modul"), 0)
|
|
self.assertEqual(hw.anzahl("slio_4_x_dc_24v_4_x_dc_0v"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v"), 0)
|
|
self.assertEqual(hw.anzahl("slio_8_x_dc_24v"), 0)
|
|
self.assertEqual(hw.anzahl("slio_8_x_dc_0v"), 0)
|
|
self.assertEqual(hw.anzahl("korrektur_slio_8_x_dc_0v"), 0)
|
|
self.assertEqual(hw.anzahl("movimot_fu_mit_anschaltung"), 0)
|
|
self.assertEqual(hw.anzahl("sensor_optisch_traverse"), 68)
|
|
self.assertEqual(hw.anzahl("sensorhalter_ohne_sensor"), 0)
|
|
self.assertEqual(hw.anzahl("reflexionslichtschranke_rsm_direct"), 0)
|
|
self.assertEqual(hw.anzahl("stoppersensor_induktiv_mit_halter"), 4)
|
|
self.assertEqual(hw.anzahl("sensor_spulenpruefung_voll_leer"), 0)
|
|
self.assertEqual(hw.anzahl("seilzugschalter"), 0)
|
|
self.assertEqual(hw.anzahl("seil_fuer_seilzugschalter"), 0)
|
|
self.assertEqual(hw.anzahl("blitzleuchte"), 6)
|
|
self.assertEqual(hw.anzahl("spulenumsetzstation"), 0)
|
|
self.assertEqual(hw.anzahl("sensorkabel_je_20m"), 78)
|
|
self.assertEqual(hw.anzahl("stopper_weichenkabel_je_5m"), 67)
|
|
self.assertEqual(hw.anzahl("motorkabel_je_30m"), 48)
|
|
self.assertEqual(hw.anzahl("kabelpritschen_leitern_200_60"), 348)
|
|
self.assertEqual(hw.anzahl("kabelpritsche_rsm_100_60"), 0)
|
|
self.assertEqual(hw.anzahl("kabelpritsche_rsm_50_35"), 0)
|
|
self.assertEqual(hw.anzahl("klemmkasten_rsm"), 2)
|
|
self.assertEqual(hw.anzahl("klemmkasten_direct_in_rsm"), 0)
|
|
self.assertEqual(hw.anzahl("erdung"), 29)
|
|
self.assertEqual(hw.anzahl("kleinteile_rohre_schellen_kabelbinder_ect"), 1.5)
|
|
self.assertEqual(hw.anzahl("kabel_fuer_klemmkasten_und_bts_60m"), 20)
|
|
self.assertEqual(hw.anzahl("kabel_fuer_1fach_bts_zug_wechseln"), 14)
|
|
self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac"), 5)
|
|
self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), -1)
|
|
self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), -6)
|
|
self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 5)
|
|
self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 0)
|
|
self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"), 0)
|
|
self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"), 2)
|
|
self.assertEqual(hw.anzahl("profinetkabel"), 5)
|
|
self.assertEqual(hw.anzahl("korrektur_profinetkabel"), 0)
|
|
self.assertEqual(hw.anzahl("schnittstellen_8x1mm2_30m"), 4)
|
|
|
|
self.assertEqual(hw.summe_vorort(), 19923.6)
|
|
self.assertAlmostEqual(hw.summe_gesamt(), 47167.04)
|
|
self.assertEqual(hw.summe_in_LL(), 27243.44)
|
|
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 = EMO(eas, hw, mg)
|
|
self.assertAlmostEqual(emo.dauer_emo(), 241)
|
|
self.assertAlmostEqual(emo.dauer_emo_incl_mehrauwand(), 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_diensleistung_hardwareplanung(), 225.1)
|
|
self.assertEqual(dl.stunden_elektrowerkstatt(), 196.83333333333333333333333333)
|
|
self.assertEqual(dl.summe_stunden_dienstleistung_in_landsberg(), 421.9333333333333333333)
|
|
self.assertEqual(dl.get_hours_of("Pflichtenheft_Autom_Schnittstellen"), 0)
|
|
self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 41.75)
|
|
self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 100.2)
|
|
self.assertEqual(dl.get_hours_of("Projektkoordination"), 25.05)
|
|
self.assertEqual(dl.get_hours_of("Materialdispo"), 33.4)
|
|
self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 8.35)
|
|
self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 8.35)
|
|
self.assertEqual(dl.get_hours_of("PC_Installation"), 8)
|
|
self.assertEqual(dl.get_hours_of("Oberfläche_Simulation"), 0)
|
|
self.assertEqual(dl.get_hours_of("SPS_Test_im_Haus_Simulation"), 0)
|
|
self.assertEqual(dl.get_hours_of("Bedienerhandbuch"), 16)
|
|
self.assertEqual(dl.get_hours_of("SPS_Doku"), 15)
|
|
self.assertEqual(dl.get_hours_of("PC_Doku"), 0)
|
|
self.assertEqual(dl.get_hours_of("Schaltschrankbau"), 88)
|
|
self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 94)
|
|
self.assertEqual(dl.get_hours_of("Klemmkastenbau_je_2h"), 4)
|
|
self.assertEqual(dl.get_hours_of("Bedientableaubau"), 10.833333333333333)
|
|
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)
|
|
Anzahl_AL ={}
|
|
al = Anschlussl(Anzahl_AL, mg)
|
|
self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 48)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 26.4)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 29.4)
|
|
self.assertAlmostEqual(al._ANZAHL.get("GZF"), 16.2)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Res"), 1.62)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 17.82)
|
|
self.assertAlmostEqual(al._Anschlussspannung, 400)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 12.345696)
|
|
self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 13)
|
|
|
|
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 = 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"), 6298.6666666666667)
|
|
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"), 11250)
|
|
self.assertEqual(erg.get_cost_of("PC_Programmierung_Visualisierung"), 3375)
|
|
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), 104833.16666666666)
|
|
erg.summary_costs(hw)
|
|
|
|
def test_Unittests():
|
|
unittest.main()
|
|
|
|
if __name__ == '__main__':
|
|
test_Unittests()
|