Files
Rieter-EKalk/rieter_ekalk.py
T

2949 lines
148 KiB
Python

#from distutils.log import debug
from logging import raiseExceptions
import math
import sys
#from pickle import FALSE
import unittest
import json
JSON_IDENT =5
# Press Umschalt+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
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) < 3:
raise Exception("mind. 2 Strecken sollten existieren")
# Bypass, wenn mindestens 2 Flyer oder 2 RSM
# Turm: kein Kriterium
self._RSM_Anzahl = deckblatt.get("RSM", 0)
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", "")
self._rsm_direct = RSM_direct({})
self._rsm_fa = RSM_FA({})
if (system.lower() == "direct"):
self._rsm_direct = RSM_direct(rsm_direct_mengen)
elif (system.lower() == "fa"):
self._rsm_fa = RSM_FA(rsm_fa_mengen)
self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen)
self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen)
self._flyer = Flyer_EJet(flyer_mengen)
self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen)
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,
}
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) #TODO: ist "Weiche_Gemeinsame_Rückstellung" == "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._flyer_f40._Mengen.get("RA_uni", 0)
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("RA_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)
return zmengen
# Klasse zur Vererbung an alle Elemente aus denen die Halle besteht
class Item():
def anzahl(self, partname):
return self._Mengen.get(partname, 0)
def tojson(self):
return json.dumps(self._Mengen)
def mengengeruest(self):
return self._Mengen
# RSM_direct:
class RSM_direct(Item):
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)
# RSM_FA:
class RSM_FA(Item):
def __init__(self, anzahl:dict):
mengen = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
"Anzahl_RSM":0,
#"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert
"Flex_A_Premium":False,
"Getriebe_in_der_Mitte":False,
"RSM_Einfahrt_Ein_Beidseitig":False,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_zusätzlich":0,
#"Bedientableau_1fach":0,
"Bedientableau_1fach_Korrektur":0,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"RRA_bi":0,
"RRA_bi_Korrektur":0,
"RRA_bi_auf_Haupstrecke":0,
#"RRA_bi_ohne_SPS_Ansteuerung":0,
"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,
}
self._Mengen = {}
self._RSM_Anzahl = anzahl.get("Anzahl_RSM", 0)
self._Mengen["Anzahl_RSM"] = self._RSM_Anzahl
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"] = self._RSM_Anzahl*(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"] = self._RSM_Anzahl*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0)
self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0)
self._Mengen["Bedientableau_2fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0)
self._Mengen["Bedientableau_2fach_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"] = self._RSM_Anzahl * (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"] = self._RSM_Anzahl * (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)
if self.flex_a_premium():
self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = self._RSM_Anzahl * 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"] = self._RSM_Anzahl * (seilzfaktor_premium + seilzfaktor_getriebe_mitte)
if self.flex_a_premium():
self._Mengen["Mit_Drucktaster"] = self._RSM_Anzahl * 8
else:
self._Mengen["Mit_Drucktaster"] = 0
self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0)
self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
def flex_a_premium(self):
return self._Mengen.get("Flex_A_Premium", False)
# Flyer_F40_(Electrojet)_incl._Putzmaschine:
class Flyer_F40_EJet_inc_Putz(Item):
def __init__(self, anzahl:dict):
mengen = {
#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,
}
self._Mengen = {}
self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\
anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0)
self._Mengen["Anzahl"] = self._Flyer_Anzahl
self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\
anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0)
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0)
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0)
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0)
self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0)
self._Mengen["Single_Line_Durchfahrt"] = anzahl.get("Single_Line_Durchfahrt", False)
self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False)
sensorfaktor_nachpuffer = 7
if (anzahl.get("Nachpuffer", False)):
sensorfaktor_nachpuffer = 5
self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0)
self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0)
self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 2 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0)
self._Mengen["Sensor_induktiv_Spulenhalter_Korrektur"] = anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0)
self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0)
self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0)
self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl + anzahl.get("Interface_Doffer_Korrektur", 0)
self._Mengen["Interface_Doffer_Korrektur"] = anzahl.get("Interface_Doffer_Korrektur", 0)
self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0) + anzahl.get("Weiche_Korrektur", 0) + anzahl.get("Wechsel", 0)
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
if (anzahl.get("Single_Line_Durchfahrt", False)):
self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl + anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0)
else:
self._Mengen["Weiche_nach_Flyer_bipolar"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0)
self._Mengen["Weiche_nach_Flyer_bipolar_Korrektur"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0)
self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0)
self._Mengen["Wechsel"] = anzahl.get("Wechsel", 0)
self._Mengen["Stopper"] = anzahl.get("Stopper", 0)
self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0)
rraunifaktor_durchfahrt = 0
rraunifaktor_nachpuffer = 1
if (anzahl.get("Single_Line_Durchfahrt", False)):
rraunifaktor_durchfahrt = 1
if (anzahl.get("Nachpuffer", False)):
rraunifaktor_nachpuffer = 0
self._Mengen["RA_uni_abhebbar"] = self._Flyer_Anzahl * (rraunifaktor_durchfahrt + rraunifaktor_nachpuffer) + anzahl.get("RA_uni_abhebbar_Korrektur", 0)
self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0)
if (anzahl.get("Single_Line_Durchfahrt", False)):
self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl
else:
self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0)
self._Mengen["RA_uni_ohne_SPS_Ansteuerung_Korrektur"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0)
if (anzahl.get("Single_Line_Durchfahrt", False)):
self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl
else:
self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
self._Mengen["RRA_BI_abhebbar_Korrektur"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0)
self._Mengen["RRA_bi"] = anzahl.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"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0)
self._Mengen["RA_bi_abhebbar_unger_Schiene"] = anzahl.get("RA_bi_abhebbar_unger_Schiene", 0)
self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
# Putzmaschine_(Neuenhauser):
class Putzmaschine_Neuenhauser(Item):
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)
# Flyer_(Electrojet):
class Flyer_EJet(Item):
def __init__(self, anzahl:dict):
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,
}
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)
# Verbindungsstrecken/_Wechsel:
class Verbindungsstrecken_Wechsel(Item):
def __init__(self, anzahl:dict):
mengen = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
"Sensor_optisch_Traverse":0,
"Bedientableau_1fach":0,
"Bedientableau_2fach":0,
"Bedientableau_14fach":0,
"Weiche":0,
"Dreifachweiche":0,
"Kreuzungsweiche":0,
"Werma_Rundumleuchte_Störung":0,
"RA_uni":0,
"RA_uni_ohne_SPS_Ansteuerung":0,
"RA_bi":0,
"RA_bi_ohne_SPS-Ansteuerung":0,
"Doppelstreckenantrieb":0
}
self._Mengen = {}
self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Sensor_optisch_Traverse", 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"] = anzahl.get("Weiche", 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)
# Puffer
class Puffer(Item):
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,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":0,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":0,
}
self._Mengen = {}
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"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2)
self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
# Turm
class Turm(Item):
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
class EA():
def __init__(self, anzahl:dict, mg: type[MG]):
# Eingänge und Ausgänge jeder Hardwareeinheit
self.EAs = {
# # Bedienelemente_Steuerschrank
# "Drucktaster_Anlage_AUS": (1, 0),
# "Leuchtdrucktaster_Anlage_EIN": (1, 1),
# "Leuchtdrucktaster_Start_nach_Stoerung": (1, 1),
# "Leuchtdrucktaster_Laufzeitfehler": (1, 1),
# "Drucktaster_Lampentest": (1, 0),
# "Sammeleingang_Ueberstrom": (5, 1),
# "Sammeleingang_Not_Aus": (2, 1),
# "Sammeleingang_Druckluft_fehlt": (1, 1),
# "Drucktaster_Reset": (1, 0),
# "Sammeleingang_Antriebe_abheben": (1, 2),
# "Reserve": (9, 7),
"Bedienelemente_Steuerschrank": (24, 16),
# Bedienstation,
"bedienstation_1fach_Not_Aus": (1, 1),
"bedienstation_einfach_Zug_Wechseln": (1, 1),
"bedienstation_automatische_Umfahrung": (1, 1),
"bedienstation_zweifach_Wechs_BCD_10f": (5, 1),
"bedienstation_zweifach_Not_Aus_Reset": (2, 2),
"bedienst_dreifach": (3, 3),
"bedienst_vierfach": (4, 4),
"bedienst_sechsfach": (6, 6),
"EAs_Unterverteiler_direct": (7, 6),
# Ermittlung_Mengengeruest_Anzahl,
"Sensor_Traversenabfrage_optisch": (1, 0),
"Reflexionslichtschranke_RSM_DIRECT": (1, 0),
"Sensor_Stopper_induktiv": (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_Flyer_Putzmaschine_ElectroJet": (2, 2),
"Schnittstelle_Flyer_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"] = 1 # es gibt immer genau einen Steuerschrank
zmengen = mg.zusammenfassung()
self._Anzahl["bedienstation_einfach_Zug_Wechseln"] = zmengen.get("Bedientableau_1fach", 0)
self._Anzahl["bedienstation_automatische_Umfahrung"] = math.ceil(zmengen.get("Drucktaster_automatische_Umfahrung", 0)/4) # TODO warum durch 4?
self._Anzahl["bedienstation_zweifach_Wechs_BCD_10f"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct")
self._Anzahl["bedienstation_zweifach_Not_Aus_Reset"] = zmengen.get("Bedientableau_2fach", 0)
# self._Anzahl["bedienst_dreifach"] = zmengen.get(, 0) # Eingaben
# self._Anzahl["bedienst_vierfach"] = zmengen.get(, 0)
# self._Anzahl["bedienst_sechsfach"] = zmengen.get(, 0)
self._Anzahl["EAs_Unterverteiler_direct"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct")
# Ermittlung_Mengengeruest_Anzahl
self._Anzahl["Sensor_Traversenabfrage_optisch"] = zmengen.get("Sensor_optisch_Traverse", 0) + zmengen.get("Sensor_Spulenprüfung_voll_leer", 0)
self._Anzahl["Reflexionslichtschranke_RSM_DIRECT"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse")
self._Anzahl["Sensor_Stopper_induktiv"] = zmengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung", 0)
self._Anzahl["Seilzugschalter"] = zmengen.get("Seilzugsschalter", 0)
self._Anzahl["Weiche"] = zmengen.get("Weiche", 0)
self._Anzahl["Weiche_nach_PM_bipolar"] = zmengen.get("Weiche_nach_PM_bipolar", 0)
# self._Anzahl["gemeinsame_Weichenrueckstellung"] = zmengen.get(, 0) # Eingabe
self._Anzahl["Dreifach_Weiche_DIRECT"] = zmengen.get("Dreifachweiche", 0)
self._Anzahl["Kreuzungsweiche"] = mg.get_value_of_object("verbindungsstrecken_wechsel", "Kreuzungsweiche")
self._Anzahl["Stopper"] = zmengen.get("Stopper", 0)
self._Anzahl["Ventil_RA_3_2_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) +\
zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0)+\
zmengen.get("RA_bi_abhebbar", 0) +\
self._Anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0)
# + zmengen.get("", 0) # TODO B65 ist immer 0; Vorgabe?
self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = zmengen.get("Doppelstreckenantrieb", 0)
self._Anzahl["Blitzleuchte_Stoerung"] = zmengen.get("Werma_Rundumleuchte_Störung", 0)
self._Anzahl["Schnittstelle_Flyer_ElectroJet"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + \
mg.get_value_of_object("flyer_ejet", "Interface_Doffer")
# TODO die Referenz von MG B89 ist eine Leerzeile -> 79
# self._Anzahl["Schnittstelle_Flyer_Putzmaschine_ElectroJet"] = zmengen.get(, 0) # TODO ist leer
self._Anzahl["Schnittstelle_Flyer_Neuhauser"] = mg.get_value_of_object("putzmaschine_neuenhauser", "Interface_Putzmaschine")
self._Anzahl["FEldbux_UV_EinAusgang"] = mg.get_value_of_object("rsm_fa", "Meldelampe_Überstrom") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Meldelampe_Überstrom") + \
mg.get_value_of_object("putzmaschine_neuenhauser", "Meldelampe_Überstrom") + \
mg.get_value_of_object("flyer_ejet", "Meldelampe_Überstrom")
self._Anzahl["RA_unidirektional"] = zmengen.get("RA_uni", 0)
self._Anzahl["RA_unidirektional_abhebbar"] =zmengen.get("RA_uni_abhebbar", 0)
# self._Anzahl["RA_unidirektional_mit_gemeinsamer_Wendung"] = zmengen.get(, 0) # TODO immer 0
self._Anzahl["RA_unidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0)
self._Anzahl["RA_bidirektional"] = zmengen.get("RA_bi", 0)
self._Anzahl["RA_bidirektional_abhebbar"] = zmengen.get("RA_bi_abhebbar", 0)
# self._Anzahl["RA_bidirektional_abhebbar_gemeinsWend"] = zmengen.get(, 0) # TODO wird nicht befüllt
self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0)
# self._Anzahl["RA_in_RSM_bidirektional"] = zmengen.get(, 0) # TODO immer 0
self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0)
# self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = zmengen.get(, 0) # TODO immer 0
# self._Anzahl["gemeinsame_Wendung"] = zmengen.get(, 0) # TODO immer 0
# self._Anzahl["Frequenzumrichter"] = zmengen.get(, 0) # TODO immer 0
def getE(self, partname):
return self.EAs[partname][0]
def getA(self, partname):
return self.EAs[partname][1]
def anzahl(self, partname):
return self._Anzahl.get(partname, 0)
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 __repr__(self):
return repr(self._Anzahl)
def gesamt_E(self):
res = 0
self.EAs
for k,n in self._Anzahl.items():
res += self.EAs[k][0] * n
return res
def gesamt_A(self):
res = 0
for k,n in self._Anzahl.items():
res += self.EAs[k][1] * n
return res
class HW():
mengen = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
"schaltschrankgehaeuse_b1x800_zubehoer": 0,
"schaltschrankgehaeuse_b2x800_zubehoer": 0,
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 0,
"sps_simatic_s7_cpu315_2_pn_dp": 0,
"speicherkarte_fuer_sps_512_kb": 0,
"comfort_panel_tp_900_mit_pn": 0,
"sps_simatic_s7_cpu317_2_pn_dp": 0,
"speicherkarte_fuer_sps2_mb": 0,
"sps_simatic_s7_1513_1": 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
"memory_card_2_gb":0,
"et200_sp_ea_ebene":0,
"netzwerk_fernwartung":0,
"abgang_400v":0,
"abgang_24_v":0,
"anlagenrechner":0,
"zusaetzlicher_bildschirm":0,
#"unterverteiler_fuer_1neuenhauser_pm":0,
"unterverteiler_fuer_1flyer":0,
"unterverteiler_fuer_2flyer":0,
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":0,
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":0,
"unterverteiler_fuer_puffer":0,
"unterverteiler_fuer_5_rsm_fa":0,
"korrektur_1_rsm_zusaetzlich_im_unterverteiler":0,
"unterverteiler_fuer_10_rsm_fa":0,
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0,
"korrektur_3_rsm_zusaetzlich_im_unterverteiler":0,
"unterverteiler_fuer_4_rsm_direct":0,
"korrektur_4_rsm_zusaetzlich_im_unterverteiler":0,
"unterverteiler_fuer_12_rsm_direct":0,
"korrektur_12_rsm_zusaetzlich_im_unterverteiler":0,
"unterverteiler_fuer_8_rsm_direct":0,
"korrektur_8_rsm_zusaetzlich_im_unterverteiler":0,
"busverteiler_6_rsm_direct":0,
"korrektur_6_rsm_zusaetzlich_im_unterverteiler":0,
"busverteiler_8_rsm_direct":0,
"korrektur_8_rsm_zusaetzlich_im_unterverteiler":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,
"bedienstation_3fach_kpl":0,
"bedienstation_4fach_kpl":0,
"bedienstation_10fach_kpl":0,
"drucktaster_automatische_umfahrung":0,
"halter_fuer_drucktaster":0,
# summe_bedienstationen
# bis:0,
"sps_hardware_siemens_s7":0,
"s7_1500_cpu_1515_2_pn_mit_ethernet":0,
"s7_1500_cpu_1517_3_pn_dp_mit_ethernet":0,
"s7_1500_mmc_12mb_":0,
"simatic_pn_pn_coupler_6es7158_3ad10_0xa0_+_busadapter_ba_2xrj45":0,
"_et200_mp_im155_5_pn":0,
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0,
"profinetstrecker_je_1st_cpu_und_im153":0,
"s7_1500_eingangskarte_sm_321_16de":0,
"s7_1500_ausgangskarte_sm_322_16da":0,
"s7_1500_eingangskarte_sm_321_32de":0,
"s7_1500_ausgangskarte_sm_322_32da":0,
# _summe_sps_hardware
# ET200_SP
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0,
"et200_sp_eingangskarte_8_de":0,
"et200_sp_eingangskarte_16_de":0,
"et200_sp_eingangskarte_8_do":0,
"et200_sp_eingangskarte_16_do":0,
"et200_sp_base_unit_neue_last":0,
"et200_sp_base_unit_links_gebrueckt":0,
"et200_sp_base_unit_neue_last":0,
"et200_sp_base_unit_links_gebrueckt":0,
# SLIO
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0,
"slio_eingangskarte_4_de":0,
"slio_eingangskarte_8_de":0,
"slio_ausgangskarte_4_do":0,
"slio_ausgangskarte_8_do":0,
"slio_power_modul":0,
"slio_4_x_dc_24v_4_x_dc_0v":0,
"slio_8_x_dc_24v":0,
"slio_8_x_dc_0v":0,
# Summe_material_in_ll
# 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":0,
"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":0,
"kabel_fuer_klemmkasten_und_bts_60m":0,
"zuleitung_75_m_unterverteiler_4x4mm2_400vac":0,
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0,
"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,
"schnittstellen_8x1mm2_30m":0,
}
# Einzelteilpreise in €
ep = {
# Schaltschrank Einzelpreis
"schaltschrankgehaeuse_b1x800_zubehoer": 2000, #
"schaltschrankgehaeuse_b2x800_zubehoer": 4157, # 790821101
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5135, # 790821102
"sps_simatic_s7_cpu315_2_pn_dp": 1880, # 708003004
"speicherkarte_fuer_sps_512_kb": 150, # 708003012
"comfort_panel_tp_900_mit_pn": 1486, # 708001102
"sps_simatic_s7_cpu317_2_pn_dp": 3324, # 708003007
"speicherkarte_fuer_sps2_mb": 215, # 708003027
"sps_simatic_s7_1513_1": 1143, # 790008100
"sps_simatic_s7_1515_2": 1927, # 790008100
"sps_simatic_s7_1517_3": 3828, # 790008101
"sps_simatic_s7_1518_4": 5402, # 6ES7518-4AP00-0AB0
"sps_et200_1512sp": 623, # 709000003
"memory_card_256_mb": 250, # 708015093
"memory_card_2_gb": 474, # 708015094
"et200_sp_ea_ebene": 0, # 790009001
"netzwerk_fernwartung": 750, # 790011001
"abgang_400v": 250, # ----
"abgang_24_v": 250, # ----
#
"anlagenrechner": 1657, # 790011000
"zusaetzlicher_bildschirm": 750, #
# _summe_schaltschrank
"unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210
"unterverteiler_fuer_1flyer": 1000, # 790820207_A
"unterverteiler_fuer_2flyer": 400, # 790820209_A
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 700, # 790820210
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1100, # 790820210
"unterverteiler_fuer_puffer": 700, # 790820210_F
"unterverteiler_fuer_5_rsm_fa": 700, # 790820210_D
# korrektur_1_rsm_zusaetzlich_im_unterverteiler
"unterverteiler_fuer_10_rsm_fa": 800, # 790820210_F
#
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C
# korrektur_3_rsm_zusaetzlich_im_unterverteiler
"unterverteiler_fuer_4_rsm_direct": 5027, # 790820300
# korrektur_4_rsm_zusaetzlich_im_unterverteiler
"unterverteiler_fuer_12_rsm_direct": 7930, # 790820302
# korrektur_12_rsm_zusaetzlich_im_unterverteiler
"unterverteiler_fuer_8_rsm_direct": 6322, # 790820301
# korrektur_8_rsm_zusaetzlich_im_unterverteiler
"busverteiler_6_rsm_direct": 1818, # 790801002
# korrektur_6_rsm_zusaetzlich_im_unterverteiler
"busverteiler_8_rsm_direct": 1818, # 790801001
# korrektur_8_rsm_zusaetzlich_im_unterverteiler
"antrieb_unidirektional_halbleiter": 75,
"antrieb_bidirektional_halbleiter": 90,
"antrieb_unidirektional_schuetz": 0,
"antrieb_bidirektional_schuetz": 0,
"motorschutzschalter": 0,
"wendeschuetzschaltung": 75,
"frequenzumrichter": 250,
# summe_motorstarter
"bedienstation_1fach_kpl": 51,
"bedienst_2fach_wechs_bcd_10f": 90,
"bedienstation_2fach_kpl": 92, # 790002021_A
"bedienstation_3fach_kpl": 104,
"bedienstation_4fach_kpl": 116,
"bedienstation_10fach_kpl": 380,
"drucktaster_automatische_umfahrung": 28,
"halter_fuer_drucktaster": 33,
# summe_bedienstationen
# bis: 1.000 E_A
"sps_hardware_siemens_s7": 1500,
"s7_1500_cpu_1515_2_pn_mit_ethernet": 1607,
"s7_1500_cpu_1517_3_pn_dp_mit_ethernet": 3366,
"s7_1500_mmc_12mb_": 205,
"simatic_pn_pn_coupler_6es7158_3ad10_0xa0_+_busadapter_ba_2xrj45": 354,
"_et200_mp_im155_5_pn": 169,
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 176,
"profinetstrecker_je_1st_cpu_und_im153": 12,
"s7_1500_eingangskarte_sm_321_16de": 146,
"s7_1500_ausgangskarte_sm_322_16da": 135,
"s7_1500_eingangskarte_sm_321_32de": 221,
"s7_1500_ausgangskarte_sm_322_32da": 269,
# _summe_sps_hardware
# ET200_SP
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 185, # 709000006
"et200_sp_eingangskarte_8_de": 30, # 709000021
"et200_sp_eingangskarte_16_de": 54, # 709000022
"et200_sp_eingangskarte_8_do": 45, # 709000031_A
"et200_sp_eingangskarte_16_do": 62, # 709000032
"et200_sp_base_unit_neue_last": 20, # 709000014
"et200_sp_base_unit_links_gebrueckt": 13, # 709000015
"et200_sp_base_unit_neue_last": 17, # 709000011
"et200_sp_base_unit_links_gebrueckt": 10, # 709000010
# SLIO
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 155, # 709000500
"slio_eingangskarte_4_de": 25, # 709000510
"slio_eingangskarte_8_de": 33, # 709000511
"slio_ausgangskarte_4_do": 30, # 709000021
"slio_ausgangskarte_8_do": 36, # 709000021
"slio_power_modul": 18, # 709000014
"slio_4_x_dc_24v_4_x_dc_0v": 13, # 709000015
"slio_8_x_dc_24v": 13, # 709000011
"slio_8_x_dc_0v": 13, # 709000010
# Summe_material_in_ll
# MATERIAL VOR ORT
"movimot_fu_mit_anschaltung": 550,
"sensor_optisch_traverse": 25, # 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": 20, # 722001xxx
"stopper_weichenkabel_je_5m": 15, # 722001xxx
"motorkabel_je_30m": 23,
"kabelpritschen_leitern_200_60": 12,
"kabelpritsche_rsm_100_60": 11, # 715000020
"kabelpritsche_rsm_50_35": 7, # 715003010
"klemmkasten_rsm": 120,
"klemmkasten_direct_in_rsm": 97, # 790000703
"erdung": 9,
"kleinteile_rohre_schellen_kabelbinder_ect": 500,
"kabel_fuer_klemmkasten_und_bts_60m": 37,
"zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146,
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450,
"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 250,
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145,
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136,
"profinetkabel": 42,
"schnittstellen_8x1mm2_30m": 25,
}
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",
"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",
"schnittstellen_8x1mm2_30m"
]
def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]):
self._anzahl = anzahl
self._anzahl["schaltschrankgehaeuse_b1x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x800_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b2x800_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0)
self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps_512_kb"] = anzahl.get("speicherkarte_fuer_sps_512_kb", 0)
self._anzahl["comfort_panel_tp_900_mit_pn"] = anzahl.get("comfort_panel_tp_900_mit_pn", 0)
self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps2_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb", 0)
self._anzahl["sps_simatic_s7_1513_1"] = anzahl.get("sps_simatic_s7_1513_1", 0)
self._anzahl["sps_simatic_s7_1515_2"] = anzahl.get("sps_simatic_s7_1515_2", 0)
self._anzahl["sps_simatic_s7_1517_3"] = anzahl.get("sps_simatic_s7_1517_3", 0)
self._anzahl["sps_simatic_s7_1518_4"] = anzahl.get("sps_simatic_s7_1518_4", 0)
self._anzahl["sps_et200_1512sp"] = anzahl.get("sps_et200_1512sp", 0)
self._anzahl["memory_card_256_mb"] = self._anzahl["speicherkarte_fuer_sps2_mb"] + \
self._anzahl["sps_simatic_s7_1513_1"] + \
self._anzahl["sps_simatic_s7_1515_2"] + \
self._anzahl["sps_simatic_s7_1517_3"] + \
self._anzahl["sps_simatic_s7_1518_4"]
self._anzahl["memory_card_2_gb"] = self._anzahl.get("sps_simatic_s7_1518_4", 0)
self._anzahl["et200_sp_ea_ebene"] = anzahl.get("et200_sp_ea_ebene", 0) # TODO: Violett, nur bedingt ändern
self._anzahl["netzwerk_fernwartung"] = anzahl.get("netzwerk_fernwartung", 0)
self._anzahl["abgang_400v"] = anzahl.get("abgang_400v", 0)
self._anzahl["abgang_24_v"] = anzahl.get("abgang_24_v", 0)
self._anzahl["anlagenrechner"] = anzahl.get("anlagenrechner", 0)
self._anzahl["zusaetzlicher_bildschirm"] = anzahl.get("zusaetzlicher_bildschirm", 0) # end Violett
self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("RSM")
self._anzahl["unterverteiler_fuer_1flyer"] = anzahl.get("unterverteiler_fuer_1flyer", 0)
self._anzahl["unterverteiler_fuer_2flyer"] = anzahl.get("unterverteiler_fuer_2flyer", 0)
self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_puffer"] = anzahl.get("unterverteiler_fuer_puffer", 0)
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_1_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)
else:
num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM")
self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3)
# TODO "korrektur_3_rsm_zusaetzlich_im_unterverteiler"
# TODO "unterverteiler_fuer_4_rsm_direct" ist 0. Warum?
# "korrektur_4_rsm_zusaetzlich_im_unterverteiler"
self._anzahl["unterverteiler_fuer_12_rsm_direct"] = mg.get_deckblatt_value("RSM") /12.
# "korrektur_12_rsm_zusaetzlich_im_unterverteiler"
# TODO "unterverteiler_fuer_8_rsm_direct" ist 0, warum?
# "korrektur_8_rsm_zusaetzlich_im_unterverteiler"
self._anzahl["unterverteiler_fuer_8_rsm_direct"] = mg.get_deckblatt_value("RSM") /8.
# "busverteiler_6_rsm_direct"
# "korrektur_6_rsm_zusaetzlich_im_unterverteiler"
# "busverteiler_8_rsm_direct"
# "korrektur_8_rsm_zusaetzlich_im_unterverteiler"
motoren_uni_flyer_f40= mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_uni") \
+ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_uni_abhebbar") \
+ mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_uni_abhebbar_Korrektur")
# TODO warum ist hier bi drin?
motoren_uni_rsm_direct = mg.get_value_of_object("rsm_direct", "RA_bi_abhebbar") \
+ mg.get_value_of_object("rsm_direct", "Doppelstreckenantrieb")
self._anzahl["antrieb_unidirektional_halbleiter"] = motoren_uni_flyer_f40 + motoren_uni_rsm_direct
motoren_bi_flyer_f40 = 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_abhebbar_Korrektur") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_Korrektur") + \
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", "RRA_bi_ohne_SPS_Ansteuerung_Korrektur") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb")
motoren_uni_rsm_direct = mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_bi_abhebbar_Korrektur") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_bi") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") + \
mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RA_bi_abhebbar_unger_Schiene-Ansteuerung")
self._anzahl["antrieb_bidirektional_halbleiter"] = motoren_bi_flyer_f40 + motoren_uni_rsm_direct
# "antrieb_unidirektional_schuetz" TODO wo sind die? in Excel 0
# "antrieb_bidirektional_schuetz"
# "motorschutzschalter" TODO von EAS holen?
# "wendeschuetzschaltung"
self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter")
# # summe_motorstarter
# "bedienstation_1fach_kpl"
# "bedienst_2fach_wechs_bcd_10f"
# "bedienstation_2fach_kpl"
# "bedienstation_3fach_kpl"
# "bedienstation_4fach_kpl"
# "bedienstation_10fach_kpl"
# "drucktaster_automatische_umfahrung"
# "halter_fuer_drucktaster"
# # summe_bedienstationen
# # bis
# "sps_hardware_siemens_s7"
# "s7_1500_cpu_1515_2_pn_mit_ethernet"
# "s7_1500_cpu_1517_3_pn_dp_mit_ethernet"
# "s7_1500_mmc_12mb_"
# "simatic_pn_pn_coupler_6es7158_3ad10_0xa0_+_busadapter_ba_2xrj45"
# "_et200_mp_im155_5_pn"
# "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"
# "profinetstrecker_je_1st_cpu_und_im153"
# "s7_1500_eingangskarte_sm_321_16de"
# "s7_1500_ausgangskarte_sm_322_16da"
# "s7_1500_eingangskarte_sm_321_32de"
# "s7_1500_ausgangskarte_sm_322_32da"
# # _summe_sps_hardware
# # ET200_SP
# "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"
# "et200_sp_eingangskarte_8_de"
# "et200_sp_eingangskarte_16_de"
# "et200_sp_eingangskarte_8_do"
# "et200_sp_eingangskarte_16_do"
# "et200_sp_base_unit_neue_last"
# "et200_sp_base_unit_links_gebrueckt"
# "et200_sp_base_unit_neue_last"
# "et200_sp_base_unit_links_gebrueckt"
# # SLIO
# "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"
# "slio_eingangskarte_4_de"
# "slio_eingangskarte_8_de"
# "slio_ausgangskarte_4_do"
# "slio_ausgangskarte_8_do"
# "slio_power_modul"
# "slio_4_x_dc_24v_4_x_dc_0v"
# "slio_8_x_dc_24v"
# "slio_8_x_dc_0v"
# # Summe_material_in_ll
# # MATERIAL 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"
# "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"
# "schnittstellen_8x1mm2_30m"
# 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):
return self._anzahl.get(partname, 0)
def summe_gesamt(self):
"""
:return: price sum of all given items within self._anzahl
"""
res = 0
for k,anz in self._anzahl.items():
preis = anz * self.ep[k]
res += preis
return res
def summe_in_LL(self):
res = 0
for k,anz in self._anzahl.items():
if k in self.Keys_of_Vor_Ort:
pass
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(self):
""" gibt dies Summer der Stunden zur Montage der Unterverteiler 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)
preis = anz * self.ep[k]
res += preis
return res
def summe_h_schaltschrank(self):
""" gibt dies Summer der Stunden zur Montage des Schaltschranks zurück"""
keys_schaltschrank = [
"schaltschrankgehaeuse_b1x800_zubehoer",
"schaltschrankgehaeuse_b2x800_zubehoer",
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer",
"sps_simatic_s7_cpu315_2_pn_dp",
"speicherkarte_fuer_sps_512_kb",
"comfort_panel_tp_900_mit_pn",
"sps_simatic_s7_cpu317_2_pn_dp",
"speicherkarte_fuer_sps2_mb",
"sps_simatic_s7_1513_1",
"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",
"zusaetzlicher_bildschirm",
]
res = 0
for k in keys_schaltschrank:
anz = self._anzahl.get(k, 0)
preis = anz * self.ep[k]
res += preis
return res
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": 0,
"SPS_Doku": 0,
"PC_Doku": 0,
## Elektrowerkstatt
#Schaltschrankbau
#Unterverteilerbau
#Klemmkastenbau_je_2h
#Bedientableaubau
"Vormontage_im_Haus": 0,
}
def __init__(self, Anzahl_DL, hw: type[HW]):
# hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet
self._Hours = Anzahl_DL
# "Pflichtenheft_Autom_Schnittstellen": 0,
## Hardwareplanung
FaktorLayout = 0.15
FaktorSchaltplan = 0.55
FaktorProjektkoord = 0.05
FaktorDispo = 0.15
FaktorAbstimmung = 0.05
FaktorMontageUnterlagen = 0.05
self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_unterverteiler() * FaktorLayout
self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_unterverteiler() * FaktorSchaltplan
self._Hours["Projektkoordination"] = hw.summe_h_unterverteiler() * FaktorProjektkoord
self._Hours["Materialdispo"] = hw.summe_h_unterverteiler() * FaktorDispo
self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_unterverteiler() * FaktorAbstimmung
self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_unterverteiler() * FaktorMontageUnterlagen
# Test_und_Installation
self._Hours["PC_Installation"] = 0 # TODO woher kommt das?
self._Hours["Oberfläche_Simulation" ] = 0 # was heisst hier bedingt ändern?
self._Hours["SPS_Test_im_Haus_Simulation"] = 0
## Dokumentation
self._Hours["Bedienerhandbuch"] = 0
self._Hours["SPS_Doku"] = 0
self._Hours["PC_Doku"] = 0
## Elektrowerkstatt
self._Hours["Schaltschrankbau"] = hw.summe_h_schaltschrank()
self._Hours["Unterverteilerbau"] = 0
self._Hours["Klemmkastenbau_je_2h"] = 0
self._Hours["Bedientableaubau"] = 0
self._Hours["Vormontage_im_Haus"] = 0 # TODO: Nur bedingt ändern?
def __repr__(self):
return repr(self._Hours)
def get_hours_of(self, dlname):
return self._Hours.get(dlname, 0)
def summe_stunden(self):
"""returns hours necessary"""
return 0
def stunden_elektrowerkstatt(self):
return 0
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": 1.0, #(h/St)
"Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St)
"Sensoren_montieren": 0.45, #(h/St)
"Seilzugschalter_installieren": 4.0, #(h/St)
"Blitzleuchte_installieren": 0.5, #(h/St)
"Weiche_Stopper_anschliessen": 0.45, #(h/St)
"Erdung": 0.5, #(h)
}
def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]):
#für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt
mengen = {
"Schaltschrank_aufstellen": 0,
"Unterverteiler_montieren": 0,
"Pritsche_montieren_umbauen_demontieren": 0,
"Pritsche_in_RSM_montieren": 0,
"Motor_verdrahten_und_anschliessen": 0,
"Tableau_befestigen_und_anschliessen": 0,
"Schnittstelle_Flyer_Putzmaschine": 0,
"Sensoren_montieren": 0,
"Seilzugschalter_installieren": 0,
"Blitzleuchte_installieren": 0,
"Weiche_Stopper_anschliessen": 0,
"Erdung": 0,
}
self._Mengen = {} #TODO: Namensgebung für dict Keys aus HW() und EA() anpassen, wenn Klassen fertiggestellt sind
self._Mengen["Schaltschrank_aufstellen"] = self.montagezeiten.get("Schaltschrank_aufstellen", 0) * (hw.anzahl("schaltschrank_und_zubehör_b_1_800") +\
hw.anzahl("schaltschrank_und_zubehör_b_2_800") +\
hw.anzahl("schaltschrank_und_zubehör_b_1_1200_1_800"))
self._Mengen["Unterverteiler_montieren"] = math.ceil(self.montagezeiten.get("Unterverteiler_montieren", 0) * hw.anzahl("75_m_Zuleitung_Unterverteiler_4x4_400VAC"))
self._Mengen["Pritsche_montieren_umbauen_demontieren"] = math.ceil(hw.anzahl("kabelpritschen_leitern_200_60")/self.montagezeiten.get("Pritsche_montieren_umbauen_demontieren", 0))
self._Mengen["Pritsche_in_RSM_montieren"] = math.ceil(hw.anzahl("kabelpritsche_rsm_100_60")/self.montagezeiten.get("Pritsche_in_RSM_montieren", 0))
self._Mengen["Motor_verdrahten_und_anschliessen"] = self.montagezeiten.get("Motor_verdrahten_und_anschliessen", 0) * mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0)
self._Mengen["Tableau_befestigen_und_anschliessen"] = self.montagezeiten.get("Tableau_befestigen_und_anschliessen", 0) * (
hw.anzahl("Bedienstation_1fach") +\
hw.anzahl("Bedienst_2fach_DIR") +\
hw.anzahl("Bedienstation_2") +\
hw.anzahl("Bedienstation_3") +\
hw.anzahl("Bedienstation_4") +\
hw.anzahl("Bedienstation_10") +\
hw.anzahl("Drucktaster_autom_Umfahrung"))
self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = self.montagezeiten.get("Schnittstelle_Flyer_Putzmaschine", 0) * (ea.anzahl("Schnittstelle_Flyer_EJet") +\
ea.anzahl("Schnittstelle_Putzmaschine_EJet") +\
ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser"))
#TODO: "Schnittstelle_Flyer_Putzmaschine" Werte aus Mengengerüst Fragwürdig; EAs!B53 keine Formel hinterlegt
self._Mengen["Sensoren_montieren"] = math.ceil(self.montagezeiten.get("Sensoren_montieren", 0) * hw.anzahl("sensorkabel_je_20m"))
self._Mengen["Seilzugschalter_installieren"] = math.ceil(self.montagezeiten.get("Seilzugschalter_installieren", 0) * ea.anzahl("Seilzugschalter"))
self._Mengen["Blitzleuchte_installieren"] = math.ceil(self.montagezeiten.get("Blitzleuchte_installieren", 0) * ea.anzahl("Blitzleuchte_Stoerung"))
self._Mengen["Weiche_Stopper_anschliessen"] = math.ceil(self.montagezeiten.get("Weiche_Stopper_anschliessen", 0) * ea.anzahl("stopper_weichenkabel_je_5m"))
self._Mengen["Erdung"] = math.ceil(self.montagezeiten.get("Erdung", 0) * hw.anzahl("75_m_Zuleitung_Unterverteiler_4x4_400VAC"))
print(self._Mengen)
class TestObjectMethods(unittest.TestCase):
def test_deckblatt(self):
deckblatt_eingabe = {
"SYSTEM":"",
"RSM":13,
"Flyer":7,
"Flyer_Puffer":13,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine":4,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3,
"Neuenhauser-Putzmaschine":11,
"Neuenhauser-Putzmaschine_Vorpuffer":12,
"Neuenhauser-Putzmaschine_Nachpuffer":14,
"Cason-Putzmaschine":0,
"Cason-Putzmaschine_Vorpuffer":0,
"Cason-Putzmaschine_Nachpuffer":0,
"Puffer":5,
"Anzahl_der_Pufferstrecken_pro_Puffer":11,
"Begegnungsstrecke_Bypass":0,
"Turm":2,
"Turm_Anzahl_Wendlungen":5,
}
#auskommentiert Zeilen sind nicht einzugeben
rsm_direct_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0, # wird in deckblatt-Klasse berechnet
#"Anzahl_Strecken_RSM":8,
"Sensor_optisch_Traverse":4,
#"Lichtschranke_Traverse":0,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":4,
#"Bedientableau_2fach_Direct":0,
#"Weiche":0,
"Weiche_Korrektur":4,
#"Weiche_Gemeinsame_Rückstellung":0,
"Weiche_Gemeinsame_Rückstellung_Korrektur":4,
#"RA_bi_abhebbar":0,
"RA_bi_abhebbar_Korrektur":4,
#"Doppelstreckenantrieb":0,
#"gemeinsame_Wendung":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":4,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":4,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":4,
}
rsm_fa_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl_RSM":0,
#"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert
"Flex_A_Premium":False,
"Getriebe_in_der_Mitte":True,
"RSM_Einfahrt_Ein_Beidseitig":True,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_zusätzlich":3,
"Sensor_optisch_Traverse_Korrektur":3,
#"Bedientableau_1fach":0,
"Bedientableau_1fach_Korrektur":3,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":3,
#"Weiche":0,
"Weiche_Korrektur":3,
#"RRA_bi":0,
"RRA_bi_Korrektur":3,
"RRA_bi_auf_Haupstrecke":3,
#"RRA_bi_ohne_SPS_Ansteuerung":0,
"gemeinsame_Wendung":3,
#"Seilzugschalter":0,
#"Mit_Drucktaster":0,
"Mit_Drucktaster_Korrektur":3,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":3,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":3,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":3,
}
flyer_f40_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":2,
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet
#"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet
#"Anzahl_Schienen":0,
"Single_Line_Durchfahrt":True,
"Nachpuffer":True,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":3,
#"Sensor_induktiv_Spulenhalter":0,
"Sensor_induktiv_Spulenhalter_Korrektur":2,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":3,
#"Interface_Doffer":0,
"Interface_Doffer_Korrektur":2,
#"Weiche":0,
"Weiche_Korrektur":3,
#"Weiche_nach_Flyer_bipolar":0,
"Weiche_nach_Flyer_bipolar_Korrektur":2,
"Dreifachweiche":7,
"Wechsel":6,
"Stopper":5,
"RA_uni":4,
#"RA_uni_abhebbar":0,
"RA_uni_abhebbar_Korrektur":3,
#"RA_uni_ohne_SPS_Ansteuerung":0,
"RA_uni_ohne_SPS_Ansteuerung_Korrektur":2,
#"RRA_BI_abhebbar":0,
"RRA_BI_abhebbar_Korrektur":3,
"RRA_bi":0,
#"RRA_bi_Korrektur":0,
#"RRA_bi_ohne_SPS_Ansteuerung":0,
"RRA_bi_ohne_SPS_Ansteuerung_Korrektur":3,
#"Doppelstreckenantrieb":0,
"Doppelstreckenantrieb_Korrektur":2,
"RA_bi_abhebbar_unger_Schiene":3,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":3,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":2,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":3,
}
neuenhauser_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen
#"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen
#"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen
#"Anzahl_Vorstaustrecken":0,
#"Anzahl_Nachstaustrecken":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":3,
#"Sensorik_Zugpositionierung":0,
#"Sensor_WT18_Spulenprüfung_voll_leer":0,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":3,
#"Interface_Putzmaschine":0,
#"Weiche":0,
"Weiche_Korrektur":2,
#"Weiche_nach_PM_bipolar":0,
#"RA_uni_abhebbar":0,
"RA_uni_abhebbar_Korrektur":3,
#"RA_uni_ohne_SPS_Ansteuerung":0,
#"RA_uni_abhebbar_unger_Sch":0,
#"Doppelstreckenantrieb":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":2,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":3,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":2,
}
flyer_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Flyer":0, # äquivalent zu 'Anzahl'
#"Anzahl_Schienen:":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":3,
#"Sensor_induktiv_Spulenalter_Zug_positionierung":0,
#"Bedientableau_2fach":0,
#"Interface_Doffer":0,
#"Weiche":0,
"Weiche_Korrektur":4,
#"Weiche_nach_Flyer_bipolar":0,
"Weiche_nach_Flyer_bipolar_Korrektur":3,
"Dreifachweiche":3,
#"Wechsel":0,
"Wechsel_Korrektur":4,
#"RA_bi_ohne_SPS-Ansteuerung":0,
#"RA_bi_abhebbar":0,
"RA_bi_abhebbar_Korrektur":3,
"RA_bi":3,
#"Doppelstreckenantrieb":0,
"RA_bi_abhebbar_unger_Schiene":4,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":3,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":4,
#"Werma_Rundumleuchte_Störung":0,
"Werma_Rundumleuchte_Störung_Korrektur":3,
}
puffer_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Puffer":0, #äquivalent zu Anzahl
#"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken
#"Anzahl_Staustrecken":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":5,
#"Weiche":0,
"Weiche_Korrektur":6,
"RA_bi_ungerade_Schiene":7,
#"Doppelstreckenantrieb":0,
#"Meldelampe_Überstrom":0,
"Meldelampe_Überstrom_Korrektur":6,
#"Hauptschalter_Ein_Meldung":0,
"Hauptschalter_Ein-Meldung_Korrektur":5,
}
turm_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Turm":0, #äquivalent zu Anzahl
#"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken
#"Anzahl_Staustrecken":0,
#"Sensor_optisch_Traverse":0,
#"Weiche":0,
#"RA_bi":0,
"RA_bi_Korrektur":5,
#"RA_bi_ohne_SPS":0,
"RA_bi_ohne_SPS_Korrektur":6,
#"Bedientableau_2fach":0,
}
deckblatt = MG(deckblatt_eingabe,
rsm_direct=rsm_direct_eingabe,
rsm_fa=rsm_fa_eingabe,
flyer_f40=flyer_f40_eingabe,
neuenhauser=neuenhauser_eingabe,
flyer=flyer_eingabe,
#verbindungsstrecken_w=,
puffer=puffer_eingabe,
turm=turm_eingabe)
#Testmethoden:
'''
# self.assertEqual(deckblatt._rsm_direct.anzahl("Anzahl"), 13)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Sensor_optisch_Traverse"), 4)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Lichtschranke_Traverse"), 78)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Bedientableau_2fach"), 6)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 13)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Weiche"), 56)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 6)
# self.assertEqual(deckblatt._rsm_direct.anzahl("RA_bi_abhebbar"), 9)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Doppelstreckenantrieb"), 104)
# self.assertEqual(deckblatt._rsm_direct.anzahl("gemeinsame_Wendung"), 6)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Meldelampe_Überstrom"), 6)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 6)
# self.assertEqual(deckblatt._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 6)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Anzahl_RSM"), 13)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Sensor_optisch_Traverse"), 32)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Sensor_optisch_Traverse_zusätzlich"), 3)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Bedientableau_1fach"), 29)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Bedientableau_2fach"), 5)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Weiche"), 29)
# self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi"), 32)
# self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi_auf_Haupstrecke"), 3)
# self.assertEqual(deckblatt._rsm_fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 0)
# self.assertEqual(deckblatt._rsm_fa.anzahl("gemeinsame_Wendung"), 3)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Seilzugschalter"), 26)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Mit_Drucktaster"), 3)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Meldelampe_Überstrom"), 5)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Hauptschalter_Ein_Meldung"), 5)
# self.assertEqual(deckblatt._rsm_fa.anzahl("Werma_Rundumleuchte_Störung"), 5)
self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl"), 6)
self.assertEqual(deckblatt._flyer_f40.anzahl("Anzahl_Schienen"), 5)
#self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_optisch_Traverse"), 80) # TODO: Wenn Nachpuffer == True, dann wird Sensor_optisch_Traverse_Korrektur doppelt addiert => =WENN(B49="ja";B46*(B47*1)+(B46*5)+(B56*2);B46*(B47*1)+(B46*7)+(B56*2))+C50
self.assertEqual(deckblatt._flyer_f40.anzahl("Sensor_induktiv_Spulenhalter"), 14)
self.assertEqual(deckblatt._flyer_f40.anzahl("Bedientableau_2fach"), 9)
self.assertEqual(deckblatt._flyer_f40.anzahl("Interface_Doffer"), 8)
self.assertEqual(deckblatt._flyer_f40.anzahl("Weiche"), 39)
self.assertEqual(deckblatt._flyer_f40.anzahl("Weiche_nach_Flyer_bipolar"), 8)
self.assertEqual(deckblatt._flyer_f40.anzahl("Dreifachweiche"), 7)
self.assertEqual(deckblatt._flyer_f40.anzahl("Wechsel"), 6)
self.assertEqual(deckblatt._flyer_f40.anzahl("Stopper"), 5)
self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni"), 4)
self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni_abhebbar"), 9)
self.assertEqual(deckblatt._flyer_f40.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 6)
self.assertEqual(deckblatt._flyer_f40.anzahl("RRA_BI_abhebbar"), 9)
self.assertEqual(deckblatt._flyer_f40.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 3)
self.assertEqual(deckblatt._flyer_f40.anzahl("Doppelstreckenantrieb"), 13.5)
self.assertEqual(deckblatt._flyer_f40.anzahl("RA_bi_abhebbar_unger_Schiene"), 3)
self.assertEqual(deckblatt._flyer_f40.anzahl("Meldelampe_Überstrom"), 9)
self.assertEqual(deckblatt._flyer_f40.anzahl("Hauptschalter_Ein_Meldung"), 8)
self.assertEqual(deckblatt._flyer_f40.anzahl("Werma_Rundumleuchte_Störung"), 9)
self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl"), 11)
self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl_Vorstaustrecken"), 12)
self.assertEqual(deckblatt._neuenhauser.anzahl("Anzahl_Nachstaustrecken"), 14)
self.assertEqual(deckblatt._neuenhauser.anzahl("Sensor_optisch_Traverse"), 322)
self.assertEqual(deckblatt._neuenhauser.anzahl("Sensorik_Zugpositionierung"), 44)
self.assertEqual(deckblatt._neuenhauser.anzahl("Sensor_WT18_Spulenprüfung_voll_leer"), 22)
self.assertEqual(deckblatt._neuenhauser.anzahl("Bedientableau_2fach"), 14)
self.assertEqual(deckblatt._neuenhauser.anzahl("Interface_Putzmaschine"), 11)
self.assertEqual(deckblatt._neuenhauser.anzahl("Weiche"), 134)
self.assertEqual(deckblatt._neuenhauser.anzahl("Weiche_nach_PM_bipolar"), 143)
self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_abhebbar"), 14)
self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 11)
self.assertEqual(deckblatt._neuenhauser.anzahl("RA_uni_abhebbar_unger_Sch"), 88)
self.assertEqual(deckblatt._neuenhauser.anzahl("Doppelstreckenantrieb"), 143)
self.assertEqual(deckblatt._neuenhauser.anzahl("Meldelampe_Überstrom"), 13)
self.assertEqual(deckblatt._neuenhauser.anzahl("Hauptschalter_Ein_Meldung"), 14)
self.assertEqual(deckblatt._neuenhauser.anzahl("Werma_Rundumleuchte_Störung"), 13)
self.assertEqual(deckblatt._flyer.anzahl("Anzahl"), 7)
self.assertEqual(deckblatt._flyer.anzahl("Anzahl_Schienen"), 13)
self.assertEqual(deckblatt._flyer.anzahl("Sensor_optisch_Traverse"), 206)
self.assertEqual(deckblatt._flyer.anzahl("Sensor_induktiv_Spulenalter_Zug_positionierung"), 7)
self.assertEqual(deckblatt._flyer.anzahl("Bedientableau_2fach"), 7)
self.assertEqual(deckblatt._flyer.anzahl("Interface_Doffer"), 7)
self.assertEqual(deckblatt._flyer.anzahl("Weiche"), 95)
self.assertEqual(deckblatt._flyer.anzahl("Weiche_nach_Flyer_bipolar"), 7)
self.assertEqual(deckblatt._flyer.anzahl("Wechsel"), 11)
self.assertEqual(deckblatt._flyer.anzahl("Dreifachweiche"), 3)
self.assertEqual(deckblatt._flyer.anzahl("RA_bi_ohne_SPS-Ansteuerung"), 7)
self.assertEqual(deckblatt._flyer.anzahl("RA_bi_abhebbar"), 14)
self.assertEqual(deckblatt._flyer.anzahl("Doppelstreckenantrieb"), 42)
self.assertEqual(deckblatt._flyer.anzahl("Meldelampe_Überstrom"), 10)
self.assertEqual(deckblatt._flyer.anzahl("Hauptschalter_Ein_Meldung"), 11)
self.assertEqual(deckblatt._flyer.anzahl("Werma_Rundumleuchte_Störung"), 10)
self.assertEqual(deckblatt._puffer.anzahl("Anzahl"), 5)
self.assertEqual(deckblatt._puffer.anzahl("Anzahl_Staustrecken"), 11)
self.assertEqual(deckblatt._puffer.anzahl("Sensor_optisch_Traverse"), 60)
self.assertEqual(deckblatt._puffer.anzahl("Weiche"), 61)
self.assertEqual(deckblatt._puffer.anzahl("RA_bi_ungerade_Schiene"), 7)
self.assertEqual(deckblatt._puffer.anzahl("Doppelstreckenantrieb"), 25)
self.assertEqual(deckblatt._puffer.anzahl("Meldelampe_Überstrom"), 11)
self.assertEqual(deckblatt._puffer.anzahl("Hauptschalter_Ein_Meldung"), 10)
self.assertEqual(deckblatt._turm.anzahl("Anzahl"), 2)
self.assertEqual(deckblatt._turm.anzahl("Anzahl_Staustrecken"), 5)
self.assertEqual(deckblatt._turm.anzahl("Weiche"), 6)
self.assertEqual(deckblatt._turm.anzahl("RA_bi"), 9)
self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26)
self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2fach"), 4)
'''
self.assertEqual(deckblatt._turm.anzahl("Anzahl"), 2)
self.assertEqual(deckblatt._turm.anzahl("Anzahl_Staustrecken"), 5)
self.assertEqual(deckblatt._turm.anzahl("Weiche"), 6)
self.assertEqual(deckblatt._turm.anzahl("RA_bi"), 9)
self.assertEqual(deckblatt._turm.anzahl("RA_bi_ohne_SPS"), 26)
self.assertEqual(deckblatt._turm.anzahl("Bedientableau_2fach"), 4)
def test_Mengengerüst_Zusammenfassung_RSM_DIRECT_Electrojet(self):
Anzahl_MG = {
"SYSTEM": "DIRECT",
"RSM": 10,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine": 1,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer": 2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer": 2,
}
mg = MG(Anzahl_MG)
# check data of the rsm
self.assertEqual(mg._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8)
self.assertEqual(mg._rsm_direct.anzahl("Lichtschranke_Traverse"), 60)
self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach"), 1)
self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 10)
self.assertEqual(mg._rsm_direct.anzahl("Weiche"), 40)
self.assertEqual(mg._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 1)
self.assertEqual(mg._rsm_direct.anzahl("RA_bi_abhebbar"), 4)
self.assertEqual(mg._rsm_direct.anzahl("Doppelstreckenantrieb"), 80)
self.assertEqual(mg._rsm_direct.anzahl("gemeinsame_Wendung"), 4)
self.assertEqual(mg._rsm_direct.anzahl("Meldelampe_Überstrom"), 2)
self.assertEqual(mg._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 2)
self.assertEqual(mg._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 2)
# check data of the f40 flyer
self.assertEqual(mg._flyer_f40.anzahl("Anzahl_Schienen"), 4)
self.assertEqual(mg._flyer_f40.anzahl("Single_Line_Durchfahrt"), False)
self.assertEqual(mg._flyer_f40.anzahl("Nachpuffer"), False)
self.assertEqual(mg._flyer_f40.anzahl("Sensor_optisch_Traverse"), 11)
self.assertEqual(mg._flyer_f40.anzahl("Sensor_induktiv_Spulenhalter"), 2)
self.assertEqual(mg._flyer_f40.anzahl("Bedientableau_2fach"), 1)
self.assertEqual(mg._flyer_f40.anzahl("Interface_Doffer"), 1)
self.assertEqual(mg._flyer_f40.anzahl("Weiche"), 4)
self.assertEqual(mg._flyer_f40.anzahl("Weiche_nach_Flyer_bipolar"), 0)
self.assertEqual(mg._flyer_f40.anzahl("Dreifachweiche"), 0)
self.assertEqual(mg._flyer_f40.anzahl("Wechsel"), 0)
self.assertEqual(mg._flyer_f40.anzahl("Stopper"), 0)
self.assertEqual(mg._flyer_f40.anzahl("RA_uni"), 0)
self.assertEqual(mg._flyer_f40.anzahl("RA_uni_abhebbar"), 1)
self.assertEqual(mg._flyer_f40.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(mg._flyer_f40.anzahl("RRA_BI_abhebbar"), 0)
self.assertEqual(mg._flyer_f40.anzahl("RRA_bi"), 0)
self.assertEqual(mg._flyer_f40.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 1)
self.assertEqual(mg._flyer_f40.anzahl("Doppelstreckenantrieb"), 2)
self.assertEqual(mg._flyer_f40.anzahl("RA_bi_abhebbar_unger_Schiene"), 0)
self.assertEqual(mg._flyer_f40.anzahl("Meldelampe_Überstrom"), 1)
self.assertEqual(mg._flyer_f40.anzahl("Hauptschalter_Ein_Meldung"), 1)
self.assertEqual(mg._flyer_f40.anzahl("Werma_Rundumleuchte_Störung"), 1)
zmengen = mg.zusammenfassung()
self.assertEqual(zmengen["Sensor_optisch_Traverse"], 11)
self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 2)
self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0)
self.assertEqual(zmengen["Seilzugsschalter"], 0)
self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0)
self.assertEqual(zmengen["Bedientableau_1fach"], 0)
self.assertEqual(zmengen["Bedientableau_2fach"], 2)
self.assertEqual(zmengen["Bedientableau_14fach"], 0)
self.assertEqual(zmengen["Interface_Putzmaschine"], 0)
self.assertEqual(zmengen["Interface_Doffer"], 1)
self.assertEqual(zmengen["Weiche"], 44)
self.assertEqual(zmengen["Dreifachweiche"], 1)
self.assertEqual(zmengen["Wechsel"], 0)
self.assertEqual(zmengen["Stopper"], 0)
self.assertEqual(zmengen["Meldelampe_Überstrom"], 3)
self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3)
self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3)
self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0)
self.assertEqual(zmengen["Kreuzungsweiche"], 0)
self.assertEqual(zmengen["RA_uni"], 0)
self.assertEqual(zmengen["RA_uni_abhebbar"], 1)
self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0)
self.assertEqual(zmengen["RA_bi"], 0)
self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1)
self.assertEqual(zmengen["RA_bi_abhebbar"], 4)
self.assertEqual(zmengen["Doppelstreckenantrieb"], 82)
self.assertEqual(zmengen["gemeinsame_Wendung"], 4)
self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 88)
def test_Mengengerüst_Zusammenfassung_RSMFA_Flyer(self):
Anzahl_MG = {
"SYSTEM": "FA",
"RSM": 11,
"Flyer":1,
"Flyer_Puffer":2,
}
mg = MG(Anzahl_MG)
# check data of the rsm fa
self.assertEqual(mg._rsm_fa.anzahl("Anzahl_RSM"), 11)
self.assertEqual(mg._rsm_fa.anzahl("Sensor_optisch_Traverse"), 11)
self.assertEqual(mg._rsm_fa.anzahl("Bedientableau_1fach"), 11)
self.assertEqual(mg._rsm_fa.anzahl("Bedientableau_2fach"), 2)
self.assertEqual(mg._rsm_fa.anzahl("Weiche"), 11)
self.assertEqual(mg._rsm_fa.anzahl("RRA_bi"), 11)
self.assertEqual(mg._rsm_fa.anzahl("RRA_bi_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(mg._rsm_fa.anzahl("Seilzugschalter"), 0)
self.assertEqual(mg._rsm_fa.anzahl("Mit_Drucktaster"), 0)
self.assertEqual(mg._rsm_fa.anzahl("Meldelampe_Überstrom"), 2)
self.assertEqual(mg._rsm_fa.anzahl("Hauptschalter_Ein_Meldung"), 2)
self.assertEqual(mg._rsm_fa.anzahl("Werma_Rundumleuchte_Störung"),2)
# check the data of the flyer
self.assertEqual(mg._flyer.anzahl("Anzahl_Schienen"), 2)
self.assertEqual(mg._flyer.anzahl("Sensor_optisch_Traverse"), 7)
self.assertEqual(mg._flyer.anzahl("Sensor_induktiv_Spulenalter_Zug_positionierung"), 1)
self.assertEqual(mg._flyer.anzahl("Bedientableau_2fach"), 1)
self.assertEqual(mg._flyer.anzahl("Interface_Doffer"), 1)
self.assertEqual(mg._flyer.anzahl("Weiche"), 2)
self.assertEqual(mg._flyer.anzahl("Weiche_nach_Flyer_bipolar"), 1)
self.assertEqual(mg._flyer.anzahl("Wechsel"), 1)
self.assertEqual(mg._flyer.anzahl("RA_bi_ohne_SPS-Ansteuerung"), 1)
self.assertEqual(mg._flyer.anzahl("RA_bi_abhebbar"), 1)
self.assertEqual(mg._flyer.anzahl("Doppelstreckenantrieb"), 1)
self.assertEqual(mg._flyer.anzahl("Meldelampe_Überstrom"), 1)
self.assertEqual(mg._flyer.anzahl("Hauptschalter_Ein_Meldung"), 1)
self.assertEqual(mg._flyer.anzahl("Werma_Rundumleuchte_Störung"), 1)
zmengen = mg.zusammenfassung()
self.assertEqual(zmengen["Sensor_optisch_Traverse"], 18)
self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 1)
self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0)
self.assertEqual(zmengen["Seilzugsschalter"], 0)
self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0)
self.assertEqual(zmengen["Bedientableau_1fach"], 11)
self.assertEqual(zmengen["Bedientableau_2fach"], 3)
self.assertEqual(zmengen["Bedientableau_14fach"], 0)
self.assertEqual(zmengen["Interface_Putzmaschine"], 0)
self.assertEqual(zmengen["Interface_Doffer"], 1)
self.assertEqual(zmengen["Weiche"], 13)
self.assertEqual(zmengen["Dreifachweiche"], 0)
self.assertEqual(zmengen["Wechsel"], 1)
self.assertEqual(zmengen["Stopper"], 0)
self.assertEqual(zmengen["Meldelampe_Überstrom"], 3)
self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3)
self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3)
self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0)
self.assertEqual(zmengen["Kreuzungsweiche"], 0)
self.assertEqual(zmengen["RA_uni"], 0)
self.assertEqual(zmengen["RA_uni_abhebbar"], 0)
self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0)
self.assertEqual(zmengen["RA_bi"], 11)
self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1)
self.assertEqual(zmengen["RA_bi_abhebbar"], 1)
self.assertEqual(zmengen["Doppelstreckenantrieb"], 1)
self.assertEqual(zmengen["gemeinsame_Wendung"], 0)
self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 14)
def test_Mengengerüst_Zusammenfassung_RSM_Neuenhauser(self):
Anzahl_MG = {
"SYSTEM": "DIRECT",
"RSM": 2,
"Neuenhauser-Putzmaschine": 1,
"Neuenhauser-Putzmaschine_Vorpuffer": 2,
"Neuenhauser-Putzmaschine_Nachpuffer": 2,
}
mg = MG(Anzahl_MG)
# check data of the rsm
self.assertEqual(mg._rsm_direct.anzahl("Anzahl_Strecken_RSM"), 8)
self.assertEqual(mg._rsm_direct.anzahl("Lichtschranke_Traverse"), 12)
self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach"), 1)
self.assertEqual(mg._rsm_direct.anzahl("Bedientableau_2fach_Direct"), 2)
self.assertEqual(mg._rsm_direct.anzahl("Weiche"), 8)
self.assertEqual(mg._rsm_direct.anzahl("Weiche_Gemeinsame_Rückstellung"), 1)
self.assertEqual(mg._rsm_direct.anzahl("RA_bi_abhebbar"), 1)
self.assertEqual(mg._rsm_direct.anzahl("Doppelstreckenantrieb"), 16)
self.assertEqual(mg._rsm_direct.anzahl("gemeinsame_Wendung"), 2)
self.assertEqual(mg._rsm_direct.anzahl("Meldelampe_Überstrom"), 1)
self.assertEqual(mg._rsm_direct.anzahl("Hauptschalter_Ein_Meldung"), 1)
self.assertEqual(mg._rsm_direct.anzahl("Werma_Rundumleuchte_Störung"), 0)
# check the data of neuenhauser
self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Vorstaustrecken"), 2)
self.assertEqual(mg._neuenhauser.anzahl("Anzahl_Nachstaustrecken"), 2)
self.assertEqual(mg._neuenhauser.anzahl("Sensor_optisch_Traverse"), 7)
self.assertEqual(mg._neuenhauser.anzahl("Sensorik_Zugpositionierung"), 4)
self.assertEqual(mg._neuenhauser.anzahl("Sensor_WT18_Spulenprüfung_voll_leer"), 2)
self.assertEqual(mg._neuenhauser.anzahl("Bedientableau_2fach"), 1)
self.assertEqual(mg._neuenhauser.anzahl("Interface_Putzmaschine"), 1)
self.assertEqual(mg._neuenhauser.anzahl("Weiche"), 2)
self.assertEqual(mg._neuenhauser.anzahl("Weiche_nach_PM_bipolar"), 1) # TODO negativ?
self.assertEqual(mg._neuenhauser.anzahl("RA_uni_abhebbar"), 1)
self.assertEqual(mg._neuenhauser.anzahl("RA_uni_ohne_SPS_Ansteuerung"), 1)
self.assertEqual(mg._neuenhauser.anzahl("RA_uni_abhebbar_unger_Sch"), 0)
self.assertEqual(mg._neuenhauser.anzahl("Doppelstreckenantrieb"), 2)
self.assertEqual(mg._neuenhauser.anzahl("Meldelampe_Überstrom"), 1)
self.assertEqual(mg._neuenhauser.anzahl("Hauptschalter_Ein_Meldung"), 1)
self.assertEqual(mg._neuenhauser.anzahl("Werma_Rundumleuchte_Störung"), 1)
zmengen = mg.zusammenfassung()
self.assertEqual(zmengen["Sensor_optisch_Traverse"], 7)
self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 4)
self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 2)
self.assertEqual(zmengen["Seilzugsschalter"], 0)
self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0)
self.assertEqual(zmengen["Bedientableau_1fach"], 0)
self.assertEqual(zmengen["Bedientableau_2fach"], 2)
self.assertEqual(zmengen["Bedientableau_14fach"], 0)
self.assertEqual(zmengen["Interface_Putzmaschine"], 1)
self.assertEqual(zmengen["Interface_Doffer"], 0)
self.assertEqual(zmengen["Weiche"], 10)
self.assertEqual(zmengen["Dreifachweiche"], 1)
self.assertEqual(zmengen["Wechsel"], 0)
self.assertEqual(zmengen["Stopper"], 0)
self.assertEqual(zmengen["Meldelampe_Überstrom"], 2)
self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 2)
self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 1)
self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 1)
self.assertEqual(zmengen["Kreuzungsweiche"], 0)
self.assertEqual(zmengen["RA_uni"], 0)
self.assertEqual(zmengen["RA_uni_abhebbar"], 1)
self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 1)
self.assertEqual(zmengen["RA_bi"], 0)
self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 0)
self.assertEqual(zmengen["RA_bi_abhebbar"], 1)
self.assertEqual(zmengen["Doppelstreckenantrieb"], 18)
self.assertEqual(zmengen["gemeinsame_Wendung"], 2)
self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 21)
def test_EA(self):
Anzahl_MG = {
"SYSTEM": "DIRECT",
"RSM": 10,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine": 1,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer": 2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer": 2,
}
mg = MG(Anzahl_MG)
zmengen = mg.zusammenfassung()
self.assertEqual(zmengen["Sensor_optisch_Traverse"], 11)
self.assertEqual(zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"], 2)
self.assertEqual(zmengen["Sensor_Spulenprüfung_voll_leer"], 0)
self.assertEqual(zmengen["Seilzugsschalter"], 0)
self.assertEqual(zmengen["Drucktaster_automatische_Umfahrung"], 0)
self.assertEqual(zmengen["Bedientableau_1fach"], 0)
self.assertEqual(zmengen["Bedientableau_2fach"], 2)
self.assertEqual(zmengen["Bedientableau_14fach"], 0)
self.assertEqual(zmengen["Interface_Putzmaschine"], 0)
self.assertEqual(zmengen["Interface_Doffer"], 1)
self.assertEqual(zmengen["Weiche"], 44)
self.assertEqual(zmengen["Dreifachweiche"], 1)
self.assertEqual(zmengen["Wechsel"], 0)
self.assertEqual(zmengen["Stopper"], 0)
self.assertEqual(zmengen["Meldelampe_Überstrom"], 3)
self.assertEqual(zmengen["Hauptschalter_Ein_Meldung"], 3)
self.assertEqual(zmengen["Werma_Rundumleuchte_Störung"], 3)
self.assertEqual(zmengen["Weiche_nach_PM_bipolar"], 0)
self.assertEqual(zmengen["Kreuzungsweiche"], 0)
self.assertEqual(zmengen["RA_uni"], 0)
self.assertEqual(zmengen["RA_uni_abhebbar"], 1)
self.assertEqual(zmengen["RA_uni_ohne_SPS_Ansteuerung"], 0)
self.assertEqual(zmengen["RA_bi"], 0)
self.assertEqual(zmengen["RA_bi_ohne_SPS-Ansteuerung"], 1)
self.assertEqual(zmengen["RA_bi_abhebbar"], 4)
self.assertEqual(zmengen["Doppelstreckenantrieb"], 82)
self.assertEqual(zmengen["gemeinsame_Wendung"], 4)
self.assertEqual(zmengen["Gesamtanzahl_Antriebe"], 88)
Anzahl_EAS = {
"bedienstation_einfach_Zug_Wechseln": 9,
"Weiche": 16,
"bedienst_sechsfach": 1,
"EAs_Unterverteiler_direct": 10,
}
eas = EA(Anzahl_EAS, mg)
### first test the input channels
self.assertEqual(eas.getE("Bedienelemente_Steuerschrank"), 24)
# Bedienstation
self.assertEqual(eas.getE("bedienstation_1fach_Not_Aus"), 1)
self.assertEqual(eas.getE("bedienstation_einfach_Zug_Wechseln"), 1)
self.assertEqual(eas.getE("bedienstation_automatische_Umfahrung"), 1)
self.assertEqual(eas.getE("bedienstation_zweifach_Wechs_BCD_10f"), 5)
self.assertEqual(eas.getE("bedienstation_zweifach_Not_Aus_Reset"), 2)
self.assertEqual(eas.getE("bedienst_dreifach"), 3)
self.assertEqual(eas.getE("bedienst_vierfach"), 4)
self.assertEqual(eas.getE("bedienst_sechsfach"), 6)
self.assertEqual(eas.getE("EAs_Unterverteiler_direct"), 7)
# Ermittlung_Mengengeruest_Anzahl
self.assertEqual(eas.getE("Sensor_Traversenabfrage_optisch"), 1)
self.assertEqual(eas.getE("Reflexionslichtschranke_RSM_DIRECT"), 1)
self.assertEqual(eas.getE("Sensor_Stopper_induktiv"), 1)
self.assertEqual(eas.getE("Seilzugschalter"), 1)
self.assertEqual(eas.getE("Weiche"), 0)
self.assertEqual(eas.getE("Weiche_nach_PM_bipolar"), 0)
self.assertEqual(eas.getE("gemeinsame_Weichenrueckstellung"), 0)
self.assertEqual(eas.getE("Dreifach_Weiche_DIRECT"), 0)
self.assertEqual(eas.getE("Kreuzungsweiche"), 0)
self.assertEqual(eas.getE("Stopper"), 0)
self.assertEqual(eas.getE("Ventil_RA_3_2_abhebbar"), 0)
self.assertEqual(eas.getE("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 0)
self.assertEqual(eas.getE("Blitzleuchte_Stoerung"), 0)
self.assertEqual(eas.getE("Schnittstelle_Flyer_ElectroJet"), 2)
self.assertEqual(eas.getE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2)
self.assertEqual(eas.getE("Schnittstelle_Flyer_Neuhauser"), 4)
self.assertEqual(eas.getE("FEldbux_UV_EinAusgang"), 2)
self.assertEqual(eas.getE("Spulenumsetzstation"), 40)
self.assertEqual(eas.getE("RA_unidirektional"), 0)
self.assertEqual(eas.getE("RA_unidirektional_abhebbar"), 0)
self.assertEqual(eas.getE("RA_unidirektional_mit_gemeinsamer_Wendung"), 0)
self.assertEqual(eas.getE("RA_unidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.getE("RA_bidirektional"), 0)
self.assertEqual(eas.getE("RA_bidirektional_abhebbar"), 0)
self.assertEqual(eas.getE("RA_bidirektional_abhebbar_gemeinsWend"), 0)
self.assertEqual(eas.getE("RA_bidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.getE("RA_in_RSM_bidirektional"), 0)
self.assertEqual(eas.getE("Doppelstreckenantrieb"), 0)
self.assertEqual(eas.getE("Doppelstreckenantriebgemeinsame_Wendung"), 0)
self.assertEqual(eas.getE("gemeinsame_Wendung"), 0)
self.assertEqual(eas.getE("Frequenzumrichter"), 1)
### then the output channels ###
self.assertEqual(eas.getA("Bedienelemente_Steuerschrank"), 16)
# Bedienstation
self.assertEqual(eas.getA("bedienstation_1fach_Not_Aus"), 1)
self.assertEqual(eas.getA("bedienstation_einfach_Zug_Wechseln"), 1)
self.assertEqual(eas.getA("bedienstation_automatische_Umfahrung"), 1)
self.assertEqual(eas.getA("bedienstation_zweifach_Wechs_BCD_10f"), 1)
self.assertEqual(eas.getA("bedienstation_zweifach_Not_Aus_Reset"), 2)
self.assertEqual(eas.getA("bedienst_dreifach"), 3)
self.assertEqual(eas.getA("bedienst_vierfach"), 4)
self.assertEqual(eas.getA("bedienst_sechsfach"), 6)
self.assertEqual(eas.getA("EAs_Unterverteiler_direct"), 6)
# Ermittlung_Mengengeruest_Anzahl
self.assertEqual(eas.getA("Sensor_Traversenabfrage_optisch"), 0)
self.assertEqual(eas.getA("Reflexionslichtschranke_RSM_DIRECT"), 0)
self.assertEqual(eas.getA("Sensor_Stopper_induktiv"), 0)
self.assertEqual(eas.getA("Seilzugschalter"), 0)
self.assertEqual(eas.getA("Weiche"), 1)
self.assertEqual(eas.getA("Weiche_nach_PM_bipolar"), 2)
self.assertEqual(eas.getA("gemeinsame_Weichenrueckstellung"), 1)
self.assertEqual(eas.getA("Dreifach_Weiche_DIRECT"), 2)
self.assertEqual(eas.getA("Kreuzungsweiche"), 10)
self.assertEqual(eas.getA("Stopper"), 1)
self.assertEqual(eas.getA("Ventil_RA_3_2_abhebbar"), 1)
self.assertEqual(eas.getA("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 2)
self.assertEqual(eas.getA("Blitzleuchte_Stoerung"), 1)
self.assertEqual(eas.getA("Schnittstelle_Flyer_ElectroJet"), 2)
self.assertEqual(eas.getA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 2)
self.assertEqual(eas.getA("Schnittstelle_Flyer_Neuhauser"), 4)
self.assertEqual(eas.getA("FEldbux_UV_EinAusgang"), 1)
self.assertEqual(eas.getA("Spulenumsetzstation"), 20)
self.assertEqual(eas.getA("RA_unidirektional"), 1)
self.assertEqual(eas.getA("RA_unidirektional_abhebbar"), 1)
self.assertEqual(eas.getA("RA_unidirektional_mit_gemeinsamer_Wendung"), 1)
self.assertEqual(eas.getA("RA_unidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.getA("RA_bidirektional"), 2)
self.assertEqual(eas.getA("RA_bidirektional_abhebbar"), 2)
self.assertEqual(eas.getA("RA_bidirektional_abhebbar_gemeinsWend"), 1)
self.assertEqual(eas.getA("RA_bidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.getA("RA_in_RSM_bidirektional"), 1)
self.assertEqual(eas.getA("Doppelstreckenantrieb"), 2)
self.assertEqual(eas.getA("Doppelstreckenantriebgemeinsame_Wendung"), 1)
self.assertEqual(eas.getA("gemeinsame_Wendung"), 2)
self.assertEqual(eas.getA("Frequenzumrichter"), 3)
# Test of Sum.
self.assertEqual(eas.get_SE("bedienstation_1fach_Not_Aus"), 0)
self.assertEqual(eas.get_SE("bedienstation_einfach_Zug_Wechseln"), 0)
self.assertEqual(eas.get_SE("bedienstation_automatische_Umfahrung"), 0)
self.assertEqual(eas.get_SE("bedienstation_zweifach_Wechs_BCD_10f"), 50)
self.assertEqual(eas.get_SE("bedienstation_zweifach_Not_Aus_Reset"), 4)
self.assertEqual(eas.get_SE("bedienst_dreifach"), 0)
self.assertEqual(eas.get_SE("bedienst_vierfach"), 0)
self.assertEqual(eas.get_SE("bedienst_sechsfach"), 6)
self.assertEqual(eas.get_SE("EAs_Unterverteiler_direct"), 70)
# Ermittlung_Mengengeruest_Anzahl
self.assertEqual(eas.get_SE("Sensor_Traversenabfrage_optisch"), 11)
self.assertEqual(eas.get_SE("Reflexionslichtschranke_RSM_DIRECT"), 60)
self.assertEqual(eas.get_SE("Sensor_Stopper_induktiv"), 2)
self.assertEqual(eas.get_SE("Seilzugschalter"), 0)
self.assertEqual(eas.get_SE("Weiche"), 0)
self.assertEqual(eas.get_SE("Weiche_nach_PM_bipolar"), 0)
self.assertEqual(eas.get_SE("gemeinsame_Weichenrueckstellung"), 0)
self.assertEqual(eas.get_SE("Dreifach_Weiche_DIRECT"), 0)
self.assertEqual(eas.get_SE("Kreuzungsweiche"), 0)
self.assertEqual(eas.get_SE("Stopper"), 0)
self.assertEqual(eas.get_SE("Ventil_RA_3_2_abhebbar"), 0)
self.assertEqual(eas.get_SE("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 0)
self.assertEqual(eas.get_SE("Blitzleuchte_Stoerung"), 0)
self.assertEqual(eas.get_SE("Schnittstelle_Flyer_ElectroJet"), 2)
self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0)
#self.assertEqual(eas.get_SE("Schnittstelle_Flyer_Neuhauser"), 0) # TODO Check EA Ausgabe
self.assertEqual(eas.get_SE("FEldbux_UV_EinAusgang"), 2)
self.assertEqual(eas.get_SE("Spulenumsetzstation"), 0)
self.assertEqual(eas.get_SE("RA_unidirektional"), 0)
self.assertEqual(eas.get_SE("RA_unidirektional_abhebbar"), 0)
self.assertEqual(eas.get_SE("RA_unidirektional_mit_gemeinsamer_Wendung"), 0)
self.assertEqual(eas.get_SE("RA_unidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.get_SE("RA_bidirektional"), 0)
self.assertEqual(eas.get_SE("RA_bidirektional_abhebbar"), 0)
self.assertEqual(eas.get_SE("RA_bidirektional_abhebbar_gemeinsWend"), 0)
self.assertEqual(eas.get_SE("RA_bidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.get_SE("RA_in_RSM_bidirektional"), 0)
self.assertEqual(eas.get_SE("Doppelstreckenantrieb"), 0)
self.assertEqual(eas.get_SE("Doppelstreckenantriebgemeinsame_Wendung"), 0)
self.assertEqual(eas.get_SE("gemeinsame_Wendung"), 0)
self.assertEqual(eas.get_SE("Frequenzumrichter"), 0)
### output ####
self.assertEqual(eas.get_SA("bedienstation_1fach_Not_Aus"), 0)
self.assertEqual(eas.get_SA("bedienstation_einfach_Zug_Wechseln"), 0)
self.assertEqual(eas.get_SA("bedienstation_automatische_Umfahrung"), 0)
self.assertEqual(eas.get_SA("bedienstation_zweifach_Wechs_BCD_10f"), 10)
self.assertEqual(eas.get_SA("bedienstation_zweifach_Not_Aus_Reset"), 4)
self.assertEqual(eas.get_SA("bedienst_dreifach"), 0)
self.assertEqual(eas.get_SA("bedienst_vierfach"), 0)
self.assertEqual(eas.get_SA("bedienst_sechsfach"), 6)
self.assertEqual(eas.get_SA("EAs_Unterverteiler_direct"), 60)
# Ermittlung_Mengengeruest_Anzahl
self.assertEqual(eas.get_SA("Sensor_Traversenabfrage_optisch"), 0)
self.assertEqual(eas.get_SA("Reflexionslichtschranke_RSM_DIRECT"), 0)
self.assertEqual(eas.get_SA("Sensor_Stopper_induktiv"), 0)
self.assertEqual(eas.get_SA("Seilzugschalter"), 0)
self.assertEqual(eas.get_SA("Weiche"), 44)
self.assertEqual(eas.get_SA("Weiche_nach_PM_bipolar"), 0)
self.assertEqual(eas.get_SA("gemeinsame_Weichenrueckstellung"), 0)
self.assertEqual(eas.get_SA("Dreifach_Weiche_DIRECT"), 2)
self.assertEqual(eas.get_SA("Kreuzungsweiche"), 0)
self.assertEqual(eas.get_SA("Stopper"), 0)
self.assertEqual(eas.get_SA("Ventil_RA_3_2_abhebbar"), 5)
self.assertEqual(eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar"), 164)
self.assertEqual(eas.get_SA("Blitzleuchte_Stoerung"), 3)
self.assertEqual(eas.get_SA("Schnittstelle_Flyer_ElectroJet"), 2)
self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Putzmaschine_ElectroJet"), 0)
self.assertEqual(eas.get_SA("Schnittstelle_Flyer_Neuhauser"), 0)
self.assertEqual(eas.get_SA("FEldbux_UV_EinAusgang"), 1)
self.assertEqual(eas.get_SA("Spulenumsetzstation"), 0)
self.assertEqual(eas.get_SA("RA_unidirektional"), 0)
self.assertEqual(eas.get_SA("RA_unidirektional_abhebbar"), 1)
self.assertEqual(eas.get_SA("RA_unidirektional_mit_gemeinsamer_Wendung"), 0)
self.assertEqual(eas.get_SA("RA_unidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.get_SA("RA_bidirektional"), 0)
self.assertEqual(eas.get_SA("RA_bidirektional_abhebbar"), 8)
self.assertEqual(eas.get_SA("RA_bidirektional_abhebbar_gemeinsWend"), 0)
self.assertEqual(eas.get_SA("RA_bidirektional_ohne_SPS_Ansteuerung"), 0)
self.assertEqual(eas.get_SA("RA_in_RSM_bidirektional"), 0)
self.assertEqual(eas.get_SA("Doppelstreckenantrieb"), 164)
self.assertEqual(eas.get_SA("Doppelstreckenantriebgemeinsame_Wendung"), 0)
self.assertEqual(eas.get_SA("gemeinsame_Wendung"), 0)
self.assertEqual(eas.get_SA("Frequenzumrichter"), 0)
# Zusammenfassung
self.assertEqual(eas.gesamt_E(), 231)
self.assertEqual(eas.gesamt_A(), 490)
def test_EA_implicit(self):
pass
def test_HW(self):
# Anzahl_EAS = {
# "bedienstation_einfach_Zug_Wechseln": 1,
# "Weiche": 2,
# "RA_unidirektional": 1
# }
# Anzahl_HW = {
# "hauptschalter": 2,
# "panel_pc": 1,
# "antrieb_unidirektional_halbleiter": 1,
# }
# mg = MG(deckblatt, {})
# eas = EA(Anzahl_EAS)
# hw = HW(Anzahl_HW, eas)
# hw = HW(Anzahl_HW, mg, eas)
# self.assertEqual(hw.anzahl("hauptschalter"), 2)
# self.assertEqual(hw.anzahl("panel_pc"), 1)
# print (hw)
# #self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 1)
# self.assertEqual(hw.summe_gesamt(), 460.736)
# self.assertEqual(hw.summe_in_LL(), 294)
# self.assertEqual(hw.summe_vorort(), 166.736)
pass
def test_DL(self):
# Anzahl_EAS = {
# "bedienstation_einfach_Zug_Wechseln": 9,
# "Weiche": 16,
# }
pass
def test2():
# Anzahl der für das Projekt benutzten
Anzahl_MG = {
"SYSTEM":"DIRECT",
"RSM":11,
"Flyer":0,
"Flyer_Puffer":2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine":1,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2,
"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2,
"Neuenhauser-Putzmaschine":0,
"Neuenhauser-Putzmaschine_Vorpuffer":0,
"Neuenhauser-Putzmaschine_Nachpuffer":0,
"Cason-Putzmaschine":0,
"Cason-Putzmaschine_Vorpuffer":0,
"Cason-Putzmaschine_Nachpuffer":0,
"Puffer":1,
"Anzahl_der_Pufferstrecken_pro_Puffer":2,
"Begegnungsstrecke_Bypass":0,
"Turm":0,
"Turm_Anzahl_Wendlungen":0,
}
rsm_direct_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0, # wird in deckblatt-Klasse berechnet
#"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,
}
rsm_fa_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl_RSM":0,
#"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert
"Flex_A_Premium":False,
"Getriebe_in_der_Mitte":False,
"RSM_Einfahrt_Ein_Beidseitig":False,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_zusätzlich":0,
#"Bedientableau_1fach":0,
"Bedientableau_1fach_Korrektur":0,
#"Bedientableau_2fach":0,
"Bedientableau_2fach_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
#"RRA_bi":0,
"RRA_bi_Korrektur":0,
"RRA_bi_auf_Haupstrecke":0,
#"RRA_bi_ohne_SPS_Ansteuerung":0,
"gemeinsame_Wendung":0,
#"Seilzugschalter":0,
#"Mit_Drucktaster":0,
"Mit_Drucktaster_Korrektur":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_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":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,
}
verbindungsstrecken_w_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
"Sensor_optisch_Traverse":0,
"Bedientableau_1fach":0,
"Bedientableau_2fach":0,
"Bedientableau_14fach":0,
"Weiche":0,
"Dreifachweiche":0,
"Kreuzungsweiche":0,
"Werma_Rundumleuchte_Störung":0,
"RA_uni":0,
"RA_uni_ohne_SPS_Ansteuerung":0,
"RA_bi":0,
"RA_bi_ohne_SPS-Ansteuerung":0,
"Doppelstreckenantrieb":0
}
puffer_eingabe = {
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
#"Anzahl":0,
#"Puffer":0, #äquivalent zu Anzahl
#"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken
#"Anzahl_Staustrecken":0,
#"Sensor_optisch_Traverse":0,
"Sensor_optisch_Traverse_Korrektur":0,
#"Weiche":0,
"Weiche_Korrektur":0,
"RA_bi_ungerade_Schiene":0,
#"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)
#mg.tofile()
#mg.ztofile()
Anzahl_EAS = {
"bedienstation_einfach_Zug_Wechseln": 1,
"Weiche": 2,
"RA_unidirektional": 1
}
Anzahl_HW = {
"hauptschalter": 2,
"panel_pc": 1,
"antrieb_unidirektional_halbleiter": 1,
}
eas = EA(Anzahl_EAS, mg)
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)
def test_Unittests():
unittest.main()
if __name__ == '__main__':
#test2()
test_Unittests()