Berechnung des Zusatzaufwand für Taschen eingepflegt, Deckblattklasse angelegt

This commit is contained in:
Simon Schmutzler
2022-05-03 18:04:33 +02:00
parent c5334096f2
commit 14ae507f19
+168 -18
View File
@@ -1,5 +1,6 @@
import json
import math
from typing import Counter
import unittest
from numpy import array
@@ -34,7 +35,7 @@ class Gefaellestrecke():
class Bereich():
def __init__(self,bezeichnung, kreisel:list[Kreisel], gefaellestrecken:list[Gefaellestrecke],anzahl_eckraeder=0, anzahl_etagenfoerderer=0, anzahl_bt_mt_entladung=0,
anzahl_bt_beladung=0, anzahl_mt_beladung=0, anzahl_zufuehrung_klinkenf=0, laenge_zufuehrung_klinkenf=0):
anzahl_bt_beladung=0, anzahl_mt_beladung=0, anzahl_zufuehrung_klinkenf=0, laenge_zufuehrung_klinkenf=0):
self._bezeichnung = bezeichnung
#für jede instanz der kreiselklasse in der Liste 'kreisel' muss ein Materialpreis und Montagestunden berechnet werden
#Äquivalent dazu Gefällestrecken, ETF, So-Förderer und Umbügeln berechnen
@@ -46,6 +47,23 @@ class Bereich():
# Montagestunden
# =D3*( Tabellen!C30 + E3*Tabellen!D30 + F3*E3*Tabellen!E30 + G3*Tabellen!F30 + H3*Tabellen!H30 + I3*Tabellen!I30 + J3*Tabellen!R30 + F3*Tabellen!G30)
self.bauteile = {
"Antriebsstation": 0,
"Spannstation": 0,
"Rampe": 0,
"Weiche": 0,
"Separator_LP": 0,
"Separator_SP": 0,
"Ausschleuselement": 0,
"BTMT_Entladung": 0,
"BT_Beladung": 0,
"MT_Beladung": 0,
"Etagenfoerderer": 0,
"Sonst_Foerderer": 0,
"Inkrementalgeber": 0,
"Scanner": 0,
}
self.bauteile["Antriebsstation"] += anzahl_eckraeder
# BaaN => Montagezeit und Herstellkosten einzelner Baugruppen
b = BaaN()
@@ -53,6 +71,13 @@ class Bereich():
kreisel_hk_mech_el_summe = 0
kreisel_mont_mech_el_summe = 0
for k in kreisel:
self.bauteile["Antriebsstation"] += k.anzahl
self.bauteile["Spannstation"] += k.anzahl
self.bauteile["Rampe"] += k.anzahl_rampen
self.bauteile["Weiche"] += k.anzahl_weichen
self.bauteile["Separator_LP"] += k.anzahl_separatoren
self.bauteile["Scanner"] += k.anzahl_scanner
pin = 0
if(k.pin == True): pin = 1
kreisel_hk_mech_el = k.anzahl * (b.herstellkosten_mech_el("ANTRIEBSSTATION_800_ILS_20_(mit_Motor)") + b.herstellkosten_mech_el("SPANNSTATION_800_ILS_20") +\
@@ -84,6 +109,14 @@ class Bereich():
gefaelle_mont_mech_el_summe = 0
self._gefaellestrecken = {}
for g in gefaellestrecken:
self.bauteile["Separator_SP"] += g.anzahl_separatoren
#TODO: Ausschleuselement 30° wird hier nicht addiert?
if(g.ausschleuselement_30_grad == False):
self.bauteile["Ausschleuselement"] += g.anzahl
hkAE = b.herstellkosten_mech_el("AE_ILS_20_(SMC)")
montAE = b.montagestunden_mech_el("AE_ILS_20_(SMC)")
hkEE = b.herstellkosten_mech_el("EE")
@@ -124,7 +157,8 @@ class Bereich():
# Klinkenförderer: Antrieb = 920, E-Material = 200, proMeter = 160, MontageAntrieb = 3(h), MontageMeter = 1(h)
self._zufuehrung_cpc = {"hk_summe": round(anzahl_zufuehrung_klinkenf * (920 + laenge_zufuehrung_klinkenf),2), "mont_summe": round((anzahl_zufuehrung_klinkenf * (3 + laenge_zufuehrung_klinkenf * 1))/60,2)}
def getBauteile(self):
return self.bauteile
def getResult(self):
res = {
@@ -139,6 +173,33 @@ class Bereich():
}
return res
def getSummenBereich(self):
hk_sum = 0
mont_sum = 0
hk_sum += self._kreisel.get("_GESAMT_", {}).get("hk_summe", 0)
hk_sum += self._gefaellestrecken.get("_GESAMT_", {}).get("hk_summe", 0)
hk_sum += self._eckraeder.get("hk_summe", 0)
hk_sum += self._etagenfoerderer.get("hk_summe", 0)
#TODO: So Förderer
hk_sum += self._btmt_entladung.get("hk_summe", 0)
hk_sum += self._bt_beladung.get("hk_summe", 0)
hk_sum += self._mt_beladung.get("hk_summe", 0)
hk_sum += self._zufuehrung_cpc.get("hk_summe", 0)
mont_sum += self._kreisel.get("_GESAMT_", {}).get("mont_summe", 0)
mont_sum += self._gefaellestrecken.get("_GESAMT_", {}).get("mont_summe", 0)
mont_sum += self._eckraeder.get("mont_summe", 0)
mont_sum += self._etagenfoerderer.get("mont_summe", 0)
#TODO: So Förderer
mont_sum += self._btmt_entladung.get("mont_summe", 0)
mont_sum += self._bt_beladung.get("mont_summe", 0)
mont_sum += self._mt_beladung.get("mont_summe", 0)
mont_sum += self._zufuehrung_cpc.get("mont_summe", 0)
return {"Materialkosten": round(hk_sum, 2), "Montagezeit": round(mont_sum, 2)} #Ohne Aufschläge, reine HK Kosten bzw Montagezeiten
def tojson(self, input:dict):
return json.dumps(input, sort_keys=False, indent=4)
@@ -148,6 +209,76 @@ class Bereich():
with open("Bereichszusammenfassung.json", "w") as file:
file.write(json)
class Taschen():
def __init__(self, baugruppensummen:type[dict]):
#Zusatzbauteile die für Taschentransport erforderlich sind
self._Zusatzbauteile = {
#"Bezeichnung":[Einzelpreis, Montagedauer(h)], Teilenummer
"Fuehrung_an_AE": [22.0, 0.1], #829514073
"Halter_Gegenleiste_an_AE": [0.6, 0.02], #829514071
"Aluwinkel_40x20": [2.6, 0.02], #931011103
"Halter_Gegenleiste_an_EE": [2.6, 0.02], #829514070
"Alu_4kt_20x20": [4.7, 0.1], #931601003
"Rollenandruckleiste_Sep_LP": [45.0, 0.05], #829534007
"Abhebeleiste_Sep_LP": [89.0, 0.5], #829534008
"Zwangsfuehrung_Sep_SP": [34.0, 0.1], #829514072
#Schrägkreisel und Noppenband wird nicht übernommen, da nicht mehr verwendet
}
self._Summen = {
#"Bezeichnung":[Summe Preis, Summe Montagedauer]
"Fuehrung_an_AE": [0, 0], #829514073
"Halter_Gegenleiste_an_AE": [0, 0], #829514071
"Aluwinkel_40x20": [0, 0], #931011103
"Halter_Gegenleiste_an_EE": [0, 0], #829514070
"Alu_4kt_20x20": [0, 0], #931601003
"Rollenandruckleiste_Sep_LP": [0, 0], #829534007
"Abhebeleiste_Sep_LP": [0, 0], #829534008
"Zwangsfuehrung_Sep_SP": [0, 0], #829514072
}
#Gesamtanzahl von AE, Sep_LP, Sep_SP und Scanner auslesen
summe_ausschleuselement = baugruppensummen.get("Ausschleuselement", 0)
summe_sepLP_scanner = baugruppensummen.get("Separator_LP", 0) + baugruppensummen.get("Scanner", 0)
summe_sepSP = baugruppensummen.get("Separator_SP", 0)
self._Summen["Fuehrung_an_AE"] = [round(self._Zusatzbauteile.get("Fuehrung_an_AE", [])[0] * summe_ausschleuselement,2),
round(self._Zusatzbauteile.get("Fuehrung_an_AE", [])[1] * summe_ausschleuselement,2)]
self._Summen["Halter_Gegenleiste_an_AE"] = [round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_AE", [])[0] * summe_ausschleuselement,2),
round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_AE", [])[1] * summe_ausschleuselement,2)]
self._Summen["Aluwinkel_40x20"] = [round(self._Zusatzbauteile.get("Aluwinkel_40x20", [])[0] * summe_ausschleuselement,2),
round(self._Zusatzbauteile.get("Aluwinkel_40x20", [])[1] * summe_ausschleuselement,2)]
self._Summen["Halter_Gegenleiste_an_EE"] = [round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_EE", [])[0] * summe_ausschleuselement,2),
round(self._Zusatzbauteile.get("Halter_Gegenleiste_an_EE", [])[1] * summe_ausschleuselement,2)]
self._Summen["Alu_4kt_20x20"] = [round(self._Zusatzbauteile.get("Alu_4kt_20x20", [])[0] * summe_ausschleuselement, 2),
round(self._Zusatzbauteile.get("Alu_4kt_20x20", [])[1] * summe_ausschleuselement, 2)]
self._Summen["Rollenandruckleiste_Sep_LP"] = [round(self._Zusatzbauteile.get("Rollenandruckleiste_Sep_LP", [])[0] * summe_sepLP_scanner * 0.2,2), #TODO: warum mit 0.2 multipliziert?
round(self._Zusatzbauteile.get("Rollenandruckleiste_Sep_LP", [])[1] * summe_sepLP_scanner * 0.2,2)]
self._Summen["Abhebeleiste_Sep_LP"] = [round(self._Zusatzbauteile.get("Abhebeleiste_Sep_LP", [])[0] * summe_sepLP_scanner * 0.2,2),
round(self._Zusatzbauteile.get("Abhebeleiste_Sep_LP", [])[1] * summe_sepLP_scanner * 0.2,2)]
self._Summen["Zwangsfuehrung_Sep_SP"] = [round(self._Zusatzbauteile.get("Zwangsfuehrung_Sep_SP", [])[0] * summe_sepSP * 0.5, 2),
round(self._Zusatzbauteile.get("Zwangsfuehrung_Sep_SP", [])[1] * summe_sepSP * 0.5, 2)]
print(self._Summen)
class Deckblatt():
def __init__(self, bereiche:type[list[Bereich]], taschentransport=False):
#zusatzbauteile/Aufwand wenn Taschen im System laufen
if(taschentransport):
i=0
#Summe aller Baugruppen über alle Bereiche
self._Baugruppensummen = {}
for b in bereiche:
t = b.getBauteile()
t_count = Counter(t)
bgr_summen_count = Counter(self._Baugruppensummen)
sum_dict = t_count + bgr_summen_count
self._Baugruppensummen = dict(sum_dict)
class BaaN():
@@ -177,6 +308,26 @@ class BaaN():
"Inkrementalgeber":[0,0,430,180],
}
self._Taschen = {
#zusatzaufwand, wenn Taschen im System laufen
# [Preis, Montagezeit]
"829514073_Führg_an_AE": [22.0,1],
"829514071_Halter_Gegenl_an_AE": [0.6, 0.02],
"931011103_Alu_Winkel_40x20": [2.6, 0.02],
"829514070_Halter_Gegenl_an_EE": [2.6, 0.02],
"931601003_Alu_4_kt_20x20": [4.7, 0.1],
"829534007_Andr_Rollenl_Sep_LP": [45, 0.05],
"829534008_Abh_Leiste_vor_Sep_LP": [89, 0.5],
"829514072_Zwangsführg_an_Sep_SP": [34, 0.1],
"829514068_Verb_Schrägkr_Mitte": [6.8, 0.02],
"829514069_Verb_Schrägkr_Ende": [11.4, 0.02],
"829514061_Rampe": [57, 0.1],
"829416031_Stauprofil": [14.5, 0.05],
"LP_oben_abschneiden": [1, 0], #Arbeitsgang
#"829514075_Abstands_Band_Nop": [2.15, 0.01], #nicht mehr verwendet
#"Aufpreis_Band_noppen": [0.6, 0] #nicht mehr verwendet
}
def herstellkosten_mech(self, artikelbezeichnung):
l = self._Kosten.get(artikelbezeichnung, [0,0,0,0])
return l[0]
@@ -203,31 +354,30 @@ class BaaN():
class TestObjects(unittest.TestCase):
def test(self):
self.assertEqual(1,1)
baan = BaaN()
self.assertEqual(baan.herstellkosten_mech("ES_ELEMENT_30_F_SF_ILS"), 240)
self.assertEqual(baan.montagestunden_mech("ES_ELEMENT_30_F_SF_ILS"), 180)
self.assertEqual(baan.herstellkosten_el("ES_ELEMENT_30_F_SF_ILS"), 45.7)
self.assertEqual(baan.montagestunden_el("ES_ELEMENT_30_F_SF_ILS"), 0)
kreisel = []
kreisel.append(Kreisel("Zufuehrung Richtung Puffer",2, 30, 4,4,4))
kreisel.append(Kreisel("Verbindung",3,4,0,0,0))
kreisel.append(Kreisel("Einschleusung Puffer",6, 10, 0,2,1,True,2))
kreisel.append(Kreisel("Abzug Puffer",6,10,1,2,2))
kreisel.append(Kreisel("Abzug Gesamt",2,33.5,5,3,0))
zufuehrung_puffer = Kreisel("Zufuehrung Richtung Puffer",2, 30, 4,4,4)
verbindung = Kreisel("Verbindung",3,4,0,0,0)
einschleusung_puffer = Kreisel("Einschleusung Puffer",6, 10, 0,2,1,True,2)
abzug_puffer = Kreisel("Abzug Puffer",6,10,1,2,2)
abzug_gesamt = Kreisel("Abzug Gesamt",2,33.5,5,3,0)
gefaellestrecken = []
gefaellestrecken.append(Gefaellestrecke("Umschleusung",6, 10,2,0))
gefaellestrecken.append(Gefaellestrecke("Puffer", 72, 21,2,0))
umschleusung_puffer = Gefaellestrecke("Umschleusung",6, 10,2,0)
puffer = Bereich("Puffer",[zufuehrung_puffer, verbindung, einschleusung_puffer, abzug_puffer, abzug_gesamt], [umschleusung_puffer],12, 6)
puffer = Bereich("Puffer",kreisel, gefaellestrecken,12, 6)
puffer.resToFile()
#minuten in stunden umrechnen
#self.assertEqual(puffer._kreisel["mont_summe"]/60, 294)
#self.assertEqual(puffer._gefaellestrecken["mont_summe"]/60, 45.5)
#self.assertEqual(round(puffer._kreisel["hk_summe"], 1), 36501.6)
#self.assertEqual(round(puffer._gefaellestrecken["hk_summe"], 1), 6166.2)
#self.assertEqual(round(puffer._etagenfoerderer["hk_summe"], 1), 16914)
#self.assertEqual(round(puffer._etagenfoerderer["mont_summe"]/60, 1), 84.0)
dblatt = Deckblatt([puffer, puffer])
taschen = Taschen(dblatt._Baugruppensummen)