Files
Rieter-EKalk/Kalkulation Spinnerei.ipynb
T
2023-03-13 16:38:50 +01:00

396 KiB

Kalkulation Spinnerei

Das folgende Szenario ist eine Variante um die Anzahl der Puffer zu testen

Flyer Puffer

In [22]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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,
        }


variationen = {}
for k in range(10):
    Anzahl_MG.update({"Flyer_Puffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)

lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Flyer-Puffer")
plt.show()
{0: 102890.64666666667, 1: 103604.44666666666, 2: 105333.16666666666, 3: 106046.96666666666, 4: 107732.12666666666, 5: 108445.92666666667, 6: 110174.64666666667, 7: 110888.44666666666, 8: 112573.60666666666, 9: 113287.40666666666}

Puffer

In [23]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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,
        }


variationen = {}
for k in range(10):
    Anzahl_MG.update({"Puffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)

lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Puffer")
plt.show()
{0: 104313.24666666666, 1: 105333.16666666666, 2: 106353.08666666667, 3: 107373.00666666665, 4: 108392.92666666667, 5: 109456.40666666666, 6: 110476.32666666666, 7: 111496.24666666666, 8: 112516.16666666666, 9: 113536.08666666667}

Anzahl der Pufferstrecken pro Puffer

In [24]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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,
        }


variationen = {}
for k in range(2, 10):
    Anzahl_MG.update({"Anzahl_der_Pufferstrecken_pro_Puffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
print("Hinweis: mind. 2 Pufferstrecken pro Puffer sollten existieren")
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Pufferstrecken pro Puffer")
plt.show()
{2: 104765.42666666667, 3: 104880.98666666666, 4: 105217.60666666666, 5: 105333.16666666666, 6: 105669.78666666665, 7: 105785.34666666666, 8: 106121.96666666666, 9: 106237.52666666666}
Hinweis: mind. 2 Pufferstrecken pro Puffer sollten existieren

Flyer Electrojet incl intergrierte Putzmaschine Vorpuffer

In [25]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


Anzahl_MG = {
        "SYSTEM": "FA",
        "RSM":14,
        "Flyer":4,
        "Flyer_Puffer":2,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine":1,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":0,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2,
        "Neuenhauser-Putzmaschine":0,
        "Neuenhauser-Putzmaschine_Vorpuffer":0,
        "Neuenhauser-Putzmaschine_Nachpuffer":0,
        "Cason-Putzmaschine":0,
        "Cason-Putzmaschine_Vorpuffer":0,
        "Cason-Putzmaschine_Nachpuffer":0,
        "Puffer":1,
        "Anzahl_der_Pufferstrecken_pro_Puffer":5,
        "Begegnungsstrecke_Bypass":2,
        "Turm":0,
        "Turm_Anzahl_Wendlungen":0,
        }


variationen = {}
for k in range(2, 10):
    Anzahl_MG.update({"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
print("Vorpuffer sollte > 1 sein")
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Vorpuffer")
plt.show()
{2: 108484.83666666667, 3: 108600.39666666667, 4: 108937.01666666666, 5: 109052.57666666666, 6: 109389.19666666666, 7: 109504.75666666667, 8: 109841.37666666668, 9: 109956.93666666668}
Vorpuffer sollte > 1 sein

Flyer Electrojet incl intergrierte Putzmaschine Nachpuffer

In [26]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


Anzahl_MG = {
        "SYSTEM": "FA",
        "RSM":14,
        "Flyer":4,
        "Flyer_Puffer":2,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine":1,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer":4,
        "Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer":2,
        "Neuenhauser-Putzmaschine":0,
        "Neuenhauser-Putzmaschine_Vorpuffer":0,
        "Neuenhauser-Putzmaschine_Nachpuffer":0,
        "Cason-Putzmaschine":0,
        "Cason-Putzmaschine_Vorpuffer":0,
        "Cason-Putzmaschine_Nachpuffer":0,
        "Puffer":1,
        "Anzahl_der_Pufferstrecken_pro_Puffer":5,
        "Begegnungsstrecke_Bypass":2,
        "Turm":0,
        "Turm_Anzahl_Wendlungen":0,
        }


variationen = {}
for k in range(2, 10):
    Anzahl_MG.update({"Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
print("Vorpuffer sollte > 1 sein")
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Nachpuffer")
plt.show()
{2: 108937.01666666666, 3: 109052.57666666666, 4: 109389.19666666666, 5: 109504.75666666667, 6: 109841.37666666668, 7: 109956.93666666668, 8: 110337.11666666667, 9: 110409.11666666667}
Vorpuffer sollte > 1 sein

Neuenhauser-Putzmaschine Vorpuffer

In [27]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.summary_costs(hw).get("GESAMT")


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":1,
        "Neuenhauser-Putzmaschine_Vorpuffer":2,
        "Neuenhauser-Putzmaschine_Nachpuffer":2,
        "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,
        }


variationen = {}
for k in range(2, 10):
    Anzahl_MG.update({"Neuenhauser-Putzmaschine_Vorpuffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Vorpuffer")
plt.show()
{2: 111554.98, 3: 111670.54, 4: 111945.72, 5: 112017.72, 6: 112292.9, 7: 112408.46, 8: 112640.08, 9: 112755.64}

Neuenhauser-Putzmaschine Nachpuffer

In [28]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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":1,
        "Neuenhauser-Putzmaschine_Vorpuffer":2,
        "Neuenhauser-Putzmaschine_Nachpuffer":2,
        "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,
        }


variationen = {}
for k in range(2, 10):
    Anzahl_MG.update({"Neuenhauser-Putzmaschine_Nachpuffer": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Nachpuffer")
plt.show()
{2: 111554.97666666667, 3: 111734.09666666666, 4: 111985.71666666667, 5: 112164.83666666667, 6: 112416.45666666667, 7: 112552.01666666666, 8: 112847.19666666667, 9: 112982.75666666667}

Turm Wendlungen

In [29]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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":1,
        }


variationen = {}
for k in range (10):
    Anzahl_MG.update({"Turm_Anzahl_Wendlungen": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Windungen")
plt.ylim(106000, 109000)
plt.show()
{0: 106893.90666666668, 1: 107046.02666666667, 2: 107154.58666666667, 3: 107306.70666666667, 4: 107458.82666666666, 5: 107610.94666666667, 6: 107763.06666666667, 7: 107871.62666666668, 8: 108023.74666666667, 9: 108175.86666666667}

Turm

In [30]:
import rieter_ekalk as rek
import matplotlib.pyplot as plt

def eine_anlage(Anzahl_MG):

        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)
        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)
        return erg.get_sum_of_costs(hw)


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":1,
        }


variationen = {}
for k in range(10):
    Anzahl_MG.update({"Turm": k})
    erg = eine_anlage(Anzahl_MG)
    variationen.update({k: erg})
print(variationen)
lists = sorted(variationen.items()) # sorted by key, return a list of tuples

x, y = zip(*lists) 

plt.plot(x, y)
plt.ylabel("Preis [€]")
plt.xlabel("Türme")
plt.show()
{0: 105333.16666666666, 1: 107046.02666666667, 2: 108758.88666666666, 3: 110428.18666666666, 4: 112141.04666666666, 5: 113853.90666666666, 6: 115566.76666666666, 7: 117279.62666666666, 8: 118992.48666666666, 9: 120705.34666666666}