Struktur des Programmes umgebaut, so dass Umgebungsvariablen verwendet werden. Configs werden vor Objekterzeugung geladen und in den Objekten gesetzt

This commit is contained in:
2023-05-31 16:56:42 +02:00
parent 4e70f5a600
commit 1f0e4137f2
17 changed files with 272 additions and 9009 deletions
+16
View File
@@ -0,0 +1,16 @@
{
// Verwendet IntelliSense zum Ermitteln möglicher Attribute.
// Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python-Modul",
"type": "python",
"request": "launch",
"program": "${file}",
"justMyCode": true
}
]
}
+2 -1
View File
@@ -1,3 +1,4 @@
{ {
"python.formatting.provider": "yapf" "python.formatting.provider": "yapf",
"python.analysis.typeCheckingMode": "off"
} }
+27 -16
View File
@@ -1,6 +1,7 @@
import pandas as pd import pandas as pd
import configparser import configparser
import os.path import os.path
import argparse
""" """
Erstellung einer Excel-Datei mit aktuellen Preisen aus Sivas ist leicht möglich. Erstellung einer Excel-Datei mit aktuellen Preisen aus Sivas ist leicht möglich.
@@ -8,15 +9,7 @@ Diese soll in einer config-Datei für die Berechnung der rieter-eKalkulation ver
Den Parametern der rieter_ekalk werden die entsprechenden Sivas-Nummern zugewiesen, und damit die aktuellen Preise. Den Parametern der rieter_ekalk werden die entsprechenden Sivas-Nummern zugewiesen, und damit die aktuellen Preise.
Diese Zuordnung von Parametern und ihren aktuellen Preisen wird wieder in eine config-Datei geschrieben, die mit den Preisen der Sivas_Daten.cfg-Datei abzugleichen ist, auf die rieter_ekalk zugreift. Diese Zuordnung von Parametern und ihren aktuellen Preisen wird wieder in eine config-Datei geschrieben, die mit den Preisen der Sivas_Daten.cfg-Datei abzugleichen ist, auf die rieter_ekalk zugreift.
""" """
faktoren_sivas_Nummern = {
"zuleitung_75_m_unterverteiler_4x4mm2_400vac":75,
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc":75,
"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc":75,
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm":55,
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm":55,
"schnittstellen_8x1mm2_30m":30
}
class Kosten(): class Kosten():
""" """
Liest die Sivas-Excel-Liste ein und schreibt eine neue config Datei mit den aktuellen Preisen der in rieter-ekalk verwendeten Sivas-IDs. Liest die Sivas-Excel-Liste ein und schreibt eine neue config Datei mit den aktuellen Preisen der in rieter-ekalk verwendeten Sivas-IDs.
@@ -143,13 +136,31 @@ class Kosten():
df.to_excel(name, sheet_name="Preisänderungen", index_label="Sivas-Nummern") df.to_excel(name, sheet_name="Preisänderungen", index_label="Sivas-Nummern")
# lies die alte config und die Excel-Liste mit den Sivas-Daten
costs = Kosten()
not_found_in_sivas = dict()
latest_costs = costs.getNewPricesAsDict(not_found_in_sivas)
# schreibe die neue config mit den aktuellen Preisen
costs.writeNewConfig('Sivas_Abgleich.cfg')
# schreibe die Preisänderungen in eine Excel-Datei
costs.writePriceIncrements('Preis_Increments.xlsx')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='calculation of a system according to Bös', prog='ecalc')
parser.add_argument('-o', '--outfile', action='store', help='name of the output excel file', default="Preis_Increments.xlsx")
args = parser.parse_args()
zuordCfgFilePath = os.path.join(os.environ.get('ECALC_CFG'), "Zuordnung_Teilenummern.cfg")
sivasCfgFilePath = os.path.join(os.environ.get('ECALC_CFG'), "Sivas_Daten.cfg")
gridExportFilePath = os.path.join(os.environ.get('ECALC_CFG'), "grid_export.xlsx")
if not os.path.isfile(zuordCfgFilePath):
print("no Zuordnung_Teilenummern.cfg in ECALC_CFG")
if not os.path.isfile(sivasCfgFilePath):
print("no Sivas_Daten.cfg in ECALC_CFG")
if not os.path.isfile(gridExportFilePath):
print("no grid_export.xlsx with prices from SIVAS in ECALC_CFG")
# lies die alten config und die Excel-Liste mit den Sivas-Daten
costs = Kosten(zuordCfgFilePath, sivasCfgFilePath, gridExportFilePath)
not_found_in_sivas = dict()
latest_costs = costs.getNewPricesAsDict(not_found_in_sivas)
# schreibe die neue config mit den aktuellen Preisen
costs.writeNewConfig('Sivas_Abgleich.cfg')
# schreibe die Preisänderungen in eine Excel-Datei
outPath = os.path.join(os.environ.get('ECALC_WORK'), args.outfile)
costs.writePriceIncrements(outPath)
+2 -2
View File
@@ -77,8 +77,8 @@ sensor_spulenpruefung_voll_leer = 345.6954020423345
seilzugschalter = 223.74 seilzugschalter = 223.74
seil_fuer_seilzugschalter = 0.299 seil_fuer_seilzugschalter = 0.299
blitzleuchte = 64.29 blitzleuchte = 64.29
sensorkabel_je_20m = 12.9424 sensorkabel_je_20m = 6.4712
stopper_weichenkabel_je_5m = 15.406 stopper_weichenkabel_je_5m = 1.5406000000000002
motorkabel_je_30m = 21.212410173633465 motorkabel_je_30m = 21.212410173633465
kabelpritschen_leitern_200_60 = 7.859553174017099 kabelpritschen_leitern_200_60 = 7.859553174017099
kabelpritsche_rsm_100_60 = 5.95 kabelpritsche_rsm_100_60 = 5.95
+2
View File
@@ -0,0 +1,2 @@
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py %*
+2
View File
@@ -0,0 +1,2 @@
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg
+10
View File
@@ -0,0 +1,10 @@
@echo off
set ECALC=C:\Users\m.stangl\Documents\02-Verbesserungen\06-Rieter-Kalkulationen\Rieter-EKalk
set ECALC_BIN=%ECALC%\bin
set ECALC_WORK=%ECALC%\work
set ECALC_CFG=%ECALC%\cfg
set ECALC_LIB=%ECALC%\lib
set PATH=%ECALC%\bin;%PATH%
REM PYTHON_INCLUDE_DIR
REM PYTHON_LIBRARY
+101
View File
@@ -0,0 +1,101 @@
[HW_Einzelpreise]
schaltschrankgehaeuse_b1x800_zubehoer = 2877.85
schaltschrankgehaeuse_b2x800_zubehoer = 4972.14
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5994.88
sps_simatic_s7_cpu315_2_pn_dp = 2237.25
speicherkarte_fuer_sps_512_kb = 172.5
sps_simatic_s7_cpu317_2_pn_dp = 3957.0
speicherkarte_fuer_sps2_mb = 246.0
sps_simatic_s7_1515_2 = 2150.8
sps_simatic_s7_1517_3 = 4305.55
sps_simatic_s7_1518_4 = 5892.0
sps_et200_1512sp = 705.75
memory_card_2_gb = 515.9
et200_sp_ea_ebene = 417.48
netzwerk_fernwartung = 678.15
abgang_400v = 213.35
abgang_24_v = 99.41
anlagenrechner = 1427.05
anlagenrechner_ohne_bildschirm = 1269.8367055018189
pulteinbau_monitor_srline_rflat_24fhd = 968.0
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 326.0
netzwerk_display_adapter_lindy = 481.98
zusaetzlicher_bildschirm = 170.0
unterverteiler_fuer_1neuenhauser_pm = 701.05
unterverteiler_fuer_1flyer = 1634.74
unterverteiler_fuer_2flyer = 2324.64
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine = 701.05
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine = 701.05
unterverteiler_fuer_puffer = 2180.42
unterverteiler_fuer_5_rsm_fa = 2601.27
unterverteiler_fuer_10_rsm_fa = 2180.42
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar = 3059.28
unterverteiler_fuer_4_rsm_direct = 5897.51
unterverteiler_fuer_12_rsm_direct = 9125.58
unterverteiler_fuer_8_rsm_direct = 7330.96
busverteiler_6_rsm_direct = 1746.36
busverteiler_8_rsm_direct = 2052.26
antrieb_unidirektional_halbleiter = 71.39
antrieb_bidirektional_halbleiter = 76.2256573006879
antrieb_unidirektional_schuetz = 68.5
antrieb_bidirektional_schuetz = 123.18
motorschutzschalter = 37.77
wendeschuetzschaltung = 27.25
bedienstation_1fach_kpl = 38.52
bedienst_2fach_wechs_bcd_10f = 94.87
bedienstation_2fach_kpl = 67.48290909090909
halter_bedientableau_2fach = 34.84
bedienstation_3fach_kpl = 88.32432432432432
halter_bedientableau_3fach = 23.99
bedienstation_4fach_kpl = 102.50559670781892
halter_bedientableau_4fach = 30.49
bedienstation_6fach_kpl = 91.33
halter_bedientableau_6fach = 26.19
drucktaster_automatische_umfahrung = 46.57
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45 = 198.9
et200_sp_eingangskarte_8_de = 31.59
et200_sp_eingangskarte_16_de = 57.1
et200_sp_eingangskarte_8_do = 43.22
et200_sp_eingangskarte_16_do = 66.3
et200_sp_base_unit_neue_last_mit_potklemmen = 21.09
et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen = 13.39
et200_sp_base_unit_neue_last = 16.621860966339366
et200_sp_base_unit_links_gebrueckt = 9.815854569787543
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_slio = 164.20142857142858
slio_eingangskarte_4_de = 23.915
slio_eingangskarte_8_de = 31.68
slio_ausgangskarte_4_do = 31.59
slio_ausgangskarte_8_do = 31.59
slio_power_modul = 21.09
slio_4_x_dc_24v_4_x_dc_0v = 13.39
slio_8_x_dc_24v = 16.621860966339366
slio_8_x_dc_0v = 9.815854569787543
sensor_optisch_traverse = 29.41
reflexionslichtschranke_rsm_direct = 44.88
stoppersensor_induktiv_mit_halter = 38.08
sensor_spulenpruefung_voll_leer = 345.6954020423345
seilzugschalter = 223.74
seil_fuer_seilzugschalter = 0.299
blitzleuchte = 64.29
sensorkabel_je_20m = 12.9424
stopper_weichenkabel_je_5m = 15.406
motorkabel_je_30m = 21.212410173633465
kabelpritschen_leitern_200_60 = 7.859553174017099
kabelpritsche_rsm_100_60 = 5.95
kabelpritsche_rsm_50_35 = 6.1
klemmkasten_rsm = 142.96
klemmkasten_direct_in_rsm = 93.67
zuleitung_75_m_unterverteiler_4x4mm2_400vac = 149.959130518692
zuleitung_75_m_unterverteiler_12x4mm2_24_vdc = 414.68625
zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc = 414.68625
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm = 124.1031862745098
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm = 88.5401
profinetkabel = 44.4
schnittstellen_8x1mm2_30m = 33.07799374121692
[Preise durch Sivas nicht ermittelbar]
erdung = ----
kleinteile_rohre_schellen_kabelbinder_ect = ----
kabel_fuer_klemmkasten_und_bts_60m = ----
kabel_fuer_1fach_bts_zug_wechseln = ----
-1
View File
@@ -1 +0,0 @@
{"Bedienelemente_Steuerschrank": 1, "bedienstation_einfach_Zug_Wechseln": 14, "bedienstation_automatische_Umfahrung": 0, "bedienstation_zweifach_Wechs_BCD_10f": 0, "bedienstation_zweifach_Not_Aus_Reset": 10, "bedienst_dreifach": 0, "bedienst_vierfach": 0, "bedienst_sechsfach": 0, "EAs_Unterverteiler_direct": 0, "Sensor_Traversenabfrage_optisch": 68, "Reflexionslichtschranke_RSM_DIRECT": 0, "Sensor induktiv Flyer+PM": 4, "Seilzugschalter": 0, "Weiche": 35, "Weiche_nach_PM_bipolar": 0, "gemeinsame_Weichenrueckstellung": 0, "Dreifach_Weiche_DIRECT": 0, "Kreuzungsweiche": 1, "Stopper": 0, "RA_unidirektional": 4, "RA_unidirektional_abhebbar": 0, "RA_unidirektional_mit_gemeinsamer_Wendung": 0, "RA_unidirektional_ohne_SPS_Ansteuerung": 0, "RA_bidirektional": 30, "RA_bidirektional_abhebbar": 4, "RA_bidirektional_abhebbar_gemeinsWend": 0, "RA_bidirektional_ohne_SPS_Ansteuerung": 4, "RA_in_RSM_bidirektional": 0, "Doppelstreckenantrieb": 6, "Doppelstreckenantriebgemeinsame_Wendung": 0, "gemeinsame_Wendung": 0, "Frequenzumrichter": 0, "Ventil_RA_3_2_abhebbar": 4, "Ventil_Doppelstreckenantrieb_5_2_abhebbar": 6, "Blitzleuchte_Stoerung": 6, "Schnittstelle_Flyer_ElectroJet": 4, "Schnittstelle_Putzmaschine_Neuhauser": 0, "FEldbux_UV_EinAusgang": 7, "Spulenumsetzstation": 0}
-36
View File
@@ -1,36 +0,0 @@
import json
import math
anzahl = dict()
anzahl["et200_sp_ea_ebene"] = 1
anzahl["schaltschrank"] = 1
# a = 5 * math.ceil((anzahl.get("et200_sp_ea_ebene", 0) * anzahl.get("schaltschrank", 0) * 4 ))
a = (math.ceil((anzahl.get("et200_sp_ea_ebene", 0) * \
anzahl.get("schaltschrank", 0) * 4 + \
anzahl.get("unterverteiler_fuer_1neuenhauser_pm", 0) * 6 + \
anzahl.get("unterverteiler_fuer_1flyer", 0) * 4 + \
anzahl.get("unterverteiler_fuer_2flyer", 0) * 6 + \
anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0) * 5 + \
anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0) * 5 + \
anzahl.get("unterverteiler_fuer_puffer", 0) * 7 + \
anzahl.get("unterverteiler_fuer_5_rsm_fa", 0) * 4 + \
anzahl.get("unterverteiler_fuer_10_rsm_fa", 0) * 6 + \
anzahl.get("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar", 0) * 9 / 1.5)) + \
anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0))
# details = {'Name': "Bob",
# 'Age' :28}
# with open('convert.txt', 'w') as convert_file:
# convert_file.write(json.dumps(details))
# https://www.geeksforgeeks.org/write-a-dictionary-to-a-file-in-python/
# Michael Stangl13:56
# cat a.txt | sort > a_neu.txt
# Fragen:
# EAs Bedienstation automatische umfahrung in excel
-40
View File
@@ -1,40 +0,0 @@
Bedienst._2_fach_ Wechs._+_BCD_10f. _ DIR. 0
Bedienstation_1_fach_Not_Aus
Bedienstation_1_fach_Zug_wechseln 14
Bedienstation_2_fach_ Not_Aus_Reset 10
Bedienstation_3_fach 0
Bedienstation_4_fach 0
Bedienstation_6_fach 0
Blitzleuchte_Störung 6
Doppelstreckenantrieb 6
Doppelstreckenantriebgemeinsame_Wendung 0
Dreifach_Weiche 0
Drucktaster_automatische_Umfahrung 0
E/As_Unterverteiler_DIRECT 0
Feldbus_UV_Ein_/Ausgang 7
Frequenzumrichter 0
gemeinsame_Weichenrückstellung 0
gemeinsame_Wendung 0
Kreuzungsweiche 1
RA_in_RSM;_bidirektional;_1_gemeinsame_Wendung_je_Seite;_je_Antrieb_ein_Motorschutzschalter 0
RA_bidirektional 30
RA_bidirektional_abhebbar 4
RA_bidirektional_abhebbar_gemeins._Wend. 0
RA_bidirektional;_ohne_SPS_Ansteuerung 4
RA_unidirektional 4
RA_unidirektional_abhebbar_ohne_SPS_Ansteuerung 0
RA_unidirektional_mit_gemeinsamer_Wendung 0
RA_unidirektional_abhebbar 0
Reflexionslichtschranke_RSM_ DIRECT 0
Schnittstelle_Flyer_ Electro_Jet 4
Schnittstelle_Putzmaschine_ Electro_Jet
Schnittstelle_Putzmaschine_ Neuenhauser 0
Seilzugschalter 0
Sensor_Traversenabfrage_optisch 68
Sensor_induktiv_ Flyer+PM 4
Spulenumsetzstation 0
Stopper 0
Ventil_Doppelstreckenantrieb_ 5/2 _abhebbar 6
Ventil_RA_ 3/2 _abhebbar 4
Weiche 35
Weiche_nach_PM_ bipolar 0
-2700
View File
File diff suppressed because it is too large Load Diff
-2199
View File
File diff suppressed because it is too large Load Diff
-4014
View File
File diff suppressed because it is too large Load Diff
+110
View File
@@ -0,0 +1,110 @@
[allgemein]
SYSTEM= FA
RSM=14
Flyer=4
Flyer_Puffer=2
Flyer_Electrojet_incl_intergrierte_Putzmaschine=0
Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer=0
Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer=0
Neuenhauser-Putzmaschine=0
Neuenhauser-Putzmaschine_Vorpuffer=0
Neuenhauser-Putzmaschine_Nachpuffer=0
Cason-Putzmaschine=0
Cason-Putzmaschine_Vorpuffer=0
Cason-Putzmaschine_Nachpuffer=0
Puffer=1
Anzahl_der_Pufferstrecken_pro_Puffer=5
Begegnungsstrecke_Bypass=2
Turm=0
Turm_Anzahl_Wendlungen=0
[rsm_direct]
[rsm_fa]
Flex_A_Premium=False
Getriebe_in_der_Mitte=False
RSM_Einfahrt_Ein_Beidseitig=False
Sensor_optisch_Traverse_zusätzlich=6
Bedientableau_1fach_Korrektur=0
Bedientableau_2fach_Korrektur=4
Weiche_Korrektur=4
RRA_bi_Korrektur=0
RRA_bi_auf_Haupstrecke=10
RRA_uni_Begegnung=4
gemeinsame_Wendung=0
Mit_Drucktaster_Korrektur=0
Meldelampe_Überstrom_Korrektur=0
Hauptschalter_Ein-Meldung_Korrektur=0
Werma_Rundumleuchte_Störung_Korrektur=0
klemmkasten_rsm=2
[flyer_f40]
Flyer_Electrojet_incl_intergrierte_Putzmaschine_Korrektur=0
Single_Line_Durchfahrt=False
Nachpuffer=False
Sensor_optisch_Traverse_Korrektur=0
Sensor_induktiv_Spulenhalter_Korrektur=0
Bedientableau_2fach_Korrektur=0
Interface_Doffer_Korrektur=0
Weiche_Korrektur=0
Weiche_nach_Flyer_bipolar_Korrektur=0
Dreifachweiche=0
Wechsel=0
Stopper=0
RA_uni=0
RA_uni_abhebbar_Korrektur=0
RA_uni_ohne_SPS_Ansteuerung_Korrektur=0
RRA_BI_abhebbar_Korrektur=0
RRA_bi=0
RRA_bi_ohne_SPS_Ansteuerung_Korrektur=0
Doppelstreckenantrieb_Korrektur=0
RA_bi_abhebbar_unger_Schiene=0
Meldelampe_Überstrom_Korrektur=0
Hauptschalter_Ein-Meldung_Korrektur=0
Werma_Rundumleuchte_Störung_Korrektur=0
[neuenhauser]
Sensor_optisch_Traverse_Korrektur=0
Bedientableau_2fach_Korrektur=0
Weiche_Korrektur=0
RA_uni_abhebbar_Korrektur=0
Meldelampe_Überstrom_Korrektur=0
Hauptschalter_Ein-Meldung_Korrektur=0
Werma_Rundumleuchte_Störung_Korrektur=0
[flyer]
Sensor_optisch_Traverse_Korrektur=0
Weiche_Korrektur=0
Dreifachweiche=0
Wechsel_Korrektur=0
RA_bi_abhebbar_Korrektur=0
RA_bi=4
RA_bi_abhebbar_unger_Schiene=0
Meldelampe_Überstrom_Korrektur=0
Hauptschalter_Ein-Meldung_Korrektur=0
Werma_Rundumleuchte_Störung_Korrektur=0
[verbindungsstrecken_w]
Bedientableau_1fach=0
Bedientableau_2fach=0
Bedientableau_14fach=0
Weiche=0
Dreifachweiche=0
Kreuzungsweiche=1
Werma_Rundumleuchte_Störung=0
RA_uni=0
RA_uni_ohne_SPS_Ansteuerung=0
RA_bi=0
RA_bi_ohne_SPS-Ansteuerung=0
Doppelstreckenantrieb=0
[puffer]
Sensor_optisch_Traverse_Korrektur= 1
Weiche_Korrektur= 0
RA_bi_ungerade_Schiene= 2
Meldelampe_Überstrom_Korrektur= 0
Hauptschalter_Ein-Meldung_Korrektur= 0
[turm]
RA_bi_Korrektur=0
RA_bi_ohne_SPS_Korrektur=0