2474 lines
118 KiB
Python
2474 lines
118 KiB
Python
#from distutils.log import debug
|
|
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, rsm_direct:dict, rsm_fa:dict, flyer_f40:dict, neuenhauser:dict, flyer:dict, verbindungsstrecken_w:dict, puffer:dict, turm:dict):
|
|
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,
|
|
}
|
|
# wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein
|
|
# wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein
|
|
# wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein
|
|
# wenn Puffer, dann mindestens 2 Strecken
|
|
# Bypass, wenn mindestens 2 Flyer oder 2 RSM
|
|
# Turm: kein Kriterium
|
|
self._RSM_Anzahl = deckblatt.get("RSM", 0)
|
|
rsm_direct_mengen = rsm_direct
|
|
rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt
|
|
rsm_fa_mengen = rsm_fa
|
|
rsm_fa_mengen["Anzahl_RSM"] = self._RSM_Anzahl #übernahme aus deckblatt
|
|
flyer_f40_mengen = flyer_f40
|
|
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 = neuenhauser
|
|
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 = flyer
|
|
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 = puffer
|
|
puffer_mengen["Puffer"] = deckblatt.get("Puffer", 0)
|
|
puffer_mengen["Anzahl_Pufferstrecken"] = deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0)
|
|
turm_mengen = turm
|
|
turm_mengen["Turm"] = deckblatt.get("Turm", 0)
|
|
turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0)
|
|
verbindungsstrecken_w_mengen = verbindungsstrecken_w
|
|
|
|
#ü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 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 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_1-fach": 0,
|
|
"Bedientableau_2-fach": 0,
|
|
"Bedientableau_14-fach": 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)
|
|
|
|
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_1-fach"] = self._rsm_fa._Mengen.get("Bedientableau_1-fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1-fach", 0)
|
|
zmengen["Bedientableau_2-fach"] = self._rsm_direct._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._rsm_fa._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._flyer_f40._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._neuenhauser._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._flyer._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._verbindungsstrecken_w._Mengen.get("Bedientableau_2-fach", 0) +\
|
|
self._turm._Mengen.get("Bedientableau_2-fach", 0)
|
|
zmengen["Bedientableau_14-fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14-fach", 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", 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
|
|
|
|
# RSM_direct:
|
|
class RSM_direct():
|
|
def __init__(self, anzahl:dict):
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
"Anzahl":0,
|
|
#"Anzahl_Strecken/RSM":8,
|
|
"Sensor_optisch_Traverse":0,
|
|
#"Lichtschranke_Traverse":0,
|
|
#"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_Korrektur":0,
|
|
#"Bedientableau_2-fach_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_2-fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach_Korrektur"] = anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach_Direct"] = self._RSM_Anzahl
|
|
self._Mengen["Weiche"] = self._RSM_Anzahl * 4 + anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_Gemeinsame_Rückstellung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0)
|
|
self._Mengen["Weiche_Gemeinsame_Rückstellung_Korrektur"] = anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0)
|
|
self._Mengen["RA_bi_abhebbar"] = math.ceil(self._RSM_Anzahl * 0.31) + anzahl.get("RA_bi_abhebbar_Korrektur", 0)
|
|
self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0)
|
|
self._Mengen["Doppelstreckenantrieb"] = self._RSM_Anzahl * self._Mengen.get("Anzahl_Strecken/RSM", 0)
|
|
self._Mengen["gemeinsame_Wendung"] = math.ceil(self._RSM_Anzahl / 6) * 2
|
|
self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung"] = math.floor(self._RSM_Anzahl / 5) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# RSM_FA:
|
|
class RSM_FA():
|
|
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_1-fach":0,
|
|
"Bedientableau_1-fach_Korrektur":0,
|
|
#"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_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(anzahl.get("Flex-A_Premium", False)):
|
|
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(anzahl.get("Flex-A_Premium", False)):
|
|
tableaufaktor_premium = 0
|
|
if(anzahl.get("RSM-Einfahrt_Ein-/Beidseitig", False)):
|
|
tableaufaktor_beidseitig = 1
|
|
self._Mengen["Bedientableau_1-fach"] = self._RSM_Anzahl*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_1-fach_Korrektur"] = anzahl.get("Bedientableau_1-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach_Korrektur"] = anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
|
|
weichefaktor_premium = 1
|
|
weichefaktor_beidseitig = 0
|
|
if(anzahl.get("Flex-A_Premium", False)):
|
|
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(anzahl.get("Flex-A_Premium", False)):
|
|
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(anzahl.get("Flex-A_Premium", False)):
|
|
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(anzahl.get("Flex-A_Premium", False)):
|
|
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(anzahl.get("Flex-A_Premium", False)):
|
|
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 anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# Flyer_F40_(Electrojet)_incl._Putzmaschine:
|
|
class Flyer_F40_EJet_inc_Putz():
|
|
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_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach"] = self._Flyer_Anzahl + anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach_Korrektur"] = anzahl.get("Bedientableau_2-fach_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)
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# Putzmaschine_(Neuenhauser):
|
|
class Putzmaschine_Neuenhauser():
|
|
def __init__(self, anzahl:dict):
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
#"Anzahl":0,
|
|
"Neuenhauser-Putzmaschine":0,
|
|
"Neuenhauser-Putzmaschine_Vorpuffer":0,
|
|
"Neuenhauser-Putzmaschine_Nachpuffer":0,
|
|
#"Anzahl_Vorstaustrecken":0,
|
|
#"Anzahl_Nachstaustrecken":0,
|
|
#"Sensor_optisch_Traverse":0,
|
|
"Sensor_optisch_Traverse_Korrektur":0,
|
|
#"Sensorik_Zugpositionierung":0,
|
|
#"Sensor_WT18_Spulenprüfung_voll/leer":0,
|
|
#"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
self._Mengen["Bedientableau_2-fach_Korrektur"] = anzahl.get("Bedientableau_2-fach_Korrektur", 0)
|
|
|
|
self._Mengen["Interface_Putzmaschine"] = self._Putze_Anzahl
|
|
self._Mengen["Weiche"] = self._Putze_Anzahl * self._Vorpuffer_Anzahl + anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_nach_PM_(bipolar)"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1)
|
|
self._Mengen["RA_uni_abhebbar"] = self._Putze_Anzahl + anzahl.get("RA_uni_abhebbar_Korrektur", 0)
|
|
self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0)
|
|
self._Mengen["RA_uni_ohne_SPS-Ansteuerung"] = self._Putze_Anzahl
|
|
|
|
self._Mengen["RA_uni_abhebbar_(unger._Sch.)"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/3) + math.floor(self._Nachpuffer_Anzahl/3))
|
|
self._Mengen["Doppelstreckenantrieb"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/2) + math.floor(self._Nachpuffer_Anzahl/2))
|
|
self._Mengen["Meldelampe_Überstrom"] = self._Putze_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung"] = self._Putze_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung"] = self._Putze_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
|
|
# Flyer_(Electrojet):
|
|
class Flyer_EJet():
|
|
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_2-fach":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_2-fach"] = self._Flyer_Anzahl
|
|
self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl
|
|
self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Schienen_Anzahl + anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0)
|
|
self._Mengen["Weiche_nach_Flyer_(bipolar)"] = self._Flyer_Anzahl
|
|
self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0)
|
|
self._Mengen["Wechsel"] = self._Flyer_Anzahl + anzahl.get("Wechsel_Korrektur", 0)
|
|
self._Mengen["Wechsel_Korrektur"] = anzahl.get("Wechsel_Korrektur", 0)
|
|
self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl
|
|
self._Mengen["RA_bi_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RA_bi_abhebbar_(unger._Schiene)", 0) + anzahl.get("RA_bi_abhebbar_Korrektur", 0)
|
|
self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0)
|
|
self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0)
|
|
self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Schienen_Anzahl/2)
|
|
self._Mengen["RA_bi_abhebbar_(unger._Schiene)"] = anzahl.get("RA_bi_abhebbar_(unger._Schiene)", 0)
|
|
self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0)
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# Verbindungsstrecken/_Wechsel:
|
|
class Verbindungsstrecken_Wechsel():
|
|
def __init__(self, anzahl:dict):
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
"Sensor_optisch_Traverse":0,
|
|
"Bedientableau_1-fach":0,
|
|
"Bedientableau_2-fach":0,
|
|
"Bedientableau_14-fach":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_1-fach"] = anzahl.get("Bedientableau_1-fach", 0)
|
|
self._Mengen["Bedientableau_2-fach"] = anzahl.get("Bedientableau_2-fach", 0)
|
|
self._Mengen["Bedientableau_14-fach"] = anzahl.get("Bedientableau_14-fach", 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)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# Puffer
|
|
class Puffer():
|
|
def __init__(self, anzahl:dict):
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
#"Anzahl":0,
|
|
"Puffer":0, #äquivalent zu Anzahl
|
|
"Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken
|
|
#"Anzahl_Staustrecken":0,
|
|
#"Sensor_optisch_Traverse":0,
|
|
"Sensor_optisch_Traverse_Korrektur":0,
|
|
#"Weiche":0,
|
|
"Weiche_Korrektur":0,
|
|
"RA_bi_(ungerade_Schiene)":0,
|
|
#"Doppelstreckenantrieb":0,
|
|
#"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)
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
# Turm
|
|
class Turm():
|
|
mengen = {
|
|
#auskommentiert => kein Übergabeparameter, wird in Klasse berechnet
|
|
#"Anzahl":0,
|
|
"Turm":0, #äquivalent zu Anzahl
|
|
"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken
|
|
#"Anzahl_Staustrecken":0,
|
|
#"Sensor_optisch_Traverse":0,
|
|
#"Weiche":0,
|
|
#"RA_bi":0,
|
|
"RA_bi_Korrektur":0,
|
|
#"RA_bi_ohne_SPS":0,
|
|
"RA_bi_ohne_SPS_Korrektur":0,
|
|
#"Bedientableau_2-fach":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_2-fach"] = self._Turm_Anzahl*2
|
|
|
|
def anzahl(self, partname):
|
|
return self._Mengen.get(partname, 0)
|
|
|
|
def tojson(self):
|
|
return json.dumps(self._Mengen)
|
|
|
|
def mengengeruest(self):
|
|
return self._Mengen
|
|
|
|
|
|
#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, anzahl:dict):
|
|
#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: Formeln...
|
|
print(self._Mengen)
|
|
|
|
|
|
class EA():
|
|
def __init__(self, anzahl:dict):
|
|
# 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),
|
|
# "Sammeleingang_Ueberstrom": (1, 1),
|
|
# "Sammeleingang_Not_Aus": (1, 1),
|
|
# "Sammeleingang_Druckluft_fehlt": (1, 1),
|
|
# "Drucktaster_Reset": (1, 0),
|
|
# "Sammeleingang_Antriebe_abheben": (1, 1),
|
|
# "Reserve": (7, 9),
|
|
"Bedienelemente_Steuerschrank": (16, 16),
|
|
|
|
# Bedienstation,
|
|
"bedienstation_1fach_Not_Aus": (1, 1),
|
|
"bedienstation_einfach_Zug_Wechseln": (1, 1),
|
|
"bedienstation_zweifach_Wechs_BCD_8f": (4, 1),
|
|
"bedienstation_zweifach_Not_Aus_Fahrdauerueb": (2, 2),
|
|
"bedienst_dreifach": (3, 3),
|
|
"bedienst_vierfach": (4, 4),
|
|
"bedienst_sechsfach": (6, 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_mit_gemeinsamer_Rueckstellung": (0, 1),
|
|
"gemeinsame_Weichenrueckstellung": (0, 1),
|
|
"Dreifach_Weiche_DIRECT": (0, 4),
|
|
"Kreuzungsweiche": (0, 10),
|
|
"Stopper": (0, 0),
|
|
"Ventil_RA_3_2_abhebbar": (0, 1),
|
|
"Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2),
|
|
"Blitzleuchte_Stoerung": (0, 1),
|
|
|
|
"Schnittstelle_Flyer_Mazoli": (1, 2),
|
|
"Schnittstelle_Putzmaschine_Cason": (3, 1),
|
|
|
|
"Spulenumsetzstation": (0, 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, 2),
|
|
"RA_in_RSM_bi_Anzahl_Antriebe_je_Seite": (0, 0), # Füll zeile. Eigentlich gibt es hier keine E/As. Dies wird hier nur die Anzahl gebraucht
|
|
"Doppelstreckenantrieb": (0, 2),
|
|
"Doppelstreckenantriebgemeinsame_Wendung": (0, 1),
|
|
"gemeinsame_Wendung": (0, 2),
|
|
}
|
|
|
|
self._Anzahl = anzahl
|
|
Stopper = anzahl.get("Stopper", 0)
|
|
if Stopper > 0:
|
|
self._Anzahl["Sensor_Stopper_induktiv"] = anzahl.get("Stopper", 0)
|
|
|
|
RA_unidirektional_abhebbar = anzahl.get("RA_unidirektional_abhebbar", 0)
|
|
RA_bidirektional_abhebbar = anzahl.get("RA_bidirektional_abhebbar", 0)
|
|
RA_bidirektional_abhebbar_gemeinsWend = anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0)
|
|
Ventil_RA_3_2_abhebbar = RA_unidirektional_abhebbar + \
|
|
RA_bidirektional_abhebbar + RA_bidirektional_abhebbar_gemeinsWend
|
|
if Ventil_RA_3_2_abhebbar > 0:
|
|
self._Anzahl["Ventil_RA_3_2_abhebbar"] = Ventil_RA_3_2_abhebbar
|
|
|
|
Doppelstreckenantrieb = anzahl.get("Doppelstreckenantrieb", 0)
|
|
Doppelstreckenantriebgemeinsame_Wendung = anzahl.get("Doppelstreckenantriebgemeinsame_Wendung", 0)
|
|
Ventil_Doppelstreckenantrieb_5_2_abhebbar = Doppelstreckenantrieb + Doppelstreckenantriebgemeinsame_Wendung
|
|
if Ventil_Doppelstreckenantrieb_5_2_abhebbar > 0:
|
|
self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = Ventil_Doppelstreckenantrieb_5_2_abhebbar
|
|
|
|
# TODO Letzer Abschnit der EAS? "Zentraler Aufbau der SPS..." wo verwendet?
|
|
|
|
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
|
|
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():
|
|
# Einzelteilpreise in €
|
|
ep = {
|
|
# Material Anzahl
|
|
# Material in LL
|
|
# schaltschrank_anzahl
|
|
"schaltschrankgehäuse_und_zubehör": 850,
|
|
"einspeisungssatz": 350,
|
|
"kleinmaterial": 350,
|
|
# _Summe_Schaltschrank
|
|
|
|
# unterverteiler,
|
|
"unterverteilergehäuse_und_zubehör": 850,
|
|
"hauptschalter": 25,
|
|
"hauptschütz": 30,
|
|
"kleinmaterial_unterverteiler": 400,
|
|
# _Summe_Unterverteiler
|
|
# _Anzahl_Unterverteiler
|
|
|
|
"schnittstellenrelais": 5,
|
|
|
|
"antrieb_unidirektional_halbleiter": 55,
|
|
"antrieb_bidirektional_halbleiter": 60,
|
|
"antrieb_unidirektional_schütz": 65,
|
|
"antrieb_bidirektional_schütz": 80,
|
|
"motorschutzschalter": 30,
|
|
"gemeinsame_wendung": 60,
|
|
# _Summe_Motorstarter
|
|
|
|
"bedienstation_1fach": 23,
|
|
"bedienst_2fach_red": 68,
|
|
"bedienstation_2": 52,
|
|
"bedienstation_3": 66,
|
|
"bedienstation_4": 81,
|
|
"bedienstation_6": 109,
|
|
# _Summe_Bedienstationen
|
|
|
|
"panel_pc": 3.736,
|
|
"pc": 1.200,
|
|
"switch": 98,
|
|
"ewon_router_für_fernwartung": 750,
|
|
"drucker": 200,
|
|
# _Summe_PC
|
|
|
|
"profibus_asi_gateway_netzteil": 666,
|
|
"ein_ausgangsmodul": 69,
|
|
"blindverschlüsse": 0,
|
|
"asi_buskabel": 1,
|
|
"buskabel_24V": 1,
|
|
"extension_plug": 39,
|
|
"profibus_stecker": 35,
|
|
# _Summe_ASI_Hardware
|
|
|
|
# bis_64_E/A
|
|
# sps_hardware_vipa_100,
|
|
"cpu_114r_16de_8da": 258,
|
|
"mmc_512kb_memory_64": 30,
|
|
"eingangskarte_8de": 119,
|
|
"ausgangskarte_8da_bereits_integriert": 0,
|
|
"eingangskarte_16de": 230,
|
|
"ausgangskarte_16da_bereits_integriert": 0,
|
|
|
|
# bis_1.000_E_A
|
|
# sps_hardware_siemens_s7_300
|
|
"cpu_315_2_pn_dp_mit_ethernet": 1.625,
|
|
"cpu_315sn_net_vipa": 1.376,
|
|
"mmc_512kb_memory_1000": 130,
|
|
"cpu_317_2_pn_dp_mit_ethernet": 2.872,
|
|
"cpu_317sn_net_vipa": 2.295,
|
|
"cpu_319_2_pn_dp_mit_ethernet": 3.453,
|
|
"mmc_2mb_memory": 186,
|
|
"kommunikationsprozessor_cp_343_1": 983,
|
|
"et200m_anschaltung_im_153": 169,
|
|
"profibusstecker_je_1st_cpu_und_im153": 35,
|
|
"eingangskarte_sm_321_16de": 75,
|
|
"ausgangskarte_sm_322_16da": 103,
|
|
"frontstecker_für_ein_ausgangskarte_16": 16,
|
|
"eingangskarte_sm_321_32de": 149,
|
|
"ausgangskarte_sm_322_32da": 206,
|
|
"frontstecker_für_ein_ausgangskarte_32": 33,
|
|
|
|
# über_1.000_E_A
|
|
# sps_hardware_siemens_s7_400,
|
|
"cpu_414_2": 2.317,
|
|
"baugruppenträger_ur_1": 593,
|
|
"stromversorgung_ps405_230vac10A": 444,
|
|
"pufferbatterie": 8,
|
|
"speicherkarte_2_mb": 543,
|
|
"ethernet_anschaltung_cp443_1": 1.388,
|
|
"eingangskarte_sm_421_32de": 209,
|
|
"ausgangskarte_sm_422_32da": 307,
|
|
"frontstecker_für_ein_ausgangskarte": 27,
|
|
|
|
# _Summe_Material_in_LL
|
|
|
|
# Material_vor_Ort
|
|
"movimot_fu_mit_anschaltung": 550,
|
|
"trolleytraversensabfrage_optisch": 29,
|
|
"reflexionslichtschranke_rsm_direct": 41,
|
|
"stoppersensor_induktiv": 30,
|
|
"seilzugschalter": 150,
|
|
"blitzleuchte": 85,
|
|
"spulenumsetzstation": 0,
|
|
"sensorkabel_je_20m": 20,
|
|
"stopper_weichenkabel_je_5m": 12,
|
|
"motorkabel_je_40m": 16,
|
|
"kabelpritschen_leitern": 10,
|
|
"kabelpritsche_rsm": 4,
|
|
"klemmkasten_flyer_und_putzmaschine": 120,
|
|
"klemmkasten_direct_in_rsm": 90,
|
|
"erdung": 154,
|
|
"kleinteile": 750,
|
|
|
|
"sonstige_kabel_busleitung_etc": 750,
|
|
"zuleitung_unterverteiler_4x10_40m": 144,
|
|
"zuleitung_unterverteiler_7x4_40m": 80,
|
|
"profibuskabel": 30,
|
|
"schnittstellen_8x1mm": 21,
|
|
}
|
|
|
|
Keys_of_LL = ["movimot_fu_mit_anschaltung", "trolleytraversensabfrage_optisch",
|
|
"reflexionslichtschranke_rsm_direct",
|
|
"stoppersensor_induktiv", "seilzugschalter", "blitzleuchte", "spulenumsetzstation",
|
|
"sensorkabel_je_20m",
|
|
"stopper_weichenkabel_je_5m", "motorkabel_je_40m", "kabelpritschen_leitern", "kabelpritsche_rsm",
|
|
"klemmkasten_flyer_und_putzmaschine", "klemmkasten_direct_in_rsm", "erdung", "kleinteile",
|
|
"sonstige_kabel_busleitung_etc", "zuleitung_unterverteiler_4x10_40m",
|
|
"zuleitung_unterverteiler_7x4_40m",
|
|
"profibuskabel", "schnittstellen_8x1mm"]
|
|
|
|
def __init__(self, anzahl:dict, eas: type[EA]):
|
|
self._anzahl = anzahl
|
|
|
|
## Material in LL
|
|
self._anzahl["schnittstellenrelais"] = eas.get_SA("Schnittstelle_Flyer_Mazoli") +\
|
|
eas.get_SA("Schnittstelle_Putzmaschine_Cason")
|
|
|
|
self._anzahl["antrieb_unidirektional_halbleiter"] = eas.anzahl("RA_unidirektional") + \
|
|
eas.anzahl("RA_unidirektional_abhebbar") + \
|
|
eas.anzahl("RA_unidirektional_mit_gemeinsamer_Wendung") + \
|
|
eas.anzahl("RA_unidirektional_ohne_SPS_Ansteuerung") + \
|
|
eas.anzahl("RA_bidirektional_abhebbar_gemeinsWend")
|
|
# self._anzahl["antrieb_bidirektional_halbleiter"] = eas.anzahl("RA_bidirektional") + \
|
|
# eas.anzahl("RA_bidirektional_abhebbar") + \
|
|
# eas.anzahl("RA_bidirektional_ohne_SPS_Ansteuerung") +\
|
|
# eas.anzahl("Doppelstreckenantrieb")
|
|
self._anzahl["antrieb_bidirektional_halbleiter"] = eas.anzahl("RA_bidirektional") + \
|
|
eas.anzahl("RA_bidirektional_abhebbar") + \
|
|
eas.anzahl("RA_bidirektional_abhebbar_gemeinsWend") +\
|
|
eas.anzahl("RA_bidirektional_ohne_SPS_Ansteuerung") +\
|
|
eas.anzahl("RA_in_RSM_bidirektional")
|
|
self._anzahl["antrieb_unidirektional_schütz"] = eas.anzahl("Stopper") + \
|
|
eas.anzahl("Ventil_RA_3_2_abhebbar") + \
|
|
eas.anzahl("Ventil_Doppelstreckenantrieb_5_2_abhebbar")
|
|
self._anzahl["antrieb_bidirektional_schütz"] = eas.anzahl("Blitzleuchte_Stoerung") + \
|
|
eas.anzahl("Ventil_RA_3_2_abhebbar") + \
|
|
eas.anzahl("Ventil_Doppelstreckenantrieb_5_2_abhebbar")
|
|
|
|
self._anzahl["motorschutzschalter"] = eas.anzahl("RA_in_RSM_bidirektional") * eas.anzahl("RA_in_RSM_bi_Anzahl_Antriebe_je_Seite")
|
|
self._anzahl["gemeinsame_wendung"] = eas.anzahl("RA_in_RSM_bidirektional") + eas.anzahl("gemeinsame_Wendung")
|
|
|
|
self._anzahl["bedienstation_1fach"] = eas.anzahl("bedienstation_1fach_Not_Aus") + eas.anzahl("bedienstation_einfach_Zug_Wechseln")
|
|
self._anzahl["bedienst_2fach_red"] = eas.anzahl("bedienstation_zweifach_Wechs_BCD_8f")
|
|
self._anzahl["bedienstation_2"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Fahrdauerueb")
|
|
self._anzahl["bedienstation_3"] = eas.anzahl("bedienst_dreifach")
|
|
self._anzahl["bedienstation_4"] = eas.anzahl("bedienst_vierfach")
|
|
self._anzahl["bedienstation_6"] = eas.anzahl("bedienst_sechsfach")
|
|
|
|
ein_ausgangsmodul = self._anzahl.get("ein_ausgangsmodul", 0)
|
|
profibus_asi_gateway_netzteil = math.ceil(ein_ausgangsmodul / 25) # Excel AUFRUNDEN()
|
|
self._anzahl["profibus_asi_gateway_netzteil"] = profibus_asi_gateway_netzteil
|
|
self._anzahl["blindverschlüsse"] = ein_ausgangsmodul * 2
|
|
self._anzahl["asi_buskabel"] = profibus_asi_gateway_netzteil * 100
|
|
self._anzahl["buskabel_24V"] = profibus_asi_gateway_netzteil * 100
|
|
|
|
self._anzahl["profibus_stecker"] = ein_ausgangsmodul
|
|
|
|
## bis_64_E/A
|
|
self._anzahl["ausgangskarte_8da_bereits_integriert"] = self._anzahl.get("eingangskarte_8de", 0)
|
|
self._anzahl["ausgangskarte_16da_bereits_integriert"] = self._anzahl.get("eingangskarte_16de", 0)
|
|
|
|
## bis_1.000_E_A
|
|
self._anzahl["mmc_512kb_memory_64"] = self._anzahl.get("cpu_315_2_pn_dp_mit_ethernet", 0) + \
|
|
self._anzahl.get("cpu_315sn_net_vipa", 0)
|
|
self._anzahl["mmc_2mb_memory"] = self._anzahl.get("cpu_317_2_pn_dp_mit_ethernet", 0) + \
|
|
self._anzahl.get("cpu_317sn_net_vipa", 0) + \
|
|
self._anzahl.get("cpu_319_2_pn_dp_mit_ethernet", 0)
|
|
|
|
et200m_anschaltung_im_153 = self._anzahl.get("eingangskarte_sm_321_16de", 0) + \
|
|
self._anzahl.get("ausgangskarte_sm_322_16da", 0) + \
|
|
self._anzahl.get("eingangskarte_sm_321_32de", 0) + \
|
|
self._anzahl.get("eingangskarte_sm_321_32da", 0)
|
|
self._anzahl["et200m_anschaltung_im_153"] = math.floor(et200m_anschaltung_im_153 /8) # Excel: ABRUNDEN()
|
|
self._anzahl["profibusstecker_je_1st_cpu_und_im153"] = self._anzahl.get("et200m_anschaltung_im_153", 0) + 1
|
|
self._anzahl["frontstecker_für_ein_ausgangskarte_16"] = self._anzahl.get("eingangskarte_sm_321_16de", 0) + \
|
|
self._anzahl.get("ausgangskarte_sm_322_16da", 0)
|
|
self._anzahl["frontstecker_für_ein_ausgangskarte_32"] = self._anzahl.get("eingangskarte_sm_321_32de", 0) + \
|
|
self._anzahl.get("ausgangskarte_sm_322_32da", 0)
|
|
## über_1.000_E_A
|
|
self._anzahl["frontstecker_für_ein_ausgangskarte_32"] = self._anzahl.get("eingangskarte_sm_421_32de", 0) + \
|
|
self._anzahl.get("ausgangskarte_sm_422_32da", 0)
|
|
|
|
## Material_vor_Ort
|
|
self._anzahl["trolleytraversensabfrage_optisch"] = eas.anzahl("Sensor_Traversenabfrage_optisch")
|
|
self._anzahl["reflexionslichtschranke_rsm_direct"] = eas.anzahl("Reflexionslichtschranke_RSM_DIRECT")
|
|
self._anzahl["stoppersensor_induktiv"] = eas.anzahl("Sensor_Stopper_induktiv")
|
|
self._anzahl["seilzugschalter"] = eas.anzahl("Seilzugschalter")
|
|
self._anzahl["blitzleuchte"] = eas.anzahl("Blitzleuchte_Stoerung")
|
|
self._anzahl["spulenumsetzstation"] = eas.anzahl("Spulenumsetzstation")
|
|
self._anzahl["sensorkabel_je_20m"] = eas.anzahl("Sensor_Traversenabfrage_optisch") +\
|
|
eas.anzahl("Reflexionslichtschranke_RSM_DIRECT") +\
|
|
eas.anzahl("Sensor_Stopper_induktiv") +\
|
|
eas.anzahl("Seilzugschalter")
|
|
self._anzahl["stopper_weichenkabel_je_5m"] = eas.anzahl("Weiche") +\
|
|
eas.anzahl("Weiche_mit_gemeinsamer_Rueckstellung") +\
|
|
eas.anzahl("gemeinsame_Weichenrueckstellung") +\
|
|
eas.anzahl("Dreifach_Weiche_DIRECT") +\
|
|
eas.anzahl("Kreuzungsweiche") +\
|
|
eas.anzahl("Stopper") +\
|
|
eas.anzahl("Ventil_RA_3_2_abhebbar") +\
|
|
eas.anzahl("Ventil_Doppelstreckenantrieb_5_2_abhebbar")
|
|
self._anzahl["motorkabel_je_40m"] = self._anzahl.get("antrieb_unidirektional_halbleiter", 0) +\
|
|
self._anzahl.get("antrieb_bidirektional_halbleiter", 0)
|
|
self._anzahl["klemmkasten_flyer_und_putzmaschine"] = eas.anzahl("Schnittstelle_Flyer_Mazoli") +\
|
|
eas.anzahl("Schnittstelle_Putzmaschine_Cason")
|
|
self._anzahl["klemmkasten_direct_in_rsm"] = eas.anzahl("bedienstation_zweifach_Wechs_BCD_8f")
|
|
# TODO anzahl_unterverteiler ist im hw ein Wert im Excel der von Hand eingetragen werden muss?
|
|
self._anzahl["zuleitung_unterverteiler_4x10_40m"] = eas.anzahl("anzahl_unterverteiler") + 1
|
|
self._anzahl["zuleitung_unterverteiler_7x4_40m"] = eas.anzahl("anzahl_unterverteiler") + 1
|
|
self._anzahl["profibuskabel"] = eas.anzahl("anzahl_unterverteiler") + 1
|
|
# -> end TODO
|
|
self._anzahl["schnittstellen_8x1mm"] = eas.anzahl("Schnittstelle_Flyer_Mazoli") +\
|
|
eas.anzahl("Schnittstelle_Putzmaschine_Cason")
|
|
|
|
|
|
# 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_LL:
|
|
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_LL:
|
|
pass
|
|
else:
|
|
preis = anz * self.ep[k]
|
|
res += preis
|
|
|
|
return res
|
|
|
|
class Dienstleistung():
|
|
|
|
|
|
def __init__(self, Anzahl_DL, ea: type[EA], hw: type[HW]):
|
|
|
|
self._Hours = Anzahl_DL
|
|
|
|
# TODO Warum ist hier RA _uni und _bi mit drin?
|
|
Summe_EA_plus_Antriebe = ea.gesamt_E() + ea.gesamt_A() +\
|
|
ea.anzahl("RA_unidirektional_ohne_SPS_Ansteuerung") +\
|
|
ea.anzahl("RA_bidirektional_ohne_SPS_Ansteuerung")
|
|
# TODO woher kommen die "magic numbers" /8 usw. ?
|
|
self.Hardwareplan_Erstellung_Steuerungslayout = Summe_EA_plus_Antriebe/8* 0.6
|
|
self.Schaltplanerstellung_incl_Korrekturen = Summe_EA_plus_Antriebe/8* 1.25
|
|
self.Materialdisposition = Summe_EA_plus_Antriebe * 0.05
|
|
# hier nur zur visualisierung der Ergebnisse:
|
|
self._Hours["Hardwareplan_Erstellung_Steuerungslayout"] = self.Hardwareplan_Erstellung_Steuerungslayout
|
|
self._Hours["Schaltplanerstellung_incl_Korrekturen"] = self.Schaltplanerstellung_incl_Korrekturen
|
|
self._Hours["Materialdisposition"] = self.Materialdisposition
|
|
|
|
self.Pflichtenheft_Autom_Schnittstellen = Anzahl_DL["Pflichtenheft_Autom_Schnittstellen"]
|
|
# Hardwareplanung
|
|
self.Projektkoordination = Anzahl_DL["Projektkoordination"]
|
|
|
|
self.Abstimmung_mit_E_Werkstatt = Anzahl_DL["Abstimmung_mit_E_Werkstatt"]
|
|
self.Erstellen_E_Montageunterlagen = Anzahl_DL["Erstellen_E_Montageunterlagen"]
|
|
# Test_und_Installation
|
|
self.PC_Installation = Anzahl_DL["PC_Installation"]
|
|
self.Oberfläche_Simulation = Anzahl_DL["Oberfläche_Simulation"]
|
|
self.SPS_Test_im_Haus_Simulation = Anzahl_DL["SPS_Test_im_Haus_Simulation"]
|
|
# Dokumentation
|
|
self.Bedienerhandbuch = Anzahl_DL["Bedienerhandbuch"]
|
|
self.SPS_Doku = Anzahl_DL["SPS_Doku"]
|
|
self.PC_Doku = Anzahl_DL["PC_Doku"]
|
|
# Elektrowerkstatt
|
|
# TODO: Woher kokmmt "Summe Schaltschrank" im Excel Reiter "HW"? woher "Anzahl Unterverteiler" B20? was soll 0.5 * 20 ?
|
|
#self.Schaltschrankbau = hw.anzahl("schaltschrankgehäuse_und_zubehör") * hw.anzahl("summe_schaltschrank")/0.4 +\
|
|
# (hw.anzahl("summe_unterverteiler") * hw.anzahl("unterverteilergehäuse_und_zubehör")) / 0.5 * 20
|
|
self.Schaltschrankbau = 0
|
|
self.Klemmkastenbau_je_1h = hw.anzahl("klemmkasten_direct_in_rsm") + hw.anzahl("klemmkasten_flyer_und_putzmaschine")
|
|
self.Bedientableaubau = ( hw.anzahl("bedienstation_1fach") +\
|
|
hw.anzahl("bedienst_2fach_red") +\
|
|
hw.anzahl("bedienstation_2") +\
|
|
hw.anzahl("bedienstation_3") +\
|
|
hw.anzahl("bedienstation_4") +\
|
|
hw.anzahl("bedienstation_6") ) * 0.5
|
|
# hier nur zur visualisierung der Ergebnisse:
|
|
self._Hours["Schaltschrankbau"] = self.Schaltschrankbau
|
|
self._Hours["Klemmkastenbau_je_1h"] = self.Klemmkastenbau_je_1h
|
|
self._Hours["Bedientableaubau"] = self.Bedientableaubau
|
|
self.Vormontage_im_Haus = Anzahl_DL["Vormontage_im_Haus"]
|
|
|
|
# hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet
|
|
|
|
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 self.Pflichtenheft_Autom_Schnittstellen + self.Hardwareplan_Erstellung_Steuerungslayout + self.Schaltplanerstellung_incl_Korrekturen + self.Projektkoordination + self.Materialdisposition + self.Abstimmung_mit_E_Werkstatt + self.Erstellen_E_Montageunterlagen + self.PC_Installation + self.Oberfläche_Simulation + self.SPS_Test_im_Haus_Simulation + self.Bedienerhandbuch + self.SPS_Doku + self.PC_Doku + self.Schaltschrankbau + self.Klemmkastenbau_je_1h + self.Bedientableaubau + self.Vormontage_im_Haus
|
|
|
|
def stunden_elektrowerkstatt(self):
|
|
return self.Schaltschrankbau + self.Klemmkastenbau_je_1h + self.Bedientableaubau + self.Vormontage_im_Haus
|
|
|
|
def stunden_elektro_Landsberg(self):
|
|
return self.Pflichtenheft_Autom_Schnittstellen + self.Hardwareplan_Erstellung_Steuerungslayout + self.Schaltplanerstellung_incl_Korrekturen + self.Projektkoordination + self.Materialdisposition + self.Abstimmung_mit_E_Werkstatt + self.Erstellen_E_Montageunterlagen + self.PC_Installation + self.Oberfläche_Simulation + self.SPS_Test_im_Haus_Simulation + self.Bedienerhandbuch + self.SPS_Doku + self.PC_Doku
|
|
|
|
class calc_main_tab():
|
|
|
|
# Stundensätze
|
|
Preis_Ewerkstatt = 35 # €/h
|
|
Preis_Dienstl_LL = 50 # €/h
|
|
|
|
SPS_Programmierung = 80 # €/h
|
|
SPS_Programmtest = 80 # €/h
|
|
PC_Visualisierung = 15 # €/h
|
|
|
|
Montage_elektrisch = 50 # €/h
|
|
Inbetriebnahmetest_Hardware_durch_Montage = 50 # €/h
|
|
|
|
SPS_Inbetriebsetzung = 80 # €/h
|
|
PC_Inbetriebsetzung = 80 # €/h
|
|
Inbetriebnahmeunterstützung_durch_Montage = 50 # €/h
|
|
|
|
Übersetzung_Dokumentation = 1.000 # €/h
|
|
Schulung_vor_Ort_beim_Kunden = 50 # €/h
|
|
|
|
Abnahme = 50 # €/h
|
|
|
|
SPS_Anlagenbetreuung = 80 # €/h
|
|
PC_Anlagenbetreuung = 80 # €/h
|
|
Anlagenbetreuung_durch_Montage = 50 # €/h
|
|
|
|
montage_elektrisch = 41 # €/h
|
|
sps_inbetriebsetzung = 41 # €/h
|
|
pc_inbetriebsetzung = 41 # €/h
|
|
hotelkosten_pro_tag = 70 # €/h
|
|
|
|
def __init__(self, hw, dl):
|
|
"""
|
|
|
|
:type dl: class Dienstleistung
|
|
"""
|
|
# KOSTENART
|
|
installationsmaterial_vor_ort = hw.summe_vorort()
|
|
material_in_ll = hw.summe_in_LL()
|
|
HARDWARE_GESAMT = installationsmaterial_vor_ort + hw.summe_in_LL()
|
|
|
|
e_werkstatt = dl.stunden_elektrowerkstatt() * self.Preis_Ewerkstatt
|
|
dienstleistung_in_ll = dl.stunden_elektro_Landsberg() * self.Preis_Dienstl_LL
|
|
sps_programmierung = 7400
|
|
sps_programmtest = 0
|
|
pc_visualisierung = 2000
|
|
|
|
montage_elektrisch = self.Montage_elektrisch * 114
|
|
inbetriebnahmetest_hardware_durch_montage = 0
|
|
|
|
sps_inbetriebsetzung = 0
|
|
pc_inbetriebsetzung = 0
|
|
inbetriebnahmeunterstützung_durch_montage = 0
|
|
|
|
übersetzung_dokumentation = 1000
|
|
schulung_vor_ort_beim_kunden = 0
|
|
|
|
abnahme = 0
|
|
|
|
sps_anlagenbetreuung = 0
|
|
pc_anlagenbetreuung = 0
|
|
anlagenbetreuung_durch_montage = 0
|
|
|
|
# Reisekosten, Spesen
|
|
montage_elektrisch = 0
|
|
sps_inbetriebsetzung = 0
|
|
pc_inbetriebsetzung = 0
|
|
hotelkosten_pro_tag = 0
|
|
|
|
|
|
# Press the green button in the gutter to run the script.
|
|
if __name__ == '__main__':
|
|
# Anzahl der für das Projekt benutzten
|
|
Anzahl_EAS = {
|
|
"Bedienelemente_Steuerschrank" : 1,
|
|
|
|
# Bedienstation,
|
|
"bedienstation_1fach_Not_Aus": 0,
|
|
"bedienstation_einfach_Zug_Wechseln": 9,
|
|
"bedienstation_zweifach_Wechs_BCD_8f": 0,
|
|
"bedienstation_zweifach_Not_Aus_Fahrdauerueb": 4,
|
|
"bedienst_dreifach": 0,
|
|
"bedienst_vierfach": 0,
|
|
"bedienst_sechsfach": 0,
|
|
|
|
# Ermittlung_Mengengeruest
|
|
"Sensor_Traversenabfrage_optisch": 21,
|
|
"Reflexionslichtschranke_RSM_DIRECT": 0,
|
|
|
|
"Seilzugschalter": 0,
|
|
|
|
"Weiche": 16,
|
|
"Weiche_mit_gemeinsamer_Rueckstellung": 0,
|
|
"gemeinsame_Weichenrueckstellung": 0,
|
|
"Dreifach_Weiche_DIRECT": 0,
|
|
"Kreuzungsweiche": 0,
|
|
"Stopper": 3,
|
|
"Blitzleuchte_Stoerung": 2,
|
|
|
|
"Schnittstelle_Flyer_Mazoli": 3,
|
|
"Schnittstelle_Putzmaschine_Cason": 0,
|
|
|
|
"Spulenumsetzstation": 0,
|
|
|
|
"RA_unidirektional": 0,
|
|
"RA_unidirektional_abhebbar": 0,
|
|
"RA_unidirektional_mit_gemeinsamer_Wendung": 9,
|
|
"RA_unidirektional_ohne_SPS_Ansteuerung": 0,
|
|
"RA_bidirektional": 3,
|
|
"RA_bidirektional_abhebbar": 3,
|
|
"RA_bidirektional_abhebbar_gemeinsWend": 0,
|
|
"RA_bidirektional_ohne_SPS_Ansteuerung": 4,
|
|
"RA_in_RSM_bidirektional": 0,
|
|
"RA_in_RSM_bi_Anzahl_Antriebe_je_Seite": 3,
|
|
"Doppelstreckenantrieb": 3,
|
|
"Doppelstreckenantriebgemeinsame_Wendung": 0,
|
|
"gemeinsame_Wendung": 1,
|
|
}
|
|
Anzahl_HW = {
|
|
## Material Anzahl
|
|
## Material in LL
|
|
# schaltschrank_anzahl
|
|
"schaltschrankgehäuse_und_zubehör": 1.2,
|
|
"einspeisungssatz": 1,
|
|
"kleinmaterial": 1,
|
|
|
|
## unterverteiler
|
|
"unterverteilergehäuse_und_zubehör": 2,
|
|
"hauptschalter": 1,
|
|
"hauptschütz": 1,
|
|
"kleinmaterial_unterverteiler": 1,
|
|
#schnittstellenrelais
|
|
#antrieb_unidirektional_halbleiter
|
|
#antrieb_bidirektional_halbleiter
|
|
#antrieb_unidirektional_schütz
|
|
#antrieb_bidirektional_schütz
|
|
#motorschutzschalter
|
|
#gemeinsame_wendung
|
|
#bedienstation_1fach
|
|
#bedienst_2fach_red
|
|
#bedienstation_2"
|
|
#bedienstation_3
|
|
#bedienstation_4
|
|
#bedienstation_6
|
|
|
|
"panel_pc": 0,
|
|
"pc": 1,
|
|
"switch": 2,
|
|
"ewon_router_für_fernwartung": 1,
|
|
"drucker": 0,
|
|
# _Summe_PC
|
|
|
|
"ein_ausgangsmodul": 0,
|
|
"extension_plug": 0,
|
|
|
|
## bis_64_E/A
|
|
## sps_hardware_vipa_100,
|
|
"cpu_114r_16de_8da": 258,
|
|
"mmc_512kb_memory_64": 0,
|
|
"eingangskarte_8de": 0,
|
|
"eingangskarte_16de": 0,
|
|
|
|
## bis_1.000_E_A
|
|
## sps_hardware_siemens_s7_300
|
|
"cpu_315_2_pn_dp_mit_ethernet": 1,
|
|
"cpu_315sn_net_vipa": 0,
|
|
|
|
"cpu_317_2_pn_dp_mit_ethernet": 0,
|
|
"cpu_317sn_net_vipa": 0,
|
|
"cpu_319_2_pn_dp_mit_ethernet": 0,
|
|
|
|
"kommunikationsprozessor_cp_343_1": 0,
|
|
#et200m_anschaltung_im_153
|
|
"profibusstecker_je_1st_cpu_und_im153": 1,
|
|
"eingangskarte_sm_321_16de": 1,
|
|
"ausgangskarte_sm_322_16da": 1,
|
|
#frontstecker_für_ein_ausgangskarte_16
|
|
"eingangskarte_sm_321_32de": 2,
|
|
"ausgangskarte_sm_322_32da": 3,
|
|
#frontstecker_für_ein_ausgangskarte_32
|
|
|
|
## über_1.000_E_A
|
|
## sps_hardware_siemens_s7_400,
|
|
"cpu_414_2": 0,
|
|
"baugruppenträger_ur_1": 0,
|
|
"stromversorgung_ps405_230vac10A": 0,
|
|
"pufferbatterie": 0,
|
|
"speicherkarte_2_mb": 0,
|
|
"ethernet_anschaltung_cp443_1": 0,
|
|
"eingangskarte_sm_421_32de": 0,
|
|
"ausgangskarte_sm_422_32da": 0,
|
|
#frontstecker_für_ein_ausgangskarte
|
|
|
|
## Material_vor_Ort
|
|
"movimot_fu_mit_anschaltung": 0,
|
|
#trolleytraversensabfrage_optisch
|
|
#reflexionslichtschranke_rsm_direct
|
|
#stoppersensor_induktiv
|
|
#seilzugschalter
|
|
#blitzleuchte
|
|
#spulenumsetzstation
|
|
#sensorkabel_je_20m
|
|
#stopper_weichenkabel_je_5m
|
|
#motorkabel_je_40m
|
|
"kabelpritschen_leitern": 117,
|
|
"kabelpritsche_rsm": 0,
|
|
#klemmkasten_flyer_und_putzmaschine
|
|
#klemmkasten_direct_in_rsm
|
|
"erdung": 1,
|
|
"kleinteile": 1,
|
|
|
|
"sonstige_kabel_busleitung_etc": 1,
|
|
#zuleitung_unterverteiler_4x10_40m
|
|
#zuleitung_unterverteiler_7x4_40m
|
|
#profibuskabel
|
|
#schnittstellen_8x1mm
|
|
}
|
|
Anzahl_DL = {
|
|
"Pflichtenheft_Autom_Schnittstellen": 0,
|
|
# Hardwareplanung
|
|
"Projektkoordination": 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
|
|
#Klemmkastenbau_je_1h
|
|
#Bedientableaubau
|
|
"Vormontage_im_Haus": 0,
|
|
}
|
|
|
|
eas = EA(Anzahl_EAS)
|
|
hw = HW(Anzahl_HW, eas)
|
|
dl = Dienstleistung(Anzahl_DL, eas, hw)
|
|
calc_main_tab(hw, dl)
|
|
|
|
def test_deckblatt_neuenhauser(self, deckblatt:MG):
|
|
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"), 319)
|
|
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_2-fach"), 11)
|
|
self.assertEqual(deckblatt._neuenhauser.anzahl("Interface_Putzmaschine"), 11)
|
|
self.assertEqual(deckblatt._neuenhauser.anzahl("Weiche"), 132)
|
|
|
|
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_2-fach":0,
|
|
"Bedientableau_2-fach_Korrektur":4,
|
|
#"Bedientableau_2-fach_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_1-fach":0,
|
|
"Bedientableau_1-fach_Korrektur":3,
|
|
#"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":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_2-fach":0,
|
|
}
|
|
|
|
|
|
deckblatt = MG(deckblatt_eingabe, rsm_direct_eingabe, rsm_fa_eingabe, flyer_f40_eingabe, neuenhauser_eingabe, flyer_eingabe, puffer_eingabe, 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_2-fach"), 6)
|
|
# self.assertEqual(deckblatt._rsm_direct.anzahl("Bedientableau_2-fach_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_1-fach"), 29)
|
|
# self.assertEqual(deckblatt._rsm_fa.anzahl("Bedientableau_2-fach"), 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_2-fach"), 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_2-fach"), 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_2-fach"), 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_2-fach"), 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_2-fach"), 4)
|
|
|
|
|
|
|
|
def test_RSM_direct(self):
|
|
Anzahl_RSM = {
|
|
"Anzahl":0,
|
|
"Sensor_optisch_Traverse":0,
|
|
"Bedientableau_2-fach_Korrektur":0,
|
|
"Weiche_Korrektur":0,
|
|
"Weiche_Gemeinsame_Rückstellung_Korrektur":0,
|
|
"RA_bi_abhebbar_Korrektur":0,
|
|
"Meldelampe_Überstrom_Korrektur":0,
|
|
"Hauptschalter_Ein-Meldung_Korrektur":0,
|
|
"Werma_Rundumleuchte_Störung_Korrektur":0,
|
|
}
|
|
cont = {
|
|
"Anzahl":0,
|
|
"Anzahl_Strecken/RSM":0,
|
|
"Sensor_optisch_Traverse":0,
|
|
"Lichtschranke_Traverse":0,
|
|
"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_Korrektur":0,
|
|
"Bedientableau_2-fach_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,
|
|
}
|
|
mg = RSM_direct(Anzahl_RSM)
|
|
self.assertEqual(mg.anzahl("Anzahl_Strecken/RSM"), 8)
|
|
|
|
|
|
def test_EA(self):
|
|
Anzahl_EAS = {
|
|
"bedienstation_einfach_Zug_Wechseln": 9,
|
|
"Weiche": 16,
|
|
}
|
|
eas = EA(Anzahl_EAS)
|
|
self.assertEqual(eas.anzahl("bedienstation_einfach_Zug_Wechseln"), 9)
|
|
self.assertEqual(eas.anzahl("Weiche"), 16)
|
|
|
|
self.assertEqual(eas.getE("bedienstation_einfach_Zug_Wechseln"), 1)
|
|
self.assertEqual(eas.getA("bedienstation_einfach_Zug_Wechseln"), 1)
|
|
self.assertEqual(eas.getE("Weiche"), 0)
|
|
self.assertEqual(eas.getA("Weiche"), 1)
|
|
|
|
self.assertEqual(eas.getE("Bedienelemente_Steuerschrank"), 16)
|
|
self.assertEqual(eas.getA("Bedienelemente_Steuerschrank"), 16)
|
|
|
|
self.assertEqual(repr(eas), "{'bedienstation_einfach_Zug_Wechseln': 9, 'Weiche': 16}")
|
|
|
|
self.assertEqual(eas.get_SE("bedienstation_einfach_Zug_Wechseln"), 9)
|
|
self.assertEqual(eas.get_SA("bedienstation_einfach_Zug_Wechseln"), 9)
|
|
self.assertEqual(eas.get_SE("Weiche"), 0)
|
|
self.assertEqual(eas.get_SA("Weiche"), 16)
|
|
|
|
self.assertEqual(eas.gesamt_E(), 9)
|
|
self.assertEqual(eas.gesamt_A(), 25)
|
|
|
|
|
|
def test_EA_implicit(self):
|
|
Anzahl_EAS = {
|
|
"Stopper": 5,
|
|
}
|
|
eas = EA(Anzahl_EAS)
|
|
self.assertEqual(eas.anzahl("Stopper"), 5)
|
|
|
|
self.assertEqual(eas.getE("Stopper"), 0)
|
|
self.assertEqual(eas.getA("Stopper"), 0)
|
|
|
|
# Sensor für Stopper wird automatisch hinzugefügt
|
|
self.assertEqual(repr(eas), "{'Stopper': 5, 'Sensor_Stopper_induktiv': 5}")
|
|
|
|
self.assertEqual(eas.gesamt_E(), 5)
|
|
self.assertEqual(eas.gesamt_A(), 0)
|
|
|
|
|
|
def test_EA_A_La_Presa(self):
|
|
|
|
Anzahl_EAS_A_La_Presa = {
|
|
"Bedienelemente_Steuerschrank": 1,
|
|
"bedienstation_einfach_Zug_Wechseln": 9,
|
|
"bedienstation_zweifach_Not_Aus_Fahrdauerueb": 4,
|
|
"Sensor_Traversenabfrage_optisch": 21,
|
|
"Weiche": 16,
|
|
"Stopper": 3,
|
|
"Blitzleuchte_Stoerung": 2,
|
|
"Schnittstelle_Flyer_Mazoli": 3,
|
|
"RA_unidirektional_mit_gemeinsamer_Wendung": 9,
|
|
"RA_bidirektional": 3,
|
|
"RA_bidirektional_abhebbar": 3,
|
|
"RA_bidirektional_ohne_SPS_Ansteuerung": 4,
|
|
"RA_in_RSM_bi_Anzahl_Antriebe_je_Seite": 3,
|
|
"Doppelstreckenantrieb": 3,
|
|
"gemeinsame_Wendung": 1,
|
|
}
|
|
eas_alapresa = EA(Anzahl_EAS_A_La_Presa)
|
|
self.assertEqual(eas_alapresa.gesamt_E(), 60)
|
|
self.assertEqual(eas_alapresa.gesamt_A(), 95)
|
|
|
|
res_eas_alapresa_E = eas_alapresa.gesamt_E()*1.15
|
|
res_eas_alapresa_A = eas_alapresa.gesamt_A()*1.15
|
|
self.assertEqual(math.floor(res_eas_alapresa_E), 69)
|
|
self.assertEqual(math.floor(res_eas_alapresa_A), 109)
|
|
|
|
def test_HW_A_La_Presa(self):
|
|
Anzahl_EAS_A_La_Presa = {
|
|
"Bedienelemente_Steuerschrank": 1,
|
|
"bedienstation_einfach_Zug_Wechseln": 9,
|
|
"bedienstation_zweifach_Not_Aus_Fahrdauerueb": 4,
|
|
"Sensor_Traversenabfrage_optisch": 21,
|
|
"Weiche": 16,
|
|
"Stopper": 3,
|
|
"Blitzleuchte_Stoerung": 2,
|
|
"Schnittstelle_Flyer_Mazoli": 3,
|
|
"RA_unidirektional_mit_gemeinsamer_Wendung": 9,
|
|
"RA_bidirektional": 3,
|
|
"RA_bidirektional_abhebbar": 3,
|
|
"RA_bidirektional_ohne_SPS_Ansteuerung": 4,
|
|
"RA_in_RSM_bi_Anzahl_Antriebe_je_Seite": 3,
|
|
"Doppelstreckenantrieb": 3,
|
|
"gemeinsame_Wendung": 1,
|
|
}
|
|
Anzahl_HW_A_La_Presa = {
|
|
# Material Anzahl
|
|
# Material in LL
|
|
# schaltschrank_anzahl
|
|
"schaltschrankgehäuse_und_zubehör": 1.2,
|
|
"einspeisungssatz": 1,
|
|
"kleinmaterial": 1,
|
|
# _Summe_Schaltschrank
|
|
|
|
# unterverteiler,
|
|
"unterverteilergehäuse_und_zubehör": 2,
|
|
"hauptschalter": 1,
|
|
"hauptschütz": 1,
|
|
"kleinmaterial_unterverteiler": 1,
|
|
# _Summe_Unterverteiler
|
|
# _Anzahl_Unterverteiler
|
|
|
|
"schnittstellenrelais": 6,
|
|
|
|
"antrieb_unidirektional_halbleiter": 9,
|
|
"antrieb_bidirektional_halbleiter": 13,
|
|
"antrieb_unidirektional_schütz": 0,
|
|
"antrieb_bidirektional_schütz": 0,
|
|
"motorschutzschalter": 0,
|
|
"gemeinsame_wendung": 1,
|
|
# _Summe_Motorstarter
|
|
|
|
"bedienstation_1fach": 9,
|
|
"bedienst_2fach_red": 0,
|
|
"bedienstation_2": 4,
|
|
"bedienstation_3": 0,
|
|
"bedienstation_4": 0,
|
|
"bedienstation_6": 0,
|
|
# _Summe_Bedienstationen
|
|
|
|
"panel_pc": 0,
|
|
"pc": 1,
|
|
"switch": 2,
|
|
"ewon_router_für_fernwartung": 1,
|
|
"drucker": 0,
|
|
# _Summe_PC
|
|
|
|
"profibus_asi_gateway_netzteil": 0,
|
|
"ein_ausgangsmodul": 0,
|
|
"blindverschlüsse": 0,
|
|
"asi_buskabel": 0,
|
|
"buskabel_24V": 0,
|
|
"extension_plug": 0,
|
|
"profibus_stecker": 0,
|
|
# _Summe_ASI_Hardware
|
|
|
|
# bis_64_E/A
|
|
# sps_hardware_vipa_100,
|
|
"cpu_114r_16de_8da": 0,
|
|
"mmc_512kb_memory_64": 0,
|
|
"eingangskarte_8de": 0,
|
|
"ausgangskarte_8da_bereits_integriert": 0,
|
|
"eingangskarte_16de": 0,
|
|
"ausgangskarte_16da_bereits_integriert": 0,
|
|
|
|
# bis_1.000_E_A
|
|
# sps_hardware_siemens_s7_300
|
|
"cpu_315_2_pn_dp_mit_ethernet": 1,
|
|
"cpu_315sn_net_vipa": 0,
|
|
"mmc_512kb_memory_1000": 1,
|
|
"cpu_317_2_pn_dp_mit_ethernet": 0,
|
|
"cpu_317sn_net_vipa": 0,
|
|
"cpu_319_2_pn_dp_mit_ethernet": 0,
|
|
"mmc_2mb_memory": 0,
|
|
"kommunikationsprozessor_cp_343_1": 0,
|
|
"et200m_anschaltung_im_153": 0,
|
|
"profibusstecker_je_1st_cpu_und_im153": 1,
|
|
"eingangskarte_sm_321_16de": 1,
|
|
"ausgangskarte_sm_322_16da": 1,
|
|
"frontstecker_für_ein_ausgangskarte_16": 2,
|
|
"eingangskarte_sm_321_32de": 2,
|
|
"ausgangskarte_sm_322_32da": 3,
|
|
"frontstecker_für_ein_ausgangskarte_32": 5,
|
|
|
|
# über_1.000_E_A
|
|
# sps_hardware_siemens_s7_400,
|
|
"cpu_414_2": 0,
|
|
"baugruppenträger_ur_1": 0,
|
|
"stromversorgung_ps405_230vac10A": 0,
|
|
"pufferbatterie": 0,
|
|
"speicherkarte_2_mb": 0,
|
|
"ethernet_anschaltung_cp443_1": 0,
|
|
"eingangskarte_sm_421_32de": 0,
|
|
"ausgangskarte_sm_422_32da": 0,
|
|
"frontstecker_für_ein_ausgangskarte": 0,
|
|
|
|
# _Summe_Material_in_LL
|
|
|
|
# Material_vor_Ort
|
|
"movimot_fu_mit_anschaltung": 0,
|
|
"trolleytraversensabfrage_optisch": 21,
|
|
"reflexionslichtschranke_rsm_direct": 0,
|
|
"stoppersensor_induktiv": 3,
|
|
"seilzugschalter": 0,
|
|
"blitzleuchte": 2,
|
|
"spulenumsetzstation": 0,
|
|
"sensorkabel_je_20m": 24,
|
|
"stopper_weichenkabel_je_5m": 25,
|
|
"motorkabel_je_40m": 22,
|
|
"kabelpritschen_leitern": 117,
|
|
"kabelpritsche_rsm": 0,
|
|
"klemmkasten_flyer_und_putzmaschine": 3,
|
|
"klemmkasten_direct_in_rsm": 0,
|
|
"erdung": 1,
|
|
"kleinteile": 1,
|
|
|
|
"sonstige_kabel_busleitung_etc": 1,
|
|
"zuleitung_unterverteiler_4x10_40m": 1,
|
|
"zuleitung_unterverteiler_7x4_40m": 1,
|
|
"profibuskabel": 1,
|
|
"schnittstellen_8x1mm": 3,
|
|
}
|
|
|
|
|
|
hw = HW(Anzahl_HW_A_La_Presa, EA(Anzahl_EAS_A_La_Presa))
|
|
|
|
self.assertEqual(hw.anzahl("schaltschrankgehäuse_und_zubehör"), 1.2)
|
|
self.assertEqual(hw.anzahl("einspeisungssatz"), 1)
|
|
self.assertEqual(hw.anzahl("kleinmaterial"), 1)
|
|
self.assertEqual(hw.anzahl("unterverteilergehäuse_und_zubehör"), 2)
|
|
self.assertEqual(hw.anzahl("hauptschalter"), 1)
|
|
self.assertEqual(hw.anzahl("hauptschütz"), 1)
|
|
self.assertEqual(hw.anzahl("kleinmaterial_unterverteiler"), 1)
|
|
|
|
self.assertEqual(hw.anzahl("schnittstellenrelais"), 6)
|
|
|
|
self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 9)
|
|
#self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 13)
|
|
#self.assertEqual(hw.anzahl("antrieb_unidirektional_schütz"), 0)
|
|
#self.assertEqual(hw.anzahl("antrieb_bidirektional_schütz"), 0)
|
|
self.assertEqual(hw.anzahl("motorschutzschalter"), 0)
|
|
self.assertEqual(hw.anzahl("gemeinsame_wendung"), 1)
|
|
|
|
|
|
#self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 13) #in HW korrekte Rechnung auskommentiert?
|
|
#self.assertEqual(hw.summe_in_LL(), 8727)
|
|
#self.assertEqual(hw.summe_vorort(), 5503)
|
|
#self.assertEqual(hw.summe_gesamt(), 14230)
|
|
|
|
|
|
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,
|
|
}
|
|
eas = EA(Anzahl_EAS)
|
|
hw = HW(Anzahl_HW, 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)
|
|
|
|
|
|
# TODO: Check dependencies step by step
|
|
# print(hw)
|
|
|
|
|
|
# def test_DL(self):
|
|
# Anzahl_EAS = {
|
|
# "bedienstation_einfach_Zug_Wechseln": 9,
|
|
# "Weiche": 16,
|
|
# }
|
|
# eas
|
|
|
|
#if __name__ == '__main__':
|
|
# unittest.main()
|
|
|
|
if __name__ == '__main__':
|
|
# 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_2-fach":0,
|
|
"Bedientableau_2-fach_Korrektur":0,
|
|
#"Bedientableau_2-fach_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_1-fach":0,
|
|
"Bedientableau_1-fach_Korrektur":0,
|
|
#"Bedientableau_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":0,
|
|
"Bedientableau_2-fach_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_2-fach":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_1-fach":0,
|
|
"Bedientableau_2-fach":0,
|
|
"Bedientableau_14-fach":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_2-fach":0,
|
|
}
|
|
#mg = MG(Anzahl_MG, rsm_direct_eingabe, rsm_fa_eingabe, flyer_f40_eingabe, neuenhauser_eingabe, flyer_eingabe, verbindungsstrecken_w_eingabe, puffer_eingabe, turm_eingabe)
|
|
#mg.tofile()
|
|
#mg.ztofile()
|
|
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(emo_eingabe)
|