diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2e7e6bb --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Verwendet IntelliSense zum Ermitteln möglicher Attribute. + // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen. + // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python-Modul", + "type": "python", + "request": "launch", + "program": "${file}", + + "justMyCode": true + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 2b7e46d..185b2fd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "python.formatting.provider": "yapf" + "python.formatting.provider": "yapf", + "python.analysis.typeCheckingMode": "off" } \ No newline at end of file diff --git a/Abfrage_Sivas.py b/Abfrage_Sivas.py index d9dcdd1..82ec515 100644 --- a/Abfrage_Sivas.py +++ b/Abfrage_Sivas.py @@ -1,6 +1,7 @@ import pandas as pd import configparser import os.path +import argparse """ Erstellung einer Excel-Datei mit aktuellen Preisen aus Sivas ist leicht möglich. @@ -8,15 +9,7 @@ Diese soll in einer config-Datei für die Berechnung der rieter-eKalkulation ver Den Parametern der rieter_ekalk werden die entsprechenden Sivas-Nummern zugewiesen, und damit die aktuellen Preise. Diese Zuordnung von Parametern und ihren aktuellen Preisen wird wieder in eine config-Datei geschrieben, die mit den Preisen der Sivas_Daten.cfg-Datei abzugleichen ist, auf die rieter_ekalk zugreift. """ -faktoren_sivas_Nummern = { -"zuleitung_75_m_unterverteiler_4x4mm2_400vac":75, -"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":75, -"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":75, -"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":55, -"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":55, -"schnittstellen_8x1mm2_30m":30 -} class Kosten(): """ Liest die Sivas-Excel-Liste ein und schreibt eine neue config Datei mit den aktuellen Preisen der in rieter-ekalk verwendeten Sivas-IDs. @@ -143,13 +136,31 @@ class Kosten(): df.to_excel(name, sheet_name="Preisänderungen", index_label="Sivas-Nummern") -# lies die alte config und die Excel-Liste mit den Sivas-Daten -costs = Kosten() -not_found_in_sivas = dict() -latest_costs = costs.getNewPricesAsDict(not_found_in_sivas) -# schreibe die neue config mit den aktuellen Preisen -costs.writeNewConfig('Sivas_Abgleich.cfg') -# schreibe die Preisänderungen in eine Excel-Datei -costs.writePriceIncrements('Preis_Increments.xlsx') +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='calculation of a system according to Bös', prog='ecalc') + parser.add_argument('-o', '--outfile', action='store', help='name of the output excel file', default="Preis_Increments.xlsx") + + args = parser.parse_args() + zuordCfgFilePath = os.path.join(os.environ.get('ECALC_CFG'), "Zuordnung_Teilenummern.cfg") + sivasCfgFilePath = os.path.join(os.environ.get('ECALC_CFG'), "Sivas_Daten.cfg") + gridExportFilePath = os.path.join(os.environ.get('ECALC_CFG'), "grid_export.xlsx") + + if not os.path.isfile(zuordCfgFilePath): + print("no Zuordnung_Teilenummern.cfg in ECALC_CFG") + if not os.path.isfile(sivasCfgFilePath): + print("no Sivas_Daten.cfg in ECALC_CFG") + if not os.path.isfile(gridExportFilePath): + print("no grid_export.xlsx with prices from SIVAS in ECALC_CFG") + + # lies die alten config und die Excel-Liste mit den Sivas-Daten + costs = Kosten(zuordCfgFilePath, sivasCfgFilePath, gridExportFilePath) + not_found_in_sivas = dict() + latest_costs = costs.getNewPricesAsDict(not_found_in_sivas) + # schreibe die neue config mit den aktuellen Preisen + costs.writeNewConfig('Sivas_Abgleich.cfg') + + # schreibe die Preisänderungen in eine Excel-Datei + outPath = os.path.join(os.environ.get('ECALC_WORK'), args.outfile) + costs.writePriceIncrements(outPath) \ No newline at end of file diff --git a/Sivas_Abgleich.cfg b/Sivas_Abgleich.cfg index 713a617..002f5d9 100644 --- a/Sivas_Abgleich.cfg +++ b/Sivas_Abgleich.cfg @@ -77,8 +77,8 @@ sensor_spulenpruefung_voll_leer = 345.6954020423345 seilzugschalter = 223.74 seil_fuer_seilzugschalter = 0.299 blitzleuchte = 64.29 -sensorkabel_je_20m = 12.9424 -stopper_weichenkabel_je_5m = 15.406 +sensorkabel_je_20m = 6.4712 +stopper_weichenkabel_je_5m = 1.5406000000000002 motorkabel_je_30m = 21.212410173633465 kabelpritschen_leitern_200_60 = 7.859553174017099 kabelpritsche_rsm_100_60 = 5.95 diff --git a/bin/ecalc.bat b/bin/ecalc.bat new file mode 100644 index 0000000..7a26228 --- /dev/null +++ b/bin/ecalc.bat @@ -0,0 +1,2 @@ +call ecalc_setenv.bat +python %ECALC_LIB%\calc_site.py %* diff --git a/bin/ecalcJayJay.bat b/bin/ecalcJayJay.bat new file mode 100644 index 0000000..1acd4d9 --- /dev/null +++ b/bin/ecalcJayJay.bat @@ -0,0 +1,2 @@ +call ecalc_setenv.bat +python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg diff --git a/bin/ecalc_setenv.bat b/bin/ecalc_setenv.bat new file mode 100644 index 0000000..5742787 --- /dev/null +++ b/bin/ecalc_setenv.bat @@ -0,0 +1,10 @@ +@echo off +set ECALC=C:\Users\m.stangl\Documents\02-Verbesserungen\06-Rieter-Kalkulationen\Rieter-EKalk +set ECALC_BIN=%ECALC%\bin +set ECALC_WORK=%ECALC%\work +set ECALC_CFG=%ECALC%\cfg +set ECALC_LIB=%ECALC%\lib + +set PATH=%ECALC%\bin;%PATH% +REM PYTHON_INCLUDE_DIR +REM PYTHON_LIBRARY diff --git a/cfg/Sivas_Abgleich.cfg b/cfg/Sivas_Abgleich.cfg new file mode 100644 index 0000000..713a617 --- /dev/null +++ b/cfg/Sivas_Abgleich.cfg @@ -0,0 +1,101 @@ +[HW_Einzelpreise] +schaltschrankgehaeuse_b1x800_zubehoer = 2877.85 +schaltschrankgehaeuse_b2x800_zubehoer = 4972.14 +schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5994.88 +sps_simatic_s7_cpu315_2_pn_dp = 2237.25 +speicherkarte_fuer_sps_512_kb = 172.5 +sps_simatic_s7_cpu317_2_pn_dp = 3957.0 +speicherkarte_fuer_sps2_mb = 246.0 +sps_simatic_s7_1515_2 = 2150.8 +sps_simatic_s7_1517_3 = 4305.55 +sps_simatic_s7_1518_4 = 5892.0 +sps_et200_1512sp = 705.75 +memory_card_2_gb = 515.9 +et200_sp_ea_ebene = 417.48 +netzwerk_fernwartung = 678.15 +abgang_400v = 213.35 +abgang_24_v = 99.41 +anlagenrechner = 1427.05 +anlagenrechner_ohne_bildschirm = 1269.8367055018189 +pulteinbau_monitor_srline_rflat_24fhd = 968.0 +kurzhubtastatur_kbt06_mit_touchpad_uslayout = 326.0 +netzwerk_display_adapter_lindy = 481.98 +zusaetzlicher_bildschirm = 170.0 +unterverteiler_fuer_1neuenhauser_pm = 701.05 +unterverteiler_fuer_1flyer = 1634.74 +unterverteiler_fuer_2flyer = 2324.64 +unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine = 701.05 +unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine = 701.05 +unterverteiler_fuer_puffer = 2180.42 +unterverteiler_fuer_5_rsm_fa = 2601.27 +unterverteiler_fuer_10_rsm_fa = 2180.42 +unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar = 3059.28 +unterverteiler_fuer_4_rsm_direct = 5897.51 +unterverteiler_fuer_12_rsm_direct = 9125.58 +unterverteiler_fuer_8_rsm_direct = 7330.96 +busverteiler_6_rsm_direct = 1746.36 +busverteiler_8_rsm_direct = 2052.26 +antrieb_unidirektional_halbleiter = 71.39 +antrieb_bidirektional_halbleiter = 76.2256573006879 +antrieb_unidirektional_schuetz = 68.5 +antrieb_bidirektional_schuetz = 123.18 +motorschutzschalter = 37.77 +wendeschuetzschaltung = 27.25 +bedienstation_1fach_kpl = 38.52 +bedienst_2fach_wechs_bcd_10f = 94.87 +bedienstation_2fach_kpl = 67.48290909090909 +halter_bedientableau_2fach = 34.84 +bedienstation_3fach_kpl = 88.32432432432432 +halter_bedientableau_3fach = 23.99 +bedienstation_4fach_kpl = 102.50559670781892 +halter_bedientableau_4fach = 30.49 +bedienstation_6fach_kpl = 91.33 +halter_bedientableau_6fach = 26.19 +drucktaster_automatische_umfahrung = 46.57 +et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45 = 198.9 +et200_sp_eingangskarte_8_de = 31.59 +et200_sp_eingangskarte_16_de = 57.1 +et200_sp_eingangskarte_8_do = 43.22 +et200_sp_eingangskarte_16_do = 66.3 +et200_sp_base_unit_neue_last_mit_potklemmen = 21.09 +et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen = 13.39 +et200_sp_base_unit_neue_last = 16.621860966339366 +et200_sp_base_unit_links_gebrueckt = 9.815854569787543 +et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_slio = 164.20142857142858 +slio_eingangskarte_4_de = 23.915 +slio_eingangskarte_8_de = 31.68 +slio_ausgangskarte_4_do = 31.59 +slio_ausgangskarte_8_do = 31.59 +slio_power_modul = 21.09 +slio_4_x_dc_24v_4_x_dc_0v = 13.39 +slio_8_x_dc_24v = 16.621860966339366 +slio_8_x_dc_0v = 9.815854569787543 +sensor_optisch_traverse = 29.41 +reflexionslichtschranke_rsm_direct = 44.88 +stoppersensor_induktiv_mit_halter = 38.08 +sensor_spulenpruefung_voll_leer = 345.6954020423345 +seilzugschalter = 223.74 +seil_fuer_seilzugschalter = 0.299 +blitzleuchte = 64.29 +sensorkabel_je_20m = 12.9424 +stopper_weichenkabel_je_5m = 15.406 +motorkabel_je_30m = 21.212410173633465 +kabelpritschen_leitern_200_60 = 7.859553174017099 +kabelpritsche_rsm_100_60 = 5.95 +kabelpritsche_rsm_50_35 = 6.1 +klemmkasten_rsm = 142.96 +klemmkasten_direct_in_rsm = 93.67 +zuleitung_75_m_unterverteiler_4x4mm2_400vac = 149.959130518692 +zuleitung_75_m_unterverteiler_12x4mm2_24_vdc = 414.68625 +zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc = 414.68625 +zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm = 124.1031862745098 +zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm = 88.5401 +profinetkabel = 44.4 +schnittstellen_8x1mm2_30m = 33.07799374121692 + +[Preise durch Sivas nicht ermittelbar] +erdung = ---- +kleinteile_rohre_schellen_kabelbinder_ect = ---- +kabel_fuer_klemmkasten_und_bts_60m = ---- +kabel_fuer_1fach_bts_zug_wechseln = ---- + diff --git a/Sivas_Daten.cfg b/cfg/Sivas_Daten.cfg similarity index 100% rename from Sivas_Daten.cfg rename to cfg/Sivas_Daten.cfg diff --git a/Zuordnung_Teilenummern.cfg b/cfg/Zuordnung_Teilenummern.cfg similarity index 100% rename from Zuordnung_Teilenummern.cfg rename to cfg/Zuordnung_Teilenummern.cfg diff --git a/convert_.txt b/convert_.txt deleted file mode 100644 index 2232e5f..0000000 --- a/convert_.txt +++ /dev/null @@ -1 +0,0 @@ -{"Bedienelemente_Steuerschrank": 1, "bedienstation_einfach_Zug_Wechseln": 14, "bedienstation_automatische_Umfahrung": 0, "bedienstation_zweifach_Wechs_BCD_10f": 0, "bedienstation_zweifach_Not_Aus_Reset": 10, "bedienst_dreifach": 0, "bedienst_vierfach": 0, "bedienst_sechsfach": 0, "EAs_Unterverteiler_direct": 0, "Sensor_Traversenabfrage_optisch": 68, "Reflexionslichtschranke_RSM_DIRECT": 0, "Sensor induktiv Flyer+PM": 4, "Seilzugschalter": 0, "Weiche": 35, "Weiche_nach_PM_bipolar": 0, "gemeinsame_Weichenrueckstellung": 0, "Dreifach_Weiche_DIRECT": 0, "Kreuzungsweiche": 1, "Stopper": 0, "RA_unidirektional": 4, "RA_unidirektional_abhebbar": 0, "RA_unidirektional_mit_gemeinsamer_Wendung": 0, "RA_unidirektional_ohne_SPS_Ansteuerung": 0, "RA_bidirektional": 30, "RA_bidirektional_abhebbar": 4, "RA_bidirektional_abhebbar_gemeinsWend": 0, "RA_bidirektional_ohne_SPS_Ansteuerung": 4, "RA_in_RSM_bidirektional": 0, "Doppelstreckenantrieb": 6, "Doppelstreckenantriebgemeinsame_Wendung": 0, "gemeinsame_Wendung": 0, "Frequenzumrichter": 0, "Ventil_RA_3_2_abhebbar": 4, "Ventil_Doppelstreckenantrieb_5_2_abhebbar": 6, "Blitzleuchte_Stoerung": 6, "Schnittstelle_Flyer_ElectroJet": 4, "Schnittstelle_Putzmaschine_Neuhauser": 0, "FEldbux_UV_EinAusgang": 7, "Spulenumsetzstation": 0} \ No newline at end of file diff --git a/datei.py b/datei.py deleted file mode 100644 index a9fd206..0000000 --- a/datei.py +++ /dev/null @@ -1,36 +0,0 @@ -import json -import math - -anzahl = dict() -anzahl["et200_sp_ea_ebene"] = 1 -anzahl["schaltschrank"] = 1 -# a = 5 * math.ceil((anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 )) -a = (math.ceil((anzahl.get("et200_sp_ea_ebene", 0) * \ - anzahl.get("schaltschrank", 0) * 4 + \ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 6 + \ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 4 + \ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 6 + \ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 5 + \ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 + \ - anzahl.get("unterverteiler_fuer_puffer", 0) * 7 + \ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 + \ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 6 + \ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 9 / 1.5)) + \ - anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0)) - - - -# details = {'Name': "Bob", -# 'Age' :28} - -# with open('convert.txt', 'w') as convert_file: -# convert_file.write(json.dumps(details)) - -# https://www.geeksforgeeks.org/write-a-dictionary-to-a-file-in-python/ -# Michael Stangl13:56 -# cat a.txt | sort > a_neu.txt - - - -# Fragen: -# EAs Bedienstation automatische umfahrung in excel diff --git a/excelsource.txt b/excelsource.txt deleted file mode 100644 index 072c3df..0000000 --- a/excelsource.txt +++ /dev/null @@ -1,40 +0,0 @@ -Bedienst._2_fach_ Wechs._+_BCD_10f. _ DIR. 0 -Bedienstation_1_fach_Not_Aus -Bedienstation_1_fach_Zug_wechseln 14 -Bedienstation_2_fach_ Not_Aus_Reset 10 -Bedienstation_3_fach 0 -Bedienstation_4_fach 0 -Bedienstation_6_fach 0 -Blitzleuchte_Störung 6 -Doppelstreckenantrieb 6 -Doppelstreckenantriebgemeinsame_Wendung 0 -Dreifach_Weiche 0 -Drucktaster_automatische_Umfahrung 0 -E/As_Unterverteiler_DIRECT 0 -Feldbus_UV_Ein_/Ausgang 7 -Frequenzumrichter 0 -gemeinsame_Weichenrückstellung 0 -gemeinsame_Wendung 0 -Kreuzungsweiche 1 -RA_in_RSM;_bidirektional;_1_gemeinsame_Wendung_je_Seite;_je_Antrieb_ein_Motorschutzschalter 0 -RA_bidirektional 30 -RA_bidirektional_abhebbar 4 -RA_bidirektional_abhebbar_gemeins._Wend. 0 -RA_bidirektional;_ohne_SPS_Ansteuerung 4 -RA_unidirektional 4 -RA_unidirektional_abhebbar_ohne_SPS_Ansteuerung 0 -RA_unidirektional_mit_gemeinsamer_Wendung 0 -RA_unidirektional_abhebbar 0 -Reflexionslichtschranke_RSM_ DIRECT 0 -Schnittstelle_Flyer_ Electro_Jet 4 -Schnittstelle_Putzmaschine_ Electro_Jet -Schnittstelle_Putzmaschine_ Neuenhauser 0 -Seilzugschalter 0 -Sensor_Traversenabfrage_optisch 68 -Sensor_induktiv_ Flyer+PM 4 -Spulenumsetzstation 0 -Stopper 0 -Ventil_Doppelstreckenantrieb_ 5/2 _abhebbar 6 -Ventil_RA_ 3/2 _abhebbar 4 -Weiche 35 -Weiche_nach_PM_ bipolar 0 diff --git a/rieter_ekalk.py b/rieter_ekalk.py deleted file mode 100644 index 32c74fe..0000000 --- a/rieter_ekalk.py +++ /dev/null @@ -1,2700 +0,0 @@ -import math -import json -import configparser -import os.path - -JSON_IDENT = 5 - - -class cfg(): - """ - Liest die config-Datei ein, in der Stückpreise und Zeiteinheiten pro Bauteil wie in der rieter_ekalk Excel-Datei verwendet angegeben sind, und schreibt sie in ein Dictionary. - """ - def __init__(self, path="Sivas_Daten.cfg"): - """ - :param path: Die config-Datei, in der Stückpreise und Zeiteinheiten der jeweiligen Bauteile aufgelistet sind z.B.[HW_Einzelpreise] - # Schaltschrank Einzelpreis - schaltschrankgehaeuse_b1x800_zubehoer = 2000 - """ - self._hasConfig = True - if os.path.exists(path): - self._cfg = configparser.ConfigParser(inline_comment_prefixes="#") - self._cfg.read_file(open(path)) - else: - self._hasConfig = False - self._cfg = None - - def exists(self): - return self._hasConfig - - def getDictAsFloat(self, section:str): - """ - Schreibt die Zuordnungen von Bauteil:Stückpreis/Zeiteinheit (je nach gewählter Überschrift) aus der config-Datei in ein Dictionary. - :param section: Überschrift in der config-Datei z.B. "HW_Einzelpreise" - """ - res = dict() - for key, val in self._cfg.items(section): - res[key] = float(val) - return res -RieterConfig = cfg() - -class MG(): - def __init__(self, deckblatt:dict, **kwargs): - """ - kwargs can contain the keys - rsm_direct - rsm_fa - flyer_f40 - neuenhauser - flyer - verbindungsstrecken_w - puffer - turm - """ - mengen = { - #"SYSTEM":"", - #"RSM":0, - #"Flyer":2, - #"Flyer_Puffer":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3, - #"Neuenhauser-Putzmaschine":0, - #"Neuenhauser-Putzmaschine_Vorpuffer":0, - #"Neuenhauser-Putzmaschine_Nachpuffer":0, - #"Cason-Putzmaschine":0, - #"Cason-Putzmaschine_Vorpuffer":0, - #"Cason-Putzmaschine_Nachpuffer":0, - #"Puffer":0, - #"Anzahl_der_Pufferstrecken_pro_Puffer":0, - #"Begegnungsstrecke_Bypass":0, - #"Turm":0, - #"Turm_Anzahl_Wendlungen":0, - } - - - self._deckblatt = deckblatt - #self.remove_empty(self._deckblatt) - ### Prüfungen: - # wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) > 0: - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer sollte grösser 1 sein") - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer sollte grösser 1 sein") - # wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Neuenhauser-Putzmaschine", 0) > 0: - if deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer der Neuenhauser sollte grösser 1 sein") - if deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer der Neuenhauser sollte grösser 1 sein") - # wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Cason-Putzmaschine", 0) > 0: - if deckblatt.get("Cason-Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer der Cason sollte grösser 1 sein") - if deckblatt.get("Cason-Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer der Cason sollte grösser 1 sein") - # wenn Puffer, dann mindestens 2 Strecken - if deckblatt.get("Puffer", 0) > 0: - if deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) < 2: - raise Exception("mind. 2 Strecken sollten im Puffer existieren") - # wenn Flyer, dann entweder neuenhauser- oder cason-Putzmaschine - if deckblatt.get("Flyer", 0) > 0: - if deckblatt.get("Neuenhauser-Putzmaschine", 0) < 0 and deckblatt.get("Cason-Putzmaschine", 0) < 0: - raise Exception("bei Verwendung von Flyern müssen Neuenhauser- oder Cason-Putzmaschinen existieren") - # Bypass, wenn mindestens 2 Flyer oder 2 RSM - if deckblatt.get("Begegnungsstrecke_Bypass", 0) > 0: - if deckblatt.get("Flyer", 0) < 2 and deckblatt.get("RSM", 0) < 0: - raise Exception("Bypass, wenn mindestens 2 Flyer oder 2 RSM") - # Turm: kein Kriterium - self._RSM_Anzahl = deckblatt.get("RSM", 0) - rsm_direct_mengen = {} - if "rsm_direct" in kwargs: - rsm_direct_mengen = kwargs['rsm_direct'] - self.remove_empty(rsm_direct_mengen) - rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt - - rsm_fa_mengen = {} - if "rsm_fa" in kwargs: - rsm_fa_mengen = kwargs['rsm_fa'] - self.remove_empty(rsm_fa_mengen) - rsm_fa_mengen["Anzahl_RSM"] = self._RSM_Anzahl #übernahme aus deckblatt - - flyer_f40_mengen = {} - if "flyer_f40" in kwargs: - flyer_f40_mengen = kwargs['flyer_f40'] - self.remove_empty(flyer_f40_mengen) - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) #übernahme aus deckblatt - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) #übernahme aus deckblatt - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) #übernahme aus deckblatt - - neuenhauser_mengen = {} - if "neuenhauser" in kwargs: - neuenhauser_mengen = kwargs['neuenhauser'] - self.remove_empty(neuenhauser_mengen) - neuenhauser_mengen["Neuenhauser-Putzmaschine"] = deckblatt.get("Neuenhauser-Putzmaschine", 0) - neuenhauser_mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) - neuenhauser_mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) - - flyer_mengen = {} - if "flyer" in kwargs: - flyer_mengen = kwargs['flyer'] - self.remove_empty(flyer_mengen) - flyer_mengen["Anzahl"] = deckblatt.get("Flyer", 0) - flyer_mengen["Flyer"] = deckblatt.get("Flyer", 0) - flyer_mengen["Anzahl_Schienen"] = deckblatt.get("Flyer_Puffer", 0) - - puffer_mengen = {} - if "puffer" in kwargs: - puffer_mengen = kwargs['puffer'] - self.remove_empty(puffer_mengen) - puffer_mengen["Puffer"] = deckblatt.get("Puffer", 0) - puffer_mengen["Anzahl_Pufferstrecken"] = deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) - - turm_mengen = {} - if "turm" in kwargs: - turm_mengen = kwargs['turm'] - self.remove_empty(turm_mengen) - turm_mengen["Turm"] = deckblatt.get("Turm", 0) - turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0) - verbindungsstrecken_w_mengen = {} - if "verbindungsstrecken_w" in kwargs: - verbindungsstrecken_w_mengen = kwargs['verbindungsstrecken_w'] - self.remove_empty(verbindungsstrecken_w_mengen) - - #überprüfe welche Art von System, setze dict der unrelevanten klasse = 0 - system = deckblatt.get("SYSTEM", "") - if (system.lower() == "direct"): - self._rsm_fa = RSM_FA({}) - self._rsm_direct = RSM_direct(rsm_direct_mengen) - elif (system.lower() == "fa"): - self._rsm_fa = RSM_FA(rsm_fa_mengen) - self._rsm_direct = RSM_direct({}) - else: - raise Exception("unkown Flyer. Either direct or fa") - - self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen) - self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen) - self._flyer = Flyer_EJet(flyer_mengen) - n_begegnung = deckblatt.get('Begegnungsstrecke_Bypass', 0) - self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen, n_begegnung) - self._puffer = Puffer(puffer_mengen) - self._turm = Turm(turm_mengen) - - - def get_deckblatt_value(self, key): - """ - Gibt eingegebenen Wert des Eingabeparameters zurück. - :param key: Name eines Eingabeparameters im Deckblatt z.B. "Begegnungsstrecke_Bypass" - """ - return self._deckblatt.get(key, 0) - - def get_value_of_object(self, objectname:str, key:str): - """ - :param objectname: Name der Klasse, zu der das Bauteil gehört, dessen Wert man wissen will z.B. "puffer" - :param key: Name des Bauteils, dessen Wert ermittelt werden soll z.B. "Sensor_optisch_Traverse" - """ - # Deckblatt - if (objectname.lower() == "deckblatt"): - return self._deckblatt.get(key) - # RSM_direct - if (objectname.lower() == "rsm_direct"): - return self._rsm_direct.anzahl(key) - # RSM_FA - if (objectname.lower() == "rsm_fa"): - return self._rsm_fa.anzahl(key) - # Flyer_F40_EJet_inc_Putz - if (objectname.lower() == "flyer_f40_ejet_inc_putz"): - return self._flyer_f40.anzahl(key) - # Putzmaschine_Neuenhauser - if (objectname.lower() == "putzmaschine_neuenhauser"): - return self._neuenhauser.anzahl(key) - # Flyer_EJet - if (objectname.lower() == "flyer_ejet"): - return self._flyer.anzahl(key) - # Verbindungsstrecken_Wechsel - if (objectname.lower() == "verbindungsstrecken_wechsel"): - return self._verbindungsstrecken_w.anzahl(key) - # Puffer - if (objectname.lower() == "puffer"): - return self._puffer.anzahl(key) - # Turm - if (objectname.lower() == "turm"): - return self._turm.anzahl(key) - - raise Exception("unkown element") - - - def getresult(self): - res = { - "RSM direct": self._rsm_direct._Mengen, - "RSM FA": self._rsm_fa._Mengen, - "Flyer F40 (Electrojet) incl. Putzmaschine": self._flyer_f40._Mengen, - "Putzmaschine (Neuenhauser)": self._neuenhauser._Mengen, - "Flyer (Electrojet)": self._flyer._Mengen, - "Verbindungsstrecken/Wechsel": self._verbindungsstrecken_w._Mengen, - "Puffer": self._puffer._Mengen, - "Turm": self._turm._Mengen, - } - return res - - def tojson(self, input:dict): - return json.dumps(input, sort_keys=False, indent=4) - - def tofile(self): - json = self.tojson(self.getresult()) - with open("json_mengengeruest.json", "w") as file: - file.write(json) - - def ztofile(self): - json = self.tojson(self.zusammenfassung()) - with open("zusammenfassung_mengengeruest.json", "w") as file: - file.write(json) - - def remove_empty(self, toclean): - # remove all elements with the number of 0. They are of no use - l = [] - for k,v in toclean.items(): - if v == 0: - l.append(k) - for item in l: - del toclean[item] - - def zusammenfassung(self): - #in Excel Zellwerte und Bezüge der Spalte "G" können ignoriert werden - zmengen = { - "Sensor_optisch_Traverse": 0, - "Sensor_induktiv_Spulenalter_Zug_positionierung": 0, - "Sensor_Spulenprüfung_voll_leer": 0, - "Seilzugsschalter": 0, - "Drucktaster_automatische_Umfahrung": 0, - "Bedientableau_1fach": 0, - "Bedientableau_2fach": 0, - "Bedientableau_14fach": 0, - "Interface_Putzmaschine": 0, - "Interface_Doffer": 0, - "Weiche": 0, - "Dreifachweiche": 0, - "Wechsel": 0, - "Stopper": 0, - "Meldelampe_Überstrom": 0, - "Hauptschalter_Ein_Meldung": 0, - "Werma_Rundumleuchte_Störung": 0, - "Weiche_nach_PM_bipolar": 0, - "Kreuzungsweiche": 0, - "RA_uni": 0, - "RA_uni_abhebbar": 0, - "RA_uni_ohne_SPS_Ansteuerung": 0, - "RA_bi": 0, - "RA_bi_ohne_SPS-Ansteuerung": 0, - "RA_bi_abhebbar": 0, - "Doppelstreckenantrieb": 0, - "gemeinsame_Wendung": 0, - "Gesamtanzahl_Antriebe": 0, - "klemmkasten_rsm": 0 - } - zmengen["Sensor_optisch_Traverse"] = self._rsm_direct._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._rsm_fa._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._flyer_f40._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._neuenhauser._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._flyer._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Sensor_optisch_Traverse",0) +\ - self._verbindungsstrecken_w._Mengen.get("Dreifachweiche",0) * 2 +\ - self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche",0) * 4 +\ - self._puffer._Mengen.get("Sensor_optisch_Traverse",0) +\ - self._turm._Mengen.get("Sensor_optisch_Traverse",0) - - - zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._flyer_f40._Mengen.get("Sensor_induktiv_Spulenhalter",0) +\ - self._neuenhauser._Mengen.get("Sensorik_Zugpositionierung",0) +\ - self._flyer._Mengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung",0) - - zmengen["Sensor_Spulenprüfung_voll_leer"] = self._neuenhauser._Mengen.get("Sensor_WT18_Spulenprüfung_voll_leer",0) - zmengen["Seilzugsschalter"] = self._rsm_fa._Mengen.get("Seilzugsschalter", 0) - zmengen["Drucktaster_automatische_Umfahrung"] = self._rsm_fa._Mengen.get("Mit_Drucktaster", 0) - zmengen["Bedientableau_1fach"] = self._rsm_fa._Mengen.get("Bedientableau_1fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1fach", 0) - zmengen["Bedientableau_2fach"] = self._rsm_direct._Mengen.get("Bedientableau_2fach", 0) +\ - self._rsm_fa._Mengen.get("Bedientableau_2fach", 0) +\ - self._flyer_f40._Mengen.get("Bedientableau_2fach", 0) +\ - self._neuenhauser._Mengen.get("Bedientableau_2fach", 0) +\ - self._flyer._Mengen.get("Bedientableau_2fach", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Bedientableau_2fach", 0) +\ - self._turm._Mengen.get("Bedientableau_2fach", 0) - zmengen["Bedientableau_14fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14fach", 0) - zmengen["Interface_Putzmaschine"] = self._neuenhauser._Mengen.get("Interface_Putzmaschine", 0) - zmengen["Interface_Doffer"] = self._flyer_f40._Mengen.get("Interface_Doffer", 0) + self._flyer._Mengen.get("Interface_Doffer", 0) - zmengen["Weiche"] = self._rsm_direct._Mengen.get("Weiche", 0) +\ - self._rsm_fa._Mengen.get("Weiche", 0) +\ - self._flyer_f40._Mengen.get("Weiche", 0) +\ - self._neuenhauser._Mengen.get("Weiche", 0) +\ - self._flyer._Mengen.get("Weiche", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Weiche", 0) +\ - self._puffer._Mengen.get("Weiche", 0) +\ - self._turm._Mengen.get("Weiche", 0) - zmengen["Dreifachweiche"] = self._rsm_direct._Mengen.get("Weiche_Gemeinsame_Rückstellung", 0) +\ - self._flyer_f40._Mengen.get("Dreifachweiche", 0) +\ - self._flyer._Mengen.get("Dreifachweiche", 0) +\ - self._verbindungsstrecken_w.anzahl("Dreifachweiche") - zmengen["Wechsel"] = self._flyer_f40._Mengen.get("Wechsel", 0) +\ - self._flyer._Mengen.get("Wechsel", 0) - zmengen["Stopper"] = self._flyer_f40._Mengen.get("Stopper", 0) - zmengen["Meldelampe_Überstrom"] = self._rsm_direct._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._rsm_fa._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._flyer_f40._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._neuenhauser._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._flyer._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._puffer._Mengen.get("Meldelampe_Überstrom", 0) - zmengen["Hauptschalter_Ein_Meldung"] = self._rsm_direct._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._rsm_fa._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._flyer_f40._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._neuenhauser._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._flyer._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._puffer._Mengen.get("Hauptschalter_Ein_Meldung", 0) - zmengen["Werma_Rundumleuchte_Störung"] = self._rsm_direct._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._rsm_fa._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._flyer_f40._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._neuenhauser._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._flyer._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Werma_Rundumleuchte_Störung", 0) - zmengen["Weiche_nach_PM_bipolar"] = self._flyer_f40._Mengen.get("Weiche_nach_PM_bipolar", 0) +\ - self._neuenhauser._Mengen.get("Weiche_nach_PM_bipolar", 0) - zmengen["Kreuzungsweiche"] = self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche", 0) - zmengen["RA_uni"] = self._verbindungsstrecken_w._Mengen.get("RA_uni", 0) +\ - self._rsm_fa._Mengen.get("RRA_uni_Begegnung", 0) +\ - self._flyer_f40._Mengen.get("RA_uni", 0) - #RRA_bi_uni_Begegnung - zmengen["RA_uni_abhebbar"] = self._flyer_f40._Mengen.get("RA_uni_abhebbar", 0) +\ - self._neuenhauser._Mengen.get("RA_uni_abhebbar", 0) - zmengen["RA_uni_ohne_SPS_Ansteuerung"] = self._flyer_f40._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - self._neuenhauser._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) - zmengen["RA_bi"] = self._rsm_fa._Mengen.get("RRA_bi", 0) +\ - self._flyer_f40._Mengen.get("RRA_bi", 0) +\ - self._flyer._Mengen.get("RA_bi", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\ - self._puffer._Mengen.get("RA_bi_ungerade_Schiene", 0) +\ - self._turm._Mengen.get("RA_bi", 0) - zmengen["RA_bi_ohne_SPS-Ansteuerung"] = self._rsm_fa._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ - self._flyer_f40._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ - self._flyer._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - self._turm._Mengen.get("RA_bi_ohne_SPS", 0) #TODO: Notation beachten: RA_bi, RRA_bi - zmengen["RA_bi_abhebbar"] = self._rsm_direct._Mengen.get("RA_bi_abhebbar", 0) +\ - self._flyer_f40._Mengen.get("RRA_BI_abhebbar", 0) +\ - self._flyer._Mengen.get("RA_bi_abhebbar", 0) #TODO: Notation beachten: RA_bi, RRA_bi - zmengen["Doppelstreckenantrieb"] = self._rsm_direct._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._flyer_f40._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._neuenhauser._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._flyer._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._puffer._Mengen.get("Doppelstreckenantrieb", 0) - zmengen["gemeinsame_Wendung"] = self._rsm_direct._Mengen.get("gemeinsame_Wendung", 0) +\ - self._rsm_fa._Mengen.get("gemeinsame_Wendung", 0) - zmengen["Gesamtanzahl_Antriebe"] = zmengen.get("RA_uni", 0) +\ - zmengen.get("RA_uni_abhebbar", 0) +\ - zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - zmengen.get("RA_bi", 0) +\ - zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - zmengen.get("RA_bi_abhebbar", 0) +\ - zmengen.get("Doppelstreckenantrieb", 0) - zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) - return zmengen - -# RSM_direct: -class RSM_direct(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "Anzahl":0, - #"Anzahl_Strecken_RSM":8, - "Sensor_optisch_Traverse":0, - #"Lichtschranke_Traverse":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Bedientableau_2fach_Direct":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_Gemeinsame_Rückstellung":0, - "Weiche_Gemeinsame_Rückstellung_Korrektur":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - #"Doppelstreckenantrieb":0, - #"gemeinsame_Wendung":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - #Berechnungen basieren auf der Anzahl der Ringspinnmaschinen (rsm_anzahl) mit Ausnahme 'Sensor_optisch_Traverse' - #sowie teilweise manueller Eingaben von Korrekturfaktoren, hier mit dem Anhang '_Korrektur' - self._Mengen = {} - self._RSM_Anzahl = anzahl.get("Anzahl", 0) - self._Mengen["Anzahl"] = anzahl.get("Anzahl", 0) - self._Mengen["Anzahl_Strecken_RSM"] = 8 - self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Sensor_optisch_Traverse", 0) - self._Mengen["Lichtschranke_Traverse"] = self._RSM_Anzahl * 6 - self._Mengen["Bedientableau_2fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Direct"] = self._RSM_Anzahl - self._Mengen["Weiche"] = self._RSM_Anzahl * 4 + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Gemeinsame_Rückstellung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) - self._Mengen["Weiche_Gemeinsame_Rückstellung_Korrektur"] = anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) - self._Mengen["RA_bi_abhebbar"] = math.ceil(self._RSM_Anzahl * 0.31) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb"] = self._RSM_Anzahl * self._Mengen.get("Anzahl_Strecken_RSM", 0) - self._Mengen["gemeinsame_Wendung"] = math.ceil(self._RSM_Anzahl / 6) * 2 - self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = math.floor(self._RSM_Anzahl / 5) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname): - return self._Mengen.get(partname, 0) -# RSM_FA: -class RSM_FA(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "Anzahl_RSM":14, - #"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert - "Flex_A_Premium":False, - "Getriebe_in_der_Mitte":False, - "RSM_Einfahrt_Ein_Beidseitig":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_zusätzlich":6, - #"Bedientableau_1fach":0, - "Bedientableau_1fach_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":4, - #"Weiche":0, - "Weiche_Korrektur":0, - #"RRA_bi":0, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - #"Seilzugschalter":0, - #"Mit_Drucktaster":0, - #"Meldelampe_Überstrom":0, - #"Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - #"Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - #"Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - def __init__(self, anzahl:dict): - self._Mengen = {} - self._Mengen["Anzahl_RSM"] = anzahl.get("Anzahl_RSM", 0) - self._Mengen["Flex_A_Premium"] = anzahl.get("Flex_A_Premium", False) - self._Mengen["Getriebe_in_der_Mitte"] = anzahl.get("Getriebe_in_der_Mitte", False) - self._Mengen["RSM_Einfahrt_Ein_Beidseitig"] = anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False) - - sensorfaktor_premium = 1 - sensorfaktor_beidseitig = 0 - if self.flex_a_premium(): - sensorfaktor_premium = 4 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - sensorfaktor_beidseitig = 1 - self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Anzahl_RSM", 0)*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) - self._Mengen["Sensor_optisch_Traverse_zusätzlich"] = anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) - #hier keine Korrektur, dafür "Zusätzlich" vorgesehen - - tableaufaktor_premium = 1 - tableaufaktor_beidseitig = 0 - if self.flex_a_premium(): - tableaufaktor_premium = 0 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - tableaufaktor_beidseitig = 1 - self._Mengen["Bedientableau_1fach"] = anzahl.get("Anzahl_RSM", 0)*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0) - self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - - weichefaktor_premium = 1 - weichefaktor_beidseitig = 0 - if self.flex_a_premium(): - weichefaktor_premium = 3 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - weichefaktor_beidseitig = 1 - self._Mengen["Weiche"] = anzahl.get("Anzahl_RSM", 0) * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - - rrafaktor_premium = 1 - rrafaktor_beidseitig = 0 - if self.flex_a_premium(): - rrafaktor_premium = 2 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - rrafaktor_beidseitig = 1 - self._Mengen["RRA_bi"] = anzahl.get("Anzahl_RSM", 0) * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0) - self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0) - self._Mengen["RRA_bi_auf_Haupstrecke"] = anzahl.get("RRA_bi_auf_Haupstrecke", 0) - self._Mengen["RRA_uni_Begegnung"] = anzahl.get("RRA_uni_Begegnung", 0) - - if self.flex_a_premium(): - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4 - else: - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0 - - self._Mengen["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) - - seilzfaktor_premium = 0 - seilzfaktor_getriebe_mitte = 0 - if self.flex_a_premium(): - seilzfaktor_premium = 2 - if (anzahl.get("Getriebe_in_der_Mitte", False)): - seilzfaktor_getriebe_mitte = 2 - self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) - - if self.flex_a_premium(): - self._Mengen["Mit_Drucktaster"] = anzahl.get("Anzahl_RSM", 0) * 8 - else: - self._Mengen["Mit_Drucktaster"] = 0 - self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0) - self._Mengen["Meldelampe_Überstrom"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["klemmkasten_rsm"] = anzahl.get("klemmkasten_rsm", 0) - - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - def flex_a_premium(self): - return self._Mengen.get("Flex_A_Premium", False) - -# Flyer_F40_(Electrojet)_incl._Putzmaschine: -class Flyer_F40_EJet_inc_Putz(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - "RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - def __init__(self, anzahl:dict): - - self._Mengen = self.mengen - #anzahl = self._Mengen - - self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\ - anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) - self._Mengen["Anzahl"] = self._Flyer_Anzahl - self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\ - anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) - self._Mengen["Single_Line_Durchfahrt"] = anzahl.get("Single_Line_Durchfahrt", False) - self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False) - sensorfaktor_nachpuffer = 7 - if (anzahl.get("Nachpuffer", False)): - sensorfaktor_nachpuffer = 5 - self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 2 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenhalter_Korrektur"] = anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl + anzahl.get("Interface_Doffer_Korrektur", 0) - self._Mengen["Interface_Doffer_Korrektur"] = anzahl.get("Interface_Doffer_Korrektur", 0) - self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0) + anzahl.get("Weiche_Korrektur", 0) + anzahl.get("Wechsel", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl + anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - else: - self._Mengen["Weiche_nach_Flyer_bipolar"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - self._Mengen["Weiche_nach_Flyer_bipolar_Korrektur"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) - self._Mengen["Wechsel"] = anzahl.get("Wechsel", 0) - self._Mengen["Stopper"] = anzahl.get("Stopper", 0) - self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) - - rraunifaktor_durchfahrt = 0 - rraunifaktor_nachpuffer = 1 - if (anzahl.get("Single_Line_Durchfahrt", False)): - rraunifaktor_durchfahrt = 1 - if (anzahl.get("Nachpuffer", False)): - rraunifaktor_nachpuffer = 0 - self._Mengen["RA_uni_abhebbar"] = self._Flyer_Anzahl * (rraunifaktor_durchfahrt + rraunifaktor_nachpuffer) + anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl - else: - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) - self._Mengen["RA_uni_ohne_SPS_Ansteuerung_Korrektur"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) - else: - self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl - self._Mengen["RRA_BI_abhebbar_Korrektur"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RRA_bi"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) + anzahl.get("RRA_bi_Korrektur", 0) - else: - self._Mengen["RRA_bi"] = self._Flyer_Anzahl + anzahl.get("RRA_bi_Korrektur", 0) - self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 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, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Putzmaschine_(Neuenhauser): -class Putzmaschine_Neuenhauser(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - - self._Mengen = {} - self._Putze_Anzahl = anzahl.get("Neuenhauser-Putzmaschine", 0) - self._Vorpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) - self._Nachpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) - self._Mengen["Anzahl"] = self._Putze_Anzahl - - self._Mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = self._Vorpuffer_Anzahl #'Neuenhauser-Putzmaschine_Vorpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Vorstaustrecken' (Mengengerüst/Putzmaschine) - self._Mengen["Anzahl_Vorstaustrecken"] = self._Vorpuffer_Anzahl - - self._Mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = self._Nachpuffer_Anzahl #'Neuenhauser-Putzmaschine_Nachpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Nachstaustrecken' (Mengengerüst/Putzmaschine) - self._Mengen["Anzahl_Nachstaustrecken"] = self._Nachpuffer_Anzahl - - self._Mengen["Sensor_optisch_Traverse"] = self._Putze_Anzahl * (self._Vorpuffer_Anzahl + self._Nachpuffer_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - - self._Mengen["Sensorik_Zugpositionierung"] = self._Putze_Anzahl * 4 - self._Mengen["Sensor_WT18_Spulenprüfung_voll_leer"] = self._Putze_Anzahl * 2 - - self._Mengen["Bedientableau_2fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - - self._Mengen["Interface_Putzmaschine"] = self._Putze_Anzahl - self._Mengen["Weiche"] = self._Putze_Anzahl * self._Vorpuffer_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_nach_PM_bipolar"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1) - self._Mengen["RA_uni_abhebbar"] = self._Putze_Anzahl + anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Putze_Anzahl - - self._Mengen["RA_uni_abhebbar_unger_Sch"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/3) + math.floor(self._Nachpuffer_Anzahl/3)) - self._Mengen["Doppelstreckenantrieb"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/2) + math.floor(self._Nachpuffer_Anzahl/2)) - self._Mengen["Meldelampe_Überstrom"] = self._Putze_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Putze_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = self._Putze_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Flyer_(Electrojet): -class Flyer_EJet(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Flyer":0, # äquivalent zu 'Anzahl' - "Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":0, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - def __init__(self, anzahl:dict): - - - self._Mengen = {} - self._Flyer_Anzahl = anzahl.get("Flyer", 0) - self._Mengen["Anzahl"] = self._Flyer_Anzahl - self._Mengen["Flyer"] = self._Flyer_Anzahl - self._Schienen_Anzahl = anzahl.get("Anzahl_Schienen", 0) - self._Mengen["Anzahl_Schienen"] = anzahl.get("Anzahl_Schienen", 0) - - self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (2*self._Schienen_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._Flyer_Anzahl - self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl - self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl - self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Schienen_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl - self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) - self._Mengen["Wechsel"] = self._Flyer_Anzahl + anzahl.get("Wechsel_Korrektur", 0) - self._Mengen["Wechsel_Korrektur"] = anzahl.get("Wechsel_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl - self._Mengen["RA_bi_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) - self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Schienen_Anzahl/2) - self._Mengen["RA_bi_abhebbar_unger_Schiene"] = anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) - self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Verbindungsstrecken/_Wechsel: -class Verbindungsstrecken_Wechsel(): - def __init__(self, anzahl:dict, Begegnungsstrecke_bypass:int): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - #"Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - - self._Mengen = {} - self._Mengen["Sensor_optisch_Traverse"] = Begegnungsstrecke_bypass * 3 + \ - anzahl.get('Dreifachweiche', 0) * 2 + \ - anzahl.get('Kreuzungsweiche', 0) * 4 + \ - anzahl.get('Sensor_optisch_Traverse_Korrektur', 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Bedientableau_1fach"] = anzahl.get("Bedientableau_1fach", 0) - self._Mengen["Bedientableau_2fach"] = anzahl.get("Bedientableau_2fach", 0) - self._Mengen["Bedientableau_14fach"] = anzahl.get("Bedientableau_14fach", 0) - self._Mengen["Weiche"] = Begegnungsstrecke_bypass * 2 + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) - self._Mengen["Kreuzungsweiche"] = anzahl.get("Kreuzungsweiche", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = anzahl.get("Werma_Rundumleuchte_Störung", 0) - self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung", 0) - self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) - self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RA_bi_ohne_SPS-Ansteuerung", 0) - self._Mengen["Doppelstreckenantrieb"] = anzahl.get("Doppelstreckenantrieb", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Puffer -class Puffer(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Puffer":0, #äquivalent zu Anzahl - "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - "RA_bi_ungerade_Schiene":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - } - - self._Mengen = anzahl - self._Puffer_Anzahl = anzahl.get("Puffer", 0) - self._Strecken_Anzahl = anzahl.get("Anzahl_Pufferstrecken", 0) - self._Mengen["Anzahl"] = self._Puffer_Anzahl - self._Mengen["Anzahl_Staustrecken"] = self._Strecken_Anzahl - self._Mengen["Sensor_optisch_Traverse"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) +\ - anzahl.get("Doppelstreckenantrieb_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - def anzahl(self, partname:str, defaultv = 0): - return self._Mengen.get(partname, defaultv) -# Turm -class Turm(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Turm":0, #äquivalent zu Anzahl - "Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - def __init__(self, anzahl:dict): - self._Mengen = {} - self._Turm_Anzahl = anzahl.get("Turm", 0) - self._Mengen["Anzahl"] = self._Turm_Anzahl - self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0) - self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl - - self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5 - self._Mengen["Weiche"] = self._Turm_Anzahl*3 - self._Mengen["RA_bi"] = self._Turm_Anzahl*2 + anzahl.get("RA_bi_Korrektur", 0) - self._Mengen["RA_bi_Korrektur"] = anzahl.get("RA_bi_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS"] = self._Turm_Anzahl*self._Staustrecken_Anzahl*2 + anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS_Korrektur"] = anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = self._Turm_Anzahl*2 - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - - -class EA(): - - stueckzahl = { - "Bedienelemente_Steuerschrank":1, - # "bedienstation_1fach_Not_Aus": (1, 1), - # "bedienstation_einfach_Zug_Wechseln": (1, 1), - # "bedienstation_automatische_Umfahrung": (1, 1), # in Excel Drucktaster automatische Umfahrung? ansonsten fehlt in Excel - # "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), - # "bedienstation_zweifach_Not_Aus_Reset": (2, 2), - "bedienst_dreifach":0, - "bedienst_vierfach":0, - "bedienst_sechsfach":0, - # "EAs_Unterverteiler_direct": (7, 6), - - # # Ermittlung_Mengengeruest_Anzahl, - # "Sensor_Traversenabfrage_optisch": (1, 0), - # "Reflexionslichtschranke_RSM_DIRECT": (1, 0), - # "Sensor induktiv Flyer+PM": (1, 0), - # "Seilzugschalter": (1, 0), - - # "Weiche": (0, 1), - # "Weiche_nach_PM_bipolar": (0, 2), - "gemeinsame_Weichenrueckstellung":0, - # "Dreifach_Weiche_DIRECT": (0, 2), - # "Kreuzungsweiche": (0, 10), - # "Stopper": (0, 1), - # "Ventil_RA_3_2_abhebbar": (0, 1), - # "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), - # "Blitzleuchte_Stoerung": (0, 1), - - # "Schnittstelle_Flyer_ElectroJet": (2, 2), - # "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), - # "FEldbux_UV_EinAusgang": (2, 1), - - "Spulenumsetzstation":0, - - # "RA_unidirektional": (0, 1), - # "RA_unidirektional_abhebbar": (0, 1), - "RA_unidirektional_mit_gemeinsamer_Wendung":0, - # "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), - # "RA_bidirektional": (0, 2), - # "RA_bidirektional_abhebbar": (0, 2), - "RA_bidirektional_abhebbar_gemeinsWend":0, - #"RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_in_RSM_bidirektional":0, - #"Doppelstreckenantrieb": (0, 2), - "Doppelstreckenantriebgemeinsame_Wendung":0, - "gemeinsame_Wendung":0, - "Frequenzumrichter":0, - } - def __init__(self, anzahl:dict, mg: type[MG]): - # Eingänge und Ausgänge jeder Hardwareeinheit - self._reserve = 0.05 - self.EAs = { - # Bedienelemente_Steuerschrank - "Drucktaster_Anlage_AUS": (1, 0), - "Leuchtdrucktaster_Anlage_EIN": (1, 1), - "Leuchtdrucktaster_Start_nach_Stoerung": (1, 1), - "Leuchtdrucktaster_Laufzeitfehler": (1, 1), - "Drucktaster_Lampentest": (1, 0), - "Meldeleuchte_Komm_PC_SPS_gestoert": (0, 1), - "Sammeleingang_Ueberstrom": (5, 1), - "Sammeleingang_Not_Aus": (2, 1), - "Sammeleingang_Druckluft_fehlt": (1, 1), - "Drucktaster_Reset": (1, 0), - "Sammeleingang_Antriebe_abheben": (1, 2), - "Reserve": (9, 7), - "Bedienelemente_Steuerschrank": (24, 16), - - # Bedienstation, - "bedienstation_1fach_Not_Aus": (1, 1), - "bedienstation_einfach_Zug_Wechseln": (1, 1), - "bedienstation_automatische_Umfahrung": (1, 1), - "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), - "bedienstation_zweifach_Not_Aus_Reset": (2, 2), - "bedienst_dreifach": (3, 3), - "bedienst_vierfach": (4, 4), - "bedienst_sechsfach": (6, 6), - "EAs_Unterverteiler_direct": (7, 6), - - # Ermittlung_Mengengeruest_Anzahl, - "Sensor_Traversenabfrage_optisch": (1, 0), - "Reflexionslichtschranke_RSM_DIRECT": (1, 0), - "Sensor induktiv Flyer+PM": (1, 0), - "Seilzugschalter": (1, 0), - - "Weiche": (0, 1), - "Weiche_nach_PM_bipolar": (0, 2), - "gemeinsame_Weichenrueckstellung": (0, 1), - "Dreifach_Weiche_DIRECT": (0, 2), - "Kreuzungsweiche": (0, 10), - "Stopper": (0, 1), - "Ventil_RA_3_2_abhebbar": (0, 1), - "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), - "Blitzleuchte_Stoerung": (0, 1), - - "Schnittstelle_Flyer_ElectroJet": (2, 2), - "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), - "FEldbux_UV_EinAusgang": (2, 1), - - "Spulenumsetzstation": (40, 20), - - "RA_unidirektional": (0, 1), - "RA_unidirektional_abhebbar": (0, 1), - "RA_unidirektional_mit_gemeinsamer_Wendung": (0, 1), - "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_bidirektional": (0, 2), - "RA_bidirektional_abhebbar": (0, 2), - "RA_bidirektional_abhebbar_gemeinsWend": (0, 1), - "RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_in_RSM_bidirektional": (0, 1), - "Doppelstreckenantrieb": (0, 2), - "Doppelstreckenantriebgemeinsame_Wendung": (0, 1), - "gemeinsame_Wendung": (0, 2), - "Frequenzumrichter": (1, 3) - } - self._Anzahl = self.stueckzahl - self._Anzahl["Bedienelemente_Steuerschrank"] = anzahl.get("schaltschrank", 0) - zmengen = mg.zusammenfassung() - self._Anzahl["bedienstation_einfach_Zug_Wechseln"] = zmengen.get("Bedientableau_1fach", 0) - self._Anzahl["bedienstation_automatische_Umfahrung"] = math.ceil(zmengen.get("Drucktaster_automatische_Umfahrung", 0)/4) - self._Anzahl["bedienstation_zweifach_Wechs_BCD_10f"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") - - self._Anzahl["bedienstation_zweifach_Not_Aus_Reset"] = zmengen.get("Bedientableau_2fach", 0) - self._Anzahl["bedienst_dreifach"] = anzahl.get("bedienst_dreifach", 0) - self._Anzahl["bedienst_vierfach"] = anzahl.get("bedienst_vierfach", 0) - self._Anzahl["bedienst_sechsfach"] = anzahl.get("bedienst_sechsfach", 0) - self._Anzahl["EAs_Unterverteiler_direct"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") - - # Ermittlung_Mengengeruest_Anzahl - self._Anzahl["Sensor_Traversenabfrage_optisch"] = zmengen.get("Sensor_optisch_Traverse", 0) + zmengen.get("Sensor_Spulenprüfung_voll_leer", 0) - - self._Anzahl["Reflexionslichtschranke_RSM_DIRECT"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") - self._Anzahl["Sensor induktiv Flyer+PM"] = zmengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung", 0) - self._Anzahl["Seilzugschalter"] = zmengen.get("Seilzugsschalter", 0) - - self._Anzahl["Weiche"] = zmengen.get("Weiche", 0) - self._Anzahl["Weiche_nach_PM_bipolar"] = zmengen.get("Weiche_nach_PM_bipolar", 0) - self._Anzahl["gemeinsame_Weichenrueckstellung"] = anzahl.get("gemeinsame_Weichenrueckstellung", 0) - self._Anzahl["Dreifach_Weiche_DIRECT"] = zmengen.get("Dreifachweiche", 0) - - - self._Anzahl["Kreuzungsweiche"] = mg.get_value_of_object("verbindungsstrecken_wechsel", "Kreuzungsweiche") - self._Anzahl["Stopper"] = zmengen.get("Stopper", 0) - self._Anzahl["RA_unidirektional"] = zmengen.get("RA_uni", 0) - self._Anzahl["RA_unidirektional_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) - self._Anzahl["RA_unidirektional_mit_gemeinsamer_Wendung"] = anzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung", 0) - self._Anzahl["RA_unidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) - self._Anzahl["RA_bidirektional"] = zmengen.get("RA_bi", 0) - self._Anzahl["RA_bidirektional_abhebbar"] = zmengen.get("RA_bi_abhebbar", 0) - self._Anzahl["RA_bidirektional_abhebbar_gemeinsWend"] = anzahl.get("RA_bidirektional_abhebbar_gemeinsWend", 0) - self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) - self._Anzahl["RA_in_RSM_bidirektional"] = anzahl.get("RA_in_RSM_bidirektional", 0) - self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0) - self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = anzahl.get("Doppelstreckenantriebgemeinsame_Wendung", 0) - self._Anzahl["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) - self._Anzahl["Frequenzumrichter"] = anzahl.get("Frequenzumrichter", 0) - self._Anzahl["Ventil_RA_3_2_abhebbar"] = self.anzahl("RA_unidirektional_abhebbar") +\ - self.anzahl("RA_unidirektional_mit_gemeinsamer_Wendung") +\ - self.anzahl("RA_unidirektional_ohne_SPS_Ansteuerung") +\ - self.anzahl("RA_bidirektional_abhebbar") +\ - self.anzahl("RA_bidirektional_abhebbar_gemeinsWend") - self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = zmengen.get("Doppelstreckenantrieb", 0) - self._Anzahl["Blitzleuchte_Stoerung"] = zmengen.get("Werma_Rundumleuchte_Störung", 0) - - - self._Anzahl["Schnittstelle_Flyer_ElectroJet"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + \ - mg.get_value_of_object("flyer_ejet", "Interface_Doffer") - self._Anzahl["Schnittstelle_Putzmaschine_Neuhauser"] = mg.get_value_of_object("putzmaschine_neuenhauser", "Interface_Putzmaschine") - self._Anzahl["FEldbux_UV_EinAusgang"] = mg.get_value_of_object("rsm_fa", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("putzmaschine_neuenhauser", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("flyer_ejet", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("puffer", "Meldelampe_Überstrom") - self._Anzahl["Spulenumsetzstation"] = anzahl.get("Spulenumsetzstation", 0) - - def getEA(self, partname): - return (self.EAs[partname][0], self.EAs[partname][1]) - def getE(self, partname): - return self.EAs[partname][0] - def getA(self, partname): - return self.EAs[partname][1] - def anzahl(self, partname, defaultv = 0): - return self._Anzahl.get(partname, defaultv) - - def get_SE(self, partname): - num_of_e = self.getE(partname) - zahl = self.anzahl(partname) - return num_of_e * zahl - def get_SA(self, partname): - num_of_a = self.getA(partname) - zahl = self.anzahl(partname) - return num_of_a * zahl - def get_SEA(self, partname): - return (self.get_SE(partname), self.get_SA(partname)) - - def __repr__(self): - return repr(self._Anzahl) - - def set_reserve(self, PS): - if PS > 1 or PS < 0: - raise Exception("Falscher Bereich") - self._reserve = PS - - - def gesamt_E(self): - res = 0 - self.EAs - a = list(self._Anzahl.keys()) - a.sort() - for k,n in self._Anzahl.items(): - res += self.EAs[k][0] * n - return res - def gesamt_E_incl_reserve(self): - return (math.ceil((self.gesamt_E() * (1 + self._reserve)))) - def gesamt_A(self): - res = 0 - for k,n in self._Anzahl.items(): - res += self.EAs[k][1] * n - return res - def gesamt_A_incl_reserve(self): - return (math.ceil((self.gesamt_A() * (1 + self._reserve)))) - def Anzahl_notwendigen_Siemens_EAKarten(self): - SiemensS7_32DE = math.ceil(self.gesamt_E()/32) - SiemensS7_32DA = math.ceil(self.gesamt_A()/32) - return (SiemensS7_32DE, SiemensS7_32DA) - def Anzahl_Siemens_EAKarten_incl_reserve(self): - SiemensS7_32DE_incl_reserve = math.ceil(self.gesamt_E_incl_reserve()/32) - SiemensS7_32DA_incl_reserve = math.ceil(self.gesamt_A_incl_reserve()/32) - return (SiemensS7_32DE_incl_reserve, SiemensS7_32DA_incl_reserve) - - -class HW(): - #TODO "bedienstation_1fach_Not_Aus" keine Anzahl manuelle eingabe aber dann noch bezüge in mengengerüst und hardware; muss noch eingepflegt werden - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "schaltschrankgehaeuse_b1x1200_zubehoer": 0, - "schaltschrankgehaeuse_b2x800_zubehoer": 0, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 1, - "sps_simatic_s7_1517_3": 0, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - #"memory_card_2_gb": 0 - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "abgang_400v":0, - "abgang_24_v":0, - "anlagenrechner":1, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 0, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 0, - "zusaetzlicher_bildschirm":0, - #"schaltschrank":1, - - #"unterverteiler_fuer_1neuenhauser_pm":0, - "unterverteiler_fuer_1flyer":0, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":0, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":0, - "unterverteiler_fuer_puffer":1, - - #"unterverteiler_fuer_5_rsm_fa":0, - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - #"unterverteiler_fuer_10_rsm_fa":0, - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - #"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0, - "korrektur_3_rsm_zusaetzlich_im_unterverteiler":0, - - "unterverteiler_fuer_4_rsm_direct":0, - "korrektur_4_rsm_zusaetzlich_im_unterverteiler":0, - - #"unterverteiler_fuer_12_rsm_direct":0, - "korrektur_12_rsm_zusaetzlich_im_unterverteiler":0, - "unterverteiler_fuer_8_rsm_direct":0, - "korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler":0, - - #"busverteiler_6_rsm_direct":0, - "korrektur_6_rsm_zusaetzlich_im_busverteiler":0, - - #"busverteiler_8_rsm_direct":0, - "korrektur_8_rsm_zusaetzlich_im_busverteiler":0, - - #"antrieb_unidirektional_halbleiter":0, - #"antrieb_bidirektional_halbleiter":0, - "antrieb_unidirektional_schuetz":0, - "antrieb_bidirektional_schuetz":0, - "motorschutzschalter":0, - "wendeschuetzschaltung":0, - #"frequenzumrichter":0, - ## summe_motorstarter - - # "bedienstation_1fach_kpl":0, - # "bedienst_2fach_wechs_bcd_10f":0, - # "bedienstation_2fach_kpl":0, - # "halter_bedientableau_2fach":0, - # "bedienstation_3fach_kpl":0, - # "halter_bedientableau_3fach":0, - # "bedienstation_4fach_kpl":0, - # "halter_bedientableau_4fach":0, - # "bedienstation_6fach_kpl":0, - # "halter_bedienstation_6fach":0, - # "drucktaster_automatische_umfahrung":0, - # "halter_fuer_drucktaster":0, - ## summe_bedienstationen - - "ET200_SP":1, - #"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, - "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, - #"et200_sp_eingangskarte_8_de":0, - "korrektur_et200_sp_eingangskarte_8_de":0, - "et200_sp_eingangskarte_16_de":0, - #"et200_sp_eingangskarte_8_do":0, - "korrektur_et200_sp_eingangskarte_8_do":0, - "et200_sp_eingangskarte_16_do":0, - # "et200_sp_base_unit_neue_last_mit_potKlemmen":0, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - #"korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen":0, - # "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen":0, - # "et200_sp_base_unit_neue_last":0, - #"korrektur_et200_sp_base_unit_neue_last":-15, - # "et200_sp_base_unit_links_gebrueckt":0, - "korrektur_et200_sp_base_unit_links_gebrueckt":0, - - "SLIO":0, - # "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, - "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, - # "slio_eingangskarte_4_de":0, - "korrektur_slio_eingangskarte_4_de":0, - # "slio_eingangskarte_8_de":0, - "korrektur_slio_eingangskarte_8_de":0, - # "slio_ausgangskarte_4_do":0, - "korrektur_slio_ausgangskarte_4_do":0, - # "slio_ausgangskarte_8_do":0, - "korrektur_slio_ausgangskarte_8_do":0, - # "slio_power_modul":0, - "korrektur_slio_power_modul":0, - # "slio_4_x_dc_24v_4_x_dc_0v":0, - "korrektur_slio_4_x_dc_24v_4_x_dc_0v":0, - # "slio_8_x_dc_24v":0, - # "slio_8_x_dc_0v":0, - "korrektur_slio_8_x_dc_0v":0, - - # MATERIAL VOR ORT - "movimot_fu_mit_anschaltung":0, - # "sensor_optisch_traverse":0, - "sensorhalter_ohne_sensor":0, - # "reflexionslichtschranke_rsm_direct":0, - # "stoppersensor_induktiv_mit_halter":0, - # "sensor_spulenpruefung_voll_leer":0, - # "seilzugschalter":0, - "seil_fuer_seilzugschalter":0, - # "blitzleuchte":0, - # "spulenumsetzstation":0, - # "sensorkabel_je_20m":0, - # "stopper_weichenkabel_je_5m":0, - # "motorkabel_je_30m":0, - "kabelpritschen_leitern_200_60":348, - "kabelpritsche_rsm_100_60":0, - "kabelpritsche_rsm_50_35":0, - # "klemmkasten_rsm":0, - # "klemmkasten_direct_in_rsm":0, - # "erdung":0, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - # "kabel_fuer_klemmkasten_und_bts_60m":0, - # "kabel_fuer_1fach_bts_zug_wechseln":0, - # "zuleitung_75_m_unterverteiler_4x4mm2_400vac":0, - # "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, - #"korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":-6, - # "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", - #"korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0, - # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":0, - # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":0, - # "profinetkabel":0, - "korrektur_profinetkabel":0, - # "schnittstellen_8x1mm2_30m":0, - } - - # Einzelteilpreise in € - ep = { - # Schaltschrank Einzelpreis - "schaltschrankgehaeuse_b1x800_zubehoer": 2000, # - "schaltschrankgehaeuse_b2x800_zubehoer": 4663.45, # 790821101 - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5720.94, # 790821102 - "sps_simatic_s7_cpu315_2_pn_dp": 2237.25, # 708003004 - "speicherkarte_fuer_sps_512_kb": 172.5, # 708003012 - "sps_simatic_s7_cpu317_2_pn_dp": 3957, # 708003007 - "speicherkarte_fuer_sps2_mb": 246, # 708003027 - "sps_simatic_s7_1515_2": 2173.9, # 790008100 - "sps_simatic_s7_1517_3": 3827.8, # 790008101 - "sps_simatic_s7_1518_4": 5892, # 6ES7518-4AP00-0AB0 - "sps_et200_1512sp": 705.75, # 709000003 - "memory_card_2_gb": 515.9, # 708015094 - "et200_sp_ea_ebene": 0, # 790009001 - "netzwerk_fernwartung": 750, # 790011001 - "abgang_400v": 250, # ---- - "abgang_24_v": 250, # ---- - "anlagenrechner": 1657, # 790011000 - "anlagenrechner_ohne_bildschirm": 1487, # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS - "pulteinbau_monitor_srline_rflat_24fhd": 1200, # 400009058 - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 350, # 400009057 - "netzwerk_display_adapter_lindy": 650, # - "zusaetzlicher_bildschirm": 1100, # - # _summe_schaltschrank - # "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210 - "unterverteiler_fuer_1flyer": 1000, # 790820207_A - "unterverteiler_fuer_2flyer": 1000, # 790820209_A - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210 - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1000, # 790820210 - "unterverteiler_fuer_puffer": 1000, # 790820210_F - - "unterverteiler_fuer_5_rsm_fa": 1000, # 790820210_D - # korrektur_1_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_10_rsm_fa": 1000, # 790820210_F - # - - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C - # korrektur_3_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_4_rsm_direct": 5584, # 790820300 - # korrektur_4_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_12_rsm_direct": 8258, # 790820302 - # korrektur_12_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_8_rsm_direct": 6736, # 790820301 - # korrektur_8_rsm_zusaetzlich_im_unterverteiler - - "busverteiler_6_rsm_direct": 1747.53, # 790801002 - # korrektur_6_rsm_zusaetzlich_im_unterverteiler - - "busverteiler_8_rsm_direct": 2052.26, # 790801001 - # korrektur_8_rsm_zusaetzlich_im_unterverteiler - - "antrieb_unidirektional_halbleiter": 90, - "antrieb_bidirektional_halbleiter": 105, - "antrieb_unidirektional_schuetz": 0, - "antrieb_bidirektional_schuetz": 0, - "motorschutzschalter": 0, - "wendeschuetzschaltung": 75, - "frequenzumrichter": 250, - # summe_motorstarter - - "bedienstation_1fach_kpl": 59, - "bedienst_2fach_wechs_bcd_10f": 105, # 790002024 - "bedienstation_2fach_kpl": 65.63, # 790000020 - "halter_bedientableau_2fach": 42, # 825304006 - "bedienstation_3fach_kpl": 99, # 790000040 - "halter_bedientableau_3fach": 46, # 825304007 - "bedienstation_4fach_kpl": 121, # 790000045 - "halter_bedientableau_4fach": 52, # 825304003 - "bedienstation_6fach_kpl": 145.8, # 790000033 - "halter_bedientableau_6fach": 56, # 825304002 - "drucktaster_automatische_umfahrung": 28, - "halter_fuer_drucktaster": 33, - # summe_bedienstationen - - # ET200_SP - "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 198.90, # 709000006 - # "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45" - "et200_sp_eingangskarte_8_de": 35, - # "korrektur_et200_sp_eingangskarte_8_de" # 709000021 - "et200_sp_eingangskarte_16_de": 58, # 709000022 - "et200_sp_eingangskarte_8_do": 46, # 709000031_A - "et200_sp_eingangskarte_16_do": 66.30, # 709000032 - "et200_sp_base_unit_neue_last_mit_potKlemmen": 23, # 709000014 - "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen": 15, # 709000015 - "et200_sp_base_unit_neue_last": 19, # 709000011 - "et200_sp_base_unit_links_gebrueckt": 11, # 709000010 - - # SLIO - "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO": 175, # 709000500 - "slio_eingangskarte_4_de": 31, # 709000510 - "slio_eingangskarte_8_de": 38, # 709000511 - "slio_ausgangskarte_4_do": 39, # 709000021 - "slio_ausgangskarte_8_do": 46, # 709000021 - "slio_power_modul": 18.22, # 709000014 - "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 - "slio_8_x_dc_24v": 18, # 709000011 - "slio_8_x_dc_0v": 13, # 709000010 - # Summe_material_in_ll - - # MATERIAL VOR ORT - "movimot_fu_mit_anschaltung": 550, - "sensor_optisch_traverse": 27, # 827072200 - "sensorhalter_ohne_sensor": 8, # 827072xxx - "reflexionslichtschranke_rsm_direct": 45, # 827072207 - "stoppersensor_induktiv_mit_halter": 63, # 827072205 - "sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041 - "seilzugschalter": 150, - "seil_fuer_seilzugschalter": 0.40, - "blitzleuchte": 72, # 790000006 - "spulenumsetzstation": 0, - "sensorkabel_je_20m": 25, # 722001xxx - "stopper_weichenkabel_je_5m": 20, # 722001xxx - "motorkabel_je_30m": 26, - "kabelpritschen_leitern_200_60": 15, - "kabelpritsche_rsm_100_60": 12, # 715000020 - "kabelpritsche_rsm_50_35": 9, # 715003010 - "klemmkasten_rsm": 120, - "klemmkasten_direct_in_rsm": 122, # 790000703 - "erdung": 13, - "kleinteile_rohre_schellen_kabelbinder_ect": 750, - - "kabel_fuer_klemmkasten_und_bts_60m": 145, - "kabel_fuer_1fach_bts_zug_wechseln": 50, - "zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146, # 725000050 - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450, # 725000057 - "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 280, # 725000057 - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145, # 725000007 - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136, # 725000004 - "profinetkabel": 42, # 726001xxx - "schnittstellen_8x1mm2_30m": 35.4, # 725000019 - } - - if RieterConfig.exists(): - ep.update(RieterConfig.getDictAsFloat("HW_Einzelpreise")) - # Zeit pro Einheit in min - zpe_dienstl_hardwareplanung = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 4200, - "schaltschrankgehaeuse_b2x800_zubehoer": 4200, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 0, - "sps_simatic_s7_1517_3": 0, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - "memory_card_2_gb": 0, - "et200_sp_ea_ebene":60, - "netzwerk_fernwartung":0, - "abgang_400v":60, - "abgang_24_v":60, - "anlagenrechner":0, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 60, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 30, - "zusaetzlicher_bildschirm":0, - "schaltschrank":0, - "unterverteiler_fuer_1neuenhauser_pm":1200, - "unterverteiler_fuer_1flyer":720, - "unterverteiler_fuer_2flyer":1020, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":810, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1110, - "unterverteiler_fuer_puffer":1200, - "unterverteiler_fuer_5_rsm_fa":960, - "unterverteiler_fuer_10_rsm_fa":1020, - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1200, - "unterverteiler_fuer_4_rsm_direct":3000, - "unterverteiler_fuer_12_rsm_direct":4800, - "unterverteiler_fuer_8_rsm_direct":3900, - "busverteiler_6_rsm_direct":600, - "busverteiler_8_rsm_direct":960 - } - - if RieterConfig.exists(): - zpe_dienstl_hardwareplanung.update(RieterConfig.getDictAsFloat("HW_Zeiten Hardwareplanung")) - zpe_e_werkstatt = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 2400, - "schaltschrankgehaeuse_b2x800_zubehoer": 4800, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 0, - "sps_simatic_s7_1517_3": 0, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - "memory_card_2_gb": 0, - "et200_sp_ea_ebene":120, - "netzwerk_fernwartung":0, - "abgang_400v":90, - "abgang_24_v":90, - "anlagenrechner":0, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 240, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 120, - "zusaetzlicher_bildschirm":0, - "schaltschrank":0, - "unterverteiler_fuer_1neuenhauser_pm":1200, - "unterverteiler_fuer_1flyer":1020, - "unterverteiler_fuer_2flyer":1200, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1140, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1200, - "unterverteiler_fuer_puffer":1200, - "unterverteiler_fuer_5_rsm_fa":1020, - "unterverteiler_fuer_10_rsm_fa":1140, - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1500, - "unterverteiler_fuer_4_rsm_direct":3600, - "unterverteiler_fuer_12_rsm_direct":4800, - "unterverteiler_fuer_8_rsm_direct":4200, - "busverteiler_6_rsm_direct":480, - "busverteiler_8_rsm_direct":480, - "antrieb_unidirektional_halbleiter":10, - "antrieb_bidirektional_halbleiter":10, - "antrieb_unidirektional_schuetz":0, - "antrieb_bidirektional_schuetz":0, - "motorschutzschalter":0, - "wendeschuetzschaltung":0, - "frequenzumrichter":0, - "bedienstation_1fach_kpl":25, - "bedienst_2fach_wechs_bcd_10f":90, - "bedienstation_2fach_kpl":30, - "halter_bedientableau_2fach":30, - "bedienstation_3fach_kpl":25, - "halter_bedientableau_3fach":30, - "bedienstation_4fach_kpl":30, - "halter_bedientableau_4fach":30, - "bedienstation_6fach_kpl":45, - "halter_bedienstation_6fach":30, - "drucktaster_automatische_umfahrung":15, - "halter_fuer_drucktaster":0, - } - - if RieterConfig.exists(): - zpe_e_werkstatt.update(RieterConfig.getDictAsFloat("HW_Zeiten Elektro-Werkstatt")) - Keys_of_Vor_Ort = [ - "movimot_fu_mit_anschaltung", - "sensor_optisch_traverse", - "sensorhalter_ohne_sensor", - "reflexionslichtschranke_rsm_direct", - "stoppersensor_induktiv_mit_halter", - "sensor_spulenpruefung_voll_leer", - "seilzugschalter", - "seil_fuer_seilzugschalter", - "blitzleuchte", - "spulenumsetzstation", - "sensorkabel_je_20m", - "stopper_weichenkabel_je_5m", - "motorkabel_je_30m", - "kabelpritschen_leitern_200_60", - "kabelpritsche_rsm_100_60", - "kabelpritsche_rsm_50_35", - "klemmkasten_rsm", - "klemmkasten_direct_in_rsm", - "erdung", - "kleinteile_rohre_schellen_kabelbinder_ect", - "kabel_fuer_klemmkasten_und_bts_60m", - "kabel_fuer_1fach_bts_zug_wechseln", - "zuleitung_75_m_unterverteiler_4x4mm2_400vac", - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", - "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm", - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm", - "profinetkabel", - "korrektur_profinetkabel", - "schnittstellen_8x1mm2_30m" - ] - Keys_of_Schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm" - ] - def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]): - self._anzahl = self.mengen - - self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0) - self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b2x800_zubehoer", 0) - self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0) - self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0) - self._anzahl["speicherkarte_fuer_sps_512_kb"] = anzahl.get("speicherkarte_fuer_sps_512_kb", 0) - self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0) - self._anzahl["speicherkarte_fuer_sps2_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb", 0) - self._anzahl["sps_simatic_s7_1515_2"] = anzahl.get("sps_simatic_s7_1515_2", 0) - self._anzahl["sps_simatic_s7_1517_3"] = anzahl.get("sps_simatic_s7_1517_3", 0) - self._anzahl["sps_simatic_s7_1518_4"] = anzahl.get("sps_simatic_s7_1518_4", 0) - self._anzahl["sps_et200_1512sp"] = anzahl.get("sps_et200_1512sp", 0) - - - self._anzahl["memory_card_2_gb"] = self.anzahl("sps_simatic_s7_1518_4") - - self._anzahl["et200_sp_ea_ebene"] = anzahl.get("et200_sp_ea_ebene", 0) - self._anzahl["netzwerk_fernwartung"] = anzahl.get("netzwerk_fernwartung", 0) - self._anzahl["abgang_400v"] = anzahl.get("abgang_400v", 0) - self._anzahl["abgang_24_v"] = anzahl.get("abgang_24_v", 0) - self._anzahl["anlagenrechner"] = anzahl.get("anlagenrechner", 0) - self._anzahl["anlagenrechner_ohne_bildschirm"] = anzahl.get("anlagenrechner_ohne_bildschirm", 0) - self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = anzahl.get("pulteinbau_monitor_srline_rflat_24fhd", 0) - self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = anzahl.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0) - self._anzahl["netzwerk_display_adapter_lindy"] = anzahl.get("netzwerk_display_adapter_lindy", 0) - self._anzahl["zusaetzlicher_bildschirm"] = anzahl.get("zusaetzlicher_bildschirm", 0) - self._anzahl["schaltschrank"] = eas.stueckzahl.get("Bedienelemente_Steuerschrank") - self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("Neuenhauser-Putzmaschine") - - self._anzahl["unterverteiler_fuer_1flyer"] = anzahl.get("unterverteiler_fuer_1flyer", 0) - self._anzahl["unterverteiler_fuer_2flyer"] = anzahl.get("unterverteiler_fuer_2flyer", 0) - self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) - self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) - self._anzahl["unterverteiler_fuer_puffer"] = anzahl.get("unterverteiler_fuer_puffer", 0) - - self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) - if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_5_rsm_fa"] = math.ceil(num_rsms/5) + anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) - - if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_10_rsm_fa"] = math.ceil(num_rsms/10) + anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) - else: - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3) - self._anzahl["unterverteiler_fuer_4_rsm_direct"] = anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) - self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") / 12) +\ - anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["unterverteiler_fuer_8_rsm_direct"] = anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) - self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) - - self._anzahl["antrieb_unidirektional_halbleiter"] = \ - mg.zusammenfassung().get("RA_uni") +\ - mg.zusammenfassung().get("RA_uni_abhebbar") +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung") - - self._anzahl["antrieb_bidirektional_halbleiter"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_BI_abhebbar") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_ohne_SPS_Ansteuerung") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_ohne_SPS-Ansteuerung") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi") +\ - mg.get_value_of_object("flyer_ejet", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar_unger_Schiene") +\ - mg.get_value_of_object("Puffer", "RA_bi_ungerade_Schiene") +\ - mg.get_value_of_object("Puffer", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("rsm_fa", "RRA_bi") +\ - mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung") - - self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0) - - # # summe_motorstarter - self._anzahl["bedienstation_1fach_kpl"] = eas.anzahl("bedienstation_1fach_Not_Aus", 0) + eas.anzahl("bedienstation_einfach_Zug_Wechseln", 0) - self._anzahl["bedienst_2fach_wechs_bcd_10f"] = eas.anzahl("bedienst_2fach_wechs_bcd_10f", 0) - self._anzahl["bedienstation_2fach_kpl"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Reset", 0) - self._anzahl["halter_bedientableau_2fach"] = self.anzahl("bedienstation_2fach_kpl") - self._anzahl["bedienstation_3fach_kpl"] = eas.anzahl("bedienstation_3fach_kpl", 0) - self._anzahl["halter_bedientableau_3fach"] = self.anzahl("bedienstation_3fach_kpl") - self._anzahl["bedienstation_4fach_kpl"] = eas.anzahl("bedienstation_4fach_kpl", 0) - self._anzahl["halter_bedientableau_4fach"] = self.anzahl("bedienstation_4fach_kpl") - self._anzahl["bedienstation_6fach_kpl"] = eas.anzahl("bedienstation_6fach_kpl", 0) - self._anzahl["halter_bedientableau_6fach"] = self.anzahl("bedienstation_6fach_kpl") - self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0) - self._anzahl["halter_fuer_drucktaster"] = self.anzahl("drucktaster_automatische_umfahrung") - # # summe_bedienstationen - - self._anzahl["ET200_SP"] = anzahl.get("ET200_SP", 0) - self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * 2 * self.anzahl("schaltschrank") +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ - self.anzahl("unterverteiler_fuer_1flyer") +\ - self.anzahl("unterverteiler_fuer_2flyer") +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_puffer") +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ - self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45")) - self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) - self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_de", 0) - self._anzahl["et200_sp_eingangskarte_8_de"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 3 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 7 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 4 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 5 +\ - self.anzahl("unterverteiler_fuer_puffer") * 5 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 8 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 4 +\ - self.anzahl("korrektur_et200_sp_eingangskarte_8_de") +\ - mg.zusammenfassung().get("Kreuzungsweiche")) - - self._anzahl["et200_sp_eingangskarte_16_de"] = anzahl.get("et200_sp_eingangskarte_16_de", 0) - - self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0) - self._anzahl["et200_sp_eingangskarte_8_do"] = \ - self.anzahl("ET200_SP") *\ - (math.ceil((self.anzahl("et200_sp_ea_ebene") *\ - self.anzahl("schaltschrank") * 4 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 6 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 4 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 6 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 5 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 5 +\ - self.anzahl("unterverteiler_fuer_puffer") * 7 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 6 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 9 / 1.5)) + - self.anzahl("korrektur_et200_sp_eingangskarte_8_do") + - mg.zusammenfassung().get("Kreuzungsweiche") * 2) - - self._anzahl["et200_sp_eingangskarte_16_do"] = anzahl.get("et200_sp_eingangskarte_16_do", 0) - - if anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last", 0) == "et200_sp_base_unit_neue_last": - # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) -\ - # anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 - # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) - self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = -1 * self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 - self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = 0 - - elif anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last", 0) == "et200_sp_base_unit_neue_last_mit_potKlemmen": - # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) - # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) -\ - # anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 - self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = 0 - self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = -1 * self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 - else: - # self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) - # self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0) - self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = 0 - self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = 0 - - - self._anzahl["et200_sp_base_unit_neue_last_mit_potKlemmen"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + - self.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen")) - self._anzahl["et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"] = self.anzahl("ET200_SP", 0) * (math.ceil((self.anzahl("et200_sp_eingangskarte_8_de") + - self.anzahl("et200_sp_eingangskarte_8_do"))) - - self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen")) - - self._anzahl["et200_sp_base_unit_neue_last"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + - self.anzahl("korrektur_et200_sp_base_unit_neue_last")) - - if self.anzahl("et200_sp_base_unit_neue_last") > 0 and self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen") > 0: - raise Exception("et200_sp_base_unit_neue_last und et200_sp_base_unit_neue_last_mit_potKlemmen sollten nicht beide verwendet werden") - - self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = anzahl.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0) - self._anzahl["et200_sp_base_unit_links_gebrueckt"] = self.anzahl("ET200_SP") * (math.ceil((self.anzahl("et200_sp_eingangskarte_16_de") + - self.anzahl("et200_sp_eingangskarte_16_do"))) - - self.anzahl("et200_sp_base_unit_neue_last") + - self.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt")) - - - self._anzahl["SLIO"] = anzahl.get("SLIO", 0) - - self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) - self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ - self.anzahl("unterverteiler_fuer_1flyer") +\ - self.anzahl("unterverteiler_fuer_2flyer") +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_puffer") +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ - self.anzahl("unterverteiler_fuer_4_rsm_direct") +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") +\ - self.anzahl("busverteiler_6_rsm_direct") +\ - self.anzahl("busverteiler_8_rsm_direct") +\ - self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO")) - - self._anzahl["korrektur_slio_eingangskarte_4_de"] = anzahl.get("korrektur_slio_eingangskarte_4_de", 0) - self._anzahl["slio_eingangskarte_4_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 6 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 8 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 6 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 6 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 13 +\ - self.anzahl("unterverteiler_fuer_puffer") * 9 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 7 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 15 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") * 4 +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") * 7 +\ - self.anzahl("busverteiler_8_rsm_direct") * 16 +\ - self.anzahl("korrektur_slio_eingangskarte_4_de")) - - self._anzahl["korrektur_slio_eingangskarte_8_de"] = anzahl.get("korrektur_slio_eingangskarte_8_de", 0) - self._anzahl["slio_eingangskarte_8_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 3 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 7 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 3 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 7 +\ - self.anzahl("unterverteiler_fuer_puffer") * 5 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 4 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 8 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 8 +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") * 2 +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") * 4 +\ - self.anzahl("busverteiler_8_rsm_direct") * 8 +\ - self.anzahl("korrektur_slio_eingangskarte_8_de", 0)) - self._anzahl["korrektur_slio_ausgangskarte_4_do"] = anzahl.get("korrektur_slio_ausgangskarte_4_do", 0) - self._anzahl["slio_ausgangskarte_4_do"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 7 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 7 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 14 +\ - self.anzahl("unterverteiler_fuer_puffer") * 22 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 16 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 22 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") * 24 +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\ - self.anzahl("busverteiler_8_rsm_direct") * 16 +\ - self.anzahl("korrektur_slio_ausgangskarte_4_do")) - self._anzahl["korrektur_slio_ausgangskarte_8_do"] = anzahl.get("korrektur_slio_ausgangskarte_8_do", 0) - self._anzahl["slio_ausgangskarte_8_do"] = self.anzahl("SLIO") * ((self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\ - self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\ - self.anzahl("unterverteiler_fuer_1flyer") * 8 +\ - self.anzahl("unterverteiler_fuer_2flyer") * 14 +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") * 8 +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") * 14 +\ - self.anzahl("unterverteiler_fuer_puffer") * 22 +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") * 16 +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") * 22 +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") * 16 +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") * 24 +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\ - self.anzahl("busverteiler_8_rsm_direct") * 16) / 2 +\ - self.anzahl("korrektur_slio_ausgangskarte_8_do")) - self._anzahl["korrektur_slio_power_modul"] = anzahl.get("korrektur_slio_power_modul", 0) - self._anzahl["slio_power_modul"] = self.anzahl("SLIO") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO") * 1 +\ - self.anzahl("korrektur_slio_power_modul")) - self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = anzahl.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0) - self._anzahl["slio_4_x_dc_24v_4_x_dc_0v"] = self.anzahl("SLIO") * (math.ceil((self.anzahl("slio_eingangskarte_4_de") + - self.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v")))) - - self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0) - self._anzahl["korrektur_slio_8_x_dc_0v"] = anzahl.get("korrektur_slio_8_x_dc_0v", 0) - self._anzahl["slio_8_x_dc_0v"] = self.anzahl("SLIO") * ((self.anzahl("slio_eingangskarte_8_de") + - (self.anzahl("slio_ausgangskarte_4_do") / 2)) * 1 + - self.anzahl("korrektur_slio_8_x_dc_0v")) - - - # # Summe_material_in_ll - - # # MATERIAL VOR ORT - - self._anzahl["movimot_fu_mit_anschaltung"] = anzahl.get("movimot_fu_mit_anschaltung", 0) - self._anzahl["sensor_optisch_traverse"] = eas.anzahl('Sensor_Traversenabfrage_optisch') - self._anzahl["sensorhalter_ohne_sensor"] = anzahl.get("sensorhalter_ohne_sensor", 0) - self._anzahl["reflexionslichtschranke_rsm_direct"] = eas.anzahl("Reflexionslichtschranke_RSM_DIRECT", 0) - self._anzahl["stoppersensor_induktiv_mit_halter"] = eas.anzahl("Sensor induktiv Flyer+PM") - self._anzahl["sensor_spulenpruefung_voll_leer"] = mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer", 0) - self._anzahl["seilzugschalter"] = eas.anzahl("Seilzugschalter", 0) - self._anzahl["seil_fuer_seilzugschalter"] = anzahl.get("seil_fuer_seilzugschalter", 0) - self._anzahl["blitzleuchte"] = eas.anzahl("Blitzleuchte_Stoerung", 0) - self._anzahl["spulenumsetzstation"] = eas.anzahl("Spulenumsetzstation", 0) - self._anzahl["sensorkabel_je_20m"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") +\ - mg.zusammenfassung().get("Sensor_optisch_Traverse") +\ - mg.zusammenfassung().get("Sensor_induktiv_Spulenalter_Zug_positionierung") +\ - mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer") +\ - mg.zusammenfassung().get("Werma_Rundumleuchte_Störung") - self._anzahl["stopper_weichenkabel_je_5m"] = eas.get_SA("Weiche") +\ - eas.get_SA("Weiche_nach_PM_bipolar") +\ - eas.get_SA("gemeinsame_Weichenrueckstellung") +\ - eas.get_SA("Dreifach_Weiche_DIRECT") +\ - eas.get_SA("Kreuzungsweiche") +\ - eas.get_SA("Stopper") +\ - eas.get_SA("Ventil_RA_3_2_abhebbar") +\ - eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar") +\ - eas.get_SA("Blitzleuchte_Stoerung") - self._anzahl["motorkabel_je_30m"] = mg.zusammenfassung().get("RA_uni", 0) +\ - mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi", 0) +\ - mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ - mg.zusammenfassung().get("Doppelstreckenantrieb", 0) - self._anzahl["kabelpritschen_leitern_200_60"] = anzahl.get("kabelpritschen_leitern_200_60", 0) - self._anzahl["kabelpritsche_rsm_100_60"] = anzahl.get("kabelpritsche_rsm_100_60", 0) - self._anzahl["kabelpritsche_rsm_50_35"] = anzahl.get("kabelpritsche_rsm_50_35", 0) - self._anzahl["klemmkasten_rsm"] = mg.zusammenfassung().get("klemmkasten_rsm", 0) - self._anzahl["klemmkasten_direct_in_rsm"] = eas.anzahl("bedienstation_zweifach_Wechs_BCD_10f", 0) - self._anzahl["zuleitung_75_m_unterverteiler_4x4mm2_400vac"] = self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\ - self.anzahl("unterverteiler_fuer_1flyer") +\ - self.anzahl("unterverteiler_fuer_2flyer") +\ - self.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ - self.anzahl("unterverteiler_fuer_puffer") +\ - self.anzahl("unterverteiler_fuer_5_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_10_rsm_fa") +\ - self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\ - self.anzahl("unterverteiler_fuer_12_rsm_direct") +\ - self.anzahl("unterverteiler_fuer_8_rsm_direct") +\ - self.anzahl("busverteiler_8_rsm_direct") - self._anzahl["erdung"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ - self.anzahl("motorkabel_je_30m") / 2 - self._anzahl["kleinteile_rohre_schellen_kabelbinder_ect"] = anzahl.get("kleinteile_rohre_schellen_kabelbinder_ect", 0) - self._anzahl["kabel_fuer_klemmkasten_und_bts_60m"] = self.anzahl("bedienst_2fach_wechs_bcd_10f") +\ - self.anzahl("bedienstation_2fach_kpl") +\ - self.anzahl("halter_bedientableau_2fach") +\ - self.anzahl("bedienstation_3fach_kpl") +\ - self.anzahl("halter_bedientableau_3fach") +\ - self.anzahl("halter_bedientableau_4fach") +\ - self.anzahl("bedienstation_4fach_kpl") +\ - self.anzahl("bedienstation_6fach_kpl") - self._anzahl["kabel_fuer_1fach_bts_zug_wechseln"] = self.anzahl("bedienstation_1fach_kpl") - - if anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) == "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) -\ - # anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = -1 * self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = 0 - elif anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) == "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) -\ - # anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = -1 * self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = 0 - else: - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) - # self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = 0 - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = 0 - - self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ - self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc") - self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\ - self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc") - - if self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] > 0 and self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] > 0: - raise Exception("zuleitung 12x4 und 12x2.5 sollten nicht beide verwendet werden") - - if 'direct' in mg.get_deckblatt_value("SYSTEM"): - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = mg.get_deckblatt_value("RSM") - else: - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = 0 - if 'direct' in mg.get_deckblatt_value("SYSTEM"): - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = mg.get_deckblatt_value("RSM") +\ - self.anzahl("klemmkasten_rsm") - else: - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = self.anzahl("klemmkasten_rsm") - self._anzahl["korrektur_profinetkabel"] = anzahl.get("korrektur_profinetkabel", 0) - self._anzahl["profinetkabel"] = self.anzahl("sps_simatic_s7_1517_3") +\ - self.anzahl("sps_simatic_s7_1515_2") +\ - self.anzahl("sps_simatic_s7_cpu315_2_pn_dp") +\ - self.anzahl("sps_simatic_s7_cpu317_2_pn_dp") +\ - self.anzahl("sps_et200_1512sp") +\ - self.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc") +\ - self.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc") +\ - self.anzahl("korrektur_profinetkabel") - self._anzahl["schnittstellen_8x1mm2_30m"] = mg.zusammenfassung().get("Interface_Putzmaschine", 0) +\ - mg.zusammenfassung().get("Interface_Doffer", 0) - - - # remove all elements with the number of 0. They are of no use - l = [] - for k,v in self._anzahl.items(): - if v == 0: - l.append(k) - for item in l: - del self._anzahl[item] - # with open('HW_Daten.txt', 'w') as convert_file: - # convert_file.write(json.dumps(self._anzahl)) - - def __repr__(self): - return repr(self._anzahl) - - def anzahl(self, partname, default_val = 0): - return self._anzahl.get(partname, default_val) - - def summe_gesamt(self): - """ - :return: price sum of all given items within self._anzahl - """ - return (self.summe_in_LL() + self.summe_vorort()) - - def summe_in_LL(self): - res = 0 - for k,anz in self._anzahl.items(): - if k in self.Keys_of_Vor_Ort: - continue - elif k not in self.ep: - continue - elif k in self.Keys_of_Schaltschrank: - preis = anz * self.ep[k] * self.anzahl("schaltschrank") - else: - preis = anz * self.ep[k] - res += preis - - return res - - def summe_vorort(self): - res = 0 - for k,anz in self._anzahl.items(): - if k in self.Keys_of_Vor_Ort: - preis = anz * self.ep[k] - res += preis - return res - - def summe_h_unterverteiler_hardware(self): - """ gibt dies Summer der Stunden zur Montage der Unterverteiler hardware zurück""" - keys_unterverteiler = [ - "unterverteiler_fuer_1neuenhauser_pm", - "unterverteiler_fuer_1flyer", - "unterverteiler_fuer_2flyer", - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_puffer", - "unterverteiler_fuer_5_rsm_fa", - "unterverteiler_fuer_10_rsm_fa", - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", - "unterverteiler_fuer_4_rsm_direct", - "unterverteiler_fuer_12_rsm_direct", - "unterverteiler_fuer_8_rsm_direct", - "busverteiler_6_rsm_direct", - "busverteiler_8_rsm_direct", - ] - zeiten = dict() - res = 0 - for k in keys_unterverteiler: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 - zeiten[k] = dauer - res += dauer - return res - - def summe_h_unterverteiler_e_werkstatt(self): - """ gibt dies Summer der Stunden zur Montage der Unterverteiler E-Werkstatt zurück""" - keys_unterverteiler = [ - "unterverteiler_fuer_1neuenhauser_pm", - "unterverteiler_fuer_1flyer", - "unterverteiler_fuer_2flyer", - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_puffer", - "unterverteiler_fuer_5_rsm_fa", - "unterverteiler_fuer_10_rsm_fa", - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", - "unterverteiler_fuer_4_rsm_direct", - "unterverteiler_fuer_12_rsm_direct", - "unterverteiler_fuer_8_rsm_direct", - "busverteiler_6_rsm_direct", - "busverteiler_8_rsm_direct", - ] - res = 0 - for k in keys_unterverteiler: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - - def get_h_of(self, partname): - return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60) - def summe_h_bedienstationen(self): - """ gibt die Summer der Stunden zur Montage der Bedienstationen zurück""" - keys_bedienstationen = [ - "bedienstation_1fach_kpl", - "bedienst_2fach_wechs_bcd_10f", - "bedienstation_2fach_kpl", - "halter_bedientableau_2fach", - "bedienstation_3fach_kpl", - "halter_bedientableau_3fach", - "bedienstation_4fach_kpl", - "halter_bedientableau_4fach", - "bedienstation_6fach_kpl", - "halter_bedienstation_6fach", - "drucktaster_automatische_umfahrung", - "halter_fuer_drucktaster" - ] - - res = 0 - for k in keys_bedienstationen: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - def summe_h_schaltschrank_hardware(self): - """ gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück""" - keys_schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm", - ] - - res = 0 - for k in keys_schaltschrank: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 - res += dauer - return res - def summe_h_schaltschrank_e_werkstatt(self): - """ gibt die Summer der Stunden zur Montage des Schaltschranks in der E-Werkstatt zurück""" - keys_schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm", - ] - - res = 0 - for k in keys_schaltschrank: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - def summe_h_zeiten_hardwareplanung(self): - summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware() - summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware() - return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware) - -class Dienstleistung(): - # Angaben in h - mengen = { - "Pflichtenheft_Autom_Schnittstellen": 0, - - ## Hardwareplanung - #"Erstellung_Steuerungslayout": 1, - #"Schaltplanerstellung_incl_Korrekturen": 1, - #"Projektkoordination": 1, - #"Materialdispo": 1, - #"Abstimmung_mit_E_Werkstatt": 1, - #"Erstellen_E_Montageunterlagen": 1, - - # Test_und_Installation - # "PC_Installation": 0, - "Oberfläche_Simulation": 0, - "SPS_Test_im_Haus_Simulation": 0, - ## Dokumentation - "Bedienerhandbuch": 16, - "SPS_Doku": 15, - "PC_Doku": 0, - - ## Elektrowerkstatt - #Schaltschrankbau - #Unterverteilerbau - #Klemmkastenbau_je_2h - #Bedientableaubau - "Vormontage_im_Haus": 0 - } - - def __init__(self, anzahl, hw: type[HW]): - # hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet - self._Hours = self.mengen - - # "Pflichtenheft_Autom_Schnittstellen": 0, - - ## Hardwareplanung - FaktorLayout = 0.25 - FaktorSchaltplan = 0.6 - FaktorProjektkoord = 0.15 - FaktorDispo = 0.2 - FaktorAbstimmung = 0.05 - FaktorMontageUnterlagen = 0.05 - self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_zeiten_hardwareplanung() * FaktorLayout - self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorSchaltplan - self._Hours["Projektkoordination"] = hw.summe_h_zeiten_hardwareplanung() * FaktorProjektkoord - self._Hours["Materialdispo"] = hw.summe_h_zeiten_hardwareplanung() * FaktorDispo - self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_zeiten_hardwareplanung() * FaktorAbstimmung - self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorMontageUnterlagen - # Test_und_Installation - self._Hours["PC_Installation"] = hw.anzahl("anlagenrechner") * 8 * hw.anzahl("schaltschrank", 0) - - self._Hours["Oberfläche_Simulation"] = anzahl.get("Oberfläche_Simulation", 0) #TODO was heisst hier bedingt ändern? - self._Hours["SPS_Test_im_Haus_Simulation"] = anzahl.get("SPS_Test_im_Haus_Simulation", 0) - ## Dokumentation - self._Hours["Bedienerhandbuch"] = anzahl.get("Bedienerhandbuch", 0) - self._Hours["SPS_Doku"] = anzahl.get("SPS_Doku", 0) - self._Hours["PC_Doku"] = anzahl.get("PC_Doku", 0) - - ## Elektrowerkstatt - self._Hours["Schaltschrankbau"] = hw.summe_h_schaltschrank_e_werkstatt() - self._Hours["Unterverteilerbau"] = hw.summe_h_unterverteiler_e_werkstatt() - - self._Hours["Klemmkastenbau_je_2h"] = (hw.anzahl("klemmkasten_rsm") + - hw.anzahl("klemmkasten_direct_in_rsm")) * 2 - self._Hours["Bedientableaubau"] = hw.get_h_of("bedienstation_1fach_kpl") +\ - hw.get_h_of("bedienst_2fach_wechs_bcd_10f")+\ - hw.get_h_of("bedienstation_2fach_kpl") +\ - hw.get_h_of("bedienstation_3fach_kpl") +\ - hw.get_h_of("bedienstation_4fach_kpl") +\ - hw.get_h_of("bedienstation_6fach_kpl") +\ - hw.get_h_of("drucktaster_automatische_umfahrung") - self._Hours["Vormontage_im_Haus"] = anzahl.get("Vormontage_im_Haus", 0) - def __repr__(self): - return repr(self._Hours) - - def anzahl(self, partname, default_val = 0): - return self._Hours.get(partname, default_val) - def get_hours_of(self, dlname): - return self._Hours.get(dlname, 0) - - def summe_stunden_dienstleistung_in_landsberg(self): - """returns hours necessary""" - hours_necessary = self.stunden_diensleistung_hardwareplanung() +\ - self.stunden_elektrowerkstatt() - return hours_necessary - def stunden_diensleistung_hardwareplanung(self): - """return hours of hardware-bucheting, test and installation""" - keys_hardwareplanung = [ - "Pflichtenheft_Autom_Schnittstellen", - "Erstellung_Steuerungslayout", - "Schaltplanerstellung_incl_Korrekturen", - "Projektkoordination", - "Materialdispo", - "Abstimmung_mit_E_Werkstatt", - "Erstellen_E_Montageunterlagen", - "PC_Installation", - "Oberfläche_Simulation", - "SPS_Test_im_Haus_Simulation" - ] - res = 0 - for k in keys_hardwareplanung: - dauer = self.get_hours_of(k) - res += dauer - return res - def stunden_elektrowerkstatt(self): - keys_elektrowerkstatt = [ - "Schaltschrankbau", - "Unterverteilerbau", - "Klemmkastenbau_je_2h", - "Bedientableaubau", - "Vormontage_im_Haus" - ] - res = 0 - for k in keys_elektrowerkstatt: - dauer = self.get_hours_of(k) - res += dauer - return res - - def stunden_elektro_Landsberg(self): - return 0 - -#EMO -class EMO(): - montagezeiten = { - "Schaltschrank_aufstellen": 6.0, #(h/St) - "Unterverteiler_montieren": 3.0, #(h/St) - "Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h) - "Pritsche_in_RSM_montieren": 21.0, - "Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor) - "Tableau_befestigen_und_anschliessen": 0.75, #(h/St) - "Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St) - "Sensoren_montieren": 0.45, #(h/St) - "Seilzugschalter_installieren": 4.0, #(h/St) - "Blitzleuchte_installieren": 0.5, #(h/St) - "Weiche_Stopper_anschliessen": 0.35, #(h/St) - "Erdung": 0.5, #(h) - } - - if RieterConfig.exists(): - montagezeiten.update(RieterConfig.getDictAsFloat("Elektro-Montagezeiten")) - def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]): - #für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt - self._mehraufwand = 0.1 - mengen = { - "Schaltschrank_aufstellen": 0, - "Unterverteiler_montieren": 0, - "Pritsche_montieren_umbauen_demontieren": 0, - "Pritsche_in_RSM_montieren": 0, - "Motor_verdrahten_und_anschliessen": 0, - "Tableau_befestigen_und_anschliessen": 0, - "Schnittstelle_Flyer_Putzmaschine": 0, - "Sensoren_montieren": 0, - "Seilzugschalter_installieren": 0, - "Blitzleuchte_installieren": 0, - "Weiche_Stopper_anschliessen": 0, - "Erdung": 0, - } - self._Mengen = {} - self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ - hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\ - hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer") - self._Mengen["Unterverteiler_montieren"] = hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") - self._Mengen["Pritsche_montieren_umbauen_demontieren"] = hw.anzahl("kabelpritschen_leitern_200_60") - self._Mengen["Pritsche_in_RSM_montieren"] = hw.anzahl("kabelpritsche_rsm_100_60") - - self._Mengen["Motor_verdrahten_und_anschliessen"] = mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0) - self._Mengen["Tableau_befestigen_und_anschliessen"] = \ - hw.anzahl( "bedienstation_1fach_kpl") +\ - hw.anzahl("bedienst_2fach_wechs_bcd_10f") +\ - hw.anzahl("bedienstation_2fach_kpl") +\ - hw.anzahl("halter_bedientableau_2fach") +\ - hw.anzahl("bedienstation_3fach_kpl") +\ - hw.anzahl("halter_bedientableau_3fach") +\ - hw.anzahl("bedienstation_4fach_kpl") +\ - hw.anzahl("halter_bedientableau_4fach") +\ - hw.anzahl("bedienstation_6fach_kpl") +\ - hw.anzahl("halter_bedientableau_6fach") +\ - hw.anzahl("drucktaster_automatische_umfahrung") - - self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\ - ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") - - self._Mengen["Sensoren_montieren"] = hw.anzahl("sensorkabel_je_20m") - self._Mengen["Seilzugschalter_installieren"] = ea.anzahl("Seilzugschalter") - self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung") - self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m") - self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10 - def set_mehraufwand(self, PS): - if PS > 1 or PS < 0: - raise Exception("Falsche Spanne") - self._mehraufwand = PS - def dauer_emo_h(self): - keys_tätigkeiten_1 = [ - "Unterverteiler_montieren", - "Sensoren_montieren", - "Seilzugschalter_installieren", - "Blitzleuchte_installieren", - "Weiche_Stopper_anschliessen", - "Erdung", - "Schaltschrank_aufstellen", - "Motor_verdrahten_und_anschliessen", - "Tableau_befestigen_und_anschliessen", - "Schnittstelle_Flyer_Putzmaschine" - ] - keys_1 = 0 - for k in keys_tätigkeiten_1: - dauer = self.montagezeiten.get(k) * self._Mengen.get(k) - keys_1 += dauer - - keys_tätigkeiten_2 = [ - "Pritsche_montieren_umbauen_demontieren", - "Pritsche_in_RSM_montieren" - ] - keys_2 = 0 - for k in keys_tätigkeiten_2: - dauer = self._Mengen.get(k) / self.montagezeiten.get(k) - keys_2 += dauer - - - return math.ceil((keys_1 + keys_2)) - def dauer_emo_h_incl_mehrauwand(self): - return (self.dauer_emo_h() * (1 + self._mehraufwand)) - -class Anschlussl(): - """ - Errechnung der notwendigen Anschlussleistung der Anlage. - Generelle Information, wird jedoch nicht zur Preisbestimmung verwendet. - """ - antrieb_cos_phi = { - 0.09:0.77, - 0.12:0.77, - 0.18:0.77, - 0.37:0.7, - 0.55:0.77, - 0.75:0.73, - 1.1:0.81 - } - - if RieterConfig.exists(): - antrieb_cos_phi.update(RieterConfig.getDictAsFloat("cos phi")) - antrieb_strom = { - 0.09:0.4, - 0.12:0.55, - 0.18:0.75, - 0.37:1.24, - 0.55:1.62, - 0.75:1.75, - 1.1:2.55 - } - - if RieterConfig.exists(): - antrieb_strom.update(RieterConfig.getDictAsFloat("Antriebsstrom")) - mengen = { - #auskommentiert, was später berechnet wird - #"Anschlussspannung":400, #Volt - "Motor_Art":0.12, #kilo Watt - #"Anzahl_Motor":48, - #"Strom_Motor":0.55, #Ampere - #"Summe_Strom_Motor":26.4, - #"cos_phi":0.77, - #"Versorgung_SPS_und_Peripherie":3, #Ampere - #"Summe_Strom_Motot_SPS_Peripherie":29.4, #Ampere - #GZE - #"GZE_Faktor":0.5, - #"Res_Faktor":0.1, - #Res - #gesamtstrom - #spannung - #"x_Wurzel_3":1.732 - #leistung - #gesamtanschlussleistung - } - def __init__(self, anzahl:dict, mg: type[MG]): - self._ANZAHL = self.mengen - anzahl = self.mengen ###vorerst - self._GZE_Faktor = 0.5 - self._Res_Faktor = 0.1 - self._Anschlussspannung = 400 - self._cos_phi = self.antrieb_cos_phi.get(anzahl.get("Motor_Art", 0)) ### wird nicht verwendet, Leistungsfaktor - self._x_Wurzel_3 = 1.732 - self._Versorgung_SPS_und_Peripherie = 3 - self._ANZAHL = anzahl - self._ANZAHL["Anzahl_Motor"] = mg.zusammenfassung().get("RA_uni", 0) +\ - mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi", 0) +\ - mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ - mg.zusammenfassung().get("Doppelstreckenantrieb", 0) - self._ANZAHL["Summe_Strom_Motor"] = self.antrieb_strom.get(anzahl.get("Motor_Art", 0), 0) *\ - anzahl.get("Anzahl_Motor", 0) - self._ANZAHL["Summe_Strom_Motor_SPS_Peripherie"] = anzahl.get("Summe_Strom_Motor", 0) +\ - self._Versorgung_SPS_und_Peripherie - self._ANZAHL["GZF"] = anzahl.get("Summe_Strom_Motor", 0) *\ - self._GZE_Faktor +\ - self._Versorgung_SPS_und_Peripherie - self._ANZAHL["Res"] = anzahl.get("GZF", 0) *\ - self._Res_Faktor - self._ANZAHL["Gesamtstrom"] = anzahl.get("GZF", 0) +\ - anzahl.get("Res", 0) - self._ANZAHL["Leistung"] = self._Anschlussspannung *\ - anzahl.get("Gesamtstrom", 0) *\ - self._x_Wurzel_3 / 1000 - self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung"))) - def set_Versorgung_SPS_und_Peripherie(self, Strom): - self._Versorgung_SPS_und_Peripherie = Strom - def set_x_Wurzel_3 (self, x): - self._x_Wurzel_3 = x - def set_cos_phi(self, cos): - self._cos_phi = cos - def set_Anschlussspannung(self, AS): - self._Anschlussspannung = AS - def set_GZE_Faktor(self, PS): - if PS > 1 or PS < 0: - raise Exception("Falsche Spanne") - self._GZE_Faktor = PS - def set_Res_Faktor(self, PS): - if PS > 1 or PS < 0: - raise Exception("Falsche Spanne") - self._Res_Faktor = PS - -class Ergebnis(): - preis_kostenart_h = { - "E_Werkstatt": 32, - "Schaltschrankbau_extern_Mehrkosten": 0, #Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel: extern = 50€ intern 32 € = Wert: 18€ - "Dienstleistung_in_LL": 45, #aufwandeduzierung oder mehraufwand - "Pflichtenheft": 60, - "SPS_Programmierung": 75, - "PC_Programmierung_Visualisierung": 75, - "Montage_elektrisch": 36, - "Inbetriebnahmetest_Hardware_durch_Montage": 36, - "SPS_Inbetriebsetzung": 75, - "PC_Inbetriebsetzung": 75, - "Inbetriebnahmeunterstützung_durch_Montage": 36, - "Dokumentation": 35, - "Bedienungsanleitung_Emmert": 75, - "Schulung_vor_Ort_beim_Kunden": 36, - "Abnahme": 36, - "SPS_Anlagenbetreuung": 75, - "PC_Anlagenbetreuung": 60, - "Anlagenbetreuung_durch_Montage": 36 - } - - if RieterConfig.exists(): - preis_kostenart_h.update(RieterConfig.getDictAsFloat("Kosten pro h")) - eingaben_h = { - "Pflichtenheft":0, - "SPS_Programmierung":150, - "SPS_Inbetriebsetzung":130, - "PC_Inbetriebsetzung":0, - "Schulung_vor_Ort_beim_Kunden":0, - "Abnahme":0, - "SPS_Anlagenbetreuung":0, - "PC_Anlagenbetreuung":0, - "Anlagenbetreuung_durch_Montage":0 - } - def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]): - self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = 1 - self._Anteil_PC_Visualisierung_an_SPS = 0.3 - self._Abweichung_softwareerstellung = 0 - self._Abweichung_dienstleistung_in_LL = 0 - self._anzahl = anzahl_h - self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt() - self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\ - hw.get_h_of("unterverteiler_fuer_1flyer") +\ - hw.get_h_of("unterverteiler_fuer_2flyer") +\ - hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ - hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ - hw.get_h_of("unterverteiler_fuer_puffer") +\ - hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\ - hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") - self._anzahl["Dienstleistung_in_LL"] = dl.stunden_diensleistung_hardwareplanung() * (1 + self._Abweichung_dienstleistung_in_LL) - self._anzahl["Pflichtenheft"] = anzahl_h.get("Pflichtenheft", 0) - self._anzahl["SPS_Programmierung"] = anzahl_h.get("SPS_Programmierung", 0) * (1 + self._Abweichung_softwareerstellung) - self._anzahl["PC_Programmierung_Visualisierung"] = anzahl_h.get("SPS_Programmierung", 0) * self._Anteil_PC_Visualisierung_an_SPS - self._anzahl["Montage_elektrisch"] = emo.dauer_emo_h_incl_mehrauwand() - self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch", 0) * 0.1 - self._anzahl["SPS_Inbetriebsetzung"] = anzahl_h.get("SPS_Inbetriebsetzung", 0) - self._anzahl["PC_Inbetriebsetzung"] = anzahl_h.get("PC_Inbetriebsetzung", 0) - self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung", 0) * self._Anteil_Inbetriebnahmeunterstützung_durch_Montage - self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch") - self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku") - self._anzahl["Schulung_vor_Ort_beim_Kunden"] = anzahl_h.get("Schulung_vor_Ort_beim_Kunden", 0) - self._anzahl["Abnahme"] = anzahl_h.get("Abnahme", 0) - self._anzahl["SPS_Anlagenbetreuung"] = anzahl_h.get("SPS_Anlagenbetreuung", 0) - self._anzahl["PC_Anlagenbetreuung"] = anzahl_h.get("PC_Anlagenbetreuung", 0) - self._anzahl["Anlagenbetreuung_durch_Montage"] = anzahl_h.get("Anlagenbetreuung_durch_Montage", 0) - def set_Abweichung_dienstleistung_in_LL(self, PS): - if PS > 1 : - raise Exception("Falsche Spanne") - self._Abweichung_dienstleistung_in_LL = PS - def set_Abweichung_softwareerstellung(self, PS): - if PS > 1: - raise Exception("Falsche Spanne") - self._Abweichung_softwareerstellung = PS - def set_Anteil_PC_Visualisierung_an_SPS(self, Anteil): - if Anteil > 1 or Anteil < 0: - raise Exception("Falsche Spanne") - self._Anteil_PC_Visualisierung_an_SPS = Anteil - def set_Anteil_Inbetriebnahmeunterstützung_durch_Montage(self, Anteil): - if Anteil > 1 or Anteil < 0: - raise Exception("Falsche Spanne") - self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = Anteil - def get_sum_of_costs(self, hw: type[HW]): - keys_costs = { - "E_Werkstatt", - "Schaltschrankbau_extern_Mehrkosten", - "Dienstleistung_in_LL", - "Pflichtenheft", - "SPS_Programmierung", - "PC_Programmierung_Visualisierung", - "Montage_elektrisch", - "Inbetriebnahmetest_Hardware_durch_Montage", - "SPS_Inbetriebsetzung", - "PC_Inbetriebsetzung", - "Inbetriebnahmeunterstützung_durch_Montage", - "Dokumentation", - "Bedienungsanleitung_Emmert", - "Schulung_vor_Ort_beim_Kunden", - "Abnahme", - "SPS_Anlagenbetreuung", - "PC_Anlagenbetreuung", - "Anlagenbetreuung_durch_Montage" - } - res = 0 - for k in keys_costs: - cost = self._anzahl[k] * self.preis_kostenart_h[k] - res += cost - return (res + hw.summe_gesamt()) - def get_cost_of(self, partname): - return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname)) - def summary_costs(self, hw: type[HW]): - summary = {} - summary.update({"Installationsmaterial_vor_Ort": round(hw.summe_vorort(), 2)}) - summary.update({"Material_in_LL": round(hw.summe_in_LL(), 2)}) - - keys_costs = { - "E_Werkstatt", - "Schaltschrankbau_extern_Mehrkosten", - "Dienstleistung_in_LL", - "Pflichtenheft", - "SPS_Programmierung", - "PC_Programmierung_Visualisierung", - "Montage_elektrisch", - "Inbetriebnahmetest_Hardware_durch_Montage", - "SPS_Inbetriebsetzung", - "PC_Inbetriebsetzung", - "Inbetriebnahmeunterstützung_durch_Montage", - "Dokumentation", - "Bedienungsanleitung_Emmert", - "Schulung_vor_Ort_beim_Kunden", - "Abnahme", - "SPS_Anlagenbetreuung", - "PC_Anlagenbetreuung", - "Anlagenbetreuung_durch_Montage" - } - for k in keys_costs: - cost = self._anzahl[k] * self.preis_kostenart_h[k] - summary.update({k: round(cost, 2)}) - - - summary.update({"GESAMT": round(self.get_sum_of_costs(hw), 2)}) - return summary - diff --git a/test_jayjay.py b/test_jayjay.py deleted file mode 100644 index bc00485..0000000 --- a/test_jayjay.py +++ /dev/null @@ -1,2199 +0,0 @@ -import rieter_ekalk as rek -import unittest -import pandas as pd -class TestObjectMethods(unittest.TestCase): - # def test_A_JayJay(self): - # # Anzahl der für das Projekt benutzten - # Anzahl_MG = { - # "SYSTEM": "FA", - # "RSM":14, - # "Flyer":4, - # "Flyer_Puffer":2, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - # "Neuenhauser-Putzmaschine":0, - # "Neuenhauser-Putzmaschine_Vorpuffer":0, - # "Neuenhauser-Putzmaschine_Nachpuffer":0, - # "Cason-Putzmaschine":0, - # "Cason-Putzmaschine_Vorpuffer":0, - # "Cason-Putzmaschine_Nachpuffer":0, - # "Puffer":1, - # "Anzahl_der_Pufferstrecken_pro_Puffer":5, - # "Begegnungsstrecke_Bypass":2, - # "Turm":0, - # "Turm_Anzahl_Wendlungen":0, - # } - - # rsm_direct_eingabe = { - # } - # rsm_fa_eingabe = { - # "Flex_A_Premium":False, # braucht man das noch? - # "Getriebe_in_der_Mitte":False, # braucht man das noch? - # "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - # "Sensor_optisch_Traverse_zusätzlich":6, - # "Bedientableau_1fach_Korrektur":0, - # "Bedientableau_2fach_Korrektur":4, - # "Weiche_Korrektur":4, - # "RRA_bi_Korrektur":0, - # "RRA_bi_auf_Haupstrecke":10, - # "RRA_uni_Begegnung":4, - # "gemeinsame_Wendung":0, - # "Mit_Drucktaster_Korrektur":0, - # "Meldelampe_Überstrom_Korrektur":0, - # "Hauptschalter_Ein-Meldung_Korrektur":0, - # "Werma_Rundumleuchte_Störung_Korrektur":0, - # "klemmkasten_rsm":2, - # } - # flyer_f40_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - # "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - # #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - # #"Anzahl_Schienen":0, - # "Single_Line_Durchfahrt":False, - # "Nachpuffer":False, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":0, - # #"Sensor_induktiv_Spulenhalter":0, - # "Sensor_induktiv_Spulenhalter_Korrektur":0, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":0, - # #"Interface_Doffer":0, - # "Interface_Doffer_Korrektur":0, - # #"Weiche":0, - # "Weiche_Korrektur":0, - # #"Weiche_nach_Flyer_bipolar":0, - # "Weiche_nach_Flyer_bipolar_Korrektur":0, - # "Dreifachweiche":0, - # "Wechsel":0, - # "Stopper":0, - # "RA_uni":0, - # #"RA_uni_abhebbar":0, - # "RA_uni_abhebbar_Korrektur":0, - # #"RA_uni_ohne_SPS_Ansteuerung":0, - # "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - # #"RRA_BI_abhebbar":0, - # "RRA_BI_abhebbar_Korrektur":0, - # "RRA_bi":0, - # #"RRA_bi_Korrektur":0, - # #"RRA_bi_ohne_SPS_Ansteuerung":0, - # "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - # #"Doppelstreckenantrieb":0, - # "Doppelstreckenantrieb_Korrektur":0, - # "RA_bi_abhebbar_unger_Schiene":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":0, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":0, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":0, - # } - # neuenhauser_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - # #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - # #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - # #"Anzahl_Vorstaustrecken":0, - # #"Anzahl_Nachstaustrecken":0, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":0, - # #"Sensorik_Zugpositionierung":0, - # #"Sensor_WT18_Spulenprüfung_voll_leer":0, - # #"Bedientableau_2fach":0, - # "Bedientableau_2fach_Korrektur":0, - # #"Interface_Putzmaschine":0, - # #"Weiche":0, - # "Weiche_Korrektur":0, - # #"Weiche_nach_PM_bipolar":0, - # #"RA_uni_abhebbar":0, - # "RA_uni_abhebbar_Korrektur":0, - # #"RA_uni_ohne_SPS_Ansteuerung":0, - # #"RA_uni_abhebbar_unger_Sch":0, - # #"Doppelstreckenantrieb":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":0, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":0, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":0, - # } - # flyer_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Anzahl":0, - # #"Flyer":0, # äquivalent zu 'Anzahl' - # #"Anzahl_Schienen:":0, - # #"Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur":0, - # #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - # #"Bedientableau_2fach":0, - # #"Interface_Doffer":0, - # #"Weiche":0, - # "Weiche_Korrektur":0, - # #"Weiche_nach_Flyer_bipolar":0, - # "Dreifachweiche":0, - # #"Wechsel":0, - # "Wechsel_Korrektur":0, - # #"RA_bi_ohne_SPS-Ansteuerung":0, - # #"RA_bi_abhebbar":0, - # "RA_bi_abhebbar_Korrektur":0, - # "RA_bi":4, - # #"Doppelstreckenantrieb":0, - # "RA_bi_abhebbar_unger_Schiene":0, - # #"Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur":0, - # #"Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur":0, - # #"Werma_Rundumleuchte_Störung":0, - # "Werma_Rundumleuchte_Störung_Korrektur":0, - # } - # verbindungsstrecken_w_eingabe = { - # #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # #"Sensor_optisch_Traverse":0, - # "Bedientableau_1fach":0, - # "Bedientableau_2fach":0, - # "Bedientableau_14fach":0, - # "Weiche":0, - # "Dreifachweiche":0, - # "Kreuzungsweiche":1, - # "Werma_Rundumleuchte_Störung":0, - # "RA_uni":0, - # "RA_uni_ohne_SPS_Ansteuerung":0, - # "RA_bi":0, - # "RA_bi_ohne_SPS-Ansteuerung":0, - # "Doppelstreckenantrieb":0 - # } - # puffer_eingabe = { - # # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # # "Anzahl":0, - # # "Puffer":0, #äquivalent zu Anzahl - # # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # # "Anzahl_Staustrecken":0, - # # "Sensor_optisch_Traverse":0, - # "Sensor_optisch_Traverse_Korrektur": 1, - # # "Weiche":0, - # "Weiche_Korrektur": 0, - # "RA_bi_ungerade_Schiene": 2, - # # "Doppelstreckenantrieb":0, - # # "Meldelampe_Überstrom":0, - # "Meldelampe_Überstrom_Korrektur": 0, - # # "Hauptschalter_Ein_Meldung":0, - # "Hauptschalter_Ein-Meldung_Korrektur": 0, - # } - # turm_eingabe = { - # "RA_bi_Korrektur":0, - # #"RA_bi_ohne_SPS":0, - # "RA_bi_ohne_SPS_Korrektur":0, - # #"Bedientableau_2fach":0, - # } - # mg = rek.MG(Anzahl_MG, - # rsm_direct=rsm_direct_eingabe, - # rsm_fa=rsm_fa_eingabe, - # flyer_f40=flyer_f40_eingabe, - # neuenhauser=neuenhauser_eingabe, - # flyer=flyer_eingabe, - # verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - # puffer=puffer_eingabe, - # turm=turm_eingabe) - - # # check data of Mengengerüst - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Anzahl_RSM'), 14) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Flex_A_Premium'), False) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Getriebe_in_der_Mitte'), False) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'RSM_Einfahrt_Ein_Beidseitig'), False) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse'), 20) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Sensor_optisch_Traverse_zusätzlich'), 6) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach'), 14) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_1fach_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach'), 6) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Bedientableau_2fach_Korrektur'), 4) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche'), 18) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Weiche_Korrektur'), 4) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi'), 24) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_auf_Haupstrecke'), 10) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'RRA_bi_ohne_SPS_Ansteuerung'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'gemeinsame_Wendung'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Seilzugschalter'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Mit_Drucktaster_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom'), 2) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Meldelampe_Überstrom_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein_Meldung'), 2) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung'), 2) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('rsm_fa', 'klemmkasten_rsm'), 2) - - # # check data of the flyer - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Anzahl_Schienen'), 2) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Flyer'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse'), 28) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_optisch_Traverse_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Sensor_induktiv_Spulenalter_Zug_positionierung'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Bedientableau_2fach'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Interface_Doffer'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche'), 8) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Weiche_nach_Flyer_bipolar'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Dreifachweiche'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Wechsel_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_ohne_SPS-Ansteuerung'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Doppelstreckenantrieb'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'RA_bi_abhebbar_unger_Schiene'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Meldelampe_Überstrom_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein_Meldung'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung'), 4) - # self.assertEqual(mg.get_value_of_object('flyer_ejet', 'Werma_Rundumleuchte_Störung_Korrektur'), 0) - - # # Verbindungsstrecken Wechsel - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Sensor_optisch_Traverse'), 10) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_1fach'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_2fach'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Bedientableau_14fach'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Weiche'), 4) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Dreifachweiche'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Kreuzungsweiche'), 1) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Werma_Rundumleuchte_Störung'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_uni_ohne_SPS_Ansteuerung'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'RA_bi_ohne_SPS-Ansteuerung'), 0) - # self.assertEqual(mg.get_value_of_object('verbindungsstrecken_wechsel', 'Doppelstreckenantrieb'), 0) - - # # Puffer - # self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl'), 1) - # self.assertEqual(mg.get_value_of_object('puffer', 'Anzahl_Staustrecken'), 5) - # self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse'), 6) - # self.assertEqual(mg.get_value_of_object('puffer', 'Sensor_optisch_Traverse_Korrektur'), 1) - # self.assertEqual(mg.get_value_of_object('puffer', 'Weiche'), 5) - # self.assertEqual(mg.get_value_of_object('puffer', 'RA_bi_ungerade_Schiene'), 2) - # self.assertEqual(mg.get_value_of_object('puffer', 'Weiche_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('puffer', 'Doppelstreckenantrieb'), 2) - # self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom'), 1) - # self.assertEqual(mg.get_value_of_object('puffer', 'Meldelampe_Überstrom_Korrektur'), 0) - # self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein_Meldung'), 1) - # self.assertEqual(mg.get_value_of_object('puffer', 'Hauptschalter_Ein-Meldung_Korrektur'), 0) - - # zf = mg.zusammenfassung() - # self.assertEqual(zf['Gesamtanzahl_Antriebe'], 44) - # self.assertEqual(zf['Sensor_optisch_Traverse'], 68) - # self.assertEqual(zf['Sensor_induktiv_Spulenalter_Zug_positionierung'], 4) - # self.assertEqual(zf['Sensor_Spulenprüfung_voll_leer'], 0) - # self.assertEqual(zf['Seilzugsschalter'], 0) - # self.assertEqual(zf['Drucktaster_automatische_Umfahrung'], 0) - # self.assertEqual(zf['Bedientableau_1fach'], 14) - # self.assertEqual(zf['Bedientableau_2fach'], 10) - # self.assertEqual(zf['Bedientableau_14fach'], 0) - # self.assertEqual(zf['Interface_Putzmaschine'], 0) - # self.assertEqual(zf['Interface_Doffer'], 4) - # self.assertEqual(zf['Weiche'], 35) - # self.assertEqual(zf['Dreifachweiche'], 0) - # self.assertEqual(zf['Wechsel'], 4) - # self.assertEqual(zf['Stopper'], 0) - # self.assertEqual(zf['Meldelampe_Überstrom'], 7) - # self.assertEqual(zf['Hauptschalter_Ein_Meldung'], 7) - # self.assertEqual(zf['Werma_Rundumleuchte_Störung'], 6) - # self.assertEqual(zf['Weiche_nach_PM_bipolar'], 0) - # self.assertEqual(zf['Kreuzungsweiche'], 1) - # self.assertEqual(zf['RA_uni'], 4) - # self.assertEqual(zf['RA_uni_abhebbar'], 0) - # self.assertEqual(zf['RA_uni_ohne_SPS_Ansteuerung'], 0) - # self.assertEqual(zf['RA_bi'], 30) - # self.assertEqual(zf['RA_bi_ohne_SPS-Ansteuerung'], 4) - # self.assertEqual(zf['RA_bi_abhebbar'], 4) - # self.assertEqual(zf['Doppelstreckenantrieb'], 6) - # self.assertEqual(zf['gemeinsame_Wendung'], 0) - # self.assertEqual(zf['klemmkasten_rsm'], 2) - - def test_eas(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {"schaltschrank":1} - eas = rek.EA(Anzahl_EAS, mg) - - # Prüfe die Summe aller Eingänge und Ausgänge für jeden Elementtyp - # Bedienstation - self.assertEqual(eas.get_SEA('bedienstation_1fach_Not_Aus'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_einfach_Zug_Wechseln'), (14, 14)) - self.assertEqual(eas.get_SEA('bedienstation_automatische_Umfahrung'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_zweifach_Wechs_BCD_10f'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_zweifach_Not_Aus_Reset'), (20, 20)) - self.assertEqual(eas.get_SEA('bedienst_dreifach'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienst_vierfach'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienst_sechsfach'), (0, 0)) - self.assertEqual(eas.get_SEA('EAs_Unterverteiler_direct'), (0, 0)) - - # Ermittlung Mengengerüst - self.assertEqual(eas.get_SEA('Sensor_Traversenabfrage_optisch'), (68, 0)) - self.assertEqual(eas.get_SEA('Reflexionslichtschranke_RSM_DIRECT'), (0, 0)) - self.assertEqual(eas.get_SEA('Sensor induktiv Flyer+PM'), (4, 0)) - self.assertEqual(eas.get_SEA('Seilzugschalter'), (0, 0)) - - self.assertEqual(eas.get_SEA('Weiche'), (0, 35)) - self.assertEqual(eas.get_SEA('Weiche_nach_PM_bipolar'), (0, 0)) - self.assertEqual(eas.get_SEA('gemeinsame_Weichenrueckstellung'), (0, 0)) - self.assertEqual(eas.get_SEA('Dreifach_Weiche_DIRECT'), (0, 0)) - self.assertEqual(eas.get_SEA('Kreuzungsweiche'), (0, 10)) - self.assertEqual(eas.get_SEA('Stopper'), (0, 0)) - self.assertEqual(eas.get_SEA('Ventil_RA_3_2_abhebbar'), (0, 4)) - self.assertEqual(eas.get_SEA('Ventil_Doppelstreckenantrieb_5_2_abhebbar'), (0, 12)) - self.assertEqual(eas.get_SEA('Blitzleuchte_Stoerung'), (0, 6)) - - self.assertEqual(eas.get_SEA('Schnittstelle_Flyer_ElectroJet'), (8, 8)) - self.assertEqual(eas.get_SEA('Schnittstelle_Putzmaschine_Neuhauser'), (0, 0)) - self.assertEqual(eas.get_SEA('FEldbux_UV_EinAusgang'), (14, 7)) - - self.assertEqual(eas.get_SEA('Spulenumsetzstation'), (0, 0)) - - self.assertEqual(eas.get_SEA('RA_unidirektional'), (0, 4)) - self.assertEqual(eas.get_SEA('RA_unidirektional_abhebbar'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_unidirektional_mit_gemeinsamer_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_unidirektional_ohne_SPS_Ansteuerung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_bidirektional'), (0, 60)) - self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar'), (0, 8)) - self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar_gemeinsWend'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_bidirektional_ohne_SPS_Ansteuerung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_in_RSM_bidirektional'), (0, 0)) - self.assertEqual(eas.get_SEA('Doppelstreckenantrieb'), (0, 12)) - self.assertEqual(eas.get_SEA('Doppelstreckenantriebgemeinsame_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('gemeinsame_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) - - - self.assertEqual(eas.gesamt_E(), 152) - self.assertEqual(eas.gesamt_A(), 216) - - self.assertEqual(eas.gesamt_E_incl_reserve(), 160) - self.assertEqual(eas.gesamt_A_incl_reserve(), 227) - - self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) - (eingänge, ausgänge) = eas.Anzahl_notwendigen_Siemens_EAKarten() - self.assertEqual(eingänge, 5) - self.assertEqual(ausgänge, 7) - - (eingänge, ausgänge) = eas.Anzahl_Siemens_EAKarten_incl_reserve() - self.assertEqual(eingänge, 5) - self.assertEqual(ausgänge, 8) - - - def test_HW(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = { - "schaltschrank":1 - } - eas = rek.EA(Anzahl_EAS, mg) - - Anzahl_HW = { - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_1515_2": 1, - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "anlagenrechner":1, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_puffer":1, - - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - "ET200_SP":1, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - - # MATERIAL VOR ORT - "kabelpritschen_leitern_200_60":348, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" - } - - hw = rek.HW(Anzahl_HW, mg, eas) - - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer"), 0) - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer"), 0) - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer"), 1) - self.assertEqual(hw.anzahl("sps_simatic_s7_cpu315_2_pn_dp"), 0) - self.assertEqual(hw.anzahl("speicherkarte_fuer_sps_512_kb"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_cpu317_2_pn_dp"), 0) - self.assertEqual(hw.anzahl("speicherkarte_fuer_sps2_mb"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_1515_2"), 1) - self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0) - self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0) - self.assertEqual(hw.anzahl("memory_card_2_gb"), 0) - self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 1) - self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1) - self.assertEqual(hw.anzahl("abgang_400v"), 0) - self.assertEqual(hw.anzahl("abgang_24_v"), 0) - self.assertEqual(hw.anzahl("anlagenrechner"), 1) - self.assertEqual(hw.anzahl("anlagenrechner_ohne_bildschirm"), 0) - self.assertEqual(hw.anzahl("pulteinbau_monitor_srline_rflat_24fhd"), 0) - self.assertEqual(hw.anzahl("kurzhubtastatur_kbt06_mit_touchpad_uslayout"), 0) - self.assertEqual(hw.anzahl("netzwerk_display_adapter_lindy"), 0) - self.assertEqual(hw.anzahl("zusaetzlicher_bildschirm"), 0) - self.assertEqual(hw.anzahl("schaltschrank"), 1) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1neuenhauser_pm"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer"), 2) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_puffer"), 1) - self.assertEqual(hw.anzahl("unterverteiler_fuer_5_rsm_fa"), 2) - self.assertEqual(hw.anzahl("korrektur_5_rsm_zusaetzlich_im_unterverteiler"), -1) - self.assertEqual(hw.anzahl("unterverteiler_fuer_10_rsm_fa"), 0) - self.assertEqual(hw.anzahl("korrektur_10_rsm_zusaetzlich_im_unterverteiler"), -2) - self.assertEqual(hw.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"), 0) - self.assertEqual(hw.anzahl("korrektur_3_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_4_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_4_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_12_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_12_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_8_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("busverteiler_6_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_6_rsm_zusaetzlich_im_busverteiler"), 0) - self.assertEqual(hw.anzahl("busverteiler_8_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_8_rsm_zusaetzlich_im_busverteiler"), 0) - self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 4) - self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 44) - self.assertEqual(hw.anzahl("antrieb_unidirektional_schuetz"), 0) - self.assertEqual(hw.anzahl("antrieb_bidirektional_schuetz"), 0) - self.assertEqual(hw.anzahl("motorschutzschalter"), 0) - self.assertEqual(hw.anzahl("wendeschuetzschaltung"), 0) - self.assertEqual(hw.anzahl("frequenzumrichter"), 0) - self.assertEqual(hw.anzahl("bedienstation_1fach_kpl"), 14) - self.assertEqual(hw.anzahl("bedienst_2fach_wechs_bcd_10f"), 0) - self.assertEqual(hw.anzahl("bedienstation_2fach_kpl"), 10) - self.assertEqual(hw.anzahl("halter_bedientableau_2fach"), 10) - self.assertEqual(hw.anzahl("bedienstation_3fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedientableau_3fach"), 0) - self.assertEqual(hw.anzahl("bedienstation_4fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedientableau_4fach"), 0) - self.assertEqual(hw.anzahl("bedienstation_6fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedienstation_6fach"), 0) - self.assertEqual(hw.anzahl("drucktaster_automatische_umfahrung"), 0) - self.assertEqual(hw.anzahl("halter_fuer_drucktaster"), 0) - self.assertEqual(hw.anzahl("ET200_SP"), 1) - self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 7) - self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_de"), 31) - self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_de"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_do"), 33) - self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_do"), 0) - self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen"), 14) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"), 0) - self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"), 50) - self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last"), 0) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last"), -14) - self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt"), 0) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt"), 0) - self.assertEqual(hw.anzahl("SLIO"), 0) - self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) - self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) - self.assertEqual(hw.anzahl("slio_eingangskarte_4_de"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_4_de"), 0) - self.assertEqual(hw.anzahl("slio_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("slio_ausgangskarte_4_do"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_4_do"), 0) - self.assertEqual(hw.anzahl("slio_ausgangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("slio_power_modul"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_power_modul"), 0) - self.assertEqual(hw.anzahl("slio_4_x_dc_24v_4_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("slio_8_x_dc_24v"), 0) - self.assertEqual(hw.anzahl("slio_8_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_8_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("movimot_fu_mit_anschaltung"), 0) - self.assertEqual(hw.anzahl("sensor_optisch_traverse"), 68) - self.assertEqual(hw.anzahl("sensorhalter_ohne_sensor"), 0) - self.assertEqual(hw.anzahl("reflexionslichtschranke_rsm_direct"), 0) - self.assertEqual(hw.anzahl("stoppersensor_induktiv_mit_halter"), 4) - self.assertEqual(hw.anzahl("sensor_spulenpruefung_voll_leer"), 0) - self.assertEqual(hw.anzahl("seilzugschalter"), 0) - self.assertEqual(hw.anzahl("seil_fuer_seilzugschalter"), 0) - self.assertEqual(hw.anzahl("blitzleuchte"), 6) - self.assertEqual(hw.anzahl("spulenumsetzstation"), 0) - self.assertEqual(hw.anzahl("sensorkabel_je_20m"), 78) - self.assertEqual(hw.anzahl("stopper_weichenkabel_je_5m"), 67) - self.assertEqual(hw.anzahl("motorkabel_je_30m"), 48) - self.assertEqual(hw.anzahl("kabelpritschen_leitern_200_60"), 348) - self.assertEqual(hw.anzahl("kabelpritsche_rsm_100_60"), 0) - self.assertEqual(hw.anzahl("kabelpritsche_rsm_50_35"), 0) - self.assertEqual(hw.anzahl("klemmkasten_rsm"), 2) - self.assertEqual(hw.anzahl("klemmkasten_direct_in_rsm"), 0) - self.assertEqual(hw.anzahl("erdung"), 29) - self.assertEqual(hw.anzahl("kleinteile_rohre_schellen_kabelbinder_ect"), 1.5) - self.assertEqual(hw.anzahl("kabel_fuer_klemmkasten_und_bts_60m"), 20) - self.assertEqual(hw.anzahl("kabel_fuer_1fach_bts_zug_wechseln"), 14) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac"), 5) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), 0) - self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), -5) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 5) - self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 0) - self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"), 0) - self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"), 2) - self.assertEqual(hw.anzahl("profinetkabel"), 6) - self.assertEqual(hw.anzahl("korrektur_profinetkabel"), 0) - self.assertEqual(hw.anzahl("schnittstellen_8x1mm2_30m"), 4) - - self.assertEqual(hw.summe_vorort(), 20415.6) - self.assertAlmostEqual(hw.summe_gesamt(), 47667.04) - self.assertEqual(hw.summe_in_LL(), 27251.44) - self.assertEqual(hw.summe_h_zeiten_hardwareplanung(), 167.0) - self.assertEqual(hw.summe_h_unterverteiler_e_werkstatt(), 94.0) - - def test_emo(self): - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = { - "schaltschrank":1 - } - eas = rek.EA(Anzahl_EAS, mg) - - Anzahl_HW = { - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_1515_2": 1, - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "anlagenrechner":1, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_puffer":1, - - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - "ET200_SP":1, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - - # MATERIAL VOR ORT - "kabelpritschen_leitern_200_60":348, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" - } - - hw = rek.HW(Anzahl_HW, mg, eas) - emo = rek.EMO(eas, hw, mg) - self.assertAlmostEqual(emo.dauer_emo_h(), 241) - self.assertAlmostEqual(emo.dauer_emo_h_incl_mehrauwand(), 265.1) - - def test_dienstleistung(self): - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenantieb_Korrektur":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = { - "schaltschrank":1 - } - eas = rek.EA(Anzahl_EAS, mg) - - Anzahl_HW = { - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_1515_2": 1, - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "anlagenrechner":1, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_puffer":1, - - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - "ET200_SP":1, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - - # MATERIAL VOR ORT - "kabelpritschen_leitern_200_60":348, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" - } - - hw = rek.HW(Anzahl_HW, mg, eas) - Anzahl_DL = { - "Bedienerhandbuch": 16, - "SPS_Doku": 15, - } - dl = rek.Dienstleistung(Anzahl_DL, hw) - self.assertEqual(dl.stunden_diensleistung_hardwareplanung(), 225.1) - self.assertEqual(dl.stunden_elektrowerkstatt(), 196.83333333333333333333333333) - self.assertEqual(dl.summe_stunden_dienstleistung_in_landsberg(), 421.9333333333333333333) - self.assertEqual(dl.get_hours_of("Pflichtenheft_Autom_Schnittstellen"), 0) - self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 41.75) - self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 100.2) - self.assertEqual(dl.get_hours_of("Projektkoordination"), 25.05) - self.assertEqual(dl.get_hours_of("Materialdispo"), 33.4) - self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 8.35) - self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 8.35) - self.assertEqual(dl.get_hours_of("PC_Installation"), 8) - self.assertEqual(dl.get_hours_of("Oberfläche_Simulation"), 0) - self.assertEqual(dl.get_hours_of("SPS_Test_im_Haus_Simulation"), 0) - self.assertEqual(dl.get_hours_of("Bedienerhandbuch"), 16) - self.assertEqual(dl.get_hours_of("SPS_Doku"), 15) - self.assertEqual(dl.get_hours_of("PC_Doku"), 0) - self.assertEqual(dl.get_hours_of("Schaltschrankbau"), 88) - self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 94) - self.assertEqual(dl.get_hours_of("Klemmkastenbau_je_2h"), 4) - self.assertEqual(dl.get_hours_of("Bedientableaubau"), 10.833333333333333) - self.assertEqual(dl.get_hours_of("Vormontage_im_Haus"), 0) - - def test_anschlussleistung(self): - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_AL ={} - al = rek.Anschlussl(Anzahl_AL, mg) - self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 48) - self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 26.4) - self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 29.4) - self.assertAlmostEqual(al._ANZAHL.get("GZF"), 16.2) - self.assertAlmostEqual(al._ANZAHL.get("Res"), 1.62) - self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 17.82) - self.assertAlmostEqual(al._Anschlussspannung, 400) - self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 12.345696) - self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 13) - - def test_ergebnis(self): - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - Anzahl_EAS = { - "schaltschrank":1 - } - eas = rek.EA(Anzahl_EAS, mg) - - Anzahl_HW = { - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_1515_2": 1, - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "anlagenrechner":1, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_puffer":1, - - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - "ET200_SP":1, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - - # MATERIAL VOR ORT - "kabelpritschen_leitern_200_60":348, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" - } - - hw = rek.HW(Anzahl_HW, mg, eas) - - emo = rek.EMO(eas, hw, mg) - Anzahl_DL = { - "Bedienerhandbuch": 16, - "SPS_Doku": 15, - } - dl = rek.Dienstleistung(Anzahl_DL, hw) - Anzahl_Ergebnis = { - "SPS_Programmierung":150, - "SPS_Inbetriebsetzung":130 - } - erg = rek.Ergebnis(Anzahl_Ergebnis, hw, dl, emo) - self.assertAlmostEqual(erg.get_cost_of("E_Werkstatt"), 6298.6666666666667) - self.assertEqual(erg.get_cost_of("Schaltschrankbau_extern_Mehrkosten"), 0) - self.assertEqual(erg.get_cost_of("Dienstleistung_in_LL"), 10129.5) - self.assertEqual(erg.get_cost_of("Pflichtenheft"), 0) - self.assertEqual(erg.get_cost_of("SPS_Programmierung"), 11250) - self.assertEqual(erg.get_cost_of("PC_Programmierung_Visualisierung"), 3375) - self.assertEqual(erg.get_cost_of("Montage_elektrisch"), 9543.6) - self.assertAlmostEqual(erg.get_cost_of("Inbetriebnahmetest_Hardware_durch_Montage"), 954.36) - self.assertEqual(erg.get_cost_of("SPS_Inbetriebsetzung"), 9750) - self.assertEqual(erg.get_cost_of("PC_Inbetriebsetzung"), 0) - self.assertEqual(erg.get_cost_of("Inbetriebnahmeunterstützung_durch_Montage"), 4680) - self.assertEqual(erg.get_cost_of("Dokumentation"), 560) - self.assertEqual(erg.get_cost_of("Bedienungsanleitung_Emmert"), 1125) - self.assertEqual(erg.get_cost_of("Schulung_vor_Ort_beim_Kunden"), 0) - self.assertEqual(erg.get_cost_of("Abnahme"), 0) - self.assertEqual(erg.get_cost_of("SPS_Anlagenbetreuung"), 0) - self.assertEqual(erg.get_cost_of("PC_Anlagenbetreuung"), 0) - self.assertEqual(erg.get_cost_of("Anlagenbetreuung_durch_Montage"), 0) - self.assertAlmostEqual(erg.summary_costs(hw).get("GESAMT"), 105333.17) - summary = erg.summary_costs(hw) - - df = pd.DataFrame.from_dict(data=summary, orient='index', columns=['Aufwand']) - df.to_excel("output.xlsx", sheet_name="Kostenaufstellung") - - def test_turm(self): - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":14, - "Flyer":4, - "Flyer_Puffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":1, - "Anzahl_der_Pufferstrecken_pro_Puffer":5, - "Begegnungsstrecke_Bypass":2, - "Turm":1, - "Turm_Anzahl_Wendlungen":5, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":6, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":4, - "Weiche_Korrektur":4, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":10, - "RRA_uni_Begegnung":4, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":2, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":0, - "Dreifachweiche":0, - "Wechsel":0, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":0, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":0, - "RRA_bi":0, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":1, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 1, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":0, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = rek.MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - Anzahl_EAS = { - "schaltschrank":1 - } - eas = rek.EA(Anzahl_EAS, mg) - - Anzahl_HW = { - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_1515_2": 1, - "et200_sp_ea_ebene":1, - "netzwerk_fernwartung":1, - "anlagenrechner":1, - "unterverteiler_fuer_2flyer":2, - "unterverteiler_fuer_puffer":1, - - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-1, - - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":-2, - - "ET200_SP":1, - "et200_sp_base_unit_neue_last_mit_potKlemmen_or_et200_sp_base_unit_neue_last":"et200_sp_base_unit_neue_last_mit_potKlemmen", - - # MATERIAL VOR ORT - "kabelpritschen_leitern_200_60":348, - "kleinteile_rohre_schellen_kabelbinder_ect":1.5, - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc" - } - - hw = rek.HW(Anzahl_HW, mg, eas) - - emo = rek.EMO(eas, hw, mg) - Anzahl_DL = { - "Bedienerhandbuch": 16, - "SPS_Doku": 15, - } - dl = rek.Dienstleistung(Anzahl_DL, hw) - Anzahl_Ergebnis = { - "SPS_Programmierung":150, - "SPS_Inbetriebsetzung":130 - } - erg = rek.Ergebnis(Anzahl_Ergebnis, hw, dl, emo) - - self.assertEqual(mg.get_value_of_object("turm", "Anzahl_Staustrecken"), 5) - self.assertEqual(mg.get_value_of_object("turm", "Sensor_optisch_Traverse"), 5) - self.assertEqual(mg.get_value_of_object("turm", "Weiche"), 3) - self.assertEqual(mg.get_value_of_object("turm", "RA_bi"), 2) - self.assertEqual(mg.get_value_of_object("turm", "RA_bi_ohne_SPS"), 10) - self.assertEqual(mg.get_value_of_object("turm", "Bedientableau_2fach"), 2) - self.assertEqual(mg.zusammenfassung().get("Bedientableau_2fach"), 12) - self.assertEqual(hw.summe_vorort(), 21705.6) - self.assertAlmostEqual(hw.summe_in_LL(), 27466.7) - self.assertAlmostEqual(erg.get_sum_of_costs(hw), 107610.946666666666667) - - - -def test_Unittests(): - unittest.main() - -if __name__ == '__main__': - test_Unittests() diff --git a/utztex_group.py b/utztex_group.py deleted file mode 100644 index 0434180..0000000 --- a/utztex_group.py +++ /dev/null @@ -1,4014 +0,0 @@ -import unittest -import test_jayjay -import math -import json -JSON_IDENT = 5 - -class MG(): - def __init__(self, deckblatt:dict, **kwargs): - """ - kwargs can contain the keys - rsm_direct - rsm_fa - flyer_f40 - neuenhauser - flyer - verbindungsstrecken_w - puffer - turm - """ - mengen = { - #"SYSTEM":"", - #"RSM":0, - #"Flyer":2, - #"Flyer_Puffer":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":3, - #"Neuenhauser-Putzmaschine":0, - #"Neuenhauser-Putzmaschine_Vorpuffer":0, - #"Neuenhauser-Putzmaschine_Nachpuffer":0, - #"Cason-Putzmaschine":0, - #"Cason-Putzmaschine_Vorpuffer":0, - #"Cason-Putzmaschine_Nachpuffer":0, - #"Puffer":0, - #"Anzahl_der_Pufferstrecken_pro_Puffer":0, - #"Begegnungsstrecke_Bypass":0, - #"Turm":0, - #"Turm_Anzahl_Wendlungen":0, - } - - - self._deckblatt = deckblatt - #self.remove_empty(self._deckblatt) - ### Prüfungen: - # wenn Flyer Electrojet 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) > 0: - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer sollte grösser 1 sein") - if deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer sollte grösser 1 sein") - # wenn Neuenhauser 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Neuenhauser-Putzmaschine", 0) > 0: - if deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer der Neuenhauser sollte grösser 1 sein") - if deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer der Neuenhauser sollte grösser 1 sein") - # wenn Cason 1, dann sollten Vor- und Nachpuffer größer 1 sein - if deckblatt.get("Cason-Putzmaschine", 0) > 0: - if deckblatt.get("Cason-Putzmaschine_Vorpuffer", 0) < 2: - raise Exception("Vorpuffer der Cason sollte grösser 1 sein") - if deckblatt.get("Cason-Putzmaschine_Nachpuffer", 0) < 2: - raise Exception("Nachpuffer der Cason sollte grösser 1 sein") - # wenn Puffer, dann mindestens 2 Strecken - if deckblatt.get("Puffer", 0) > 0: - if deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) < 2: - raise Exception("mind. 2 Strecken sollten im Puffer existieren") - - # Bypass, wenn mindestens 2 Flyer oder 2 RSM - # Turm: kein Kriterium - self._RSM_Anzahl = deckblatt.get("RSM", 0) - rsm_direct_mengen = {} - if "rsm_direct" in kwargs: - rsm_direct_mengen = kwargs['rsm_direct'] - self.remove_empty(rsm_direct_mengen) - rsm_direct_mengen["Anzahl"] = self._RSM_Anzahl #übernahme aus deckblatt - - rsm_fa_mengen = {} - if "rsm_fa" in kwargs: - rsm_fa_mengen = kwargs['rsm_fa'] - self.remove_empty(rsm_fa_mengen) - rsm_fa_mengen["Anzahl_RSM"] = self._RSM_Anzahl #übernahme aus deckblatt - - flyer_f40_mengen = {} - if "flyer_f40" in kwargs: - flyer_f40_mengen = kwargs['flyer_f40'] - self.remove_empty(flyer_f40_mengen) - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) #übernahme aus deckblatt - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) #übernahme aus deckblatt - flyer_f40_mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = deckblatt.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) #übernahme aus deckblatt - - neuenhauser_mengen = {} - if "neuenhauser" in kwargs: - neuenhauser_mengen = kwargs['neuenhauser'] - self.remove_empty(neuenhauser_mengen) - neuenhauser_mengen["Neuenhauser-Putzmaschine"] = deckblatt.get("Neuenhauser-Putzmaschine", 0) - neuenhauser_mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) - neuenhauser_mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = deckblatt.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) - - flyer_mengen = {} - if "flyer" in kwargs: - flyer_mengen = kwargs['flyer'] - self.remove_empty(flyer_mengen) - flyer_mengen["Anzahl"] = deckblatt.get("Flyer", 0) - flyer_mengen["Flyer"] = deckblatt.get("Flyer", 0) - flyer_mengen["Anzahl_Schienen"] = deckblatt.get("Flyer_Puffer", 0) - - puffer_mengen = {} - if "puffer" in kwargs: - puffer_mengen = kwargs['puffer'] - self.remove_empty(puffer_mengen) - puffer_mengen["Puffer"] = deckblatt.get("Puffer", 0) - puffer_mengen["Anzahl_Pufferstrecken"] = deckblatt.get("Anzahl_der_Pufferstrecken_pro_Puffer", 0) - - turm_mengen = {} - if "turm" in kwargs: - turm_mengen = kwargs['turm'] - self.remove_empty(turm_mengen) - turm_mengen["Turm"] = deckblatt.get("Turm", 0) - turm_mengen["Anzahl_Wendlungen"] = deckblatt.get("Turm_Anzahl_Wendlungen", 0) - verbindungsstrecken_w_mengen = {} - if "verbindungsstrecken_w" in kwargs: - verbindungsstrecken_w_mengen = kwargs['verbindungsstrecken_w'] - self.remove_empty(verbindungsstrecken_w_mengen) - - #überprüfe welche Art von System, setze dict der unrelevanten klasse = 0 - system = deckblatt.get("SYSTEM", "") - if (system.lower() == "direct"): - self._rsm_fa = RSM_FA({}) - self._rsm_direct = RSM_direct(rsm_direct_mengen) - elif (system.lower() == "fa"): - self._rsm_fa = RSM_FA(rsm_fa_mengen) - self._rsm_direct = RSM_direct({}) - else: - raise Exception("unkown Flyer. Either direct or fa") - - self._flyer_f40 = Flyer_F40_EJet_inc_Putz(flyer_f40_mengen) - self._neuenhauser = Putzmaschine_Neuenhauser(neuenhauser_mengen) - self._flyer = Flyer_EJet(flyer_mengen) - n_begegnung = deckblatt.get('Begegnungsstrecke_Bypass', 0) - self._verbindungsstrecken_w = Verbindungsstrecken_Wechsel(verbindungsstrecken_w_mengen, n_begegnung) - self._puffer = Puffer(puffer_mengen) - self._turm = Turm(turm_mengen) - - - def get_deckblatt_value(self, key): - return self._deckblatt.get(key, 0) - - def get_value_of_object(self, objectname, key): - # Deckblatt - if (objectname.lower() == "deckblatt"): - return self._deckblatt.get(key) - # RSM_direct - if (objectname.lower() == "rsm_direct"): - return self._rsm_direct.anzahl(key) - # RSM_FA - if (objectname.lower() == "rsm_fa"): - return self._rsm_fa.anzahl(key) - # Flyer_F40_EJet_inc_Putz - if (objectname.lower() == "flyer_f40_ejet_inc_putz"): - return self._flyer_f40.anzahl(key) - # Putzmaschine_Neuenhauser - if (objectname.lower() == "putzmaschine_neuenhauser"): - return self._neuenhauser.anzahl(key) - # Flyer_EJet - if (objectname.lower() == "flyer_ejet"): - return self._flyer.anzahl(key) - # Verbindungsstrecken_Wechsel - if (objectname.lower() == "verbindungsstrecken_wechsel"): - return self._verbindungsstrecken_w.anzahl(key) - # Puffer - if (objectname.lower() == "puffer"): - return self._puffer.anzahl(key) - # Turm - if (objectname.lower() == "turm"): - return self._turm.anzahl(key) - - raise Exception("unkown element") - - - def getresult(self): - res = { - "RSM direct": self._rsm_direct._Mengen, - "RSM FA": self._rsm_fa._Mengen, - "Flyer F40 (Electrojet) incl. Putzmaschine": self._flyer_f40._Mengen, - "Putzmaschine (Neuenhauser)": self._neuenhauser._Mengen, - "Flyer (Electrojet)": self._flyer._Mengen, - "Verbindungsstrecken/Wechsel": self._verbindungsstrecken_w._Mengen, - "Puffer": self._puffer._Mengen, - "Turm": self._turm._Mengen, - } - return res - - def tojson(self, input:dict): - return json.dumps(input, sort_keys=False, indent=4) - - def tofile(self): - json = self.tojson(self.getresult()) - with open("json_mengengeruest.json", "w") as file: - file.write(json) - - def ztofile(self): - json = self.tojson(self.zusammenfassung()) - with open("zusammenfassung_mengengeruest.json", "w") as file: - file.write(json) - - def remove_empty(self, toclean): - # remove all elements with the number of 0. They are of no use - l = [] - for k,v in toclean.items(): - if v == 0: - l.append(k) - for item in l: - del toclean[item] - - def zusammenfassung(self): - #in Excel Zellwerte und Bezüge der Spalte "G" können ignoriert werden - zmengen = { - "Sensor_optisch_Traverse": 0, - "Sensor_induktiv_Spulenalter_Zug_positionierung": 0, - "Sensor_Spulenprüfung_voll_leer": 0, - "Seilzugsschalter": 0, - "Drucktaster_automatische_Umfahrung": 0, - "Bedientableau_1fach": 0, - "Bedientableau_2fach": 0, - "Bedientableau_14fach": 0, - "Interface_Putzmaschine": 0, - "Interface_Doffer": 0, - "Weiche": 0, - "Dreifachweiche": 0, - "Wechsel": 0, - "Stopper": 0, - "Meldelampe_Überstrom": 0, - "Hauptschalter_Ein_Meldung": 0, - "Werma_Rundumleuchte_Störung": 0, - "Weiche_nach_PM_bipolar": 0, - "Kreuzungsweiche": 0, - "RA_uni": 0, - "RA_uni_abhebbar": 0, - "RA_uni_ohne_SPS_Ansteuerung": 0, - "RA_bi": 0, - "RA_bi_ohne_SPS-Ansteuerung": 0, - "RA_bi_abhebbar": 0, - "Doppelstreckenantrieb": 0, - "gemeinsame_Wendung": 0, - "Gesamtanzahl_Antriebe": 0, - "klemmkasten_rsm": 0 - } - zmengen["Sensor_optisch_Traverse"] = self._rsm_direct._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._rsm_fa._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._flyer_f40._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._neuenhauser._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._flyer._Mengen.get("Sensor_optisch_Traverse", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Sensor_optisch_Traverse",0) +\ - self._verbindungsstrecken_w._Mengen.get("Dreifachweiche",0) * 2 +\ - self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche",0) * 4 +\ - self._puffer._Mengen.get("Sensor_optisch_Traverse",0) +\ - self._turm._Mengen.get("Sensor_optisch_Traverse",0) + 15 - - - zmengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._flyer_f40._Mengen.get("Sensor_induktiv_Spulenhalter",0) +\ - self._neuenhauser._Mengen.get("Sensorik_Zugpositionierung",0) +\ - self._flyer._Mengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung",0) - - zmengen["Sensor_Spulenprüfung_voll_leer"] = self._neuenhauser._Mengen.get("Sensor_WT18_Spulenprüfung_voll_leer",0) - zmengen["Seilzugsschalter"] = self._rsm_fa._Mengen.get("Seilzugsschalter", 0) - zmengen["Drucktaster_automatische_Umfahrung"] = self._rsm_fa._Mengen.get("Mit_Drucktaster", 0) - zmengen["Bedientableau_1fach"] = self._rsm_fa._Mengen.get("Bedientableau_1fach", 0) + self._verbindungsstrecken_w._Mengen.get("Bedientableau_1fach", 0) - zmengen["Bedientableau_2fach"] = self._rsm_direct._Mengen.get("Bedientableau_2fach", 0) +\ - self._rsm_fa._Mengen.get("Bedientableau_2fach", 0) +\ - self._flyer_f40._Mengen.get("Bedientableau_2fach", 0) +\ - self._neuenhauser._Mengen.get("Bedientableau_2fach", 0) +\ - self._flyer._Mengen.get("Bedientableau_2fach", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Bedientableau_2fach", 0) +\ - self._turm._Mengen.get("Bedientableau_2fach", 0) - zmengen["Bedientableau_14fach"] = self._verbindungsstrecken_w._Mengen.get("Bedientableau_14fach", 0) - zmengen["Interface_Putzmaschine"] = self._neuenhauser._Mengen.get("Interface_Putzmaschine", 0) - zmengen["Interface_Doffer"] = self._flyer_f40._Mengen.get("Interface_Doffer", 0) + self._flyer._Mengen.get("Interface_Doffer", 0) - zmengen["Weiche"] = self._rsm_direct._Mengen.get("Weiche", 0) +\ - self._rsm_fa._Mengen.get("Weiche", 0) +\ - self._flyer_f40._Mengen.get("Weiche", 0) +\ - self._neuenhauser._Mengen.get("Weiche", 0) +\ - self._flyer._Mengen.get("Weiche", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Weiche", 0) +\ - self._puffer._Mengen.get("Weiche", 0) +\ - self._turm._Mengen.get("Weiche", 0) + 4 - zmengen["Dreifachweiche"] = self._rsm_direct._Mengen.get("Weiche_Gemeinsame_Rückstellung", 0) +\ - self._flyer_f40._Mengen.get("Dreifachweiche", 0) +\ - self._flyer._Mengen.get("Dreifachweiche", 0) +\ - self._verbindungsstrecken_w.anzahl("Dreifachweiche") - zmengen["Wechsel"] = self._flyer_f40._Mengen.get("Wechsel", 0) +\ - self._flyer._Mengen.get("Wechsel", 0) - zmengen["Stopper"] = self._flyer_f40._Mengen.get("Stopper", 0) - zmengen["Meldelampe_Überstrom"] = self._rsm_direct._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._rsm_fa._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._flyer_f40._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._neuenhauser._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._flyer._Mengen.get("Meldelampe_Überstrom", 0) +\ - self._puffer._Mengen.get("Meldelampe_Überstrom", 0) - zmengen["Hauptschalter_Ein_Meldung"] = self._rsm_direct._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._rsm_fa._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._flyer_f40._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._neuenhauser._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._flyer._Mengen.get("Hauptschalter_Ein_Meldung", 0) +\ - self._puffer._Mengen.get("Hauptschalter_Ein_Meldung", 0) - zmengen["Werma_Rundumleuchte_Störung"] = self._rsm_direct._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._rsm_fa._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._flyer_f40._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._neuenhauser._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._flyer._Mengen.get("Werma_Rundumleuchte_Störung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Werma_Rundumleuchte_Störung", 0) - zmengen["Weiche_nach_PM_bipolar"] = self._flyer_f40._Mengen.get("Weiche_nach_PM_bipolar", 0) +\ - self._neuenhauser._Mengen.get("Weiche_nach_PM_bipolar", 0) - zmengen["Kreuzungsweiche"] = self._verbindungsstrecken_w._Mengen.get("Kreuzungsweiche", 0) - zmengen["RA_uni"] = self._verbindungsstrecken_w._Mengen.get("RA_uni", 0) +\ - self._rsm_fa._Mengen.get("RRA_uni_Begegnung", 0) +\ - self._flyer_f40._Mengen.get("RA_uni", 0) - #RRA_bi_uni_Begegnung - zmengen["RA_uni_abhebbar"] = self._flyer_f40._Mengen.get("RA_uni_abhebbar", 0) +\ - self._neuenhauser._Mengen.get("RA_uni_abhebbar", 0) - zmengen["RA_uni_ohne_SPS_Ansteuerung"] = self._flyer_f40._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - self._neuenhauser._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) - zmengen["RA_bi"] = self._rsm_fa._Mengen.get("RRA_bi", 0) +\ - self._flyer_f40._Mengen.get("RRA_bi", 0) +\ - self._flyer._Mengen.get("RA_bi", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_bi", 0) +\ - self._puffer._Mengen.get("RA_bi_ungerade_Schiene", 0) +\ - self._turm._Mengen.get("RA_bi", 0) - zmengen["RA_bi_ohne_SPS-Ansteuerung"] = self._rsm_fa._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ - self._flyer_f40._Mengen.get("RRA_bi_ohne_SPS_Ansteuerung", 0) +\ - self._flyer._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - self._verbindungsstrecken_w._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - self._turm._Mengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) #TODO: Notation beachten: RA_bi, RRA_bi - zmengen["RA_bi_abhebbar"] = self._rsm_direct._Mengen.get("RA_bi_abhebbar", 0) +\ - self._flyer_f40._Mengen.get("RRA_BI_abhebbar", 0) +\ - self._flyer._Mengen.get("RA_bi_abhebbar", 0) #TODO: Notation beachten: RA_bi, RRA_bi - zmengen["Doppelstreckenantrieb"] = self._rsm_direct._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._flyer_f40._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._neuenhauser._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._flyer._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._verbindungsstrecken_w._Mengen.get("Doppelstreckenantrieb", 0) +\ - self._puffer._Mengen.get("Doppelstreckenantrieb", 0) - zmengen["gemeinsame_Wendung"] = self._rsm_direct._Mengen.get("gemeinsame_Wendung", 0) +\ - self._rsm_fa._Mengen.get("gemeinsame_Wendung", 0) - zmengen["Gesamtanzahl_Antriebe"] = zmengen.get("RA_uni", 0) +\ - zmengen.get("RA_uni_abhebbar", 0) +\ - zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - zmengen.get("RA_bi", 0) +\ - zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - zmengen.get("RA_bi_abhebbar", 0) +\ - zmengen.get("Doppelstreckenantrieb", 0) - zmengen["klemmkasten_rsm"] = self._rsm_fa._Mengen.get("klemmkasten_rsm", 0) - return zmengen - -# RSM_direct: -class RSM_direct(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "Anzahl":0, - #"Anzahl_Strecken_RSM":8, - "Sensor_optisch_Traverse":0, - #"Lichtschranke_Traverse":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Bedientableau_2fach_Direct":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_Gemeinsame_Rückstellung":0, - "Weiche_Gemeinsame_Rückstellung_Korrektur":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - #"Doppelstreckenantrieb":0, - #"gemeinsame_Wendung":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - #Berechnungen basieren auf der Anzahl der Ringspinnmaschinen (rsm_anzahl) mit Ausnahme 'Sensor_optisch_Traverse' - #sowie teilweise manueller Eingaben von Korrekturfaktoren, hier mit dem Anhang '_Korrektur' - self._Mengen = {} - self._RSM_Anzahl = anzahl.get("Anzahl", 0) - self._Mengen["Anzahl"] = anzahl.get("Anzahl", 0) - self._Mengen["Anzahl_Strecken_RSM"] = 8 - self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Sensor_optisch_Traverse", 0) - self._Mengen["Lichtschranke_Traverse"] = self._RSM_Anzahl * 6 - self._Mengen["Bedientableau_2fach"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Direct"] = self._RSM_Anzahl - self._Mengen["Weiche"] = self._RSM_Anzahl * 4 + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Gemeinsame_Rückstellung"] = math.ceil(self._RSM_Anzahl/10) + anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) - self._Mengen["Weiche_Gemeinsame_Rückstellung_Korrektur"] = anzahl.get("Weiche_Gemeinsame_Rückstellung_Korrektur", 0) - self._Mengen["RA_bi_abhebbar"] = math.ceil(self._RSM_Anzahl * 0.31) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb"] = self._RSM_Anzahl * self._Mengen.get("Anzahl_Strecken_RSM", 0) - self._Mengen["gemeinsame_Wendung"] = math.ceil(self._RSM_Anzahl / 6) * 2 - self._Mengen["Meldelampe_Überstrom"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(self._RSM_Anzahl / 8) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = math.floor(self._RSM_Anzahl / 5) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname): - return self._Mengen.get(partname, 0) -# RSM_FA: -class RSM_FA(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "Anzahl_RSM":30, - #"Automatische_Umfahrung":0, # 'Automatische_Umfahrung' und 'Flex_A_Premium' sind eine Zelle -> identischer Wert - "Flex_A_Premium":False, - "Getriebe_in_der_Mitte":False, - "RSM_Einfahrt_Ein_Beidseitig":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_zusätzlich":8, - #"Bedientableau_1fach":0, - "Bedientableau_1fach_Korrektur":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":1, - #"Weiche":0, - "Weiche_Korrektur":6, - #"RRA_bi":0, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - #"Seilzugschalter":0, - #"Mit_Drucktaster":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - def __init__(self, anzahl:dict): - self._Mengen = {} - self._Mengen["Anzahl_RSM"] = anzahl.get("Anzahl_RSM", 0) - self._Mengen["Flex_A_Premium"] = anzahl.get("Flex_A_Premium", False) - self._Mengen["Getriebe_in_der_Mitte"] = anzahl.get("Getriebe_in_der_Mitte", False) - self._Mengen["RSM_Einfahrt_Ein_Beidseitig"] = anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False) - - sensorfaktor_premium = 1 - sensorfaktor_beidseitig = 0 - if self.flex_a_premium(): - sensorfaktor_premium = 4 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - sensorfaktor_beidseitig = 1 - self._Mengen["Sensor_optisch_Traverse"] = anzahl.get("Anzahl_RSM", 0)*(sensorfaktor_premium + sensorfaktor_beidseitig) + anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) - self._Mengen["Sensor_optisch_Traverse_zusätzlich"] = anzahl.get("Sensor_optisch_Traverse_zusätzlich", 0) - #hier keine Korrektur, dafür "Zusätzlich" vorgesehen - - tableaufaktor_premium = 1 - tableaufaktor_beidseitig = 0 - if self.flex_a_premium(): - tableaufaktor_premium = 0 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - tableaufaktor_beidseitig = 1 - self._Mengen["Bedientableau_1fach"] = anzahl.get("Anzahl_RSM", 0)*(tableaufaktor_premium + tableaufaktor_beidseitig) + anzahl.get("Bedientableau_1fach_Korrektur", 0) - self._Mengen["Bedientableau_1fach_Korrektur"] = anzahl.get("Bedientableau_1fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - - weichefaktor_premium = 1 - weichefaktor_beidseitig = 0 - if self.flex_a_premium(): - weichefaktor_premium = 3 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - weichefaktor_beidseitig = 1 - self._Mengen["Weiche"] = anzahl.get("Anzahl_RSM", 0) * (weichefaktor_premium + weichefaktor_beidseitig) + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - - rrafaktor_premium = 1 - rrafaktor_beidseitig = 0 - if self.flex_a_premium(): - rrafaktor_premium = 2 - if (anzahl.get("RSM_Einfahrt_Ein_Beidseitig", False)): - rrafaktor_beidseitig = 1 - self._Mengen["RRA_bi"] = anzahl.get("Anzahl_RSM", 0) * (rrafaktor_premium + rrafaktor_beidseitig) + anzahl.get("RRA_bi_auf_Haupstrecke", 0) + anzahl.get("RRA_bi_Korrektur", 0) - self._Mengen["RRA_bi_Korrektur"] = anzahl.get("RRA_bi_Korrektur", 0) - self._Mengen["RRA_bi_auf_Haupstrecke"] = anzahl.get("RRA_bi_auf_Haupstrecke", 0) - self._Mengen["RRA_uni_Begegnung"] = anzahl.get("RRA_uni_Begegnung", 0) - - if self.flex_a_premium(): - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("Anzahl_RSM", 0) * 4 - else: - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = 0 - - self._Mengen["gemeinsame_Wendung"] = anzahl.get("gemeinsame_Wendung", 0) - - seilzfaktor_premium = 0 - seilzfaktor_getriebe_mitte = 0 - if self.flex_a_premium(): - seilzfaktor_premium = 2 - if (anzahl.get("Getriebe_in_der_Mitte", False)): - seilzfaktor_getriebe_mitte = 2 - self._Mengen["Seilzugschalter"] = anzahl.get("Anzahl_RSM", 0) * (seilzfaktor_premium + seilzfaktor_getriebe_mitte) - - if self.flex_a_premium(): - self._Mengen["Mit_Drucktaster"] = anzahl.get("Anzahl_RSM", 0) * 8 - else: - self._Mengen["Mit_Drucktaster"] = 0 - self._Mengen["Mit_Drucktaster_Korrektur"] = anzahl.get("Mit_Drucktaster_Korrektur",0) - self._Mengen["Meldelampe_Überstrom"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/3) + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/3) + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = math.ceil(anzahl.get("Anzahl_RSM", 0)/10) + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["klemmkasten_rsm"] = anzahl.get("klemmkasten_rsm", 0) - - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - def flex_a_premium(self): - return self._Mengen.get("Flex_A_Premium", False) - -# Flyer_F40_(Electrojet)_incl._Putzmaschine: -class Flyer_F40_EJet_inc_Putz(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":True, - "Nachpuffer":True, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - #"RRA_bi":0, - "RRA_bi_Korrektur":9, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - def __init__(self, anzahl:dict): - - self._Mengen = self.mengen - anzahl = self._Mengen - - self._Flyer_Anzahl = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) +\ - anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) - self._Mengen["Anzahl"] = self._Flyer_Anzahl - self._Mengen["Anzahl_Schienen"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) +\ - anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer", 0) - self._Mengen["Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer"] = anzahl.get("Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer", 0) - self._Mengen["Single_Line_Durchfahrt"] = anzahl.get("Single_Line_Durchfahrt", False) - self._Mengen["Nachpuffer"] = anzahl.get("Nachpuffer", False) - sensorfaktor_nachpuffer = 7 - if (anzahl.get("Nachpuffer", False)): - sensorfaktor_nachpuffer = 5 - self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (self._Mengen.get("Anzahl_Schienen", 0) + sensorfaktor_nachpuffer) + anzahl.get("Dreifachweiche", 0) * 2 + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = self.mengen.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenhalter"] = self._Flyer_Anzahl * 1 + anzahl.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenhalter_Korrektur"] = self.mengen.get("Sensor_induktiv_Spulenhalter_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = self.mengen.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl + anzahl.get("Interface_Doffer_Korrektur", 0) - self._Mengen["Interface_Doffer_Korrektur"] = self.mengen.get("Interface_Doffer_Korrektur", 0) - self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Mengen.get("Anzahl_Schienen", 0) + anzahl.get("Weiche_Korrektur", 0) + anzahl.get("Wechsel", 0) - self._Mengen["Weiche_Korrektur"] = self.mengen.get("Weiche_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl + anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - else: - self._Mengen["Weiche_nach_Flyer_bipolar"] = anzahl.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - self._Mengen["Weiche_nach_Flyer_bipolar_Korrektur"] = self.mengen.get("Weiche_nach_Flyer_bipolar_Korrektur", 0) - self._Mengen["Dreifachweiche"] = self.mengen.get("Dreifachweiche", 0) - self._Mengen["Wechsel"] = self.mengen.get("Wechsel", 0) - self._Mengen["Stopper"] = self.mengen.get("Stopper", 0) - self._Mengen["RA_uni"] = self.mengen.get("RA_uni", 0) - - rraunifaktor_durchfahrt = 0 - rraunifaktor_nachpuffer = 1 - if (anzahl.get("Single_Line_Durchfahrt", False)): - rraunifaktor_durchfahrt = 1 - if (anzahl.get("Nachpuffer", False)): - rraunifaktor_nachpuffer = 0 - self._Mengen["RA_uni_abhebbar"] = self._Flyer_Anzahl * (rraunifaktor_durchfahrt + rraunifaktor_nachpuffer) + anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_abhebbar_Korrektur"] = self.mengen.get("RA_uni_abhebbar_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl +\ - anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) - else: - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) +\ - self._Flyer_Anzahl - self._Mengen["RA_uni_ohne_SPS_Ansteuerung_Korrektur"] = self.mengen.get("RA_uni_ohne_SPS_Ansteuerung_Korrektur", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RRA_BI_abhebbar"] = self._Flyer_Anzahl - else: - self._Mengen["RRA_BI_abhebbar"] = anzahl.get("RRA_BI_abhebbar_Korrektur", 0) + self._Flyer_Anzahl - self._Mengen["RRA_BI_abhebbar_Korrektur"] = self.mengen.get("RRA_BI_abhebbar_Korrektur", 0) - - self._Mengen["RRA_bi"] = self.mengen.get("RRA_bi", 0) - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = anzahl.get("RRA_bi_ohne_SPS_Ansteuerung_Korrektur", 0) - else: - self._Mengen["RRA_bi_ohne_SPS_Ansteuerung"] = self._Flyer_Anzahl - - if (anzahl.get("Single_Line_Durchfahrt", False)): - self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + self._Flyer_Anzahl - else: - self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Mengen.get("Anzahl_Schienen", 0)/2) + anzahl.get("Doppelstreckenantrieb_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb_Korrektur"] = self.mengen.get("Doppelstreckenantrieb_Korrektur", 0) - self._Mengen["RA_bi_abhebbar_unger_Schiene"] = self.mengen.get("RA_bi_abhebbar_unger_Schiene", 0) - - self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = self.mengen.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = self.mengen.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = self.mengen.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Putzmaschine_(Neuenhauser): -class Putzmaschine_Neuenhauser(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - - self._Mengen = {} - self._Putze_Anzahl = anzahl.get("Neuenhauser-Putzmaschine", 0) - self._Vorpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Vorpuffer", 0) - self._Nachpuffer_Anzahl = anzahl.get("Neuenhauser-Putzmaschine_Nachpuffer", 0) - self._Mengen["Anzahl"] = self._Putze_Anzahl - - self._Mengen["Neuenhauser-Putzmaschine_Vorpuffer"] = self._Vorpuffer_Anzahl #'Neuenhauser-Putzmaschine_Vorpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Vorstaustrecken' (Mengengerüst/Putzmaschine) - self._Mengen["Anzahl_Vorstaustrecken"] = self._Vorpuffer_Anzahl - - self._Mengen["Neuenhauser-Putzmaschine_Nachpuffer"] = self._Nachpuffer_Anzahl #'Neuenhauser-Putzmaschine_Nachpuffer' (Deckblatt) ist äquivalent zu 'Anzahl_Nachstaustrecken' (Mengengerüst/Putzmaschine) - self._Mengen["Anzahl_Nachstaustrecken"] = self._Nachpuffer_Anzahl - - self._Mengen["Sensor_optisch_Traverse"] = self._Putze_Anzahl * (self._Vorpuffer_Anzahl + self._Nachpuffer_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - - self._Mengen["Sensorik_Zugpositionierung"] = self._Putze_Anzahl * 4 - self._Mengen["Sensor_WT18_Spulenprüfung_voll_leer"] = self._Putze_Anzahl * 2 - - self._Mengen["Bedientableau_2fach"] = self._Putze_Anzahl + anzahl.get("Bedientableau_2fach_Korrektur", 0) - self._Mengen["Bedientableau_2fach_Korrektur"] = anzahl.get("Bedientableau_2fach_Korrektur", 0) - - self._Mengen["Interface_Putzmaschine"] = self._Putze_Anzahl - self._Mengen["Weiche"] = self._Putze_Anzahl * self._Vorpuffer_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_nach_PM_bipolar"] = self._Putze_Anzahl * (self._Nachpuffer_Anzahl-1) - self._Mengen["RA_uni_abhebbar"] = self._Putze_Anzahl + anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_abhebbar_Korrektur"] = anzahl.get("RA_uni_abhebbar_Korrektur", 0) - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = self._Putze_Anzahl - - self._Mengen["RA_uni_abhebbar_unger_Sch"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/3) + math.floor(self._Nachpuffer_Anzahl/3)) - self._Mengen["Doppelstreckenantrieb"] = self._Putze_Anzahl * (math.floor(self._Vorpuffer_Anzahl/2) + math.floor(self._Nachpuffer_Anzahl/2)) - self._Mengen["Meldelampe_Überstrom"] = self._Putze_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Putze_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = self._Putze_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Flyer_(Electrojet): -class Flyer_EJet(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Flyer":0, # äquivalent zu 'Anzahl' - "Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":0, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - def __init__(self, anzahl:dict): - - - self._Mengen = {} - self._Flyer_Anzahl = anzahl.get("Flyer", 0) - self._Mengen["Anzahl"] = self._Flyer_Anzahl - self._Mengen["Flyer"] = self._Flyer_Anzahl - self._Schienen_Anzahl = anzahl.get("Anzahl_Schienen", 0) - self._Mengen["Anzahl_Schienen"] = anzahl.get("Anzahl_Schienen", 0) - - self._Mengen["Sensor_optisch_Traverse"] = self._Flyer_Anzahl * (2*self._Schienen_Anzahl + 3) + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_induktiv_Spulenalter_Zug_positionierung"] = self._Flyer_Anzahl - self._Mengen["Bedientableau_2fach"] = self._Flyer_Anzahl - self._Mengen["Interface_Doffer"] = self._Flyer_Anzahl - self._Mengen["Weiche"] = self._Flyer_Anzahl * self._Schienen_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_nach_Flyer_bipolar"] = self._Flyer_Anzahl - self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) - self._Mengen["Wechsel"] = self._Flyer_Anzahl + anzahl.get("Wechsel_Korrektur", 0) - self._Mengen["Wechsel_Korrektur"] = anzahl.get("Wechsel_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = self._Flyer_Anzahl - self._Mengen["RA_bi_abhebbar"] = self._Flyer_Anzahl + anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) + anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi_abhebbar_Korrektur"] = anzahl.get("RA_bi_abhebbar_Korrektur", 0) - self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) - self._Mengen["Doppelstreckenantrieb"] = self._Flyer_Anzahl * math.floor(self._Schienen_Anzahl/2) - self._Mengen["RA_bi_abhebbar_unger_Schiene"] = anzahl.get("RA_bi_abhebbar_unger_Schiene", 0) - self._Mengen["Meldelampe_Überstrom"] = self._Flyer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Flyer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = self._Flyer_Anzahl + anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - self._Mengen["Werma_Rundumleuchte_Störung_Korrektur"] = anzahl.get("Werma_Rundumleuchte_Störung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Verbindungsstrecken/_Wechsel: -class Verbindungsstrecken_Wechsel(): - def __init__(self, anzahl:dict, Begegnungsstrecke_bypass:int): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - #"Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - - self._Mengen = {} - self._Mengen["Sensor_optisch_Traverse"] = Begegnungsstrecke_bypass * 3 + \ - anzahl.get('Dreifachweiche', 0) * 2 + \ - anzahl.get('Kreuzungsweiche', 0) * 4 + \ - anzahl.get('Sensor_optisch_Traverse_Korrektur', 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Bedientableau_1fach"] = anzahl.get("Bedientableau_1fach", 0) - self._Mengen["Bedientableau_2fach"] = anzahl.get("Bedientableau_2fach", 0) - self._Mengen["Bedientableau_14fach"] = anzahl.get("Bedientableau_14fach", 0) - self._Mengen["Weiche"] = Begegnungsstrecke_bypass * 2 + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Dreifachweiche"] = anzahl.get("Dreifachweiche", 0) - self._Mengen["Kreuzungsweiche"] = anzahl.get("Kreuzungsweiche", 0) - self._Mengen["Werma_Rundumleuchte_Störung"] = anzahl.get("Werma_Rundumleuchte_Störung", 0) - self._Mengen["RA_uni"] = anzahl.get("RA_uni", 0) - self._Mengen["RA_uni_ohne_SPS_Ansteuerung"] = anzahl.get("RA_uni_ohne_SPS_Ansteuerung", 0) - self._Mengen["RA_bi"] = anzahl.get("RA_bi", 0) - self._Mengen["RA_bi_ohne_SPS-Ansteuerung"] = anzahl.get("RA_bi_ohne_SPS-Ansteuerung", 0) - self._Mengen["Doppelstreckenantrieb"] = anzahl.get("Doppelstreckenantrieb", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - -# Puffer -class Puffer(): - def __init__(self, anzahl:dict): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Puffer":2, #äquivalent zu Anzahl - "Anzahl_Pufferstrecken":7, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Weiche":0, - "Weiche_Korrektur":0, - "RA_bi_ungerade_Schiene":2, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":2, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - } - - self._Mengen = anzahl - self._Puffer_Anzahl = anzahl.get("Puffer", 0) - self._Strecken_Anzahl = anzahl.get("Anzahl_Pufferstrecken", 0) - self._Mengen["Anzahl"] = self._Puffer_Anzahl - self._Mengen["Anzahl_Staustrecken"] = self._Strecken_Anzahl - self._Mengen["Sensor_optisch_Traverse"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Sensor_optisch_Traverse_Korrektur"] = anzahl.get("Sensor_optisch_Traverse_Korrektur", 0) - self._Mengen["Weiche"] = self._Puffer_Anzahl*self._Strecken_Anzahl + anzahl.get("Weiche_Korrektur", 0) - self._Mengen["RA_bi_ungerade_Schiene"] = anzahl.get("RA_bi_ungerade_Schiene", 0) - self._Mengen["Weiche_Korrektur"] = anzahl.get("Weiche_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb_Korrektur"] = anzahl.get("Doppelstreckenantrieb_Korrektur", 0) - self._Mengen["Doppelstreckenantrieb"] = self._Puffer_Anzahl * math.floor(self._Strecken_Anzahl/2) - self._Mengen["Meldelampe_Überstrom"] = self._Puffer_Anzahl + anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0) - self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0) - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) -# Turm -class Turm(): - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - "Turm":0, #äquivalent zu Anzahl - "Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - def __init__(self, anzahl:dict): - self._Mengen = {} - self._Turm_Anzahl = anzahl.get("Turm", 0) - self._Mengen["Anzahl"] = self._Turm_Anzahl - self._Staustrecken_Anzahl = anzahl.get("Anzahl_Wendlungen", 0) - self._Mengen["Anzahl_Staustrecken"] = self._Staustrecken_Anzahl - - self._Mengen["Sensor_optisch_Traverse"] = self._Turm_Anzahl*5 - self._Mengen["Weiche"] = self._Turm_Anzahl*3 - self._Mengen["RA_bi"] = self._Turm_Anzahl*2 + anzahl.get("RA_bi_Korrektur", 0) - self._Mengen["RA_bi_Korrektur"] = anzahl.get("RA_bi_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS"] = self._Turm_Anzahl*self._Staustrecken_Anzahl*2 + anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) - self._Mengen["RA_bi_ohne_SPS_Korrektur"] = anzahl.get("RA_bi_ohne_SPS_Korrektur", 0) - self._Mengen["Bedientableau_2fach"] = self._Turm_Anzahl*2 - def anzahl(self, partname, defaultv = 0): - return self._Mengen.get(partname, defaultv) - - -class EA(): - stueckzahl = { - "schaltschrank":1, - # "bedienstation_1fach_Not_Aus": (1, 1), - # "bedienstation_einfach_Zug_Wechseln": (1, 1), - # "bedienstation_automatische_Umfahrung": (1, 1), # in Excel Drucktaster automatische Umfahrung? ansonsten fehlt in Excel - # "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), - # "bedienstation_zweifach_Not_Aus_Reset": (2, 2), - "bedienst_dreifach":0, - "bedienst_vierfach":0, - "bedienst_sechsfach":0, - # "EAs_Unterverteiler_direct": (7, 6), - - # # Ermittlung_Mengengeruest_Anzahl, - # "Sensor_Traversenabfrage_optisch": (1, 0), - # "Reflexionslichtschranke_RSM_DIRECT": (1, 0), - # "Sensor induktiv Flyer+PM": (1, 0), - # "Seilzugschalter": (1, 0), - - # "Weiche": (0, 1), - # "Weiche_nach_PM_bipolar": (0, 2), - "gemeinsame_Weichenrueckstellung":0, - # "Dreifach_Weiche_DIRECT": (0, 2), - # "Kreuzungsweiche": (0, 10), - # "Stopper": (0, 1), - # "Ventil_RA_3_2_abhebbar": (0, 1), - # "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), - # "Blitzleuchte_Stoerung": (0, 1), - - # "Schnittstelle_Flyer_ElectroJet": (2, 2), - # "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), - # "FEldbux_UV_EinAusgang": (2, 1), - - "Spulenumsetzstation":0, - - # "RA_unidirektional": (0, 1), - # "RA_unidirektional_abhebbar": (0, 1), - "RA_unidirektional_mit_gemeinsamer_Wendung":0, - # "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), - # "RA_bidirektional": (0, 2), - # "RA_bidirektional_abhebbar": (0, 2), - "RA_bidirektional_abhebbar_gemeinsWend":0, - #"RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_in_RSM_bidirektional":0, - #"Doppelstreckenantrieb": (0, 2), - "Doppelstreckenantriebgemeinsame_Wendung":0, - "gemeinsame_Wendung":0, - "Frequenzumrichter":0, - } - def __init__(self, anzahl:dict, mg: type[MG]): - # Eingänge und Ausgänge jeder Hardwareeinheit - - self.EAs = { - # Bedienelemente_Steuerschrank - "Drucktaster_Anlage_AUS": (1, 0), - "Leuchtdrucktaster_Anlage_EIN": (1, 1), - "Leuchtdrucktaster_Start_nach_Stoerung": (1, 1), - "Leuchtdrucktaster_Laufzeitfehler": (1, 1), - "Drucktaster_Lampentest": (1, 0), - "Meldeleuchte_Komm_PC_SPS_gestoert": (0, 1), - "Sammeleingang_Ueberstrom": (5, 1), - "Sammeleingang_Not_Aus": (2, 1), - "Sammeleingang_Druckluft_fehlt": (1, 1), - "Drucktaster_Reset": (1, 0), - "Sammeleingang_Antriebe_abheben": (1, 2), - "Reserve": (9, 7), - "Bedienelemente_Steuerschrank": (24, 16), - - # Bedienstation, - "bedienstation_1fach_Not_Aus": (1, 1), - "bedienstation_einfach_Zug_Wechseln": (1, 1), - "bedienstation_automatische_Umfahrung": (1, 1), # in Excel Drucktaster automatische Umfahrung? ansonsten fehlt in Excel - "bedienstation_zweifach_Wechs_BCD_10f": (5, 1), - "bedienstation_zweifach_Not_Aus_Reset": (2, 2), - "bedienst_dreifach": (3, 3), - "bedienst_vierfach": (4, 4), - "bedienst_sechsfach": (6, 6), - "EAs_Unterverteiler_direct": (7, 6), - - # Ermittlung_Mengengeruest_Anzahl, - "Sensor_Traversenabfrage_optisch": (1, 0), - "Reflexionslichtschranke_RSM_DIRECT": (1, 0), - "Sensor induktiv Flyer+PM": (1, 0), - "Seilzugschalter": (1, 0), - - "Weiche": (0, 1), - "Weiche_nach_PM_bipolar": (0, 2), - "gemeinsame_Weichenrueckstellung": (0, 1), - "Dreifach_Weiche_DIRECT": (0, 2), - "Kreuzungsweiche": (0, 10), - "Stopper": (0, 1), - "Ventil_RA_3_2_abhebbar": (0, 1), - "Ventil_Doppelstreckenantrieb_5_2_abhebbar": (0, 2), - "Blitzleuchte_Stoerung": (0, 1), - - "Schnittstelle_Flyer_ElectroJet": (2, 2), - "Schnittstelle_Putzmaschine_Neuhauser": (4, 4), - "FEldbux_UV_EinAusgang": (2, 1), - - "Spulenumsetzstation": (40, 20), - - "RA_unidirektional": (0, 1), - "RA_unidirektional_abhebbar": (0, 1), - "RA_unidirektional_mit_gemeinsamer_Wendung": (0, 1), - "RA_unidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_bidirektional": (0, 2), - "RA_bidirektional_abhebbar": (0, 2), - "RA_bidirektional_abhebbar_gemeinsWend": (0, 1), - "RA_bidirektional_ohne_SPS_Ansteuerung": (0, 0), - "RA_in_RSM_bidirektional": (0, 1), - "Doppelstreckenantrieb": (0, 2), - "Doppelstreckenantriebgemeinsame_Wendung": (0, 1), - "gemeinsame_Wendung": (0, 2), - "Frequenzumrichter": (1, 3) - } - self._Anzahl = anzahl - self._Anzahl["Bedienelemente_Steuerschrank"] = self.stueckzahl.get("schaltschrank") - zmengen = mg.zusammenfassung() - self._Anzahl["bedienstation_einfach_Zug_Wechseln"] = zmengen.get("Bedientableau_1fach", 0) - self._Anzahl["bedienstation_automatische_Umfahrung"] = math.ceil(zmengen.get("Drucktaster_automatische_Umfahrung", 0)/4) - self._Anzahl["bedienstation_zweifach_Wechs_BCD_10f"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") - - self._Anzahl["bedienstation_zweifach_Not_Aus_Reset"] = zmengen.get("Bedientableau_2fach", 0) - self._Anzahl["bedienst_dreifach"] = self.stueckzahl.get("bedienst_dreifach") - self._Anzahl["bedienst_vierfach"] = self.stueckzahl.get("bedienst_vierfach") - self._Anzahl["bedienst_sechsfach"] = self.stueckzahl.get("bedienst_sechsfach") - self._Anzahl["EAs_Unterverteiler_direct"] = mg.get_value_of_object("rsm_direct", "Bedientableau_2fach_Direct") - - # Ermittlung_Mengengeruest_Anzahl - self._Anzahl["Sensor_Traversenabfrage_optisch"] = zmengen.get("Sensor_optisch_Traverse", 0) + zmengen.get("Sensor_Spulenprüfung_voll_leer", 0) - - self._Anzahl["Reflexionslichtschranke_RSM_DIRECT"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") - self._Anzahl["Sensor induktiv Flyer+PM"] = zmengen.get("Sensor_induktiv_Spulenalter_Zug_positionierung", 0) - self._Anzahl["Seilzugschalter"] = zmengen.get("Seilzugsschalter", 0) - - self._Anzahl["Weiche"] = zmengen.get("Weiche", 0) - self._Anzahl["Weiche_nach_PM_bipolar"] = zmengen.get("Weiche_nach_PM_bipolar", 0) - self._Anzahl["gemeinsame_Weichenrueckstellung"] = self.stueckzahl.get("gemeinsame_Weichenrueckstellung") - self._Anzahl["Dreifach_Weiche_DIRECT"] = zmengen.get("Dreifachweiche", 0) - - - self._Anzahl["Kreuzungsweiche"] = mg.get_value_of_object("verbindungsstrecken_wechsel", "Kreuzungsweiche") - self._Anzahl["Stopper"] = zmengen.get("Stopper", 0) - self._Anzahl["RA_unidirektional"] = zmengen.get("RA_uni", 0) - self._Anzahl["RA_unidirektional_abhebbar"] = zmengen.get("RA_uni_abhebbar", 0) - self._Anzahl["RA_unidirektional_mit_gemeinsamer_Wendung"] = self.stueckzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung") - self._Anzahl["RA_unidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_uni_ohne_SPS_Ansteuerung", 0) - self._Anzahl["RA_bidirektional"] = zmengen.get("RA_bi", 0) - self._Anzahl["RA_bidirektional_abhebbar"] = zmengen.get("RA_bi_abhebbar", 0) - self._Anzahl["RA_bidirektional_abhebbar_gemeinsWend"] = self.stueckzahl.get("RA_bidirektional_abhebbar_gemeinsWend") - self._Anzahl["RA_bidirektional_ohne_SPS_Ansteuerung"] = zmengen.get("RA_bi_ohne_SPS-Ansteuerung", 0) - self._Anzahl["RA_in_RSM_bidirektional"] = self.stueckzahl.get("RA_in_RSM_bidirektional") - self._Anzahl["Doppelstreckenantrieb"] = zmengen.get("Doppelstreckenantrieb", 0) - self._Anzahl["Doppelstreckenantriebgemeinsame_Wendung"] = self.stueckzahl.get("Doppelstreckenantriebgemeinsame_Wendung") - self._Anzahl["gemeinsame_Wendung"] = self.stueckzahl.get("gemeinsame_Wendung") - self._Anzahl["Frequenzumrichter"] = self.stueckzahl.get("Frequenzumrichter") - self._Anzahl["Ventil_RA_3_2_abhebbar"] = anzahl.get("RA_unidirektional_abhebbar") +\ - self.stueckzahl.get("RA_unidirektional_mit_gemeinsamer_Wendung") +\ - anzahl.get("RA_unidirektional_ohne_SPS_Ansteuerung", 0) +\ - anzahl.get("RA_bidirektional_abhebbar", 0) +\ - self.stueckzahl.get("RA_bidirektional_abhebbar_gemeinsWend") - self._Anzahl["Ventil_Doppelstreckenantrieb_5_2_abhebbar"] = zmengen.get("Doppelstreckenantrieb", 0) - self._Anzahl["Blitzleuchte_Stoerung"] = zmengen.get("Werma_Rundumleuchte_Störung", 0) - - - self._Anzahl["Schnittstelle_Flyer_ElectroJet"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Interface_Doffer") + \ - mg.get_value_of_object("flyer_ejet", "Interface_Doffer") - self._Anzahl["Schnittstelle_Putzmaschine_Neuhauser"] = mg.get_value_of_object("putzmaschine_neuenhauser", "Interface_Putzmaschine") - self._Anzahl["FEldbux_UV_EinAusgang"] = mg.get_value_of_object("rsm_fa", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("putzmaschine_neuenhauser", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("flyer_ejet", "Meldelampe_Überstrom") + \ - mg.get_value_of_object("puffer", "Meldelampe_Überstrom") - self._Anzahl["Spulenumsetzstation"] = self.stueckzahl.get("Spulenumsetzstation", 0) - - def getEA(self, partname): - return (self.EAs[partname][0], self.EAs[partname][1]) - def getE(self, partname): - return self.EAs[partname][0] - def getA(self, partname): - return self.EAs[partname][1] - def anzahl(self, partname, defaultv = 0): - return self._Anzahl.get(partname, defaultv) - - def get_SE(self, partname): - num_of_e = self.getE(partname) - zahl = self.anzahl(partname) - return num_of_e * zahl - def get_SA(self, partname): - num_of_a = self.getA(partname) - zahl = self.anzahl(partname) - return num_of_a * zahl - def get_SEA(self, partname): - return (self.get_SE(partname), self.get_SA(partname)) -###f dezentraleraufbau fehlt - def __repr__(self): - return repr(self._Anzahl) - - - def gesamt_E(self): - res = 0 - self.EAs - a = list(self._Anzahl.keys()) - a.sort() - with open('convert_.txt', 'w') as convert_file: - convert_file.write(json.dumps(self._Anzahl)) - for k,n in self._Anzahl.items(): - res += self.EAs[k][0] * n - return res - - def gesamt_A(self): - res = 0 - for k,n in self._Anzahl.items(): - res += self.EAs[k][1] * n - return res - - def Anzahl_notwendigen_Siemens_EAKarten(self): - SiemensS7_32DE = math.ceil(self.gesamt_E()/32) - SiemensS7_32DA = math.ceil(self.gesamt_A()/32) - return (SiemensS7_32DE, SiemensS7_32DA) - -class HW(): - #TODO "bedienstation_1fach_Not_Aus" keine Anzahl manuelle eingabe aber dann noch bezüge in mengengerüst und hardware; muss noch eingepflegt werden - mengen = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - "schaltschrankgehaeuse_b1x1200_zubehoer": 0, ###f bezug zu anzahl schaltschrank? - "schaltschrankgehaeuse_b2x800_zubehoer": 0, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 1, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 0, - "sps_simatic_s7_1517_3": 1, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - #"memory_card_2_gb": 0 - "et200_sp_ea_ebene":2, - "netzwerk_fernwartung":1, - "abgang_400v":2, - "abgang_24_v":2, - "anlagenrechner":1, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 0, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 0, - "zusaetzlicher_bildschirm":0, - #"schaltschrank":1, - - #"unterverteiler_fuer_1neuenhauser_pm":0, - "unterverteiler_fuer_1flyer":0, - "unterverteiler_fuer_2flyer":0, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":4, - "unterverteiler_fuer_puffer":2, - - #"unterverteiler_fuer_5_rsm_fa":0, - "korrektur_5_rsm_zusaetzlich_im_unterverteiler":-6, - - #"unterverteiler_fuer_10_rsm_fa":0, - "korrektur_10_rsm_zusaetzlich_im_unterverteiler":0, - - #"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":0, - "korrektur_3_rsm_zusaetzlich_im_unterverteiler":0, - - "unterverteiler_fuer_4_rsm_direct":0, - "korrektur_4_rsm_zusaetzlich_im_unterverteiler":0, - - #"unterverteiler_fuer_12_rsm_direct":0, - "korrektur_12_rsm_zusaetzlich_im_unterverteiler":0, - "unterverteiler_fuer_8_rsm_direct":0, - "korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler":0, - - #"busverteiler_6_rsm_direct":0, - "korrektur_6_rsm_zusaetzlich_im_busverteiler":0, - - #"busverteiler_8_rsm_direct":0, - "korrektur_8_rsm_zusaetzlich_im_busverteiler":0, - - #"antrieb_unidirektional_halbleiter":0, - #"antrieb_bidirektional_halbleiter":0, - "antrieb_unidirektional_schuetz":0, - "antrieb_bidirektional_schuetz":0, - "motorschutzschalter":0, - "wendeschuetzschaltung":0, - #"frequenzumrichter":0, - ## summe_motorstarter - - # "bedienstation_1fach_kpl":0, - # "bedienst_2fach_wechs_bcd_10f":0, - # "bedienstation_2fach_kpl":0, - # "halter_bedientableau_2fach":0, - # "bedienstation_3fach_kpl":0, - # "halter_bedientableau_3fach":0, - # "bedienstation_4fach_kpl":0, - # "halter_bedientableau_4fach":0, - # "bedienstation_6fach_kpl":0, - # "halter_bedienstation_6fach":0, - # "drucktaster_automatische_umfahrung":0, - # "halter_fuer_drucktaster":0, - ## summe_bedienstationen - - "ET200_SP":1, - #"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, - "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45":0, - #"et200_sp_eingangskarte_8_de":0, - "korrektur_et200_sp_eingangskarte_8_de":0, - "et200_sp_eingangskarte_16_de":0, - #"et200_sp_eingangskarte_8_do":0, - "korrektur_et200_sp_eingangskarte_8_do":0, - "et200_sp_eingangskarte_16_do":0, - # "et200_sp_base_unit_neue_last_mit_potKlemmen":0, - "korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen":0, - # "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen":0, - # "et200_sp_base_unit_neue_last":0, - "korrektur_et200_sp_base_unit_neue_last":-26, - # "et200_sp_base_unit_links_gebrueckt":0, - "korrektur_et200_sp_base_unit_links_gebrueckt":0, - - "SLIO":0, - # "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, - "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO":0, - # "slio_eingangskarte_4_de":0, - "korrektur_slio_eingangskarte_4_de":0, - # "slio_eingangskarte_8_de":0, - "korrektur_slio_eingangskarte_8_de":0, - # "slio_ausgangskarte_4_do":0, - "korrektur_slio_ausgangskarte_4_do":0, - # "slio_ausgangskarte_8_do":0, - "korrektur_slio_ausgangskarte_8_do":0, - # "slio_power_modul":0, - "korrektur_slio_power_modul":0, - # "slio_4_x_dc_24v_4_x_dc_0v":0, - "korrektur_slio_4_x_dc_24v_4_x_dc_0v":0, - # "slio_8_x_dc_24v":0, - # "slio_8_x_dc_0v":0, - "korrektur_slio_8_x_dc_0v":0, - - # MATERIAL VOR ORT - "movimot_fu_mit_anschaltung":0, - # "sensor_optisch_traverse":0, - "sensorhalter_ohne_sensor":0, - # "reflexionslichtschranke_rsm_direct":0, - # "stoppersensor_induktiv_mit_halter":0, - # "sensor_spulenpruefung_voll_leer":0, - # "seilzugschalter":0, - "seil_fuer_seilzugschalter":0, - # "blitzleuchte":0, - # "spulenumsetzstation":0, - # "sensorkabel_je_20m":0, - # "stopper_weichenkabel_je_5m":0, - # "motorkabel_je_30m":0, - "kabelpritschen_leitern_200_60":669, - "kabelpritsche_rsm_100_60":0, - "kabelpritsche_rsm_50_35":0, - # "klemmkasten_rsm":0, - # "klemmkasten_direct_in_rsm":0, - # "erdung":0, - "kleinteile_rohre_schellen_kabelbinder_ect":2, - # "kabel_fuer_klemmkasten_und_bts_60m":0, - # "kabel_fuer_1fach_bts_zug_wechseln":0, - # "zuleitung_75_m_unterverteiler_4x4mm2_400vac":0, - # "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, - "korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":0, - # "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":0, - "korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 0, - # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":0, - # "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":0, - # "profinetkabel":0, - "korrektur_profinetkabel":0, - # "schnittstellen_8x1mm2_30m":0, - } - - # Einzelteilpreise in € - ep = { - # Schaltschrank Einzelpreis - "schaltschrankgehaeuse_b1x800_zubehoer": 2000, # - "schaltschrankgehaeuse_b2x800_zubehoer": 4375, # 790821101 - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5135, # 790821102 - "sps_simatic_s7_cpu315_2_pn_dp": 1880, # 708003004 - "speicherkarte_fuer_sps_512_kb": 150, # 708003012 - "sps_simatic_s7_cpu317_2_pn_dp": 3324, # 708003007 - "speicherkarte_fuer_sps2_mb": 215, # 708003027 - "sps_simatic_s7_1515_2": 1927, # 790008100 - "sps_simatic_s7_1517_3": 3828, # 790008101 - "sps_simatic_s7_1518_4": 5402, # 6ES7518-4AP00-0AB0 - "sps_et200_1512sp": 623, # 709000003 - "memory_card_2_gb": 474, # 708015094 - "et200_sp_ea_ebene": 0, # 790009001 - "netzwerk_fernwartung": 750, # 790011001 - "abgang_400v": 250, # ---- - "abgang_24_v": 250, # ---- - "anlagenrechner": 1657, # 790011000 - "anlagenrechner_ohne_bildschirm": 1487, # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS - "pulteinbau_monitor_srline_rflat_24fhd": 1200, # 400009058 - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 350, # 400009057 - "netzwerk_display_adapter_lindy": 650, # - "zusaetzlicher_bildschirm": 750, # - # _summe_schaltschrank - # "unterverteiler_fuer_1neuenhauser_pm": 1000, # 790820210 - "unterverteiler_fuer_1flyer": 1000, # 790820207_A - "unterverteiler_fuer_2flyer": 2046, # 790820209_A - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine": 700, # 790820210 - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine": 1100, # 790820210 - "unterverteiler_fuer_puffer": 700, # 790820210_F - - "unterverteiler_fuer_5_rsm_fa": 700, # 790820210_D - # korrektur_1_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_10_rsm_fa": 900, # 790820210_F - # - - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar": 1000, # 790820209_C - # korrektur_3_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_4_rsm_direct": 5027, # 790820300 - # korrektur_4_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_12_rsm_direct": 7930, # 790820302 - # korrektur_12_rsm_zusaetzlich_im_unterverteiler - - "unterverteiler_fuer_8_rsm_direct": 6443, # 790820301 - # korrektur_8_rsm_zusaetzlich_im_unterverteiler - - "busverteiler_6_rsm_direct": 1578, # 790801002 - # korrektur_6_rsm_zusaetzlich_im_unterverteiler - - "busverteiler_8_rsm_direct": 1843, # 790801001 - # korrektur_8_rsm_zusaetzlich_im_unterverteiler - - "antrieb_unidirektional_halbleiter": 90, - "antrieb_bidirektional_halbleiter": 105, - "antrieb_unidirektional_schuetz": 0, - "antrieb_bidirektional_schuetz": 0, - "motorschutzschalter": 0, - "wendeschuetzschaltung": 75, - "frequenzumrichter": 250, - # summe_motorstarter - - "bedienstation_1fach_kpl": 59, - "bedienst_2fach_wechs_bcd_10f": 105, # 790002024 - "bedienstation_2fach_kpl": 65.63, # 790000020 - "halter_bedientableau_2fach": 42, # 825304006 - "bedienstation_3fach_kpl": 99, # 790000040 - "halter_bedientableau_3fach": 46, # 825304007 - "bedienstation_4fach_kpl": 121, # 790000045 - "halter_bedientableau_4fach": 52, # 825304003 - "bedienstation_6fach_kpl": 146, # 790000033 - "halter_bedientableau_6fach": 56, # 825304002 - "drucktaster_automatische_umfahrung": 28, - "halter_fuer_drucktaster": 33, - # summe_bedienstationen - - # ET200_SP - "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45": 198.90, # 709000006 - # "korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45" - "et200_sp_eingangskarte_8_de": 35, - # "korrektur_et200_sp_eingangskarte_8_de" # 709000021 - "et200_sp_eingangskarte_16_de": 58, # 709000022 - "et200_sp_eingangskarte_8_do": 46, # 709000031_A - "et200_sp_eingangskarte_16_do": 66.30, # 709000032 - "et200_sp_base_unit_neue_last_mit_potKlemmen": 23, # 709000014 - "et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen": 15, # 709000015 - "et200_sp_base_unit_neue_last": 19, # 709000011 - "et200_sp_base_unit_links_gebrueckt": 11, # 709000010 - - # SLIO - "et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO": 175, # 709000500 - "slio_eingangskarte_4_de": 31, # 709000510 - "slio_eingangskarte_8_de": 38, # 709000511 - "slio_ausgangskarte_4_do": 39, # 709000021 - "slio_ausgangskarte_8_do": 46, # 709000021 - "slio_power_modul": 18.22, # 709000014 - "slio_4_x_dc_24v_4_x_dc_0v": 18, # 709000015 - "slio_8_x_dc_24v": 18, # 709000011 - "slio_8_x_dc_0v": 13, # 709000010 - # Summe_material_in_ll - - # MATERIAL VOR ORT - "movimot_fu_mit_anschaltung": 550, - "sensor_optisch_traverse": 27, # 827072200 - "sensorhalter_ohne_sensor": 8, # 827072xxx - "reflexionslichtschranke_rsm_direct": 45, # 827072207 - "stoppersensor_induktiv_mit_halter": 63, # 827072205 - "sensor_spulenpruefung_voll_leer": 126, # 827072204 + 721000041 - "seilzugschalter": 150, - "seil_fuer_seilzugschalter": 0.40, - "blitzleuchte": 72, # 790000006 - "spulenumsetzstation": 0, - "sensorkabel_je_20m": 25, # 722001xxx - "stopper_weichenkabel_je_5m": 20, # 722001xxx - "motorkabel_je_30m": 26, - "kabelpritschen_leitern_200_60": 15, - "kabelpritsche_rsm_100_60": 12, # 715000020 - "kabelpritsche_rsm_50_35": 9, # 715003010 - "klemmkasten_rsm": 120, - "klemmkasten_direct_in_rsm": 122, # 790000703 - "erdung": 13, - "kleinteile_rohre_schellen_kabelbinder_ect": 750, - - "kabel_fuer_klemmkasten_und_bts_60m": 145, - "kabel_fuer_1fach_bts_zug_wechseln": 50, - "zuleitung_75_m_unterverteiler_4x4mm2_400vac": 146, # 725000050 - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc": 450, # 725000057 - "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc": 280, # 725000057 - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm": 145, # 725000007 - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm": 136, # 725000004 - "profinetkabel": 42, # 726001xxx - "schnittstellen_8x1mm2_30m": 35.4, # 725000019 - } - # Zeit pro Einheit in min - zpe_dienstl_hardwareplanung = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 4200, - "schaltschrankgehaeuse_b2x800_zubehoer": 4200, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 4800, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 0, - "sps_simatic_s7_1517_3": 0, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - "memory_card_2_gb": 0, - "et200_sp_ea_ebene":60, - "netzwerk_fernwartung":0, - "abgang_400v":60, - "abgang_24_v":60, - "anlagenrechner":0, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 60, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 30, - "zusaetzlicher_bildschirm":0, - "schaltschrank":0, - "unterverteiler_fuer_1neuenhauser_pm":1200, - "unterverteiler_fuer_1flyer":720, - "unterverteiler_fuer_2flyer":1020, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":810, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1110, - "unterverteiler_fuer_puffer":1200, - "unterverteiler_fuer_5_rsm_fa":960, - "unterverteiler_fuer_10_rsm_fa":1020, - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1200, - "unterverteiler_fuer_4_rsm_direct":3000, - "unterverteiler_fuer_12_rsm_direct":4800, - "unterverteiler_fuer_8_rsm_direct":3900, - "busverteiler_6_rsm_direct":600, - "busverteiler_8_rsm_direct":960 - } - zpe_e_werkstatt = { - "schaltschrankgehaeuse_b1x1200_zubehoer": 2400, - "schaltschrankgehaeuse_b2x800_zubehoer": 4800, - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer": 5160, - "sps_simatic_s7_cpu315_2_pn_dp": 0, - "speicherkarte_fuer_sps_512_kb": 0, - "sps_simatic_s7_cpu317_2_pn_dp": 0, - "speicherkarte_fuer_sps2_mb": 0, - "sps_simatic_s7_1515_2": 0, - "sps_simatic_s7_1517_3": 0, - "sps_simatic_s7_1518_4": 0, - "sps_et200_1512sp": 0, - "memory_card_2_gb": 0, - "et200_sp_ea_ebene":120, - "netzwerk_fernwartung":0, - "abgang_400v":90, - "abgang_24_v":90, - "anlagenrechner":0, - "anlagenrechner_ohne_bildschirm": 0, - "pulteinbau_monitor_srline_rflat_24fhd": 240, - "kurzhubtastatur_kbt06_mit_touchpad_uslayout": 0, - "netzwerk_display_adapter_lindy": 120, - "zusaetzlicher_bildschirm":0, - "schaltschrank":0, - "unterverteiler_fuer_1neuenhauser_pm":1200, - "unterverteiler_fuer_1flyer":1020, - "unterverteiler_fuer_2flyer":1200, - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine":1140, - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine":1200, - "unterverteiler_fuer_puffer":1200, - "unterverteiler_fuer_5_rsm_fa":1020, - "unterverteiler_fuer_10_rsm_fa":1140, - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar":1500, - "unterverteiler_fuer_4_rsm_direct":3600, - "unterverteiler_fuer_12_rsm_direct":4800, - "unterverteiler_fuer_8_rsm_direct":4200, - "busverteiler_6_rsm_direct":480, - "busverteiler_8_rsm_direct":480, - "antrieb_unidirektional_halbleiter":10, - "antrieb_bidirektional_halbleiter":10, - "antrieb_unidirektional_schuetz":0, - "antrieb_bidirektional_schuetz":0, - "motorschutzschalter":0, - "wendeschuetzschaltung":0, - "frequenzumrichter":0, - "bedienstation_1fach_kpl":25, - "bedienst_2fach_wechs_bcd_10f":90, - "bedienstation_2fach_kpl":30, - "halter_bedientableau_2fach":30, - "bedienstation_3fach_kpl":25, - "halter_bedientableau_3fach":30, - "bedienstation_4fach_kpl":30, - "halter_bedientableau_4fach":30, - "bedienstation_6fach_kpl":45, - "halter_bedienstation_6fach":30, - "drucktaster_automatische_umfahrung":15, - "halter_fuer_drucktaster":0, - } - Keys_of_Vor_Ort = [ - "movimot_fu_mit_anschaltung", - "sensor_optisch_traverse", - "sensorhalter_ohne_sensor", - "reflexionslichtschranke_rsm_direct", - "stoppersensor_induktiv_mit_halter", - "sensor_spulenpruefung_voll_leer", - "seilzugschalter", - "seil_fuer_seilzugschalter", - "blitzleuchte", - "spulenumsetzstation", - "sensorkabel_je_20m", - "stopper_weichenkabel_je_5m", - "motorkabel_je_30m", - "kabelpritschen_leitern_200_60", - "kabelpritsche_rsm_100_60", - "kabelpritsche_rsm_50_35", - "klemmkasten_rsm", - "klemmkasten_direct_in_rsm", - "erdung", - "kleinteile_rohre_schellen_kabelbinder_ect", - "kabel_fuer_klemmkasten_und_bts_60m", - "kabel_fuer_1fach_bts_zug_wechseln", - "zuleitung_75_m_unterverteiler_4x4mm2_400vac", - "zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", - "zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm", - "zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm", - "profinetkabel", - "korrektur_profinetkabel", - "schnittstellen_8x1mm2_30m" - ] - Keys_of_Schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm" - ] - def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]): - self._anzahl = anzahl - self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0) - self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b2x800_zubehoer", 0) - self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = self.mengen.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0) - self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = self.mengen.get("sps_simatic_s7_cpu315_2_pn_dp", 0) - self._anzahl["speicherkarte_fuer_sps_512_kb"] = self.mengen.get("speicherkarte_fuer_sps_512_kb", 0) - self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = self.mengen.get("sps_simatic_s7_cpu317_2_pn_dp", 0) - self._anzahl["speicherkarte_fuer_sps2_mb"] = self.mengen.get("speicherkarte_fuer_sps2_mb", 0) - self._anzahl["sps_simatic_s7_1515_2"] = self.mengen.get("sps_simatic_s7_1515_2", 0) - self._anzahl["sps_simatic_s7_1517_3"] = self.mengen.get("sps_simatic_s7_1517_3", 0) - self._anzahl["sps_simatic_s7_1518_4"] = self.mengen.get("sps_simatic_s7_1518_4", 0) - self._anzahl["sps_et200_1512sp"] = self.mengen.get("sps_et200_1512sp", 0) - - self._anzahl["memory_card_2_gb"] = anzahl.get("sps_simatic_s7_1518_4", 0) - - self._anzahl["et200_sp_ea_ebene"] = self.mengen.get("et200_sp_ea_ebene", 0) - self._anzahl["netzwerk_fernwartung"] = self.mengen.get("netzwerk_fernwartung", 0) - self._anzahl["abgang_400v"] = self.mengen.get("abgang_400v", 0) - self._anzahl["abgang_24_v"] = self.mengen.get("abgang_24_v", 0) - self._anzahl["anlagenrechner"] = self.mengen.get("anlagenrechner", 0) - self._anzahl["anlagenrechner_ohne_bildschirm"] = self.mengen.get("anlagenrechner_ohne_bildschirm", 0) - self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = self.mengen.get("pulteinbau_monitor_srline_rflat_24fhd", 0) - self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = self.mengen.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0) - self._anzahl["netzwerk_display_adapter_lindy"] = self.mengen.get("netzwerk_display_adapter_lindy", 0) - self._anzahl["zusaetzlicher_bildschirm"] = self.mengen.get("zusaetzlicher_bildschirm", 0) - self._anzahl["schaltschrank"] = eas.stueckzahl.get("schaltschrank") - self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("Neuenhauser-Putzmaschine") - - self._anzahl["unterverteiler_fuer_1flyer"] = self.mengen.get("unterverteiler_fuer_1flyer", 0) - self._anzahl["unterverteiler_fuer_2flyer"] = self.mengen.get("unterverteiler_fuer_2flyer", 0) - self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = self.mengen.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) - self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = self.mengen.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) - self._anzahl["unterverteiler_fuer_puffer"] = self.mengen.get("unterverteiler_fuer_puffer", 0) - - self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = self.mengen.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = self.mengen.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) - if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_5_rsm_fa"] = math.ceil(num_rsms/5) + anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0) - - if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False): - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_10_rsm_fa"] = math.ceil(num_rsms/10) + anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0) - else: - num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM") - self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3) - self._anzahl["unterverteiler_fuer_4_rsm_direct"] = anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) - self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") / 12) +\ - anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["unterverteiler_fuer_8_rsm_direct"] = anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) - self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) - self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0) - self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0) - - self._anzahl["antrieb_unidirektional_halbleiter"] = \ - mg.zusammenfassung().get("RA_uni") +\ - mg.zusammenfassung().get("RA_uni_abhebbar") +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung") - - self._anzahl["antrieb_bidirektional_halbleiter"] = mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_BI_abhebbar") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "RRA_bi_ohne_SPS_Ansteuerung") +\ - mg.get_value_of_object("flyer_f40_ejet_inc_putz", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_ohne_SPS-Ansteuerung") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi") +\ - mg.get_value_of_object("flyer_ejet", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("flyer_ejet", "RA_bi_abhebbar_unger_Schiene") +\ - mg.get_value_of_object("Puffer", "RA_bi_ungerade_Schiene") +\ - mg.get_value_of_object("Puffer", "Doppelstreckenantrieb") +\ - mg.get_value_of_object("rsm_fa", "RRA_bi") +\ - mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung") - - self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0) - - # # summe_motorstarter - self._anzahl["bedienstation_1fach_kpl"] = eas.anzahl("bedienstation_1fach_Not_Aus", 0) + eas.anzahl("bedienstation_einfach_Zug_Wechseln", 0) - self._anzahl["bedienst_2fach_wechs_bcd_10f"] = eas.anzahl("bedienst_2fach_wechs_bcd_10f", 0) - self._anzahl["bedienstation_2fach_kpl"] = eas.anzahl("bedienstation_zweifach_Not_Aus_Reset", 0) - self._anzahl["halter_bedientableau_2fach"] = anzahl.get("bedienstation_2fach_kpl", 0) - self._anzahl["bedienstation_3fach_kpl"] = eas.anzahl("bedienstation_3fach_kpl", 0) - self._anzahl["halter_bedientableau_3fach"] = anzahl.get("bedienstation_3fach_kpl", 0) - self._anzahl["bedienstation_4fach_kpl"] = eas.anzahl("bedienstation_4fach_kpl", 0) - self._anzahl["halter_bedientableau_4fach"] = anzahl.get("bedienstation_4fach_kpl", 0) - self._anzahl["bedienstation_6fach_kpl"] = eas.anzahl("bedienstation_6fach_kpl", 0) - self._anzahl["halter_bedientableau_6fach"] = anzahl.get("bedienstation_6fach_kpl", 0) - self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0) - self._anzahl["halter_fuer_drucktaster"] = anzahl.get("drucktaster_automatische_umfahrung", 0) - # # summe_bedienstationen - - self._anzahl["ET200_SP"] = self.mengen.get("ET200_SP", 0) - self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * 2 * anzahl.get("schaltschrank", 0) +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_puffer", 0) +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ - anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0)) - self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = self.mengen.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) - self._anzahl["et200_sp_eingangskarte_8_de"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 3 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 3 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 5 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 4 +\ - anzahl.get("korrektur_et200_sp_eingangskarte_8_de", 0) +\ - mg.zusammenfassung().get("Kreuzungsweiche")) - self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = self.mengen.get("korrektur_et200_sp_eingangskarte_8_de", 0) - self._anzahl["et200_sp_eingangskarte_16_de"] = self.mengen.get("et200_sp_eingangskarte_16_de", 0) - - self._anzahl["et200_sp_eingangskarte_8_do"] = \ - anzahl.get("ET200_SP", 0) *\ - (math.ceil((anzahl.get("et200_sp_ea_ebene", 0) *\ - anzahl.get("schaltschrank", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 9 / 1.5)) + - anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0) + - mg.zusammenfassung().get("Kreuzungsweiche") * 2) - self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = self.mengen.get("korrektur_et200_sp_eingangskarte_8_do", 0) - self._anzahl["et200_sp_eingangskarte_16_do"] = anzahl.get("et200_sp_eingangskarte_16_do", 0) - self._anzahl["et200_sp_base_unit_neue_last_mit_potKlemmen"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 + - anzahl.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0)) - self._anzahl["korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"] = self.mengen.get("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen", 0) - self._anzahl["et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"] = anzahl.get("ET200_SP", 0) * (math.ceil((anzahl.get("et200_sp_eingangskarte_8_de", 0) + - anzahl.get("et200_sp_eingangskarte_8_do", 0))) - - anzahl.get("et200_sp_base_unit_neue_last_mit_potKlemmen", 0)) - self._anzahl["korrektur_et200_sp_base_unit_neue_last"] = self.mengen.get("korrektur_et200_sp_base_unit_neue_last", 0) - self._anzahl["et200_sp_base_unit_neue_last"] = anzahl.get("ET200_SP", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0) * 2 + - anzahl.get("korrektur_et200_sp_base_unit_neue_last", 0)) - - self._anzahl["et200_sp_base_unit_links_gebrueckt"] = anzahl.get("ET200_SP", 0) * (math.ceil((anzahl.get("et200_sp_eingangskarte_16_de", 0) + - anzahl.get("et200_sp_eingangskarte_16_do", 0))) - - anzahl.get("et200_sp_base_unit_neue_last", 0) + - anzahl.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0)) - self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = self.mengen.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0) - - self._anzahl["SLIO"] = self.mengen.get("SLIO", 0) - - self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_puffer", 0) +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ - anzahl.get("unterverteiler_fuer_4_rsm_direct", 0) +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ - anzahl.get("busverteiler_6_rsm_direct", 0) +\ - anzahl.get("busverteiler_8_rsm_direct", 0) +\ - anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0)) - self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = self.mengen.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) - self._anzahl["slio_eingangskarte_4_de"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 6 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 13 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 9 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 15 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 7 +\ - anzahl.get("busverteiler_8_rsm_direct", 0) * 16 +\ - anzahl.get("korrektur_slio_eingangskarte_4_de", 0)) - self._anzahl["korrektur_slio_eingangskarte_4_de"] = self.mengen.get("korrektur_slio_eingangskarte_4_de", 0) - self._anzahl["slio_eingangskarte_8_de"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 3 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 3 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 3 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 5 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 2 +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 4 +\ - anzahl.get("busverteiler_8_rsm_direct", 0) * 8 +\ - anzahl.get("korrektur_slio_eingangskarte_8_de", 0)) - self._anzahl["korrektur_slio_eingangskarte_8_de"] = self.mengen.get("korrektur_slio_eingangskarte_8_de", 0) - self._anzahl["slio_ausgangskarte_4_do"] = anzahl.get("SLIO", 0) * (anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 12 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 7 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 14 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 22 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 16 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 22 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 24 +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 44 +\ - anzahl.get("busverteiler_8_rsm_direct", 0) * 16 +\ - anzahl.get("korrektur_slio_ausgangskarte_4_do", 0)) - self._anzahl["korrektur_slio_ausgangskarte_4_do"] = self.mengen.get("korrektur_slio_ausgangskarte_4_do", 0) - self._anzahl["slio_ausgangskarte_8_do"] = anzahl.get("SLIO", 0) * ((anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 +\ - anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 12 +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) * 14 +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 8 +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 14 +\ - anzahl.get("unterverteiler_fuer_puffer", 0) * 22 +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 16 +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 22 +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 16 +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) * 24 +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) * 44 +\ - anzahl.get("busverteiler_8_rsm_direct", 0) * 16) / 2 +\ - anzahl.get("korrektur_slio_ausgangskarte_8_do", 0)) - self._anzahl["korrektur_slio_ausgangskarte_8_do"] = self.mengen.get("korrektur_slio_ausgangskarte_8_do", 0) - self._anzahl["slio_power_modul"] = anzahl.get("SLIO", 0) * (anzahl.get("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0) * 1 +\ - anzahl.get("korrektur_slio_power_modul", 0)) - self._anzahl["korrektur_slio_power_modul"] = self.mengen.get("korrektur_slio_power_modul") - self._anzahl["slio_4_x_dc_24v_4_x_dc_0v"] = anzahl.get("SLIO", 0) * (math.ceil((anzahl.get("slio_eingangskarte_4_de") + - anzahl.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0)))) - self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = self.mengen.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0) - self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0) - self._anzahl["korrektur_slio_8_x_dc_0v"] = self.mengen.get("korrektur_slio_8_x_dc_0v") - self._anzahl["slio_8_x_dc_0v"] = anzahl.get("SLIO", 0) * ((anzahl.get("slio_eingangskarte_8_de", 0) + - (anzahl.get("slio_ausgangskarte_4_do", 0) / 2)) * 1 + - anzahl.get("korrektur_slio_8_x_dc_0v", 0)) - - - # # Summe_material_in_ll - - # # MATERIAL VOR ORT - - self._anzahl["movimot_fu_mit_anschaltung"] = anzahl.get("movimot_fu_mit_anschaltung", 0) - self._anzahl["sensor_optisch_traverse"] = eas.anzahl('Sensor_Traversenabfrage_optisch') - self._anzahl["sensorhalter_ohne_sensor"] = anzahl.get("sensorhalter_ohne_sensor", 0) - self._anzahl["reflexionslichtschranke_rsm_direct"] = eas.anzahl("Reflexionslichtschranke_RSM_DIRECT", 0) - self._anzahl["stoppersensor_induktiv_mit_halter"] = eas.anzahl("Sensor induktiv Flyer+PM") - self._anzahl["sensor_spulenpruefung_voll_leer"] = mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer", 0) - self._anzahl["seilzugschalter"] = eas.anzahl("Seilzugschalter", 0) - self._anzahl["seil_fuer_seilzugschalter"] = self.mengen.get("seil_fuer_seilzugschalter") - self._anzahl["blitzleuchte"] = eas.anzahl("Blitzleuchte_Stoerung", 0) - self._anzahl["spulenumsetzstation"] = eas.anzahl("Spulenumsetzstation", 0) - self._anzahl["sensorkabel_je_20m"] = mg.get_value_of_object("rsm_direct", "Lichtschranke_Traverse") +\ - mg.zusammenfassung().get("Sensor_optisch_Traverse") +\ - mg.zusammenfassung().get("Sensor_induktiv_Spulenalter_Zug_positionierung") +\ - mg.zusammenfassung().get("Sensor_Spulenprüfung_voll_leer") +\ - mg.zusammenfassung().get("Werma_Rundumleuchte_Störung") - self._anzahl["stopper_weichenkabel_je_5m"] = eas.get_SA("Weiche") +\ - eas.get_SA("Weiche_nach_PM_bipolar") +\ - eas.get_SA("gemeinsame_Weichenrueckstellung") +\ - eas.get_SA("Dreifach_Weiche_DIRECT") +\ - eas.get_SA("Kreuzungsweiche") +\ - eas.get_SA("Stopper") +\ - eas.get_SA("Ventil_RA_3_2_abhebbar") +\ - eas.get_SA("Ventil_Doppelstreckenantrieb_5_2_abhebbar") +\ - eas.get_SA("Blitzleuchte_Stoerung") - self._anzahl["motorkabel_je_30m"] = mg.zusammenfassung().get("RA_uni", 0) +\ - mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi", 0) +\ - mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ - mg.zusammenfassung().get("Doppelstreckenantrieb", 0) - self._anzahl["kabelpritschen_leitern_200_60"] = self.mengen.get("kabelpritschen_leitern_200_60", 0) - self._anzahl["kabelpritsche_rsm_100_60"] = anzahl.get("kabelpritsche_rsm_100_60", 0) - self._anzahl["kabelpritsche_rsm_50_35"] = anzahl.get("kabelpritsche_rsm_50_35", 0) - self._anzahl["klemmkasten_rsm"] = mg.zusammenfassung().get("klemmkasten_rsm", 0) - self._anzahl["klemmkasten_direct_in_rsm"] = eas.anzahl("bedienstation_zweifach_Wechs_BCD_10f", 0) - self._anzahl["zuleitung_75_m_unterverteiler_4x4mm2_400vac"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_puffer", 0) +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ - anzahl.get("busverteiler_8_rsm_direct", 0) - self._anzahl["erdung"] = anzahl.get("zuleitung_75_m_unterverteiler_4x4mm2_400vac", 0) +\ - anzahl.get("motorkabel_je_30m", 0) / 2 - self._anzahl["kleinteile_rohre_schellen_kabelbinder_ect"] = self.mengen.get("kleinteile_rohre_schellen_kabelbinder_ect", 0) - self._anzahl["kabel_fuer_klemmkasten_und_bts_60m"] = anzahl.get("bedienst_2fach_wechs_bcd_10f", 0) +\ - anzahl.get("bedienstation_2fach_kpl", 0) +\ - anzahl.get("halter_bedientableau_2fach", 0) +\ - anzahl.get("bedienstation_3fach_kpl", 0) +\ - anzahl.get("halter_bedientableau_3fach", 0) +\ - anzahl.get("halter_bedientableau_4fach", 0) +\ - anzahl.get("bedienstation_4fach_kpl", 0) +\ - anzahl.get("bedienstation_6fach_kpl", 0) - self._anzahl["kabel_fuer_1fach_bts_zug_wechseln"] = anzahl.get("bedienstation_1fach_kpl", 0) - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = self.mengen.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) - self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_puffer", 0) +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ - anzahl.get("busverteiler_8_rsm_direct", 0) +\ - anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) - self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer", 0) +\ - anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) +\ - anzahl.get("unterverteiler_fuer_puffer", 0) +\ - anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) +\ - anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) +\ - anzahl.get("unterverteiler_fuer_12_rsm_direct", 0) +\ - anzahl.get("unterverteiler_fuer_8_rsm_direct", 0) +\ - anzahl.get("busverteiler_8_rsm_direct", 0) +\ - anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) - if self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] > 0 and self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] > 0: - raise Exception("12x4 and 12x2.5 mustn't be used simultanously") - self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) - if 'direct' in mg.get_deckblatt_value("SYSTEM"): - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = mg.get_deckblatt_value("RSM") - else: - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"] = 0 - if 'direct' in mg.get_deckblatt_value("SYSTEM"): - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = mg.get_deckblatt_value("RSM") +\ - anzahl.get("klemmkasten_rsm", 0) - else: - self._anzahl["zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"] = anzahl.get("klemmkasten_rsm", 0) - self._anzahl["profinetkabel"] = anzahl.get("sps_simatic_s7_1517_3", 0) +\ - anzahl.get("sps_simatic_s7_1515_2", 0) +\ - anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0) +\ - anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0) +\ - anzahl.get("sps_et200_1512sp", 0) +\ - anzahl.get("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0) +\ - anzahl.get("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0) +\ - anzahl.get("korrektur_profinetkabel", 0) - self._anzahl["korrektur_profinetkabel"] = anzahl.get("korrektur_profinetkabel", 0) - self._anzahl["schnittstellen_8x1mm2_30m"] = mg.zusammenfassung().get("Interface_Putzmaschine", 0) +\ - mg.zusammenfassung().get("Interface_Doffer", 0) - - - # remove all elements with the number of 0. They are of no use - l = [] - for k,v in self._anzahl.items(): - if v == 0: - l.append(k) - for item in l: - del self._anzahl[item] - - def __repr__(self): - return repr(self._anzahl) - - def anzahl(self, partname, default_val = 0): - return self._anzahl.get(partname, default_val) - - def summe_gesamt(self): - """ - :return: price sum of all given items within self._anzahl - """ - return (self.summe_in_LL() + self.summe_vorort()) - - def summe_in_LL(self): - res = 0 - for k,anz in self._anzahl.items(): - if k not in self.ep: - continue - if k in self.Keys_of_Schaltschrank: - preis = anz * self.ep[k] * self.anzahl("schaltschrank") - if k not in self.Keys_of_Schaltschrank and k not in self.Keys_of_Vor_Ort: - preis = anz * self.ep[k] - res += preis - return res - - def summe_vorort(self): - res = 0 - for k,anz in self._anzahl.items(): - if k in self.Keys_of_Vor_Ort: - preis = anz * self.ep[k] - res += preis - return res - - def summe_h_unterverteiler_hardware(self): - """ gibt dies Summer der Stunden zur Montage der Unterverteiler hardware zurück""" - keys_unterverteiler = [ - "unterverteiler_fuer_1neuenhauser_pm", - "unterverteiler_fuer_1flyer", - "unterverteiler_fuer_2flyer", - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_puffer", - "unterverteiler_fuer_5_rsm_fa", - "unterverteiler_fuer_10_rsm_fa", - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", - "unterverteiler_fuer_4_rsm_direct", - "unterverteiler_fuer_12_rsm_direct", - "unterverteiler_fuer_8_rsm_direct", - "busverteiler_6_rsm_direct", - "busverteiler_8_rsm_direct", - ] - zeiten = dict() - res = 0 - for k in keys_unterverteiler: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 - zeiten[k] = dauer - res += dauer - return res - - def summe_h_unterverteiler_e_werkstatt(self): - """ gibt dies Summer der Stunden zur Montage der Unterverteiler E-Werkstatt zurück""" - keys_unterverteiler = [ - "unterverteiler_fuer_1neuenhauser_pm", - "unterverteiler_fuer_1flyer", - "unterverteiler_fuer_2flyer", - "unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", - "unterverteiler_fuer_puffer", - "unterverteiler_fuer_5_rsm_fa", - "unterverteiler_fuer_10_rsm_fa", - "unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", - "unterverteiler_fuer_4_rsm_direct", - "unterverteiler_fuer_12_rsm_direct", - "unterverteiler_fuer_8_rsm_direct", - "busverteiler_6_rsm_direct", - "busverteiler_8_rsm_direct", - ] - res = 0 - for k in keys_unterverteiler: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - - def get_h_of(self, partname): - return (self._anzahl.get(partname, 0) * self.zpe_e_werkstatt.get(partname) / 60) - def summe_h_bedienstationen(self): - """ gibt die Summer der Stunden zur Montage der Bedienstationen zurück""" - keys_bedienstationen = [ - "bedienstation_1fach_kpl", - "bedienst_2fach_wechs_bcd_10f", - "bedienstation_2fach_kpl", - "halter_bedientableau_2fach", - "bedienstation_3fach_kpl", - "halter_bedientableau_3fach", - "bedienstation_4fach_kpl", - "halter_bedientableau_4fach", - "bedienstation_6fach_kpl", - "halter_bedienstation_6fach", - "drucktaster_automatische_umfahrung", - "halter_fuer_drucktaster" - ] - - res = 0 - for k in keys_bedienstationen: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - def summe_h_schaltschrank_hardware(self): - """ gibt die Summer der Stunden zur Montage des Schaltschranks Hardware zurück""" - keys_schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm", - ] - - res = 0 - for k in keys_schaltschrank: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_dienstl_hardwareplanung[k] / 60 - res += dauer - return res - def summe_h_schaltschrank_e_werkstatt(self): - """ gibt die Summer der Stunden zur Montage des Schaltschranks in der E-Werkstatt zurück""" - keys_schaltschrank = [ - "schaltschrankgehaeuse_b1x1200_zubehoer", - "schaltschrankgehaeuse_b2x800_zubehoer", - "schaltschrankgehaeuse_b1x1200+1x800_zubehoer", - "sps_simatic_s7_cpu315_2_pn_dp", - "speicherkarte_fuer_sps_512_kb", - "sps_simatic_s7_cpu317_2_pn_dp", - "speicherkarte_fuer_sps2_mb", - "sps_simatic_s7_1515_2", - "sps_simatic_s7_1517_3", - "sps_simatic_s7_1518_4", - "sps_et200_1512sp", - "memory_card_2_gb", - "et200_sp_ea_ebene", - "netzwerk_fernwartung", - "abgang_400v", - "abgang_24_v", - "anlagenrechner", - "anlagenrechner_ohne_bildschirm", - "pulteinbau_monitor_srline_rflat_24fhd", - "kurzhubtastatur_kbt06_mit_touchpad_uslayout", - "netzwerk_display_adapter_lindy", - "zusaetzlicher_bildschirm", - ] - - res = 0 - for k in keys_schaltschrank: - anz = self._anzahl.get(k, 0) - dauer = anz * self.zpe_e_werkstatt[k] / 60 - res += dauer - return res - def summe_h_zeiten_hardwareplanung(self): - summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware() - summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware() - return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware) - -class Dienstleistung(): - # Angaben in h - mengen = { - "Pflichtenheft_Autom_Schnittstellen": 0, - - ## Hardwareplanung - #"Erstellung_Steuerungslayout": 1, - #"Schaltplanerstellung_incl_Korrekturen": 1, - #"Projektkoordination": 1, - #"Materialdispo": 1, - #"Abstimmung_mit_E_Werkstatt": 1, - #"Erstellen_E_Montageunterlagen": 1, - - # Test_und_Installation - # "PC_Installation": 0, - "Oberfläche_Simulation": 0, - "SPS_Test_im_Haus_Simulation": 0, - ## Dokumentation - "Bedienerhandbuch": 8, - "SPS_Doku": 0, - "PC_Doku": 0, - - ## Elektrowerkstatt - #Schaltschrankbau - #Unterverteilerbau - #Klemmkastenbau_je_2h - #Bedientableaubau - "Vormontage_im_Haus": 0 - } - - def __init__(self, Anzahl_DL, hw: type[HW]): - # hier sind die Dienstleistungen in Stunden gegeben, bzw. werden errechnet - - self._Hours = Anzahl_DL - - # "Pflichtenheft_Autom_Schnittstellen": 0, - - ## Hardwareplanung - FaktorLayout = 0.25 - FaktorSchaltplan = 0.6 - FaktorProjektkoord = 0.15 - FaktorDispo = 0.2 - FaktorAbstimmung = 0.05 - FaktorMontageUnterlagen = 0.05 - self._Hours["Erstellung_Steuerungslayout"] = hw.summe_h_zeiten_hardwareplanung() * FaktorLayout - self._Hours["Schaltplanerstellung_incl_Korrekturen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorSchaltplan - self._Hours["Projektkoordination"] = hw.summe_h_zeiten_hardwareplanung() * FaktorProjektkoord - self._Hours["Materialdispo"] = hw.summe_h_zeiten_hardwareplanung() * FaktorDispo - self._Hours["Abstimmung_mit_E_Werkstatt"] = hw.summe_h_zeiten_hardwareplanung() * FaktorAbstimmung - self._Hours["Erstellen_E_Montageunterlagen"] = hw.summe_h_zeiten_hardwareplanung() * FaktorMontageUnterlagen - # Test_und_Installation - self._Hours["PC_Installation"] = hw.anzahl("anlagenrechner") * 8 * hw.anzahl("schaltschrank", 0) - - self._Hours["Oberfläche_Simulation"] = self.anzahl("Oberfläche_Simulation") #TODO was heisst hier bedingt ändern? - self._Hours["SPS_Test_im_Haus_Simulation"] = self.anzahl("SPS_Test_im_Haus_Simulation") - ## Dokumentation - self._Hours["Bedienerhandbuch"] = self.anzahl("Bedienerhandbuch") - self._Hours["SPS_Doku"] = self.anzahl("SPS_Doku") - self._Hours["PC_Doku"] = self.anzahl("PC_Doku") - - ## Elektrowerkstatt - self._Hours["Schaltschrankbau"] = hw.summe_h_schaltschrank_e_werkstatt() - self._Hours["Unterverteilerbau"] = hw.summe_h_unterverteiler_e_werkstatt() - - self._Hours["Klemmkastenbau_je_2h"] = (hw.anzahl("klemmkasten_rsm") + - hw.anzahl("klemmkasten_direct_in_rsm")) * 2 - self._Hours["Bedientableaubau"] = round(hw.anzahl("bedienstation_1fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_1fach_kpl") / 60 +\ - hw.anzahl("bedienst_2fach_wechs_bcd_10f") * hw.zpe_e_werkstatt.get("bedienst_2fach_wechs_bcd_10f") / 60 +\ - hw.anzahl("bedienstation_2fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_2fach_kpl") / 60 +\ - hw.anzahl("bedienstation_3fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_3fach_kpl") / 60 +\ - hw.anzahl("bedienstation_4fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_4fach_kpl") / 60 +\ - hw.anzahl("bedienstation_6fach_kpl") * hw.zpe_e_werkstatt.get("bedienstation_6fach_kpl") / 60 +\ - hw.anzahl("drucktaster_automatische_umfahrung") * hw.zpe_e_werkstatt.get("drucktaster_automatische_umfahrung"), 2) - self._Hours["Vormontage_im_Haus"] = self.anzahl("Vormontage_im_Haus") - def __repr__(self): - return repr(self._Hours) - - def anzahl(self, partname, default_val = 0): - return self.mengen.get(partname, default_val) - def get_hours_of(self, dlname): - return self._Hours.get(dlname, 0) - - def summe_stunden_dienstleistung_in_landsberg(self): - """returns hours necessary""" - hours_necessary = self.stunden_hardwareplanung_test_installation() +\ - self.stunden_elektrowerkstatt() - return hours_necessary - def stunden_hardwareplanung_test_installation(self): - """return hours of hardware-bucheting, test and installation""" - keys_hardwareplanung = [ - "Pflichtenheft_Autom_Schnittstellen", - "Erstellung_Steuerungslayout", - "Schaltplanerstellung_incl_Korrekturen", - "Projektkoordination", - "Materialdispo", - "Abstimmung_mit_E_Werkstatt", - "Erstellen_E_Montageunterlagen", - "PC_Installation", - "Oberfläche_Simulation", - "SPS_Test_im_Haus_Simulation" - ] - res = 0 - for k in keys_hardwareplanung: - dauer = self.get_hours_of(k) - res += dauer - return res - def stunden_elektrowerkstatt(self): - keys_elektrowerkstatt = [ - "Schaltschrankbau", - "Unterverteilerbau", - "Klemmkastenbau_je_2h", - "Bedientableaubau", - "Vormontage_im_Haus" - ] - res = 0 - for k in keys_elektrowerkstatt: - dauer = self.get_hours_of(k) - res += dauer - return res - - def stunden_elektro_Landsberg(self): - return 0 - -#EMO -class EMO(): - montagezeiten = { - "Schaltschrank_aufstellen": 6.0, #(h/St) - "Unterverteiler_montieren": 3.0, #(h/St) - "Pritsche_montieren_umbauen_demontieren": 6.0, #(m/h) - "Pritsche_in_RSM_montieren": 21.0, - "Motor_verdrahten_und_anschliessen": 0.9, #(h/Motor) - "Tableau_befestigen_und_anschliessen": 0.75, #(h/St) - "Schnittstelle_Flyer_Putzmaschine": 1.5, #(h/St) - "Sensoren_montieren": 0.45, #(h/St) - "Seilzugschalter_installieren": 4.0, #(h/St) - "Blitzleuchte_installieren": 0.5, #(h/St) - "Weiche_Stopper_anschliessen": 0.35, #(h/St) ###f blitzleuchte und weiche vertauscht? - "Erdung": 0.5, #(h) - } - def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]): - #für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt - mengen = { - "Schaltschrank_aufstellen": 0, - "Unterverteiler_montieren": 0, - "Pritsche_montieren_umbauen_demontieren": 0, - "Pritsche_in_RSM_montieren": 0, - "Motor_verdrahten_und_anschliessen": 0, - "Tableau_befestigen_und_anschliessen": 0, - "Schnittstelle_Flyer_Putzmaschine": 0, - "Sensoren_montieren": 0, - "Seilzugschalter_installieren": 0, - "Blitzleuchte_installieren": 0, - "Weiche_Stopper_anschliessen": 0, - "Erdung": 0, - } - self._Mengen = {} - self._Mengen["Schaltschrank_aufstellen"] = hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer") +\ - hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer") +\ - hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer") - self._Mengen["Unterverteiler_montieren"] = hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") - self._Mengen["Pritsche_montieren_umbauen_demontieren"] = hw.anzahl("kabelpritschen_leitern_200_60") - self._Mengen["Pritsche_in_RSM_montieren"] = hw.anzahl("kabelpritsche_rsm_100_60") - - self._Mengen["Motor_verdrahten_und_anschliessen"] = mg.zusammenfassung().get("Gesamtanzahl_Antriebe",0) - self._Mengen["Tableau_befestigen_und_anschliessen"] = \ - hw.anzahl( "bedienstation_1fach_kpl") +\ - hw.anzahl("bedienst_2fach_wechs_bcd_10f") +\ - hw.anzahl("bedienstation_2fach_kpl") +\ - hw.anzahl("halter_bedientableau_2fach") +\ - hw.anzahl("bedienstation_3fach_kpl") +\ - hw.anzahl("halter_bedientableau_3fach") +\ - hw.anzahl("bedienstation_4fach_kpl") +\ - hw.anzahl("halter_bedientableau_4fach") +\ - hw.anzahl("bedienstation_6fach_kpl") +\ - hw.anzahl("halter_bedientableau_6fach") +\ - hw.anzahl("drucktaster_automatische_umfahrung") - - self._Mengen["Schnittstelle_Flyer_Putzmaschine"] = ea.anzahl("Schnittstelle_Flyer_ElectroJet") +\ - ea.anzahl("Schnittstelle_Putzmaschine_Neuenhauser") - - self._Mengen["Sensoren_montieren"] = hw.anzahl("sensorkabel_je_20m") - self._Mengen["Seilzugschalter_installieren"] = ea.anzahl("Seilzugschalter") - self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung") - self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m") - self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10 - - def dauer_emo(self): - keys_tätigkeiten_1 = [ - "Unterverteiler_montieren", - "Sensoren_montieren", - "Seilzugschalter_installieren", - "Blitzleuchte_installieren", - "Weiche_Stopper_anschliessen", - "Erdung", - "Schaltschrank_aufstellen", - "Motor_verdrahten_und_anschliessen", - "Tableau_befestigen_und_anschliessen", - "Schnittstelle_Flyer_Putzmaschine" - ] - keys_1 = 0 - for k in keys_tätigkeiten_1: - dauer = self.montagezeiten.get(k) * self._Mengen.get(k) - keys_1 += dauer - - keys_tätigkeiten_2 = [ - "Pritsche_montieren_umbauen_demontieren", - "Pritsche_in_RSM_montieren" - ] - keys_2 = 0 - for k in keys_tätigkeiten_2: - dauer = self._Mengen.get(k) / self.montagezeiten.get(k) - keys_2 += dauer - - - return math.ceil((keys_1 + keys_2)) - def mehraufwand_emo(self): - return (self.dauer_emo() * 1.1) - -class Anschlussl(): - mengen = { - #auskommentiert, was später berechnet wird - "Anschlussspannung":400, #Volt - "Motor_Art":0.12, #kilo Watt - #"Anzahl_Motor":48, - "Antrieb":0.12, #kilo Watt - "Strom_Motor":0.55, #Ampere - #"Summe_Strom_Motor":26.4, - "cos_phi":0.77, - "Versorgung_SPS_und_Peripherie":3, #Ampere - #"Summe_Strom_Motot_SPS_Peripherie":29.4, #Ampere - #GZE - "GZE_Faktor":0.5, - "Res_Faktor":0.1, - #Res - #gesamtstrom - #spannung - #x strom - "x_Wurzel_3":1.732 - #leistung - #gesamtanschlussleistung - } - def __init__(self, anzahl:dict, mg: type[MG]): - self._ANZAHL = anzahl - self._ANZAHL["Anzahl_Motor"] = mg.zusammenfassung().get("RA_uni", 0) +\ - mg.zusammenfassung().get("RA_uni_abhebbar", 0) +\ - mg.zusammenfassung().get("RA_uni_ohne_SPS_Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi", 0) +\ - mg.zusammenfassung().get("RA_bi_ohne_SPS-Ansteuerung", 0) +\ - mg.zusammenfassung().get("RA_bi_abhebbar", 0) +\ - mg.zusammenfassung().get("Doppelstreckenantrieb", 0) - self._ANZAHL["Summe_Strom_Motor"] = self.mengen.get("Strom_Motor") *\ - anzahl.get("Anzahl_Motor") - self._ANZAHL["Summe_Strom_Motor_SPS_Peripherie"] = anzahl.get("Summe_Strom_Motor") +\ - self.mengen.get("Versorgung_SPS_und_Peripherie") - self._ANZAHL["GZF"] = anzahl.get("Summe_Strom_Motor") *\ - self.mengen.get("GZE_Faktor") +\ - self.mengen.get("Versorgung_SPS_und_Peripherie") - self._ANZAHL["Res"] = anzahl.get("GZF") *\ - self.mengen.get("Res_Faktor") - self._ANZAHL["Gesamtstrom"] = anzahl.get("GZF") +\ - anzahl.get("Res") - self._ANZAHL["Spannung"] = self.mengen.get("Anschlussspannung") - self._ANZAHL["x_Strom"] = anzahl.get("Gesamtstrom") - self._ANZAHL["Leistung"] = anzahl.get("Spannung") *\ - anzahl.get("x_Strom") *\ - self.mengen.get("x_Wurzel_3") / 1000 - self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung"))) - -class Ergebnis(): ###f was sind die grünen zahlen auf dem deckblatt? - preis_kostenart_h = { - "E_Werkstatt": 32, - "Schaltschrankbau_extern_Mehrkosten": 0, #Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel: extern = 50€ intern 32 € = Wert: 18€ - "Dienstleistung_in_LL": 45, #aufwandeduzierung oder mehraufwand - "Pflichtenheft": 60, - "SPS_Programmierung": 75, #aufwandreduzierung oder mehraufwand softwareerstellung - "PC_Programmierung_Visualisierung": 60, - "Montage_elektrisch": 36, - "Inbetriebnahmetest_Hardware_durch_Montage": 36, - "SPS_Inbetriebsetzung": 75, - "PC_Inbetriebsetzung": 60, - "Inbetriebnahmeunterstützung_durch_Montage": 36, - "Dokumentation": 35, - "Bedienungsanleitung_Emmert": 75, - "Schulung_vor_Ort_beim_Kunden": 36, - "Abnahme": 36, - "SPS_Anlagenbetreuung": 75, - "PC_Anlagenbetreuung": 60, - "Anlagenbetreuung_durch_Montage": 36 - } - def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]): - self._anzahl = anzahl_h - self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt() - self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\ - hw.get_h_of("unterverteiler_fuer_1flyer") +\ - hw.get_h_of("unterverteiler_fuer_2flyer") +\ - hw.get_h_of("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine") +\ - hw.get_h_of("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine") +\ - hw.get_h_of("unterverteiler_fuer_puffer") +\ - hw.get_h_of("unterverteiler_fuer_10_rsm_fa") +\ - hw.get_h_of("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") - self._anzahl["Dienstleistung_in_LL"] = dl.stunden_hardwareplanung_test_installation() - self._anzahl["Pflichtenheft"] = 0 ###f immer 0? - self._anzahl["SPS_Programmierung"] = 0 ###f immer reduziert? - self._anzahl["PC_Programmierung_Visualisierung"] = 0 ###f immer reduziert? - self._anzahl["Montage_elektrisch"] = emo.mehraufwand_emo() ###f mehraufwand einzeln nötig oder reicht am Schluss zur Übersichtlichkeit? - self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch") * 0.1 - self._anzahl["SPS_Inbetriebsetzung"] = 130 ###f immer 130 oder immer extra anzugeben? Lässt sich das evtl vereinfachen? - self._anzahl["PC_Inbetriebsetzung"] = 0 ###f immer 0 oder immer manuell anzuegebn? - self._anzahl["Inbetriebnahmeunterstützung_durch_Montage"] = anzahl_h.get("SPS_Inbetriebsetzung") * 1 ###f prozentualer anteil der inbetriebnahmeunterstützung durch montage###f bei PC Progammierung auch % wird aber nicht verwendet; absicht? - self._anzahl["Dokumentation"] = dl.get_hours_of("Bedienerhandbuch") - self._anzahl["Bedienungsanleitung_Emmert"] = dl.get_hours_of("SPS_Doku") - self._anzahl["Schulung_vor_Ort_beim_Kunden"] = 0 ###f immer manuell? - self._anzahl["Abnahme"] = 0 ###f immer manuell? - self._anzahl["SPS_Anlagenbetreuung"] = 0 ###f immer manuell? - self._anzahl["PC_Anlagenbetreuung"] = 0 ###f immer manuell? - self._anzahl["Anlagenbetreuung_durch_Montage"] = 0 ###f immer manuell? - def get_sum_of_costs(self, hw: type[HW]): - keys_costs = { - "E_Werkstatt", - "Schaltschrankbau_extern_Mehrkosten", - "Dienstleistung_in_LL", - "Pflichtenheft", - "SPS_Programmierung", - "PC_Programmierung_Visualisierung", - "Montage_elektrisch", - "Inbetriebnahmetest_Hardware_durch_Montage", - "SPS_Inbetriebsetzung", - "PC_Inbetriebsetzung", - "Inbetriebnahmeunterstützung_durch_Montage", - "Dokumentation", - "Bedienungsanleitung_Emmert", - "Schulung_vor_Ort_beim_Kunden", - "Abnahme", - "SPS_Anlagenbetreuung", - "PC_Anlagenbetreuung", - "Anlagenbetreuung_durch_Montage" - } - res = 0 - for k in keys_costs: - cost = self._anzahl[k] * self.preis_kostenart_h[k] - res += cost - return (res + hw.summe_vorort() + hw.summe_in_LL()) - def get_cost_of(self, partname): - return (self._anzahl.get(partname) * self.preis_kostenart_h.get(partname)) -class TestObjectMethods(unittest.TestCase): - - def test_eas(self): - # eas.gesamt_E() - # eas.gesamt_A() - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - - # Prüfe die Summe aller Eingänge und Ausgänge für jeden Elementtyp - # Bedienstation - self.assertEqual(eas.get_SEA('bedienstation_1fach_Not_Aus'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_einfach_Zug_Wechseln'), (14, 14)) - self.assertEqual(eas.get_SEA('bedienstation_automatische_Umfahrung'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_zweifach_Wechs_BCD_10f'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienstation_zweifach_Not_Aus_Reset'), (20, 20)) - self.assertEqual(eas.get_SEA('bedienst_dreifach'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienst_vierfach'), (0, 0)) - self.assertEqual(eas.get_SEA('bedienst_sechsfach'), (0, 0)) - self.assertEqual(eas.get_SEA('EAs_Unterverteiler_direct'), (0, 0)) - - # Ermittlung Mengengerüst - self.assertEqual(eas.get_SEA('Sensor_Traversenabfrage_optisch'), (68, 0)) - self.assertEqual(eas.get_SEA('Reflexionslichtschranke_RSM_DIRECT'), (0, 0)) - self.assertEqual(eas.get_SEA('Sensor induktiv Flyer+PM'), (4, 0)) - self.assertEqual(eas.get_SEA('Seilzugschalter'), (0, 0)) - - self.assertEqual(eas.get_SEA('Weiche'), (0, 35)) - self.assertEqual(eas.get_SEA('Weiche_nach_PM_bipolar'), (0, 0)) - self.assertEqual(eas.get_SEA('gemeinsame_Weichenrueckstellung'), (0, 0)) - self.assertEqual(eas.get_SEA('Dreifach_Weiche_DIRECT'), (0, 0)) - self.assertEqual(eas.get_SEA('Kreuzungsweiche'), (0, 10)) - self.assertEqual(eas.get_SEA('Stopper'), (0, 0)) - self.assertEqual(eas.get_SEA('Ventil_RA_3_2_abhebbar'), (0, 4)) - self.assertEqual(eas.get_SEA('Ventil_Doppelstreckenantrieb_5_2_abhebbar'), (0, 12)) - self.assertEqual(eas.get_SEA('Blitzleuchte_Stoerung'), (0, 6)) - - self.assertEqual(eas.get_SEA('Schnittstelle_Flyer_ElectroJet'), (8, 8)) - self.assertEqual(eas.get_SEA('Schnittstelle_Putzmaschine_Neuhauser'), (0, 0)) - self.assertEqual(eas.get_SEA('FEldbux_UV_EinAusgang'), (14, 7)) - - self.assertEqual(eas.get_SEA('Spulenumsetzstation'), (0, 0)) - - self.assertEqual(eas.get_SEA('RA_unidirektional'), (0, 4)) - self.assertEqual(eas.get_SEA('RA_unidirektional_abhebbar'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_unidirektional_mit_gemeinsamer_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_unidirektional_ohne_SPS_Ansteuerung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_bidirektional'), (0, 60)) - self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar'), (0, 8)) - self.assertEqual(eas.get_SEA('RA_bidirektional_abhebbar_gemeinsWend'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_bidirektional_ohne_SPS_Ansteuerung'), (0, 0)) - self.assertEqual(eas.get_SEA('RA_in_RSM_bidirektional'), (0, 0)) - self.assertEqual(eas.get_SEA('Doppelstreckenantrieb'), (0, 12)) - self.assertEqual(eas.get_SEA('Doppelstreckenantriebgemeinsame_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('gemeinsame_Wendung'), (0, 0)) - self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) - - - self.assertEqual(eas.gesamt_E(), 323) - self.assertEqual(eas.gesamt_A(), 557) - - self.assertEqual(eas.get_SEA('Frequenzumrichter'), (0, 0)) - (eingänge, ausgänge) = eas.Anzahl_notwendigen_Siemens_EAKarten() - self.assertEqual(eingänge, 11) - self.assertEqual(ausgänge, 19) - - def test_HW(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - - Anzahl_HW = {} - - hw = HW(Anzahl_HW, mg, eas) - - - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200_zubehoer"), 0) - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b2x800_zubehoer"), 0) - self.assertEqual(hw.anzahl("schaltschrankgehaeuse_b1x1200+1x800_zubehoer"), 1) - self.assertEqual(hw.anzahl("sps_simatic_s7_cpu315_2_pn_dp"), 0) - self.assertEqual(hw.anzahl("speicherkarte_fuer_sps_512_kb"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_cpu317_2_pn_dp"), 0) - self.assertEqual(hw.anzahl("speicherkarte_fuer_sps2_mb"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_1515_2"), 0) - self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 1) - self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0) - self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0) - self.assertEqual(hw.anzahl("memory_card_2_gb"), 0) - self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 2) - self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1) - self.assertEqual(hw.anzahl("abgang_400v"), 2) - self.assertEqual(hw.anzahl("abgang_24_v"), 2) - self.assertEqual(hw.anzahl("anlagenrechner"), 1) - self.assertEqual(hw.anzahl("anlagenrechner_ohne_bildschirm"), 0) - self.assertEqual(hw.anzahl("pulteinbau_monitor_srline_rflat_24fhd"), 0) - self.assertEqual(hw.anzahl("kurzhubtastatur_kbt06_mit_touchpad_uslayout"), 0) - self.assertEqual(hw.anzahl("netzwerk_display_adapter_lindy"), 0) - self.assertEqual(hw.anzahl("zusaetzlicher_bildschirm"), 0) - self.assertEqual(hw.anzahl("schaltschrank"), 1) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1neuenhauser_pm"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"), 1) - self.assertEqual(hw.anzahl("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"), 4) - self.assertEqual(hw.anzahl("unterverteiler_fuer_puffer"), 2) - self.assertEqual(hw.anzahl("unterverteiler_fuer_5_rsm_fa"),0) - self.assertEqual(hw.anzahl("korrektur_5_rsm_zusaetzlich_im_unterverteiler"), -6) - self.assertEqual(hw.anzahl("unterverteiler_fuer_10_rsm_fa"), 3) - self.assertEqual(hw.anzahl("korrektur_10_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"), 0) - self.assertEqual(hw.anzahl("korrektur_3_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_4_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_4_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_12_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_12_rsm_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("unterverteiler_fuer_8_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler"), 0) - self.assertEqual(hw.anzahl("busverteiler_6_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_6_rsm_zusaetzlich_im_busverteiler"), 0) - self.assertEqual(hw.anzahl("busverteiler_8_rsm_direct"), 0) - self.assertEqual(hw.anzahl("korrektur_8_rsm_zusaetzlich_im_busverteiler"), 0) - self.assertEqual(hw.anzahl("antrieb_unidirektional_halbleiter"), 36) - self.assertEqual(hw.anzahl("antrieb_bidirektional_halbleiter"), 100) - self.assertEqual(hw.anzahl("antrieb_unidirektional_schuetz"), 0) - self.assertEqual(hw.anzahl("antrieb_bidirektional_schuetz"), 0) - self.assertEqual(hw.anzahl("motorschutzschalter"), 0) - self.assertEqual(hw.anzahl("wendeschuetzschaltung"), 0) - self.assertEqual(hw.anzahl("frequenzumrichter"), 0) - self.assertEqual(hw.anzahl("bedienstation_1fach_kpl"), 30) - self.assertEqual(hw.anzahl("bedienst_2fach_wechs_bcd_10f"), 0) - self.assertEqual(hw.anzahl("bedienstation_2fach_kpl"), 13) - self.assertEqual(hw.anzahl("halter_bedientableau_2fach"), 13) - self.assertEqual(hw.anzahl("bedienstation_3fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedientableau_3fach"), 0) - self.assertEqual(hw.anzahl("bedienstation_4fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedientableau_4fach"), 0) - self.assertEqual(hw.anzahl("bedienstation_6fach_kpl"), 0) - self.assertEqual(hw.anzahl("halter_bedienstation_6fach"), 0) - self.assertEqual(hw.anzahl("drucktaster_automatische_umfahrung"), 0) - self.assertEqual(hw.anzahl("halter_fuer_drucktaster"), 0) - self.assertEqual(hw.anzahl("ET200_SP"), 1) - self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 14) - self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_de"), 80) - self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_de"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_8_do"), 108) - self.assertEqual(hw.anzahl("korrektur_et200_sp_eingangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("et200_sp_eingangskarte_16_do"), 0) - self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen"), 28) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"), 0) - self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"), 160) - self.assertEqual(hw.anzahl("et200_sp_base_unit_neue_last"), 2) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_neue_last"), -26) - self.assertEqual(hw.anzahl("et200_sp_base_unit_links_gebrueckt"), -2) - self.assertEqual(hw.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt"), 0) - self.assertEqual(hw.anzahl("SLIO"), 0) - self.assertEqual(hw.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) - self.assertEqual(hw.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"), 0) - self.assertEqual(hw.anzahl("slio_eingangskarte_4_de"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_4_de"), 0) - self.assertEqual(hw.anzahl("slio_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_eingangskarte_8_de"), 0) - self.assertEqual(hw.anzahl("slio_ausgangskarte_4_do"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_4_do"), 0) - self.assertEqual(hw.anzahl("slio_ausgangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_ausgangskarte_8_do"), 0) - self.assertEqual(hw.anzahl("slio_power_modul"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_power_modul"), 0) - self.assertEqual(hw.anzahl("slio_4_x_dc_24v_4_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("slio_8_x_dc_24v"), 0) - self.assertEqual(hw.anzahl("slio_8_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("korrektur_slio_8_x_dc_0v"), 0) - self.assertEqual(hw.anzahl("movimot_fu_mit_anschaltung"), 0) - self.assertEqual(hw.anzahl("sensor_optisch_traverse"), 163) - self.assertEqual(hw.anzahl("sensorhalter_ohne_sensor"), 0) - self.assertEqual(hw.anzahl("reflexionslichtschranke_rsm_direct"), 0) - self.assertEqual(hw.anzahl("stoppersensor_induktiv_mit_halter"), 18) - self.assertEqual(hw.anzahl("sensor_spulenpruefung_voll_leer"), 0) - self.assertEqual(hw.anzahl("seilzugschalter"), 0) - self.assertEqual(hw.anzahl("seil_fuer_seilzugschalter"), 0) - self.assertEqual(hw.anzahl("blitzleuchte"), 12) - self.assertEqual(hw.anzahl("spulenumsetzstation"), 0) - self.assertEqual(hw.anzahl("sensorkabel_je_20m"), 193) - self.assertEqual(hw.anzahl("stopper_weichenkabel_je_5m"), 218) - self.assertEqual(hw.anzahl("motorkabel_je_30m"), 136) - self.assertEqual(hw.anzahl("kabelpritschen_leitern_200_60"), 669) - self.assertEqual(hw.anzahl("kabelpritsche_rsm_100_60"), 0) - self.assertEqual(hw.anzahl("kabelpritsche_rsm_50_35"), 0) - self.assertEqual(hw.anzahl("klemmkasten_rsm"), 0) - self.assertEqual(hw.anzahl("klemmkasten_direct_in_rsm"), 0) - self.assertEqual(hw.anzahl("erdung"), 101) - self.assertEqual(hw.anzahl("kleinteile_rohre_schellen_kabelbinder_ect"), 2) - self.assertEqual(hw.anzahl("kabel_fuer_klemmkasten_und_bts_60m"), 43) - self.assertEqual(hw.anzahl("kabel_fuer_1fach_bts_zug_wechseln"), 30) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac"), 10) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), 0) - self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"), 0) - self.assertEqual(hw.anzahl("zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 10) - self.assertEqual(hw.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"), 0) - self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm"), 0) - self.assertEqual(hw.anzahl("zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm"), 0) - self.assertEqual(hw.anzahl("profinetkabel"), 11) - self.assertEqual(hw.anzahl("korrektur_profinetkabel"), 0) - self.assertEqual(hw.anzahl("schnittstellen_8x1mm2_30m"), 18) - - self.assertAlmostEqual(hw.summe_vorort(), 39155) - self.assertEqual(hw.summe_gesamt(), 91522) - self.assertEqual(hw.summe_in_LL(), 52367) - self.assertEqual(hw.summe_h_zeiten_hardwareplanung(), 265) - self.assertEqual(hw.summe_h_unterverteiler_e_werkstatt(), 190) - - def test_emo(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - - - Anzahl_HW = {} - - hw = HW(Anzahl_HW, mg, eas) - - emo = EMO(eas, hw, mg) - self.assertAlmostEqual(emo.dauer_emo(), 560) - self.assertAlmostEqual(emo.mehraufwand_emo(), 616) - - def test_dienstleistung(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - - - Anzahl_HW = {} - - hw = HW(Anzahl_HW, mg, eas) - - Anzahl_DL = {} - dl = Dienstleistung(Anzahl_DL, hw) - - self.assertEqual(dl.stunden_hardwareplanung_test_installation(), 347) - self.assertEqual(dl.stunden_elektrowerkstatt(), 305) - self.assertEqual(dl.summe_stunden_dienstleistung_in_landsberg(), 652) - self.assertEqual(dl.get_hours_of("Pflichtenheft_Autom_Schnittstellen"), 0) - self.assertEqual(dl.get_hours_of("Erstellung_Steuerungslayout"), 80) - self.assertEqual(dl.get_hours_of("Schaltplanerstellung_incl_Korrekturen"), 146) - self.assertEqual(dl.get_hours_of("Projektkoordination"), 27) - self.assertEqual(dl.get_hours_of("Materialdispo"), 53) - self.assertEqual(dl.get_hours_of("Abstimmung_mit_E_Werkstatt"), 13) - self.assertEqual(dl.get_hours_of("Erstellen_E_Montageunterlagen"), 13) - self.assertEqual(dl.get_hours_of("PC_Installation"), 8) - self.assertEqual(dl.get_hours_of("Oberfläche_Simulation"), 0) - self.assertEqual(dl.get_hours_of("SPS_Test_im_Haus_Simulation"), 0) - self.assertEqual(dl.get_hours_of("Bedienerhandbuch"), 8) - self.assertEqual(dl.get_hours_of("SPS_Doku"), 0) - self.assertEqual(dl.get_hours_of("PC_Doku"), 0) - self.assertEqual(dl.get_hours_of("Schaltschrankbau"), 96) - self.assertEqual(dl.get_hours_of("Unterverteilerbau"), 190) - self.assertEqual(dl.get_hours_of("Klemmkastenbau_je_2h"), 0) - self.assertEqual(dl.get_hours_of("Bedientableaubau"), 19) - self.assertEqual(dl.get_hours_of("Vormontage_im_Haus"), 0) - - def test_anschlussleistung(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - - - Anzahl_HW = {} - - hw = HW(Anzahl_HW, mg, eas) - - Anzahl_AL ={} - al = Anschlussl(Anzahl_AL, mg) - self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 136) - self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 74.8) - self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 77.8) - self.assertAlmostEqual(al._ANZAHL.get("GZF"), 40.4) - self.assertAlmostEqual(al._ANZAHL.get("Res"), 4.04) - self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 44.44) - self.assertAlmostEqual(al._ANZAHL.get("x_Strom"), 44.44) - self.assertAlmostEqual(al._ANZAHL.get("Spannung"), 400) - self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 30.79) - self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 31) - - def test_ergebnis(self): - - Anzahl_MG = { - "SYSTEM": "FA", - "RSM":30, - "Flyer":0, - "Flyer_Puffer":0, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine":9, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, - "Neuenhauser-Putzmaschine":0, - "Neuenhauser-Putzmaschine_Vorpuffer":0, - "Neuenhauser-Putzmaschine_Nachpuffer":0, - "Cason-Putzmaschine":0, - "Cason-Putzmaschine_Vorpuffer":0, - "Cason-Putzmaschine_Nachpuffer":0, - "Puffer":2, - "Anzahl_der_Pufferstrecken_pro_Puffer":7, - "Begegnungsstrecke_Bypass":1, - "Turm":0, - "Turm_Anzahl_Wendlungen":0, - } - - rsm_direct_eingabe = {} - rsm_fa_eingabe = { - "Flex_A_Premium":False, # braucht man das noch? - "Getriebe_in_der_Mitte":False, # braucht man das noch? - "RSM_Einfahrt_Ein_Beidseitig":False, # braucht man das noch? - "Sensor_optisch_Traverse_zusätzlich":8, - "Bedientableau_1fach_Korrektur":0, - "Bedientableau_2fach_Korrektur":1, - "Weiche_Korrektur":6, - "RRA_bi_Korrektur":0, - "RRA_bi_auf_Haupstrecke":6, - "RRA_uni_Begegnung":0, - "gemeinsame_Wendung":0, - "Mit_Drucktaster_Korrektur":0, - "Meldelampe_Überstrom_Korrektur":-4, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - "Werma_Rundumleuchte_Störung_Korrektur":0, - "klemmkasten_rsm":0, - } - flyer_f40_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine":0, #wird in deckblatt-Klasse berechnet - "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur":0, - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":2, #wird in deckblatt-Klasse berechnet - #"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2, #wird in deckblatt-Klasse berechnet - #"Anzahl_Schienen":0, - "Single_Line_Durchfahrt":False, - "Nachpuffer":False, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":9, - #"Sensor_induktiv_Spulenhalter":0, - "Sensor_induktiv_Spulenhalter_Korrektur":9, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Doffer":0, - "Interface_Doffer_Korrektur":9, - #"Weiche":0, - "Weiche_Korrektur":3, - #"Weiche_nach_Flyer_bipolar":0, - "Weiche_nach_Flyer_bipolar_Korrektur":-9, - "Dreifachweiche":3, - "Wechsel":1, - "Stopper":0, - "RA_uni":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":9, - #"RA_uni_ohne_SPS_Ansteuerung":0, - "RA_uni_ohne_SPS_Ansteuerung_Korrektur":9, - #"RRA_BI_abhebbar":0, - "RRA_BI_abhebbar_Korrektur":9, - "RRA_bi":9, - #"RRA_bi_Korrektur":0, - #"RRA_bi_ohne_SPS_Ansteuerung":0, - "RRA_bi_ohne_SPS_Ansteuerung_Korrektur":0, - #"Doppelstreckenantrieb":0, - "Doppelstreckenantrieb_Korrektur":9, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":-4, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":-4, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - neuenhauser_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Neuenhauser-Putzmaschine":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Vorpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Neuenhauser-Putzmaschine_Nachpuffer":0, #wird in deckblatt-Klasse zugewiesen - #"Anzahl_Vorstaustrecken":0, - #"Anzahl_Nachstaustrecken":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensorik_Zugpositionierung":0, - #"Sensor_WT18_Spulenprüfung_voll_leer":0, - #"Bedientableau_2fach":0, - "Bedientableau_2fach_Korrektur":0, - #"Interface_Putzmaschine":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_PM_bipolar":0, - #"RA_uni_abhebbar":0, - "RA_uni_abhebbar_Korrektur":0, - #"RA_uni_ohne_SPS_Ansteuerung":0, - #"RA_uni_abhebbar_unger_Sch":0, - #"Doppelstreckenantrieb":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - flyer_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Flyer":0, # äquivalent zu 'Anzahl' - #"Anzahl_Schienen:":0, - #"Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur":0, - #"Sensor_induktiv_Spulenalter_Zug_positionierung":0, - #"Bedientableau_2fach":0, - #"Interface_Doffer":0, - #"Weiche":0, - "Weiche_Korrektur":0, - #"Weiche_nach_Flyer_bipolar":0, - "Dreifachweiche":0, - #"Wechsel":0, - "Wechsel_Korrektur":0, - #"RA_bi_ohne_SPS-Ansteuerung":0, - #"RA_bi_abhebbar":0, - "RA_bi_abhebbar_Korrektur":0, - "RA_bi":4, - #"Doppelstreckenantrieb":0, - "RA_bi_abhebbar_unger_Schiene":0, - #"Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur":0, - #"Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur":0, - #"Werma_Rundumleuchte_Störung":0, - "Werma_Rundumleuchte_Störung_Korrektur":0, - } - verbindungsstrecken_w_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Sensor_optisch_Traverse":0, - "Bedientableau_1fach":0, - "Bedientableau_2fach":0, - "Bedientableau_14fach":0, - "Weiche":0, - "Dreifachweiche":0, - "Kreuzungsweiche":0, - "Werma_Rundumleuchte_Störung":0, - "RA_uni":0, - "RA_uni_ohne_SPS_Ansteuerung":0, - "RA_bi":0, - "RA_bi_ohne_SPS-Ansteuerung":0, - "Doppelstreckenantrieb":0 - } - puffer_eingabe = { - # auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - # "Anzahl":0, - # "Puffer":0, #äquivalent zu Anzahl - # "Anzahl_Pufferstrecken":0, #äquivalent zu Anzahl_Staustrecken - # "Anzahl_Staustrecken":0, - # "Sensor_optisch_Traverse":0, - "Sensor_optisch_Traverse_Korrektur": 0, - # "Weiche":0, - "Weiche_Korrektur": 0, - "RA_bi_ungerade_Schiene": 2, - # "Doppelstreckenantrieb":0, - "Doppelstreckenatrieb_Korrektur":2, - # "Meldelampe_Überstrom":0, - "Meldelampe_Überstrom_Korrektur": 0, - # "Hauptschalter_Ein_Meldung":0, - "Hauptschalter_Ein-Meldung_Korrektur": 0, - } - turm_eingabe = { - #auskommentiert => kein Übergabeparameter, wird in Klasse berechnet - #"Anzahl":0, - #"Turm":0, #äquivalent zu Anzahl - #"Anzahl_Wendlungen":0, #äquivalent zu Anzahl_Staustrecken - #"Anzahl_Staustrecken":0, - #"Sensor_optisch_Traverse":0, - #"Weiche":0, - #"RA_bi":0, - "RA_bi_Korrektur":0, - #"RA_bi_ohne_SPS":0, - "RA_bi_ohne_SPS_Korrektur":0, - #"Bedientableau_2fach":0, - } - mg = MG(Anzahl_MG, - rsm_direct=rsm_direct_eingabe, - rsm_fa=rsm_fa_eingabe, - flyer_f40=flyer_f40_eingabe, - neuenhauser=neuenhauser_eingabe, - flyer=flyer_eingabe, - verbindungsstrecken_w=verbindungsstrecken_w_eingabe, - puffer=puffer_eingabe, - turm=turm_eingabe) - - Anzahl_EAS = {} - eas = EA(Anzahl_EAS, mg) - Anzahl_HW = {} - - hw = HW(Anzahl_HW, mg, eas) - emo = EMO(eas, hw, mg) - Anzahl_DL = {} - dl = Dienstleistung(Anzahl_DL, hw) - - Anzahl_Ergebnis = {} - erg = Ergebnis(Anzahl_Ergebnis, hw, dl, emo) - self.assertAlmostEqual(erg.get_cost_of("E_Werkstatt"), 6760) - self.assertEqual(erg.get_cost_of("Schaltschrankbau_extern_Mehrkosten"), 0) - self.assertEqual(erg.get_cost_of("Dienstleistung_in_LL"), 15626) - self.assertEqual(erg.get_cost_of("Pflichtenheft"), 0) - #self.assertEqual(erg.get_cost_of("SPS_Programmierung"), ) - #self.assertEqual(erg.get_cost_of("PC_Programmierung_Visualisierung"), ) - self.assertEqual(erg.get_cost_of("Montage_elektrisch"), 22176) - self.assertAlmostEqual(erg.get_cost_of("Inbetriebnahmetest_Hardware_durch_Montage"), 2218) - self.assertEqual(erg.get_cost_of("SPS_Inbetriebsetzung"), 22120) - self.assertEqual(erg.get_cost_of("PC_Inbetriebsetzung"), 0) - self.assertEqual(erg.get_cost_of("Inbetriebnahmeunterstützung_durch_Montage"), 10080) - self.assertEqual(erg.get_cost_of("Dokumentation"), 525) - self.assertEqual(erg.get_cost_of("Bedienungsanleitung_Emmert"), 0) - self.assertEqual(erg.get_cost_of("Schulung_vor_Ort_beim_Kunden"), 0) - self.assertEqual(erg.get_cost_of("Abnahme"), 0) - self.assertEqual(erg.get_cost_of("SPS_Anlagenbetreuung"), 0) - self.assertEqual(erg.get_cost_of("PC_Anlagenbetreuung"), 0) - self.assertEqual(erg.get_cost_of("Anlagenbetreuung_durch_Montage"), 0) - self.assertEqual(erg.get_sum_of_costs(hw), 216407) - -def test_Unittests(): - unittest.main() - -if __name__ == '__main__': - test_Unittests() diff --git a/work/jayjay.cfg b/work/jayjay.cfg new file mode 100644 index 0000000..f309504 --- /dev/null +++ b/work/jayjay.cfg @@ -0,0 +1,110 @@ +[allgemein] +SYSTEM= FA +RSM=14 +Flyer=4 +Flyer_Puffer=2 +Flyer_Electrojet_incl_intergrierte_Putzmaschine=0 +Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer=0 +Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer=0 +Neuenhauser-Putzmaschine=0 +Neuenhauser-Putzmaschine_Vorpuffer=0 +Neuenhauser-Putzmaschine_Nachpuffer=0 +Cason-Putzmaschine=0 +Cason-Putzmaschine_Vorpuffer=0 +Cason-Putzmaschine_Nachpuffer=0 +Puffer=1 +Anzahl_der_Pufferstrecken_pro_Puffer=5 +Begegnungsstrecke_Bypass=2 +Turm=0 +Turm_Anzahl_Wendlungen=0 + +[rsm_direct] + +[rsm_fa] +Flex_A_Premium=False +Getriebe_in_der_Mitte=False +RSM_Einfahrt_Ein_Beidseitig=False +Sensor_optisch_Traverse_zusätzlich=6 +Bedientableau_1fach_Korrektur=0 +Bedientableau_2fach_Korrektur=4 +Weiche_Korrektur=4 +RRA_bi_Korrektur=0 +RRA_bi_auf_Haupstrecke=10 +RRA_uni_Begegnung=4 +gemeinsame_Wendung=0 +Mit_Drucktaster_Korrektur=0 +Meldelampe_Überstrom_Korrektur=0 +Hauptschalter_Ein-Meldung_Korrektur=0 +Werma_Rundumleuchte_Störung_Korrektur=0 +klemmkasten_rsm=2 + +[flyer_f40] +Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur=0 +Single_Line_Durchfahrt=False +Nachpuffer=False +Sensor_optisch_Traverse_Korrektur=0 +Sensor_induktiv_Spulenhalter_Korrektur=0 +Bedientableau_2fach_Korrektur=0 +Interface_Doffer_Korrektur=0 +Weiche_Korrektur=0 +Weiche_nach_Flyer_bipolar_Korrektur=0 +Dreifachweiche=0 +Wechsel=0 +Stopper=0 +RA_uni=0 +RA_uni_abhebbar_Korrektur=0 +RA_uni_ohne_SPS_Ansteuerung_Korrektur=0 +RRA_BI_abhebbar_Korrektur=0 +RRA_bi=0 +RRA_bi_ohne_SPS_Ansteuerung_Korrektur=0 +Doppelstreckenantrieb_Korrektur=0 +RA_bi_abhebbar_unger_Schiene=0 +Meldelampe_Überstrom_Korrektur=0 +Hauptschalter_Ein-Meldung_Korrektur=0 +Werma_Rundumleuchte_Störung_Korrektur=0 + +[neuenhauser] +Sensor_optisch_Traverse_Korrektur=0 +Bedientableau_2fach_Korrektur=0 +Weiche_Korrektur=0 +RA_uni_abhebbar_Korrektur=0 +Meldelampe_Überstrom_Korrektur=0 +Hauptschalter_Ein-Meldung_Korrektur=0 +Werma_Rundumleuchte_Störung_Korrektur=0 + +[flyer] +Sensor_optisch_Traverse_Korrektur=0 +Weiche_Korrektur=0 +Dreifachweiche=0 +Wechsel_Korrektur=0 +RA_bi_abhebbar_Korrektur=0 +RA_bi=4 +RA_bi_abhebbar_unger_Schiene=0 +Meldelampe_Überstrom_Korrektur=0 +Hauptschalter_Ein-Meldung_Korrektur=0 +Werma_Rundumleuchte_Störung_Korrektur=0 + +[verbindungsstrecken_w] +Bedientableau_1fach=0 +Bedientableau_2fach=0 +Bedientableau_14fach=0 +Weiche=0 +Dreifachweiche=0 +Kreuzungsweiche=1 +Werma_Rundumleuchte_Störung=0 +RA_uni=0 +RA_uni_ohne_SPS_Ansteuerung=0 +RA_bi=0 +RA_bi_ohne_SPS-Ansteuerung=0 +Doppelstreckenantrieb=0 + +[puffer] +Sensor_optisch_Traverse_Korrektur= 1 +Weiche_Korrektur= 0 +RA_bi_ungerade_Schiene= 2 +Meldelampe_Überstrom_Korrektur= 0 +Hauptschalter_Ein-Meldung_Korrektur= 0 + +[turm] +RA_bi_Korrektur=0 +RA_bi_ohne_SPS_Korrektur=0