Compare commits

..

34 Commits

Author SHA1 Message Date
m.stangl 5701a2f5a0 tfk hinzugefügt 2023-08-16 17:19:05 +02:00
m.stangl 6ada3b48b4 Readme ergänzt 2023-07-18 14:00:19 +02:00
m.stangl 0f9ba338d4 Doku ergänzt 2023-07-18 13:56:05 +02:00
m.stangl b1d7c011c6 Endung in der .bat war noch falsch 2023-07-18 13:18:22 +02:00
m.stangl 0f61d73628 dateien auf die richtigen Aufrufe reduziert 2023-07-18 13:16:02 +02:00
m.stangl ee8989ff5f Beispiel für JayJay als .json oder als .xlsx Berechnung dazu 2023-07-18 13:14:42 +02:00
m.stangl d93e2b6c28 shell mit umgebungsvariablen dazu 2023-07-18 13:03:38 +02:00
m.stangl 6350ddf850 Ausgabe welche Config neu geschrieben wird hinzugefügt 2023-07-18 13:03:06 +02:00
m.stangl 844aedc02b json export gebaut. Weitere Ausgaben wie EMO hinzugefügt 2023-06-29 14:31:43 +02:00
m.stangl 7b4c761656 Mengenrüst als Ergebnis raus 2023-06-28 17:09:58 +02:00
m.stangl 66aa17a470 Ergebnisse mit mehreren Tabs rausgeschrieben 2023-06-20 16:06:34 +02:00
m.stangl 264b62681b Config mit den neuen PReisen aus Sivas für das jayjay gebaut. 2023-06-06 17:20:06 +02:00
m.stangl 2eeac20acd python files verschoben 2023-06-06 16:35:41 +02:00
m.stangl 193fa1d277 Dienstleistung und Ergebnis Sektion dazu gemacht 2023-06-06 15:55:05 +02:00
m.stangl 44a565aa11 Blöcke EAS und HW in die Eingabedatei hinzu 2023-06-06 15:41:34 +02:00
m.stangl 523d7ae097 Config Extrakt auch per .bat aufrufbar 2023-05-31 17:30:26 +02:00
m.stangl 3a0c1ed964 Ausgabe soll im Work Ordner landen 2023-05-31 17:27:10 +02:00
m.stangl 1f0e4137f2 Struktur des Programmes umgebaut, so dass Umgebungsvariablen verwendet werden. Configs werden vor Objekterzeugung geladen und in den Objekten gesetzt 2023-05-31 16:56:42 +02:00
m.stangl 4e70f5a600 Faktoren für Sensorkabel und Stopper aus den Längen in den Datenblätter aus SIVAS ergänzt 2023-05-31 09:14:45 +02:00
m.stangl f4e507b2a2 Multiplikation der Kabelpreise mit Ihren verwendeten Längen 2023-05-16 18:15:35 +02:00
m.stangl 4d011f2ebd Sektionüberschriften besser als Parameter übergeben 2023-05-16 17:38:54 +02:00
m.stangl 1d655e471e zusätzliche Faktoren für die Kabel eingeführt 2023-05-16 17:31:09 +02:00
m.stangl 2ff0e8b01d Zuordnung der Teilennummern auch als .cfg benannt 2023-05-16 16:56:29 +02:00
m.stangl 245592f215 Config Datei mit den PReisen aus Sivas heisst jetzt Sivas_Daten.cfg 2023-05-16 16:46:42 +02:00
m.stangl 4c64ee7f18 Session mit M. Schellhammer. Entfernung der nicht benötigten Keys 2023-04-27 16:26:26 +02:00
m.stangl cda9a6713d Typen in den Parametern ergänzt. pandas Aufruf in Abfrage_Sivas geändert. Configs verschoenert, da parser sonst nicht richtig arbeitete 2023-04-26 17:14:52 +02:00
m.stangl efdb57fd52 Teilenummern von M. Schellhammer dazu eingetragen 2023-04-06 14:54:09 +02:00
ljedlitschka 4dc8125155 begonnene Sivas-Nummerzuweisung der Bauteile, denen in der Excel-Liste keine Sivas-Nummern zugeordnet sind 2023-03-15 17:14:06 +01:00
ljedlitschka 3e497f94b8 Zuordnung Bauteile und ihre Sivas-Nummern 2023-03-15 17:03:53 +01:00
ljedlitschka 8d15e21a08 config Datei mit Stückpreisen, Zeiteinheiten.... 2023-03-15 17:02:14 +01:00
ljedlitschka 3140a15d8a faktoren Sivas Nummern begonnen 2023-03-15 17:00:37 +01:00
ljedlitschka be776feee4 Einfluss Korrekturfaktoren ergänzt 2023-03-15 15:51:53 +01:00
ljedlitschka c1ae3b680c Code Kommentare angefangen 2023-03-15 15:50:52 +01:00
ljedlitschka cd5514f96b readme Programmbeschreibung ergänzt 2023-03-15 15:50:15 +01:00
27 changed files with 2359 additions and 262 deletions
-1
View File
@@ -16,7 +16,6 @@ dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
+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"
}
File diff suppressed because one or more lines are too long
+102 -1
View File
@@ -1,3 +1,104 @@
# Rieter-EKalk
Umsetzung der Excel-Datei von Herrn Schellhammer und Boes in Python
## Installation
Am einfachsten erhält man das Programm auf seinem Rechner, indem man dieses Repository per git client auf den lokalen Rechner klont.
Anschliessend in den **/bin** Unterordner wechseln und die Umgebungsvariable ECALC in der *ecalc_setenv.bat* so modifizieren, dass der Pfad dort aufgeführt ist, an dem der Ordner nach dem clonen entstanden ist.
Angenommen ich clone das Projekt Rieter-Ekalk in meinen **Dokumente** Ordner in den den Unterordner **Rieter-Ekalk**, lautet der Pfad dann
```bat
set ECALC=C:\Users\<MeinWindowsUsername>\Documents\Rieter\Rieter-EKalk
```
Anschliessend kann man das Programm durch einen Doppelklick auf eine der Batch JayJay.bat Dateien gestartet werden.
## Aufruf des Programmes
Das Programm arbeitet nach dem **EVA** Prinzip, also **E**ingabe **V**erarbeitung **A**usgabe.
Es gibt keine Oberfläche. Alle Eingaben werden in eine Textdatei geschrieben, welche vom Programm eingelesen und verarbeitet wird. Anschliessend werden die Ergebnisse in dem Wunschformat ausgegeben. Möglich ist eine Form von Ergebnisse als .xlsx oder als .json Datei.
Excel ist natürlich Standard. Zum Vergleich zweier unterschiedlicher Preise empfiehlt sich die Verwendung des json formats.
Will man z.B. die Kosten des Projekts Jayjay berechnen, müssen alle Angaben zu diesem Projekt in eine Textdatei nach dem Vorbild der Datei jayjay.cfg geschrieben werden. Diese Datei muss sich im **work** Ordner befinden.
Anschliessend macht man einen **Doppelklick** auf ecalc_cmd.bat und erhält eine schwarze Dos Shell.
Ein Aufruf des Programmes erfolgt über das Tippen des Befehle in dieser Shell:
```bat
ecalc --infile=jayjay.cfg
```
Anschliessend sieht man, dass eine Ausgabe im Unterordner work entstanden ist. Per default entsteht eine *Excel Datei* **jayjay.xlsx** und ein *json file* **jayjay.json**.
Die Json Datei ist eine Textdatei (mit einem beliebigen Editor wie z.B. notepad öffnen) mit allen Preisen zum jeweiligen Projekt.
```json
{
"ergebnisse": {
"Installationsmaterial_vor_Ort": 20103.6,
"Material_in_LL": 27363.44,
"Schulung_vor_Ort_beim_Kunden": 0.0,
"SPS_Anlagenbetreuung": 0.0,
"Inbetriebnahmetest_Hardware_durch_Montage": 0.0,
"Bedienungsanleitung_Emmert": 1125.0,
"Dienstleistung_in_LL": 10129.5,
"Pflichtenheft": 0.0,
"Montage_elektrisch": 9424.8,
"Abnahme": 0.0,
"SPS_Programmierung": 11250.0,
"SPS_Inbetriebsetzung": 9750.0,
"PC_Inbetriebsetzung": 0.0,
"PC_Anlagenbetreuung": 0.0,
"PC_Programmierung_Visualisierung": 3375.0,
"Schaltschrankbau_extern_Mehrkosten": 0.0,
"Anlagenbetreuung_durch_Montage": 0.0,
"Inbetriebnahmeunterstützung_durch_Montage": 4680.0,
"E_Werkstatt": 6298.67,
"Dokumentation": 560.0,
"GESAMT": 104060.01
},
```
Da man normalerweise nicht gerne Befehle in einer Shell tippt, kann man diese Befehle auch in einer .bat Datei ausschreiben. Vor allem, wenn man bei der Auslegung einer Anlage diese Berechnung öfter ausführt.
Die folgenden Zeilen rufen das Programm zweimal auf. Einmal mit der Standard Configurations Datei **Sivas_Daten.cfg**, und ein zweites mal mit der Configurations Datei **newer_prices.cfg** mit erneuerten Hardwarepreisen.
```.bat
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --xlsx=JayJay_old.xlsx
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --xlsx=JayJay_new.xlsx --config=newer_prices.cfg
```
Die ersten Ergebnisse landen in der Excel Datei JayJay_old, die Berechnung mit den neueren Preisen in der Datie JayJay_new
## Aktualisierung der Preise aus der Sivas Datenbank
Da die Preise sich über die Zeit des Projektes ändern, gibt es im **bin** Ordner das Hilfspgrogramm **newSivasConfigExtract.bat**. Ein Doppelklickt schreibt eine neue Config Datei im Work Ordner mit allen neuen Preise der Teile, welche in dem Programm benötigt werden.
Für die Erneuerung der Config Datei *Sivas_Daten.cfg* muss zuerst ein Export aus dem Materialstammdaten von Sivas vorgenommen werden.
Nach dem Export aus Sivas, muss der Nutzer die neu entstandene Datei **grid_export.xlsx** in den **/cfg** Ordner dieses Programmes kopieren. Dann sollte der Nutzer die Datei auf die Spalten *"Teilenummer", "Bezeichnung1", "Laufende Materialkosten"* reduzieren, damit das Programm schneller läuft.
Der Doppelklick auf **newSivasConfigExtract.bat** schreibt dann im **/work** Ordner eine **neue .cfg Datei** mit den neuen Preisen.
Diese sollte man dann unter einem eigenen Namen in den **/cfg** Ordner kopieren, so dass man diesen Stand der Preise für eine Berechnung mit dem Schalter --config verwenden kann.
## Libraries und Programmdateien
*rieter_ekalk.py* : Umsetzung der Excel-Datei von Herrn Schellhammer und Boes in Python
*Abfrage_Sivas.py* : liest die aktuellen Preise der Bauteile aus einem Sivas_Export.xlsx aus und erzeugt eine config-Datei (Sivas_Abgleich.cfg) für einen Programmlauf mit den wahren Preisen
Bsp. für eine config-Datei mit den Sivas-Preisen in €:
```ini
[HW_Einzelpreise]
schaltschrankgehaeuse_b2x800_zubehoer = 9490.23
schaltschrankgehaeuse_b1x1200_plus_1x800_zubehoer = 10862.85
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 = 2162.35
sps_simatic_s7_1517_3 = 4328.65
sps_et200_1512sp = 705.75
```
+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 = 6.4712
stopper_weichenkabel_je_5m = 1.5406000000000002
motorkabel_je_30m = 21.212410173633465
kabelpritschen_leitern_200_60 = 7.859553174017099
kabelpritsche_rsm_100_60 = 5.95
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 = ----
@@ -0,0 +1,32 @@
[Preise durch Sivas nicht ermittelbar]
schaltschrankgehaeuse_b1x800_zubehoer = ----
sps_simatic_s7_1518_4 = 6ES7518-4AP00-0AB0 ### Siemens Bestellnummer Artikel nicht in Sivas geführt
abgang_400v = ---- ### 703000192 + 703000201 + 703001022 * 2 + 700004301 * 3 + 700004304 + 700004207 + 700004053 + 700004042 + 700004035
abgang_24_v = ---- ### 400009208 + 705002010 + 700004053 + 700004042 + 700004035 * 2 + 700004301 * 10 + 700004304 * 2 + 700004207
netzwerk_display_adapter_lindy = ---- ### 790011002
zusaetzlicher_bildschirm = ---- ### 711003028
antrieb_unidirektional_halbleiter = ---- ### 703001070
antrieb_bidirektional_halbleiter = ---- ### 703001075
antrieb_unidirektional_schuetz = ---- ### 703001049
antrieb_bidirektional_schuetz = ---- ### 703001058
motorschutzschalter = ---- ### 703001007
wendeschuetzschaltung = ---- ### 703001026 * 2 + 703001029
frequenzumrichter = ---- ### nicht mehr verwendet
bedienstation_1fach_kpl = ---- ### 790002022
drucktaster_automatische_umfahrung = ---- ### 400102435
halter_fuer_drucktaster = ---- ### fällt raus rsm fa mit drucktaster * 4 statt * 8
movimot_fu_mit_anschaltung = ---- ### fällt raus
sensorhalter_ohne_sensor = 827072xxx ### fällt raus
seilzugschalter = ---- ### 827336009 rsm fa seilzugschalter wenn deckblatt d5 ja *1 nicht mehr *2
seil_fuer_seilzugschalter = ---- ### 719001012 pro maschinenlänge doppelte länge(dann muss die Maschinenlänge aber noch angegeben werden)
spulenumsetzstation = ---- ### fällt raus
sensorkabel_je_20m = 722001xxx ### 722001022 (je 40m)
stopper_weichenkabel_je_5m = 722001xxx ### 722001040 (je 50m)
motorkabel_je_30m = ---- ### 725000015 (1 m)
kabelpritschen_leitern_200_60 = ----
klemmkasten_rsm = ----
erdung = ----
kleinteile_rohre_schellen_kabelbinder_ect = ----
kabel_fuer_klemmkasten_und_bts_60m = ----
kabel_fuer_1fach_bts_zug_wechseln = ----
profinetkabel = 726001xxx
+2
View File
@@ -0,0 +1,2 @@
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py %*
+4
View File
@@ -0,0 +1,4 @@
call ecalc_setenv.bat
REM nun vergleich als .json files
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --json=JayJay_old.json
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --config=Sivas_Daten_jayjay.cfg --json=JayJay_new.json
+3
View File
@@ -0,0 +1,3 @@
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --xlsx=JayJay_old.xlsx
python %ECALC_LIB%\calc_site.py --infile=jayjay.cfg --config=Sivas_Daten_jayjay.cfg --xlsx=JayJay_new.xlsx
+2
View File
@@ -0,0 +1,2 @@
call ecalc_setenv.bat
start
+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
+3
View File
@@ -0,0 +1,3 @@
call ecalc_setenv.bat
python %ECALC_LIB%\calc_site.py --infile=a_tfk.cfg --xlsx=ATFK_old.xlsx
python %ECALC_LIB%\calc_site.py --infile=a_tfk.cfg --config=Sivas_Daten_jayjay.cfg --xlsx=ATFK_new.xlsx
+2
View File
@@ -0,0 +1,2 @@
call ecalc_setenv.bat
python %ECALC_LIB%\Abfrage_Sivas.py %*
+274
View File
@@ -0,0 +1,274 @@
# HARDWARE
[HW_Einzelpreise]
# Schaltschrank Einzelpreis
schaltschrankgehaeuse_b1x800_zubehoer = 2000 #
schaltschrankgehaeuse_b2x800_zubehoer = 4663.45 # 790821101
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5720.94 # 790821102
sps_simatic_s7_cpu315_2_pn_dp = 2237.25 # 708003004
speicherkarte_fuer_sps_512_kb = 172.5 # 708003012
sps_simatic_s7_cpu317_2_pn_dp = 3957 # 708003007
speicherkarte_fuer_sps2_mb = 246 # 708003027
sps_simatic_s7_1515_2 = 2173.9 # 790008100
sps_simatic_s7_1517_3 = 3827.8 # 790008101
sps_simatic_s7_1518_4 = 5892 # 6ES7518-4AP00-0AB0
sps_et200_1512sp = 705.75 # 709000003
memory_card_2_gb = 515.9 # 708015094
et200_sp_ea_ebene = 0 # 790009001
netzwerk_fernwartung = 750 # 790011001
abgang_400v = 250 # ----
abgang_24_v = 250 # ----
anlagenrechner = 1657 # 790011000
anlagenrechner_ohne_bildschirm = 1487 # 1x 711003025 PC; 1x 711003026 Filter; 1x 711003111Softnet; 1x711003049 UPS
pulteinbau_monitor_srline_rflat_24fhd = 1200 # 400009058
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 350 # 400009057
netzwerk_display_adapter_lindy = 650 #
zusaetzlicher_bildschirm = 1100 #
unterverteiler_fuer_1neuenhauser_pm = 1000 # 790820210
unterverteiler_fuer_1flyer = 1000 # 790820207_A
unterverteiler_fuer_2flyer = 1000 # 790820209_A
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine = 1000 # 790820210
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine = 1000 # 790820210
unterverteiler_fuer_puffer = 1000 # 790820210_F
unterverteiler_fuer_5_rsm_fa = 1000 # 790820210_D
unterverteiler_fuer_10_rsm_fa = 1000 # 790820210_F
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar = 1000 # 790820209_C
unterverteiler_fuer_4_rsm_direct = 5584 # 790820300
unterverteiler_fuer_12_rsm_direct = 8258 # 790820302
unterverteiler_fuer_8_rsm_direct = 6736 # 790820301
busverteiler_6_rsm_direct = 1747.53 # 790801002
busverteiler_8_rsm_direct = 2052.26 # 790801001
antrieb_unidirektional_halbleiter = 90
antrieb_bidirektional_halbleiter = 105
antrieb_unidirektional_schuetz = 0
antrieb_bidirektional_schuetz = 0
motorschutzschalter = 0
wendeschuetzschaltung = 75
frequenzumrichter = 250
bedienstation_1fach_kpl = 59
bedienst_2fach_wechs_bcd_10f = 105 # 790002024
bedienstation_2fach_kpl = 65.63 # 790000020
halter_bedientableau_2fach = 42 # 825304006
bedienstation_3fach_kpl = 99 # 790000040
halter_bedientableau_3fach = 46 # 825304007
bedienstation_4fach_kpl = 121 # 790000045
halter_bedientableau_4fach = 52 # 825304003
bedienstation_6fach_kpl = 145.8 # 790000033
halter_bedientableau_6fach = 56 # 825304002
drucktaster_automatische_umfahrung = 28
halter_fuer_drucktaster = 33
# ET200_SP
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45 = 198.90 # 709000006
et200_sp_eingangskarte_8_de = 35 # 709000021
et200_sp_eingangskarte_16_de = 58 # 709000022
et200_sp_eingangskarte_8_do = 46 # 709000031_A
et200_sp_eingangskarte_16_do = 66.30 # 709000032
et200_sp_base_unit_neue_last_mit_potKlemmen = 23 # 709000014
et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen = 15 # 709000015
et200_sp_base_unit_neue_last = 19 # 709000011
et200_sp_base_unit_links_gebrueckt = 11 # 709000010
# SLIO
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO = 175 # 709000500
slio_eingangskarte_4_de = 31 # 709000510
slio_eingangskarte_8_de = 38 # 709000511
slio_ausgangskarte_4_do = 39 # 709000021
slio_ausgangskarte_8_do = 46 # 709000021
slio_power_modul = 18.22 # 709000014
slio_4_x_dc_24v_4_x_dc_0v = 18 # 709000015
slio_8_x_dc_24v = 18 # 709000011
slio_8_x_dc_0v = 13 # 709000010
# MATERIAL VOR ORT
movimot_fu_mit_anschaltung = 550
sensor_optisch_traverse = 27 # 827072200
sensorhalter_ohne_sensor = 8 # 827072xxx
reflexionslichtschranke_rsm_direct = 45 # 827072207
stoppersensor_induktiv_mit_halter = 63 # 827072205
sensor_spulenpruefung_voll_leer = 126 # 827072204 + 721000041
seilzugschalter = 150
seil_fuer_seilzugschalter = 0.40
blitzleuchte = 72 # 790000006
spulenumsetzstation = 0
# Angabe im Sivas je 40m
sensorkabel_je_20m = 25 # 722001xxx
# Angabe im Sivas je 50m
stopper_weichenkabel_je_5m = 20 # 722001xxx
# Angabe im Sivas je 50m
motorkabel_je_30m = 26
kabelpritschen_leitern_200_60 = 15
kabelpritsche_rsm_100_60 = 12 # 715000020
kabelpritsche_rsm_50_35 = 9 # 715003010
klemmkasten_rsm = 120
klemmkasten_direct_in_rsm = 122 # 790000703
erdung = 13
kleinteile_rohre_schellen_kabelbinder_ect = 750
kabel_fuer_klemmkasten_und_bts_60m = 145
kabel_fuer_1fach_bts_zug_wechseln = 50
zuleitung_75_m_unterverteiler_4x4mm2_400vac = 146 # 725000050
zuleitung_75_m_unterverteiler_12x4mm2_24_vdc = 450 # 725000057
zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc = 280 # 725000057
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm = 145 # 725000007
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm = 136 # 725000004
profinetkabel = 42 # 726001xxx
schnittstellen_8x1mm2_30m = 35.4 # 725000019
[HW_Zeiten Hardwareplanung]
# pro Einheit in min
schaltschrankgehaeuse_b1x1200_zubehoer = 4200
schaltschrankgehaeuse_b2x800_zubehoer = 4200
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 4800
sps_simatic_s7_cpu315_2_pn_dp = 0
speicherkarte_fuer_sps_512_kb = 0
sps_simatic_s7_cpu317_2_pn_dp = 0
speicherkarte_fuer_sps2_mb = 0
sps_simatic_s7_1515_2 = 0
sps_simatic_s7_1517_3 = 0
sps_simatic_s7_1518_4 = 0
sps_et200_1512sp = 0
memory_card_2_gb = 0
et200_sp_ea_ebene =60
netzwerk_fernwartung =0
abgang_400v =60
abgang_24_v =60
anlagenrechner =0
anlagenrechner_ohne_bildschirm = 0
pulteinbau_monitor_srline_rflat_24fhd = 60
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 0
netzwerk_display_adapter_lindy = 30
zusaetzlicher_bildschirm =0
schaltschrank =0
unterverteiler_fuer_1neuenhauser_pm =1200
unterverteiler_fuer_1flyer =720
unterverteiler_fuer_2flyer =1020
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine =810
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine =1110
unterverteiler_fuer_puffer =1200
unterverteiler_fuer_5_rsm_fa =960
unterverteiler_fuer_10_rsm_fa =1020
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar =1200
unterverteiler_fuer_4_rsm_direct =3000
unterverteiler_fuer_12_rsm_direct =4800
unterverteiler_fuer_8_rsm_direct =3900
busverteiler_6_rsm_direct =600
busverteiler_8_rsm_direct =960
[HW_Zeiten Elektro-Werkstatt]
# pro Einheit in min
schaltschrankgehaeuse_b1x1200_zubehoer = 2400
schaltschrankgehaeuse_b2x800_zubehoer = 4800
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5160
sps_simatic_s7_cpu315_2_pn_dp = 0
speicherkarte_fuer_sps_512_kb = 0
sps_simatic_s7_cpu317_2_pn_dp = 0
speicherkarte_fuer_sps2_mb = 0
sps_simatic_s7_1515_2 = 0
sps_simatic_s7_1517_3 = 0
sps_simatic_s7_1518_4 = 0
sps_et200_1512sp = 0
memory_card_2_gb = 0
et200_sp_ea_ebene =120
netzwerk_fernwartung =0
abgang_400v =90
abgang_24_v =90
anlagenrechner =0
anlagenrechner_ohne_bildschirm = 0
pulteinbau_monitor_srline_rflat_24fhd = 240
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 0
netzwerk_display_adapter_lindy = 120
zusaetzlicher_bildschirm =0
schaltschrank =0
unterverteiler_fuer_1neuenhauser_pm =1200
unterverteiler_fuer_1flyer =1020
unterverteiler_fuer_2flyer =1200
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine =1140
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine =1200
unterverteiler_fuer_puffer =1200
unterverteiler_fuer_5_rsm_fa =1020
unterverteiler_fuer_10_rsm_fa =1140
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar =1500
unterverteiler_fuer_4_rsm_direct =3600
unterverteiler_fuer_12_rsm_direct =4800
unterverteiler_fuer_8_rsm_direct =4200
busverteiler_6_rsm_direct =480
busverteiler_8_rsm_direct =480
antrieb_unidirektional_halbleiter =10
antrieb_bidirektional_halbleiter =10
antrieb_unidirektional_schuetz =0
antrieb_bidirektional_schuetz =0
motorschutzschalter =0
wendeschuetzschaltung =0
frequenzumrichter =0
bedienstation_1fach_kpl =25
bedienst_2fach_wechs_bcd_10f =90
bedienstation_2fach_kpl =30
halter_bedientableau_2fach =30
bedienstation_3fach_kpl =25
halter_bedientableau_3fach =30
bedienstation_4fach_kpl =30
halter_bedientableau_4fach =30
bedienstation_6fach_kpl =45
halter_bedienstation_6fach =30
drucktaster_automatische_umfahrung =15
halter_fuer_drucktaster =0
# ELEKTROMONTAGE
[Elektro-Montagezeiten]
Schaltschrank_aufstellen = 6.0 #(h/St)
Unterverteiler_montieren = 3.0 #(h/St)
Pritsche_montieren_umbauen_demontieren = 6.0 #(m/h)
Pritsche_in_RSM_montieren = 21.0
Motor_verdrahten_und_anschliessen = 0.9 #(h/Motor)
Tableau_befestigen_und_anschliessen = 0.75 #(h/St)
Schnittstelle_Flyer_Putzmaschine = 1.5 #(h/St)
Sensoren_montieren = 0.45 #(h/St)
Seilzugschalter_installieren = 4.0 #(h/St)
Blitzleuchte_installieren = 0.5 #(h/St)
Weiche_Stopper_anschliessen = 0.35 #(h/St)
Erdung = 0.5 #(h)
# ANSCHLUSSLEISTUNG
# Key ist die Leistung des jeweiligen Motors [kW]. Value ist der Leistungsfaktor
[cos phi]
0.09=0.77
0.12=0.77
0.18=0.77
0.37=0.7
0.55=0.77
0.75=0.73
1.1=0.81
# Key ist die Leistung des jeweiligen Motors [kW]. Value ist der Strom [A]
[Antriebsstrom]
0.09=0.4
0.12=0.55
0.18=0.75
0.37=1.24
0.55=1.62
0.75=1.75
1.1=2.55
# ERGEBNIS
#[€/h] der jeweiligen Kostenart
[Kosten pro h]
E_Werkstatt = 32
# Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel= extern = 50€ intern 32 € = Wert= 18€
Schaltschrankbau_extern_Mehrkosten = 0
Dienstleistung_in_LL = 45
Pflichtenheft = 60
SPS_Programmierung = 75
PC_Programmierung_Visualisierung = 75
Montage_elektrisch = 36
Inbetriebnahmetest_Hardware_durch_Montage = 36
SPS_Inbetriebsetzung = 75
PC_Inbetriebsetzung = 75
Inbetriebnahmeunterstützung_durch_Montage = 36
Dokumentation = 35
Bedienungsanleitung_Emmert = 75
Schulung_vor_Ort_beim_Kunden = 36
Abnahme = 36
SPS_Anlagenbetreuung = 75
PC_Anlagenbetreuung = 60
Anlagenbetreuung_durch_Montage = 36
+254
View File
@@ -0,0 +1,254 @@
[HW_Einzelpreise]
abgang_24_v = 99.41
abgang_400v = 213.35
anlagenrechner = 1427.05
anlagenrechner_ohne_bildschirm = 1269.8367055018189
antrieb_bidirektional_halbleiter = 76.2256573006879
antrieb_bidirektional_schuetz = 123.18
antrieb_unidirektional_halbleiter = 71.39
antrieb_unidirektional_schuetz = 68.5
bedienst_2fach_wechs_bcd_10f = 94.87
bedienstation_1fach_kpl = 38.52
bedienstation_2fach_kpl = 67.48290909090909
bedienstation_3fach_kpl = 88.32432432432432
bedienstation_4fach_kpl = 102.50559670781892
bedienstation_6fach_kpl = 91.33
blitzleuchte = 64.29
busverteiler_6_rsm_direct = 1746.36
busverteiler_8_rsm_direct = 2052.26
drucktaster_automatische_umfahrung = 46.57
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45 = 198.9
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_slio = 164.20142857142858
et200_sp_base_unit_links_gebrueckt = 9.815854569787543
et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen = 13.39
et200_sp_base_unit_neue_last = 16.621860966339366
et200_sp_base_unit_neue_last_mit_potklemmen = 21.09
et200_sp_ea_ebene = 417.48
et200_sp_eingangskarte_16_de = 57.1
et200_sp_eingangskarte_16_do = 66.3
et200_sp_eingangskarte_8_de = 31.59
et200_sp_eingangskarte_8_do = 43.22
halter_bedientableau_2fach = 34.84
halter_bedientableau_3fach = 23.99
halter_bedientableau_4fach = 30.49
halter_bedientableau_6fach = 26.19
kabelpritsche_rsm_100_60 = 5.95
kabelpritsche_rsm_50_35 = 6.1
kabelpritschen_leitern_200_60 = 7.859553174017099
klemmkasten_direct_in_rsm = 93.67
klemmkasten_rsm = 142.96
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 326.0
memory_card_2_gb = 515.9
motorkabel_je_30m = 21.212410173633465
motorschutzschalter = 37.77
netzwerk_display_adapter_lindy = 481.98
netzwerk_fernwartung = 678.15
profinetkabel = 44.4
pulteinbau_monitor_srline_rflat_24fhd = 968.0
reflexionslichtschranke_rsm_direct = 44.88
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5994.88
schaltschrankgehaeuse_b1x800_zubehoer = 2877.85
schaltschrankgehaeuse_b2x800_zubehoer = 4972.14
schnittstellen_8x1mm2_30m = 33.07799374121692
seil_fuer_seilzugschalter = 0.299
seilzugschalter = 223.74
sensor_optisch_traverse = 29.41
sensor_spulenpruefung_voll_leer = 345.6954020423345
sensorkabel_je_20m = 6.4712
slio_4_x_dc_24v_4_x_dc_0v = 13.39
slio_8_x_dc_0v = 9.815854569787543
slio_8_x_dc_24v = 16.621860966339366
slio_ausgangskarte_4_do = 31.59
slio_ausgangskarte_8_do = 31.59
slio_eingangskarte_4_de = 23.915
slio_eingangskarte_8_de = 31.68
slio_power_modul = 21.09
speicherkarte_fuer_sps_512_kb = 172.5
speicherkarte_fuer_sps2_mb = 246.0
sps_et200_1512sp = 705.75
sps_simatic_s7_1515_2 = 2150.8
sps_simatic_s7_1517_3 = 4305.55
sps_simatic_s7_1518_4 = 5892.0
sps_simatic_s7_cpu315_2_pn_dp = 2237.25
sps_simatic_s7_cpu317_2_pn_dp = 3957.0
stopper_weichenkabel_je_5m = 1.5406000000000002
stoppersensor_induktiv_mit_halter = 38.08
unterverteiler_fuer_10_rsm_fa = 2180.42
unterverteiler_fuer_12_rsm_direct = 9125.58
unterverteiler_fuer_1flyer = 1634.74
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine = 701.05
unterverteiler_fuer_1neuenhauser_pm = 701.05
unterverteiler_fuer_2flyer = 2324.64
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine = 701.05
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar = 3059.28
unterverteiler_fuer_4_rsm_direct = 5897.51
unterverteiler_fuer_5_rsm_fa = 2601.27
unterverteiler_fuer_8_rsm_direct = 7330.96
unterverteiler_fuer_puffer = 2180.42
wendeschuetzschaltung = 27.25
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm = 88.5401
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm = 124.1031862745098
zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc = 414.68625
zuleitung_75_m_unterverteiler_12x4mm2_24_vdc = 414.68625
zuleitung_75_m_unterverteiler_4x4mm2_400vac = 149.959130518692
zusaetzlicher_bildschirm = 170.0
[HW_Zeiten Hardwareplanung]
# pro Einheit in min
schaltschrankgehaeuse_b1x1200_zubehoer = 4200
schaltschrankgehaeuse_b2x800_zubehoer = 4200
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 4800
sps_simatic_s7_cpu315_2_pn_dp = 0
speicherkarte_fuer_sps_512_kb = 0
sps_simatic_s7_cpu317_2_pn_dp = 0
speicherkarte_fuer_sps2_mb = 0
sps_simatic_s7_1515_2 = 0
sps_simatic_s7_1517_3 = 0
sps_simatic_s7_1518_4 = 0
sps_et200_1512sp = 0
memory_card_2_gb = 0
et200_sp_ea_ebene =60
netzwerk_fernwartung =0
abgang_400v =60
abgang_24_v =60
anlagenrechner =0
anlagenrechner_ohne_bildschirm = 0
pulteinbau_monitor_srline_rflat_24fhd = 60
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 0
netzwerk_display_adapter_lindy = 30
zusaetzlicher_bildschirm =0
schaltschrank =0
unterverteiler_fuer_1neuenhauser_pm =1200
unterverteiler_fuer_1flyer =720
unterverteiler_fuer_2flyer =1020
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine =810
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine =1110
unterverteiler_fuer_puffer =1200
unterverteiler_fuer_5_rsm_fa =960
unterverteiler_fuer_10_rsm_fa =1020
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar =1200
unterverteiler_fuer_4_rsm_direct =3000
unterverteiler_fuer_12_rsm_direct =4800
unterverteiler_fuer_8_rsm_direct =3900
busverteiler_6_rsm_direct =600
busverteiler_8_rsm_direct =960
[HW_Zeiten Elektro-Werkstatt]
# pro Einheit in min
schaltschrankgehaeuse_b1x1200_zubehoer = 2400
schaltschrankgehaeuse_b2x800_zubehoer = 4800
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 5160
sps_simatic_s7_cpu315_2_pn_dp = 0
speicherkarte_fuer_sps_512_kb = 0
sps_simatic_s7_cpu317_2_pn_dp = 0
speicherkarte_fuer_sps2_mb = 0
sps_simatic_s7_1515_2 = 0
sps_simatic_s7_1517_3 = 0
sps_simatic_s7_1518_4 = 0
sps_et200_1512sp = 0
memory_card_2_gb = 0
et200_sp_ea_ebene =120
netzwerk_fernwartung =0
abgang_400v =90
abgang_24_v =90
anlagenrechner =0
anlagenrechner_ohne_bildschirm = 0
pulteinbau_monitor_srline_rflat_24fhd = 240
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 0
netzwerk_display_adapter_lindy = 120
zusaetzlicher_bildschirm =0
schaltschrank =0
unterverteiler_fuer_1neuenhauser_pm =1200
unterverteiler_fuer_1flyer =1020
unterverteiler_fuer_2flyer =1200
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine =1140
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine =1200
unterverteiler_fuer_puffer =1200
unterverteiler_fuer_5_rsm_fa =1020
unterverteiler_fuer_10_rsm_fa =1140
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar =1500
unterverteiler_fuer_4_rsm_direct =3600
unterverteiler_fuer_12_rsm_direct =4800
unterverteiler_fuer_8_rsm_direct =4200
busverteiler_6_rsm_direct =480
busverteiler_8_rsm_direct =480
antrieb_unidirektional_halbleiter =10
antrieb_bidirektional_halbleiter =10
antrieb_unidirektional_schuetz =0
antrieb_bidirektional_schuetz =0
motorschutzschalter =0
wendeschuetzschaltung =0
frequenzumrichter =0
bedienstation_1fach_kpl =25
bedienst_2fach_wechs_bcd_10f =90
bedienstation_2fach_kpl =30
halter_bedientableau_2fach =30
bedienstation_3fach_kpl =25
halter_bedientableau_3fach =30
bedienstation_4fach_kpl =30
halter_bedientableau_4fach =30
bedienstation_6fach_kpl =45
halter_bedienstation_6fach =30
drucktaster_automatische_umfahrung =15
halter_fuer_drucktaster =0
# ELEKTROMONTAGE
[Elektro-Montagezeiten]
Schaltschrank_aufstellen = 6.0 #(h/St)
Unterverteiler_montieren = 3.0 #(h/St)
Pritsche_montieren_umbauen_demontieren = 6.0 #(m/h)
Pritsche_in_RSM_montieren = 21.0
Motor_verdrahten_und_anschliessen = 0.9 #(h/Motor)
Tableau_befestigen_und_anschliessen = 0.75 #(h/St)
Schnittstelle_Flyer_Putzmaschine = 1.5 #(h/St)
Sensoren_montieren = 0.45 #(h/St)
Seilzugschalter_installieren = 4.0 #(h/St)
Blitzleuchte_installieren = 0.5 #(h/St)
Weiche_Stopper_anschliessen = 0.35 #(h/St)
Erdung = 0.5 #(h)
# ANSCHLUSSLEISTUNG
# Key ist die Leistung des jeweiligen Motors [kW]. Value ist der Leistungsfaktor
[cos phi]
0.09=0.77
0.12=0.77
0.18=0.77
0.37=0.7
0.55=0.77
0.75=0.73
1.1=0.81
# Key ist die Leistung des jeweiligen Motors [kW]. Value ist der Strom [A]
[Antriebsstrom]
0.09=0.4
0.12=0.55
0.18=0.75
0.37=1.24
0.55=1.62
0.75=1.75
1.1=2.55
# ERGEBNIS
#[€/h] der jeweiligen Kostenart
[Kosten pro h]
E_Werkstatt = 32
# Wenn Schaltschrankbau extern die Mehrkosten eintragen Standard = 18 € Hier wird nur die Diverenz zwischen Kosten intern(32€) und dem externen Kosten eingetragen. Beispiel= extern = 50€ intern 32 € = Wert= 18€
Schaltschrankbau_extern_Mehrkosten = 0
Dienstleistung_in_LL = 45
Pflichtenheft = 60
SPS_Programmierung = 75
PC_Programmierung_Visualisierung = 75
Montage_elektrisch = 36
Inbetriebnahmetest_Hardware_durch_Montage = 36
SPS_Inbetriebsetzung = 75
PC_Inbetriebsetzung = 75
Inbetriebnahmeunterstützung_durch_Montage = 36
Dokumentation = 35
Bedienungsanleitung_Emmert = 75
Schulung_vor_Ort_beim_Kunden = 36
Abnahme = 36
SPS_Anlagenbetreuung = 75
PC_Anlagenbetreuung = 60
Anlagenbetreuung_durch_Montage = 36
+147
View File
@@ -0,0 +1,147 @@
[HW_Einzelpreise]
# Schaltschrank Einzelpreis
schaltschrankgehaeuse_b1x800_zubehoer = 790821100
schaltschrankgehaeuse_b2x800_zubehoer = 790821101
schaltschrankgehaeuse_b1x1200+1x800_zubehoer = 790821102
sps_simatic_s7_cpu315_2_pn_dp = 708003004
speicherkarte_fuer_sps_512_kb = 708003012
sps_simatic_s7_cpu317_2_pn_dp = 708003007
speicherkarte_fuer_sps2_mb = 708003027
sps_simatic_s7_1515_2 = 790008100
sps_simatic_s7_1517_3 = 790008101
sps_simatic_s7_1518_4 = 708015006
sps_et200_1512sp = 709000003
memory_card_2_gb = 708015094
et200_sp_ea_ebene = 790009001
netzwerk_fernwartung = 790011001
abgang_400v= 790003001
#abgang_400v= 790003002
abgang_24_v = 790004001
anlagenrechner = 790011000
anlagenrechner_ohne_bildschirm = 711003025 + 711003026 + 711003111 + 711003049
pulteinbau_monitor_srline_rflat_24fhd = 400009058
kurzhubtastatur_kbt06_mit_touchpad_uslayout = 400009057
netzwerk_display_adapter_lindy = 790011002
zusaetzlicher_bildschirm = 711003028
unterverteiler_fuer_1neuenhauser_pm = 790820210
unterverteiler_fuer_1flyer = 790820207_A
unterverteiler_fuer_2flyer = 790820209_A
unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine = 790820210
unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine = 790820210
unterverteiler_fuer_puffer = 790820210_F
unterverteiler_fuer_5_rsm_fa = 790820210_D
unterverteiler_fuer_10_rsm_fa = 790820210_F
unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar = 790820209_C
unterverteiler_fuer_4_rsm_direct = 790820300
unterverteiler_fuer_12_rsm_direct = 790820302
unterverteiler_fuer_8_rsm_direct = 790820301
busverteiler_6_rsm_direct = 790801002
busverteiler_8_rsm_direct = 790801001
antrieb_unidirektional_halbleiter = 703001070
antrieb_bidirektional_halbleiter = 703001075
antrieb_unidirektional_schuetz = 703001049
antrieb_bidirektional_schuetz = 703001059
motorschutzschalter = 703001007
wendeschuetzschaltung = 703001026
bedienstation_1fach_kpl = 790002022
bedienst_2fach_wechs_bcd_10f = 790002024
bedienstation_2fach_kpl = 790000020
halter_bedientableau_2fach = 825304006
bedienstation_3fach_kpl = 790000040
halter_bedientableau_3fach = 825304007
bedienstation_4fach_kpl = 790000045
halter_bedientableau_4fach = 825304003
bedienstation_6fach_kpl = 790000033
halter_bedientableau_6fach = 825304002
drucktaster_automatische_umfahrung = 400102435
# ET200_SP
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45 = 709000006
et200_sp_eingangskarte_8_de = 709000021
et200_sp_eingangskarte_16_de = 709000022_A
et200_sp_eingangskarte_8_do = 709000031_A
et200_sp_eingangskarte_16_do = 709000032_A
et200_sp_base_unit_neue_last_mit_potKlemmen = 709000014
et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen = 709000015
et200_sp_base_unit_neue_last = 709000011
et200_sp_base_unit_links_gebrueckt = 709000010
# SLIO
et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO = 709000500
slio_eingangskarte_4_de = 709000510
slio_eingangskarte_8_de = 709000511
slio_ausgangskarte_4_do = 709000021
slio_ausgangskarte_8_do = 709000021
slio_power_modul = 709000014
slio_4_x_dc_24v_4_x_dc_0v = 709000015
slio_8_x_dc_24v = 709000011
slio_8_x_dc_0v = 709000010
# MATERIAL VOR ORT
sensor_optisch_traverse = 827072200
reflexionslichtschranke_rsm_direct = 827072207
stoppersensor_induktiv_mit_halter = 827072205
sensor_spulenpruefung_voll_leer = 827072204 + 721000041
# rsm fa seilzugschalter wenn deckblatt d5 ja *1 nicht mehr *2
seilzugschalter = 827336009
# pro maschinenlänge doppelte länge(dann muss die Maschinenlänge aber noch angegeben werden)
seil_fuer_seilzugschalter = 719001012
blitzleuchte = 790000006
sensorkabel_je_20m = 722001022
stopper_weichenkabel_je_5m = 722001040
motorkabel_je_30m = 725000015
kabelpritschen_leitern_200_60 = 715000061
kabelpritsche_rsm_100_60 = 715000020
kabelpritsche_rsm_50_35 = 715003010
klemmkasten_rsm = 790000700
klemmkasten_direct_in_rsm = 790000703
erdung = ----
kleinteile_rohre_schellen_kabelbinder_ect = ----
kabel_fuer_klemmkasten_und_bts_60m = ----
kabel_fuer_1fach_bts_zug_wechseln = ----
zuleitung_75_m_unterverteiler_4x4mm2_400vac = 725000050
zuleitung_75_m_unterverteiler_12x4mm2_24_vdc = 725000057
zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc = 725000057
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm = 725000007
zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm = 725000004
profinetkabel = 726001053
schnittstellen_8x1mm2_30m = 725000019
#WENDEKOMBIBAUSATZ = 703001029
#kabelpritschen_leitern_200_60 = ----
#klemmkasten_rsm = ----
#erdung = ----
#kleinteile_rohre_schellen_kabelbinder_ect = ----
#kabel_fuer_klemmkasten_und_bts_60m = ----
#kabel_fuer_1fach_bts_zug_wechseln = ----
[Faktoren]
# wenn SIVAS Meterpreise gespeichert hat, muss man die Preise für die Variable
# nach dem Auslesen entsprechend mit der Länge multiplizieren
motorkabel_je_30m=30
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
sensorkabel_je_20m = 0.5
stopper_weichenkabel_je_5m = 0.1
-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
+70 -20
View File
@@ -1,27 +1,28 @@
import pandas as pd
import configparser
import os.path
import argparse
"""
Erstellung einer Excel-Datei mit aktuellen Preisen aus Sivas ist leicht möglich.
Diese soll in einer config-Datei für die Berechnung der rieter-eKalkulation verwendet werden.
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 Daten_cfg.txt-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.
"""
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.
"""
def __init__(self, pathNew="Zuordnung_Teilenummern.txt", pathOld="Daten_cfg.txt", sivasData="grid_export.xlsx"):
def __init__(self, pathNew="Zuordnung_Teilenummern.cfg", pathOld="Sivas_Daten.cfg", sivasData="grid_export.xlsx"):
"""
:param pathNew: cfg-Datei, die den Bauteilen ihre Sivas-Nummern zuweist z.B. "schaltschrankgehaeuse_b2x800_zubehoer = 790821101"
:param pathOld: cfg-Datei, die in rieter_ekalk verwendet wird und den Bauteilen Preise zuweist z.B. "schaltschrankgehaeuse_b2x800_zubehoer = 4663.45"
:param sivasData: Excel-Datei mit Sivas-Nummern und entsprechenden Preisen, Überschrift: Teilenummer, Herstellkosten
:param sivasData: Excel-Datei mit Sivas-Nummern und entsprechenden Preisen, Überschrift: Teilenummer, Laufende Materialkosten
"""
df = pd.read_excel(sivasData, header=0, index_col="Teilenummer")
tab = df.drop(columns=["Bezeichnung1"])
self._kosten = tab.to_dict()
df = pd.read_excel(sivasData, header=0, index_col=0, usecols=["Teilenummer", "Laufende Materialkosten" ])
self._kosten = df.to_dict()
self._given = True
if os.path.exists(pathNew):
@@ -33,7 +34,10 @@ class Kosten():
self._default = configparser.ConfigParser(inline_comment_prefixes="#")
self._default.read_file(open(pathOld))
# wird verwendet, um die Werte der alten config zu speichern
self._HW_Einzelpreise = None
def exists(self):
return self._given
@@ -43,14 +47,17 @@ class Kosten():
:param not_found_keys: Dict von Bauteilen, denen eine Nummer zugeordnet ist, die in Sivas nicht existiert z.B. {'schaltschrankgehaeuse_b1x800_zubehoer': '----'}
"""
faktoren = self.getZuordnungTeilenummernAsDict("Faktoren")
newDict = {}
for key, val in self.getZuordnungTeilenummernAsDict().items():
for key, val in self.getZuordnungTeilenummernAsDict("HW_Einzelpreise").items():
number = val.strip()
self.getPriceFromNumber(key, number, newDict, not_found_keys)
if "+" in number:
del not_found_keys[key]
split_sivas_ids = number.split('+')
self.getPriceFromAddedNumbers(key, split_sivas_ids, newDict, not_found_keys)
if key in faktoren:
newDict[key] *= float(faktoren[key])
return newDict
@@ -68,8 +75,8 @@ class Kosten():
for summand in split_sivas_ids:
summand = summand.strip()
# summand: einzelner Summand z.B. '827072204'
if summand in self._kosten["Herstellkosten"]:
cost = self._kosten["Herstellkosten"][summand]
if summand in self._kosten["Laufende Materialkosten"]:
cost = self._kosten["Laufende Materialkosten"][summand]
# cost: Einzelpreis eines Summanden [€]
if type(cost) is type(int) or type(float):
price += cost
@@ -89,21 +96,21 @@ class Kosten():
:param newDict: z.B. {'schaltschrankgehaeuse_b2x800_zubehoer':9490.23, ...}
:param not_found_keys: Dict von Bauteilen, denen eine Nummer zugeordnet ist, die in Sivas nicht existiert z.B. {'schaltschrankgehaeuse_b1x800_zubehoer': '----'}
"""
if number in self._kosten["Herstellkosten"]:
price = self._kosten["Herstellkosten"][number]
if number in self._kosten["Laufende Materialkosten"]:
price = self._kosten["Laufende Materialkosten"][number]
if price is int or float:
newDict.update({key: price})
else:
not_found_keys.update({key:number})
def getDefaultDictAsFloat(self):
def getDefaultDictAsFloat(self, section_name):
res = dict()
for key, val in self._default.items("HW_Einzelpreise"):
for key, val in self._default.items(section_name):
res[key] = float(val)
return res
def getZuordnungTeilenummernAsDict(self):
def getZuordnungTeilenummernAsDict(self, section_name):
res = dict()
for key, val in self._zuordnung.items("HW_Einzelpreise"):
for key, val in self._zuordnung.items(section_name):
res[key] = val
return res
@@ -111,11 +118,54 @@ class Kosten():
config = configparser.ConfigParser()
config["HW_Einzelpreise"] = latest_costs
config["Preise durch Sivas nicht ermittelbar"] = not_found_in_sivas
print("writing new config file", name)
with open(name, 'w') as configfile:
config.write(configfile)
costs = Kosten()
not_found_in_sivas = dict()
latest_costs = costs.getNewPricesAsDict(not_found_in_sivas)
costs.writeNewConfig('Sivas_Abgleich.cfg')
def writePriceIncrements(self, name='Preis_Increments.xlsx'):
not_found_in_sivas = dict()
latest_costs = self.getNewPricesAsDict(not_found_in_sivas)
sivas_numbers = list()
old_prices = list()
new_prices = list()
for sivas_number in latest_costs.keys():
sivas_numbers.append(sivas_number)
old_prices.append(self.getDefaultDictAsFloat("HW_Einzelpreise").get(sivas_number))
new_prices.append(latest_costs.get(sivas_number))
data = {"Sivas-Nummern":sivas_numbers, "Alte Preise":old_prices, "Neue Preise":new_prices}
df = pd.DataFrame.from_dict(data)
print("write price increments", name)
df.to_excel(name, sheet_name="Preisänderungen", index_label="Sivas-Nummern")
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()
base = os.environ.get('ECALC_CFG')
zuordCfgFilePath = os.path.join(base, "Zuordnung_Teilenummern.cfg")
sivasCfgFilePath = os.path.join(base, "Sivas_Daten.cfg")
gridExportFilePath = os.path.join(base, "grid_export.xlsx")
if not os.path.exists(zuordCfgFilePath):
print("no Zuordnung_Teilenummern.cfg in ECALC_CFG")
if not os.path.exists(sivasCfgFilePath):
print("no Sivas_Daten.cfg in ECALC_CFG")
if not os.path.exists(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
outCfg = os.path.join(os.environ.get('ECALC_WORK'), "Sivas_Abgleich.cfg")
costs.writeNewConfig(outCfg)
# schreibe die Preisänderungen in eine Excel-Datei
outPath = os.path.join(os.environ.get('ECALC_WORK'), args.outfile)
costs.writePriceIncrements(outPath)
+463
View File
@@ -0,0 +1,463 @@
import rieter_ekalk as rek
import pandas as pd
import argparse
import json
import os
import configparser
order_dienstleistungen = [
"Pflichtenheft_Autom_Schnittstellen",
"Erstellung_Steuerungslayout",
"Schaltplanerstellung_incl_Korrekturen",
"Projektkoordination",
"Materialdispo",
"Abstimmung_mit_E_Werkstatt",
"Erstellen_E_Montageunterlagen",
"PC_Installation",
"Oberfläche_Simulation",
"SPS_Test_im_Haus_Simulation",
"Bedienerhandbuch",
"SPS_Doku",
"PC_Doku",
"Summe_Dienstleistungen_Hardwareplanung",
"Schaltschrankbau",
"Unterverteilerbau",
"Klemmkastenbau_je_2h",
"Bedientableaubau",
"Vormontage_im_Haus",
"Summe_Dienstleistungen_Elektrowerkstatt",
"Summe_Dienstleistungen_in_LL",
]
order_ergebnisse = [
"E_Werkstatt",
"Schaltschrankbau_extern_Mehrkosten",
"Dienstleistung_in_LL",
"Pflichtenheft",
"SPS_Programmierung",
"PC_Programmierung_Visualisierung",
"Montage_elektrisch",
"Inbetriebnahmetest_Hardware_durch_Montage",
"SPS_Inbetriebsetzung",
"PC_Inbetriebsetzung",
"Inbetriebnahmeunterstützung_durch_Montage",
"Dokumentation",
"Bedienungsanleitung_Emmert",
"Schulung_vor_Ort_beim_Kunden",
"Abnahme",
"SPS_Anlagenbetreuung",
"PC_Anlagenbetreuung",
"Anlagenbetreuung_durch_Montage",
"GESAMT",
]
order_hardware = [
"schaltschrankgehaeuse_b1x1200_zubehoer",
"schaltschrankgehaeuse_b2x800_zubehoer",
"schaltschrankgehaeuse_b1x1200+1x800_zubehoer",
"sps_simatic_s7_cpu315_2_pn_dp",
"speicherkarte_fuer_sps_512_kb",
"sps_simatic_s7_cpu317_2_pn_dp",
"speicherkarte_fuer_sps2_mb",
"sps_simatic_s7_1515_2",
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
"abgang_400v",
"abgang_24_v",
"anlagenrechner",
"anlagenrechner_ohne_bildschirm",
"pulteinbau_monitor_srline_rflat_24fhd",
"kurzhubtastatur_kbt06_mit_touchpad_uslayout",
"netzwerk_display_adapter_lindy",
"zusaetzlicher_bildschirm",
"schaltschrank",
"unterverteiler_fuer_1neuenhauser_pm",
"unterverteiler_fuer_1flyer",
"unterverteiler_fuer_2flyer",
"unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine",
"unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine",
"unterverteiler_fuer_puffer",
"unterverteiler_fuer_5_rsm_fa",
"korrektur_5_rsm_zusaetzlich_im_unterverteiler",
"unterverteiler_fuer_10_rsm_fa",
"korrektur_10_rsm_zusaetzlich_im_unterverteiler",
"unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar",
"korrektur_3_rsm_zusaetzlich_im_unterverteiler",
"unterverteiler_fuer_4_rsm_direct",
"korrektur_4_rsm_zusaetzlich_im_unterverteiler",
"unterverteiler_fuer_12_rsm_direct",
"korrektur_12_rsm_zusaetzlich_im_unterverteiler",
"unterverteiler_fuer_8_rsm_direct",
"korrektur_8_rsm_direct_zusaetzlich_im_unterverteiler",
"busverteiler_6_rsm_direct",
"korrektur_6_rsm_zusaetzlich_im_busverteiler",
"busverteiler_8_rsm_direct",
"korrektur_8_rsm_zusaetzlich_im_busverteiler",
"antrieb_unidirektional_halbleiter",
"antrieb_bidirektional_halbleiter",
"antrieb_unidirektional_schuetz",
"antrieb_bidirektional_schuetz",
"motorschutzschalter",
"wendeschuetzschaltung",
"frequenzumrichter",
"bedienstation_1fach_kpl",
"bedienst_2fach_wechs_bcd_10f",
"bedienstation_2fach_kpl",
"halter_bedientableau_2fach",
"bedienstation_3fach_kpl",
"halter_bedientableau_3fach",
"bedienstation_4fach_kpl",
"halter_bedientableau_4fach",
"bedienstation_6fach_kpl",
"halter_bedienstation_6fach",
"drucktaster_automatische_umfahrung",
"halter_fuer_drucktaster",
"ET200_SP",
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45",
"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45",
"et200_sp_eingangskarte_8_de",
"korrektur_et200_sp_eingangskarte_8_de",
"et200_sp_eingangskarte_16_de",
"et200_sp_eingangskarte_8_do",
"korrektur_et200_sp_eingangskarte_8_do",
"et200_sp_eingangskarte_16_do",
"et200_sp_base_unit_neue_last_mit_potKlemmen",
"korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen",
"et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen",
"et200_sp_base_unit_neue_last",
"korrektur_et200_sp_base_unit_neue_last",
"et200_sp_base_unit_links_gebrueckt",
"korrektur_et200_sp_base_unit_links_gebrueckt",
"SLIO",
"et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO",
"korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO",
"slio_eingangskarte_4_de",
"korrektur_slio_eingangskarte_4_de",
"slio_eingangskarte_8_de",
"korrektur_slio_eingangskarte_8_de",
"slio_ausgangskarte_4_do",
"korrektur_slio_ausgangskarte_4_do",
"slio_ausgangskarte_8_do",
"korrektur_slio_ausgangskarte_8_do",
"slio_power_modul",
"korrektur_slio_power_modul",
"slio_4_x_dc_24v_4_x_dc_0v",
"korrektur_slio_4_x_dc_24v_4_x_dc_0v",
"slio_8_x_dc_24v",
"slio_8_x_dc_0v",
"korrektur_slio_8_x_dc_0v",
"movimot_fu_mit_anschaltung",
"sensor_optisch_traverse",
"sensorhalter_ohne_sensor",
"reflexionslichtschranke_rsm_direct",
"stoppersensor_induktiv_mit_halter",
"sensor_spulenpruefung_voll_leer",
"seilzugschalter",
"seil_fuer_seilzugschalter",
"blitzleuchte",
"spulenumsetzstation",
"sensorkabel_je_20m",
"stopper_weichenkabel_je_5m",
"motorkabel_je_30m",
"kabelpritschen_leitern_200_60",
"kabelpritsche_rsm_100_60",
"kabelpritsche_rsm_50_35",
"klemmkasten_rsm",
"klemmkasten_direct_in_rsm",
"erdung",
"kleinteile_rohre_schellen_kabelbinder_ect",
"kabel_fuer_klemmkasten_und_bts_60m",
"kabel_fuer_1fach_bts_zug_wechseln",
"zuleitung_75_m_unterverteiler_4x4mm2_400vac",
"zuleitung_75_m_unterverteiler_12x4mm2_24_vdc",
"korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc",
"zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc",
"korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc",
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_5_mm",
"zuleitung_55_m_klemmkasten_rsm_mitte_14g1_0_mm",
"profinetkabel",
"korrektur_profinetkabel",
"schnittstellen_8x1mm2_30m",
"Summe_Landsberg",
"Summe_vorOrt",
"Summe_gesamt",
]
order_eas = [
'bedienstation_1fach_Not_Aus',
'bedienstation_einfach_Zug_Wechseln',
'bedienstation_automatische_Umfahrung',
'bedienstation_zweifach_Wechs_BCD_10f',
'bedienstation_zweifach_Not_Aus_Reset',
'bedienst_dreifach',
'bedienst_vierfach',
'bedienst_sechsfach',
'EAs_Unterverteiler_direct',
'Sensor_Traversenabfrage_optisch',
'Reflexionslichtschranke_RSM_DIRECT',
'Sensor induktiv Flyer+PM',
'Seilzugschalter',
'Weiche',
'Weiche_nach_PM_bipolar',
'gemeinsame_Weichenrueckstellung',
'Dreifach_Weiche_DIRECT',
'Kreuzungsweiche',
'Stopper',
'Ventil_RA_3_2_abhebbar',
'Ventil_Doppelstreckenantrieb_5_2_abhebbar',
'Blitzleuchte_Stoerung',
'Schnittstelle_Flyer_ElectroJet',
'Schnittstelle_Putzmaschine_Neuhauser',
'FEldbux_UV_EinAusgang',
'Spulenumsetzstation',
'RA_unidirektional',
'RA_unidirektional_abhebbar',
'RA_unidirektional_mit_gemeinsamer_Wendung',
'RA_unidirektional_ohne_SPS_Ansteuerung',
'RA_bidirektional',
'RA_bidirektional_abhebbar',
'RA_bidirektional_abhebbar_gemeinsWend',
'RA_bidirektional_ohne_SPS_Ansteuerung',
'RA_in_RSM_bidirektional',
'Doppelstreckenantrieb',
'Doppelstreckenantriebgemeinsame_Wendung',
'gemeinsame_Wendung',
'Frequenzumrichter',
'Summe Komponenten',
'Summe Komponenten inkcl. Reserve',
]
order_emo = [
'Schaltschrank_aufstellen',
'Unterverteiler_montieren',
'Pritsche_montieren_umbauen_demontieren',
'Pritsche_in_RSM_montieren',
'Motor_verdrahten_und_anschliessen',
'Tableau_befestigen_und_anschliessen',
'Schnittstelle_Flyer_Putzmaschine',
'Sensoren_montieren',
'Seilzugschalter_installieren',
'Blitzleuchte_installieren',
'Weiche_Stopper_anschliessen',
'Erdung',
'Summe',
'Summe inkl. Mehraufwand',
]
class cfg():
"""
Liest die config-Datei ein, in der Stückpreise und Zeiteinheiten pro Bauteil wie in der rieter_ekalk Excel-Datei verwendet angegeben sind, und schreibt sie in ein Dictionary.
"""
def __init__(self, path="Sivas_Daten.cfg"):
"""
:param path: Die config-Datei, in der Stückpreise und Zeiteinheiten der jeweiligen Bauteile aufgelistet sind z.B.[HW_Einzelpreise]
# Schaltschrank Einzelpreis
schaltschrankgehaeuse_b1x800_zubehoer = 2000
"""
self._hasConfig = True
if os.path.exists(path):
self._cfg = configparser.ConfigParser(inline_comment_prefixes="#")
self._cfg.optionxform = str
self._cfg.read_file(open(path))
else:
self._hasConfig = False
self._cfg = None
def exists(self):
return self._hasConfig
def isfloat(self, num):
try:
float(num)
return True
except ValueError:
return False
def getTypedDict(self, section:str):
"""
Schreibt die Zuordnungen von Bauteil:Stückpreis/Zeiteinheit (je nach gewählter Überschrift) aus der config-Datei in ein Dictionary.
:param section: Überschrift in der config-Datei z.B. "HW_Einzelpreise"
"""
if section not in self._cfg.sections():
return dict()
res = dict()
for key, val in self._cfg.items(section):
if val.lower() in ['true']:
res[key] =True
elif val.lower() in ['false']:
res[key] =False
elif val.startswith("-"):
res[key] = float(val)
elif self.isfloat(val):
res[key] = float(val)
else:
res[key] = val
return res
def to_dicts(eas:rek.EA, hw:rek.HW, emo:rek.EMO, dl:rek.Dienstleistung, erg:rek.Ergebnis):
dEas = eas.getSEAs(order_eas)
dEas['Summe Komponenten'] = [eas.gesamt_E(), eas.gesamt_A()]
dEas['Summe Komponenten inkcl. Reserve'] = [eas.gesamt_E_incl_reserve(), eas.gesamt_A_incl_reserve()]
dhardware = hw.to_dict()
hoursEMO = emo.to_dict()
dDienstleistung = dl.to_dict()
dSummary = erg.summary_costs(hw)
return (dEas, dhardware, hoursEMO, dDienstleistung, dSummary)
def to_json(eas:rek.EA, hw:rek.HW, emo:rek.EMO, dl:rek.Dienstleistung, erg:rek.Ergebnis, outfile):
(dEas, hardware, hoursEMO, dienstleistung, ergebnisse) = to_dicts(eas, hw, emo, dl, erg)
dOut = {
'ergebnisse': ergebnisse,
'hardware': hardware,
'eas': dEas,
'dienstleistung': dienstleistung,
'emo': hoursEMO,
}
with open(outfile, 'w', encoding ='utf8') as json_file:
json.dump(dOut, json_file, ensure_ascii=False, indent=2)
def to_excel(eas:rek.EA, hw:rek.HW, emo:rek.EMO, dl:rek.Dienstleistung, erg:rek.Ergebnis, outfile):
(dEas, hardware, hoursEMO, dienstleistung, ergebnisse) = to_dicts(eas, hw, emo, dl, erg)
df_temp = pd.DataFrame.from_dict(data=dEas, orient='index', columns=['S.E', 'S.A'])
df_eas = pd.DataFrame(data=df_temp, index=order_eas)
df_temp = pd.DataFrame.from_dict(data=hardware, orient='index', columns=['Strück'])
df_hardware = pd.DataFrame(data=df_temp, index=order_hardware)
df_temp = pd.DataFrame.from_dict(data=hoursEMO, orient='index', columns=['Aufwand [h]'])
df_emo = pd.DataFrame(data=df_temp, index=order_emo)
df_temp = pd.DataFrame.from_dict(data=dienstleistung, orient='index', columns=['Aufwand [h]'])
df_dienst = pd.DataFrame(data=df_temp, index=order_dienstleistungen)
df_temp = pd.DataFrame.from_dict(data=ergebnisse, orient='index', columns=['Aufwand [€]'])
df_aufwand = pd.DataFrame(data=df_temp, index=order_ergebnisse)
#df = pd.DataFrame.from_dict(data=dienstleistung, orient='index', columns=['Dienstleistungen'])
with pd.ExcelWriter(outfile) as writer:
df_aufwand.to_excel(writer, sheet_name='Kostenaufstellung')
df_hardware.to_excel(writer, sheet_name='Hardware')
df_dienst.to_excel(writer, sheet_name='Dienstleistungen')
df_eas.to_excel(writer, sheet_name='EAs')
df_emo.to_excel(writer, sheet_name='EMO')
# TODO Mengengerüst, ev. Anschlussleistung und Ausgangsstrom
def run_calc(infile, SivasConfig):
infileCfg = cfg(infile)
Anzahl_MG = infileCfg.getTypedDict("allgemein")
rsm_direct_eingabe = infileCfg.getTypedDict("rsm_direct")
rsm_fa_eingabe = infileCfg.getTypedDict("rsm_fa")
flyer_f40_eingabe = infileCfg.getTypedDict("flyer_f40")
neuenhauser_eingabe = infileCfg.getTypedDict("neuenhauser")
flyer_eingabe = infileCfg.getTypedDict("flyer")
verbindungsstrecken_w_eingabe = infileCfg.getTypedDict("verbindungsstrecken_w")
puffer_eingabe = infileCfg.getTypedDict("puffer")
turm_eingabe = infileCfg.getTypedDict("turm")
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)
anStr = SivasConfig.getTypedDict("Antriebsstrom")
cosPhi = SivasConfig.getTypedDict("cos phi")
al = rek.Anschlussl(anStr, cosPhi)
Anzahl_AL ={}
al.calc(Anzahl_AL, mg)
# self.assertEqual(al._ANZAHL.get("Anzahl_Motor"), 48)
# self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor"), 26.4)
# self.assertAlmostEqual(al._ANZAHL.get("Summe_Strom_Motor_SPS_Peripherie"), 29.4)
# self.assertAlmostEqual(al._ANZAHL.get("GZF"), 16.2)
# self.assertAlmostEqual(al._ANZAHL.get("Res"), 1.62)
# self.assertAlmostEqual(al._ANZAHL.get("Gesamtstrom"), 17.82)
# self.assertAlmostEqual(al._Anschlussspannung, 400)
# self.assertAlmostEqual(al._ANZAHL.get("Leistung"), 12.345696)
# self.assertAlmostEqual(al._ANZAHL.get("Gesamtanschlussleistung"), 13)
Anzahl_EAS = infileCfg.getTypedDict("EAS")
eas = rek.EA(Anzahl_EAS, mg)
hwep = SivasConfig.getTypedDict("HW_Einzelpreise")
hwhp = SivasConfig.getTypedDict("HW_Zeiten Hardwareplanung")
hwzew = SivasConfig.getTypedDict("HW_Zeiten Elektro-Werkstatt")
Anzahl_HW = infileCfg.getTypedDict("HW")
hw = rek.HW(hwep, hwhp, hwzew)
hw.calc(Anzahl_HW, mg, eas)
emoz = SivasConfig.getTypedDict("ElektSro-Montagezeiten")
emo = rek.EMO(emoz)
emo.calc(eas, hw, mg)
Anzahl_DL = infileCfg.getTypedDict("DL")
dl = rek.Dienstleistung(Anzahl_DL, hw)
Anzahl_Ergebnis = infileCfg.getTypedDict("Ergebnis")
kph = SivasConfig.getTypedDict("Kosten pro h")
erg = rek.Ergebnis(kph)
erg.calc(Anzahl_Ergebnis, hw, dl, emo)
return (eas, hw, emo, dl, erg)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='calculation of a system according to Bös', prog='ecalc')
parser.add_argument('-i', '--infile', action='store', help='name of the input file', default="jayjay.cfg")
parser.add_argument('-x', '--xlsx', action='store', help='name of the output .xlsx file. If none given, name of the input file is used.')
parser.add_argument('-c', '--config', action='store', help='name of the config file inside of cfg folder to use. Default is Sivas_Daten.cfg', default="Sivas_Daten.cfg")
parser.add_argument('-j', '--json', action='store', help='name of the json file as output. If none given, name of the input file is used. ')
args = parser.parse_args()
sivasCfgFilePath = os.path.join(os.environ.get('ECALC_CFG'), args.config)
RieterConfig = cfg(sivasCfgFilePath)
inFilePath = os.path.join(os.environ.get('ECALC_WORK'), args.infile)
if os.path.isfile(inFilePath):
(fname, ext) = os.path.splitext(args.infile)
(eas, hw, emo, dl, erg) = run_calc(inFilePath, RieterConfig)
if args.xlsx:
xlsPath = os.path.join(os.environ.get('ECALC_WORK'), args.xlsx)
else:
xlsPath = os.path.join(os.environ.get('ECALC_WORK'), fname + '.xlsx')
to_excel(eas, hw, emo, dl, erg, xlsPath)
if args.json:
jsonPath = os.path.join(os.environ.get('ECALC_WORK'), args.json)
else:
jsonPath = os.path.join(os.environ.get('ECALC_WORK'), fname + '.json')
to_json(eas, hw, emo, dl, erg, jsonPath)
else:
print("no such file in ECALC_WORK")
# os.environ.get('ECALC_BIN')
# os.environ.get('ECALC_WORK')
# os.environ.get('ECALC_CFG')
# os.environ.get('ECALC_LIB')
+223 -146
View File
@@ -1,30 +1,6 @@
import math
import json
import configparser
import os.path
JSON_IDENT = 5
class cfg():
def __init__(self, path="Daten_cfg.txt"):
self._hasConfig = True
if os.path.exists(path):
self._cfg = configparser.ConfigParser(inline_comment_prefixes="#")
self._cfg.read_file(open(path))
else:
self._hasConfig = False
self._cfg = None
def exists(self):
return self._hasConfig
def getDictAsFloat(self, section):
res = dict()
for key, val in self._cfg.items(section):
res[key] = float(val)
return res
RieterConfig = cfg()
class MG():
def __init__(self, deckblatt:dict, **kwargs):
@@ -171,9 +147,17 @@ class MG():
def get_deckblatt_value(self, key):
"""
Gibt eingegebenen Wert des Eingabeparameters zurück.
:param key: Name eines Eingabeparameters im Deckblatt z.B. "Begegnungsstrecke_Bypass"
"""
return self._deckblatt.get(key, 0)
def get_value_of_object(self, objectname, key):
def get_value_of_object(self, objectname:str, key:str):
"""
:param objectname: Name der Klasse, zu der das Bauteil gehört, dessen Wert man wissen will z.B. "puffer"
:param key: Name des Bauteils, dessen Wert ermittelt werden soll z.B. "Sensor_optisch_Traverse"
"""
# Deckblatt
if (objectname.lower() == "deckblatt"):
return self._deckblatt.get(key)
@@ -906,7 +890,7 @@ class Puffer():
self._Mengen["Meldelampe_Überstrom_Korrektur"] = anzahl.get("Meldelampe_Überstrom_Korrektur", 0)
self._Mengen["Hauptschalter_Ein_Meldung"] = self._Puffer_Anzahl + anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
self._Mengen["Hauptschalter_Ein-Meldung_Korrektur"] = anzahl.get("Hauptschalter_Ein-Meldung_Korrektur", 0)
def anzahl(self, partname, defaultv = 0):
def anzahl(self, partname:str, defaultv = 0):
return self._Mengen.get(partname, defaultv)
# Turm
class Turm():
@@ -941,7 +925,6 @@ class Turm():
def anzahl(self, partname, defaultv = 0):
return self._Mengen.get(partname, defaultv)
class EA():
stueckzahl = {
@@ -1126,7 +1109,13 @@ class EA():
return self.EAs[partname][1]
def anzahl(self, partname, defaultv = 0):
return self._Anzahl.get(partname, defaultv)
def getSEAs(self, partnames:list):
res = dict()
for partname in partnames:
if partname not in self.EAs:
continue
res[partname] = [self.get_SE(partname), self.get_SA(partname)]
return res
def get_SE(self, partname):
num_of_e = self.getE(partname)
zahl = self.anzahl(partname)
@@ -1173,7 +1162,6 @@ class EA():
SiemensS7_32DA_incl_reserve = math.ceil(self.gesamt_A_incl_reserve()/32)
return (SiemensS7_32DE_incl_reserve, SiemensS7_32DA_incl_reserve)
class HW():
#TODO "bedienstation_1fach_Not_Aus" keine Anzahl manuelle eingabe aber dann noch bezüge in mengengerüst und hardware; muss noch eingepflegt werden
mengen = {
@@ -1189,7 +1177,6 @@ class HW():
"sps_simatic_s7_1517_3": 0,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
#"memory_card_256_mb": 0
#"memory_card_2_gb": 0
"et200_sp_ea_ebene":1,
"netzwerk_fernwartung":1,
@@ -1343,7 +1330,6 @@ class HW():
"sps_simatic_s7_1517_3": 3827.8, # 790008101
"sps_simatic_s7_1518_4": 5892, # 6ES7518-4AP00-0AB0
"sps_et200_1512sp": 705.75, # 709000003
"memory_card_256_mb": 0, # 708015093
"memory_card_2_gb": 515.9, # 708015094
"et200_sp_ea_ebene": 0, # 790009001
"netzwerk_fernwartung": 750, # 790011001
@@ -1468,8 +1454,8 @@ class HW():
"schnittstellen_8x1mm2_30m": 35.4, # 725000019
}
if RieterConfig.exists():
ep.update(RieterConfig.getDictAsFloat("HW_Einzelpreise"))
# if RieterConfig.exists():
# ep.update(RieterConfig.getDictAsFloat("HW_Einzelpreise"))
# Zeit pro Einheit in min
zpe_dienstl_hardwareplanung = {
"schaltschrankgehaeuse_b1x1200_zubehoer": 4200,
@@ -1483,7 +1469,6 @@ class HW():
"sps_simatic_s7_1517_3": 0,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
"memory_card_256_mb": 0,
"memory_card_2_gb": 0,
"et200_sp_ea_ebene":60,
"netzwerk_fernwartung":0,
@@ -1512,8 +1497,8 @@ class HW():
"busverteiler_8_rsm_direct":960
}
if RieterConfig.exists():
zpe_dienstl_hardwareplanung.update(RieterConfig.getDictAsFloat("HW_Zeiten Hardwareplanung"))
# if RieterConfig.exists():
# zpe_dienstl_hardwareplanung.update(RieterConfig.getDictAsFloat("HW_Zeiten Hardwareplanung"))
zpe_e_werkstatt = {
"schaltschrankgehaeuse_b1x1200_zubehoer": 2400,
"schaltschrankgehaeuse_b2x800_zubehoer": 4800,
@@ -1526,7 +1511,6 @@ class HW():
"sps_simatic_s7_1517_3": 0,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
"memory_card_256_mb": 0,
"memory_card_2_gb": 0,
"et200_sp_ea_ebene":120,
"netzwerk_fernwartung":0,
@@ -1574,8 +1558,8 @@ class HW():
"halter_fuer_drucktaster":0,
}
if RieterConfig.exists():
zpe_e_werkstatt.update(RieterConfig.getDictAsFloat("HW_Zeiten Elektro-Werkstatt"))
# if RieterConfig.exists():
# zpe_e_werkstatt.update(RieterConfig.getDictAsFloat("HW_Zeiten Elektro-Werkstatt"))
Keys_of_Vor_Ort = [
"movimot_fu_mit_anschaltung",
"sensor_optisch_traverse",
@@ -1620,7 +1604,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -1633,49 +1616,87 @@ class HW():
"netzwerk_display_adapter_lindy",
"zusaetzlicher_bildschirm"
]
def __init__(self, anzahl:dict, mg: type[MG], eas: type[EA]):
def __init__(self, hwep=None, hwhp=None, hwew=None):
if hwep:
self.set_config_data("HW_Einzelpreise", hwep)
if hwhp:
self.set_config_data("HW_Zeiten Hardwareplanung", hwhp)
if hwew:
self.set_config_data("HW_Zeiten Elektro-Werkstatt", hwew)
def anzahl_set(self, numbers:dict):
self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = numbers.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = numbers.get("schaltschrankgehaeuse_b2x800_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = numbers.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0)
self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = numbers.get("sps_simatic_s7_cpu315_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps_512_kb"] = numbers.get("speicherkarte_fuer_sps_512_kb", 0)
self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = numbers.get("sps_simatic_s7_cpu317_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps2_mb"] = numbers.get("speicherkarte_fuer_sps2_mb", 0)
self._anzahl["sps_simatic_s7_1515_2"] = numbers.get("sps_simatic_s7_1515_2", 0)
self._anzahl["sps_simatic_s7_1517_3"] = numbers.get("sps_simatic_s7_1517_3", 0)
self._anzahl["sps_simatic_s7_1518_4"] = numbers.get("sps_simatic_s7_1518_4", 0)
self._anzahl["sps_et200_1512sp"] = numbers.get("sps_et200_1512sp", 0)
self._anzahl["et200_sp_ea_ebene"] = numbers.get("et200_sp_ea_ebene", 0)
self._anzahl["netzwerk_fernwartung"] = numbers.get("netzwerk_fernwartung", 0)
self._anzahl["abgang_400v"] = numbers.get("abgang_400v", 0)
self._anzahl["abgang_24_v"] = numbers.get("abgang_24_v", 0)
self._anzahl["anlagenrechner"] = numbers.get("anlagenrechner", 0)
self._anzahl["anlagenrechner_ohne_bildschirm"] = numbers.get("anlagenrechner_ohne_bildschirm", 0)
self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = numbers.get("pulteinbau_monitor_srline_rflat_24fhd", 0)
self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = numbers.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0)
self._anzahl["netzwerk_display_adapter_lindy"] = numbers.get("netzwerk_display_adapter_lindy", 0)
self._anzahl["zusaetzlicher_bildschirm"] = numbers.get("zusaetzlicher_bildschirm", 0)
self._anzahl["unterverteiler_fuer_1flyer"] = numbers.get("unterverteiler_fuer_1flyer", 0)
self._anzahl["unterverteiler_fuer_2flyer"] = numbers.get("unterverteiler_fuer_2flyer", 0)
self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = numbers.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = numbers.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_puffer"] = numbers.get("unterverteiler_fuer_puffer", 0)
self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = numbers.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = numbers.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["unterverteiler_fuer_4_rsm_direct"] = numbers.get("unterverteiler_fuer_4_rsm_direct", 0)
self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = numbers.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = numbers.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["unterverteiler_fuer_8_rsm_direct"] = numbers.get("unterverteiler_fuer_8_rsm_direct", 0)
self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = numbers.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = numbers.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = numbers.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["ET200_SP"] = numbers.get("ET200_SP", 0)
self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = numbers.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0)
self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = numbers.get("korrektur_et200_sp_eingangskarte_8_de", 0)
self._anzahl["et200_sp_eingangskarte_16_de"] = numbers.get("et200_sp_eingangskarte_16_de", 0)
self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = numbers.get("korrektur_et200_sp_eingangskarte_8_do", 0)
self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = numbers.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0)
self._anzahl["SLIO"] = numbers.get("SLIO", 0)
self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = numbers.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0)
self._anzahl["korrektur_slio_eingangskarte_4_de"] = numbers.get("korrektur_slio_eingangskarte_4_de", 0)
self._anzahl["korrektur_slio_eingangskarte_8_de"] = numbers.get("korrektur_slio_eingangskarte_8_de", 0)
self._anzahl["korrektur_slio_ausgangskarte_4_do"] = numbers.get("korrektur_slio_ausgangskarte_4_do", 0)
self._anzahl["korrektur_slio_ausgangskarte_8_do"] = numbers.get("korrektur_slio_ausgangskarte_8_do", 0)
self._anzahl["korrektur_slio_power_modul"] = numbers.get("korrektur_slio_power_modul", 0)
self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = numbers.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0)
self._anzahl["slio_8_x_dc_24v"] = numbers.get("slio_8_x_dc_0v", 0)
self._anzahl["korrektur_slio_8_x_dc_0v"] = numbers.get("korrektur_slio_8_x_dc_0v", 0)
def calc(self, anzahl:dict, mg: type[MG], eas: type[EA]):
self._anzahl = self.mengen
self._anzahl["schaltschrankgehaeuse_b1x1200_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b2x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b2x800_zubehoer", 0)
self._anzahl["schaltschrankgehaeuse_b1x1200+1x800_zubehoer"] = anzahl.get("schaltschrankgehaeuse_b1x1200+1x800_zubehoer", 0)
self._anzahl["sps_simatic_s7_cpu315_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu315_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps_512_kb"] = anzahl.get("speicherkarte_fuer_sps_512_kb", 0)
self._anzahl["sps_simatic_s7_cpu317_2_pn_dp"] = anzahl.get("sps_simatic_s7_cpu317_2_pn_dp", 0)
self._anzahl["speicherkarte_fuer_sps2_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb", 0)
self._anzahl["sps_simatic_s7_1515_2"] = anzahl.get("sps_simatic_s7_1515_2", 0)
self._anzahl["sps_simatic_s7_1517_3"] = anzahl.get("sps_simatic_s7_1517_3", 0)
self._anzahl["sps_simatic_s7_1518_4"] = anzahl.get("sps_simatic_s7_1518_4", 0)
self._anzahl["sps_et200_1512sp"] = anzahl.get("sps_et200_1512sp", 0)
self.anzahl_set(anzahl)
self._anzahl["memory_card_256_mb"] = self.anzahl("speicherkarte_fuer_sps2_mb") + \
self.anzahl("sps_simatic_s7_1515_2") + \
self.anzahl("sps_simatic_s7_1517_3") + \
self.anzahl("sps_simatic_s7_1518_4")
self._anzahl["memory_card_2_gb"] = self.anzahl("sps_simatic_s7_1518_4")
self._anzahl["et200_sp_ea_ebene"] = anzahl.get("et200_sp_ea_ebene", 0)
self._anzahl["netzwerk_fernwartung"] = anzahl.get("netzwerk_fernwartung", 0)
self._anzahl["abgang_400v"] = anzahl.get("abgang_400v", 0)
self._anzahl["abgang_24_v"] = anzahl.get("abgang_24_v", 0)
self._anzahl["anlagenrechner"] = anzahl.get("anlagenrechner", 0)
self._anzahl["anlagenrechner_ohne_bildschirm"] = anzahl.get("anlagenrechner_ohne_bildschirm", 0)
self._anzahl["pulteinbau_monitor_srline_rflat_24fhd"] = anzahl.get("pulteinbau_monitor_srline_rflat_24fhd", 0)
self._anzahl["kurzhubtastatur_kbt06_mit_touchpad_uslayout"] = anzahl.get("kurzhubtastatur_kbt06_mit_touchpad_uslayout", 0)
self._anzahl["netzwerk_display_adapter_lindy"] = anzahl.get("netzwerk_display_adapter_lindy", 0)
self._anzahl["zusaetzlicher_bildschirm"] = anzahl.get("zusaetzlicher_bildschirm", 0)
self._anzahl["schaltschrank"] = eas.stueckzahl.get("Bedienelemente_Steuerschrank")
self._anzahl["unterverteiler_fuer_1neuenhauser_pm"] = mg.get_deckblatt_value("Neuenhauser-Putzmaschine")
self._anzahl["unterverteiler_fuer_1flyer"] = anzahl.get("unterverteiler_fuer_1flyer", 0)
self._anzahl["unterverteiler_fuer_2flyer"] = anzahl.get("unterverteiler_fuer_2flyer", 0)
self._anzahl["unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_1flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine"] = anzahl.get("unterverteiler_fuer_2flyer_f40_mit_integrierter_putzmaschine", 0)
self._anzahl["unterverteiler_fuer_puffer"] = anzahl.get("unterverteiler_fuer_puffer", 0)
self._anzahl["korrektur_5_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["korrektur_10_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_10_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["memory_card_2_gb"] = self.anzahl("sps_simatic_s7_1518_4")
if (mg.get_value_of_object("rsm_fa", "Flex_A_Premium") == False):
num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM")
self._anzahl["unterverteiler_fuer_5_rsm_fa"] = math.ceil(num_rsms/5) + anzahl.get("korrektur_5_rsm_zusaetzlich_im_unterverteiler", 0)
@@ -1686,17 +1707,9 @@ class HW():
else:
num_rsms = mg.get_value_of_object("rsm_fa", "Anzahl_RSM")
self._anzahl["unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar"] = math.ceil(num_rsms/3)
self._anzahl["unterverteiler_fuer_4_rsm_direct"] = anzahl.get("unterverteiler_fuer_4_rsm_direct", 0)
self._anzahl["korrektur_4_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_4_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["korrektur_12_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["unterverteiler_fuer_12_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") / 12) +\
anzahl.get("korrektur_12_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["unterverteiler_fuer_8_rsm_direct"] = anzahl.get("unterverteiler_fuer_8_rsm_direct", 0)
self._anzahl["korrektur_8_rsm_zusaetzlich_im_unterverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["busverteiler_6_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /6) + anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["korrektur_6_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_6_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["korrektur_8_rsm_zusaetzlich_im_busverteiler"] = anzahl.get("korrektur_8_rsm_zusaetzlich_im_busverteiler", 0)
self._anzahl["busverteiler_8_rsm_direct"] = math.ceil(mg.get_deckblatt_value("Anzahl") /8) + anzahl.get("korrektur_8_rsm_zusaetzlich_im_unterverteiler", 0)
self._anzahl["antrieb_unidirektional_halbleiter"] = \
mg.zusammenfassung().get("RA_uni") +\
@@ -1717,6 +1730,9 @@ class HW():
mg.get_value_of_object("rsm_fa", "RRA_bi") +\
mg.get_value_of_object("rsm_fa", "RRA_bi_ohne_SPS_Ansteuerung")
self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0)
self._anzahl["schaltschrank"] = eas.stueckzahl.get("Bedienelemente_Steuerschrank")
self._anzahl["frequenzumrichter"] = eas.anzahl("frequenzumrichter", 0)
# # summe_motorstarter
@@ -1730,11 +1746,9 @@ class HW():
self._anzahl["halter_bedientableau_4fach"] = self.anzahl("bedienstation_4fach_kpl")
self._anzahl["bedienstation_6fach_kpl"] = eas.anzahl("bedienstation_6fach_kpl", 0)
self._anzahl["halter_bedientableau_6fach"] = self.anzahl("bedienstation_6fach_kpl")
self._anzahl["drucktaster_automatische_umfahrung"] = mg.zusammenfassung().get("Drucktaster_automatische_Umfahrung", 0)
self._anzahl["halter_fuer_drucktaster"] = self.anzahl("drucktaster_automatische_umfahrung")
# # summe_bedienstationen
self._anzahl["ET200_SP"] = anzahl.get("ET200_SP", 0)
self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * 2 * self.anzahl("schaltschrank") +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\
self.anzahl("unterverteiler_fuer_1flyer") +\
@@ -1746,8 +1760,6 @@ class HW():
self.anzahl("unterverteiler_fuer_10_rsm_fa") +\
self.anzahl("unterverteiler_fuer_3_rsm_fa_mit_umfahrung_steckbar") +\
self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"))
self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45", 0)
self._anzahl["korrektur_et200_sp_eingangskarte_8_de"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_de", 0)
self._anzahl["et200_sp_eingangskarte_8_de"] = self.anzahl("ET200_SP") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\
self.anzahl("unterverteiler_fuer_1flyer") * 3 +\
@@ -1761,9 +1773,6 @@ class HW():
self.anzahl("korrektur_et200_sp_eingangskarte_8_de") +\
mg.zusammenfassung().get("Kreuzungsweiche"))
self._anzahl["et200_sp_eingangskarte_16_de"] = anzahl.get("et200_sp_eingangskarte_16_de", 0)
self._anzahl["korrektur_et200_sp_eingangskarte_8_do"] = anzahl.get("korrektur_et200_sp_eingangskarte_8_do", 0)
self._anzahl["et200_sp_eingangskarte_8_do"] = \
self.anzahl("ET200_SP") *\
(math.ceil((self.anzahl("et200_sp_ea_ebene") *\
@@ -1804,26 +1813,25 @@ class HW():
self._anzahl["et200_sp_base_unit_neue_last_mit_potKlemmen"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 +
self.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"))
et200_sp_base_unit_neue_last_mit_potKlemmen = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + self.anzahl("korrektur_et200_sp_base_unit_neue_last_mit_potKlemmen"))
self._anzahl["et200_sp_base_unit_links_gebrueckt_mit_pot_klemmen"] = self.anzahl("ET200_SP", 0) * (math.ceil((self.anzahl("et200_sp_eingangskarte_8_de") +
self.anzahl("et200_sp_eingangskarte_8_do"))) -
self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen"))
self._anzahl["et200_sp_base_unit_neue_last"] = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 +
self.anzahl("korrektur_et200_sp_base_unit_neue_last"))
et200_sp_base_unit_neue_last = self.anzahl("ET200_SP") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45") * 2 + self.anzahl("korrektur_et200_sp_base_unit_neue_last"))
if self.anzahl("et200_sp_base_unit_neue_last") > 0 and self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen") > 0:
raise Exception("et200_sp_base_unit_neue_last und et200_sp_base_unit_neue_last_mit_potKlemmen sollten nicht beide verwendet werden")
# TODO Markus fragen
# if self.anzahl("et200_sp_base_unit_neue_last") > 0 and self.anzahl("et200_sp_base_unit_neue_last_mit_potKlemmen") > 0:
# raise Exception("et200_sp_base_unit_neue_last und et200_sp_base_unit_neue_last_mit_potKlemmen sollten nicht beide verwendet werden")
self._anzahl["korrektur_et200_sp_base_unit_links_gebrueckt"] = anzahl.get("korrektur_et200_sp_base_unit_links_gebrueckt", 0)
self._anzahl["et200_sp_base_unit_links_gebrueckt"] = self.anzahl("ET200_SP") * (math.ceil((self.anzahl("et200_sp_eingangskarte_16_de") +
self.anzahl("et200_sp_eingangskarte_16_do"))) -
self.anzahl("et200_sp_base_unit_neue_last") +
self.anzahl("korrektur_et200_sp_base_unit_links_gebrueckt"))
self._anzahl["SLIO"] = anzahl.get("SLIO", 0)
self._anzahl["korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = anzahl.get("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO", 0)
self._anzahl["et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") +\
self.anzahl("unterverteiler_fuer_1flyer") +\
@@ -1841,7 +1849,6 @@ class HW():
self.anzahl("busverteiler_8_rsm_direct") +\
self.anzahl("korrektur_et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO"))
self._anzahl["korrektur_slio_eingangskarte_4_de"] = anzahl.get("korrektur_slio_eingangskarte_4_de", 0)
self._anzahl["slio_eingangskarte_4_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 6 +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 8 +\
self.anzahl("unterverteiler_fuer_1flyer") * 6 +\
@@ -1857,7 +1864,6 @@ class HW():
self.anzahl("busverteiler_8_rsm_direct") * 16 +\
self.anzahl("korrektur_slio_eingangskarte_4_de"))
self._anzahl["korrektur_slio_eingangskarte_8_de"] = anzahl.get("korrektur_slio_eingangskarte_8_de", 0)
self._anzahl["slio_eingangskarte_8_de"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 3 +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 4 +\
self.anzahl("unterverteiler_fuer_1flyer") * 3 +\
@@ -1872,7 +1878,6 @@ class HW():
self.anzahl("unterverteiler_fuer_8_rsm_direct") * 4 +\
self.anzahl("busverteiler_8_rsm_direct") * 8 +\
self.anzahl("korrektur_slio_eingangskarte_8_de", 0))
self._anzahl["korrektur_slio_ausgangskarte_4_do"] = anzahl.get("korrektur_slio_ausgangskarte_4_do", 0)
self._anzahl["slio_ausgangskarte_4_do"] = self.anzahl("SLIO") * (self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\
self.anzahl("unterverteiler_fuer_1flyer") * 7 +\
@@ -1887,7 +1892,6 @@ class HW():
self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\
self.anzahl("busverteiler_8_rsm_direct") * 16 +\
self.anzahl("korrektur_slio_ausgangskarte_4_do"))
self._anzahl["korrektur_slio_ausgangskarte_8_do"] = anzahl.get("korrektur_slio_ausgangskarte_8_do", 0)
self._anzahl["slio_ausgangskarte_8_do"] = self.anzahl("SLIO") * ((self.anzahl("et200_sp_ea_ebene") * self.anzahl("schaltschrank") * 4 +\
self.anzahl("unterverteiler_fuer_1neuenhauser_pm") * 12 +\
self.anzahl("unterverteiler_fuer_1flyer") * 8 +\
@@ -1902,15 +1906,11 @@ class HW():
self.anzahl("unterverteiler_fuer_8_rsm_direct") * 44 +\
self.anzahl("busverteiler_8_rsm_direct") * 16) / 2 +\
self.anzahl("korrektur_slio_ausgangskarte_8_do"))
self._anzahl["korrektur_slio_power_modul"] = anzahl.get("korrektur_slio_power_modul", 0)
self._anzahl["slio_power_modul"] = self.anzahl("SLIO") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO") * 1 +\
self.anzahl("korrektur_slio_power_modul"))
self._anzahl["korrektur_slio_4_x_dc_24v_4_x_dc_0v"] = anzahl.get("korrektur_slio_4_x_dc_24v_4_x_dc_0v", 0)
self._anzahl["slio_4_x_dc_24v_4_x_dc_0v"] = self.anzahl("SLIO") * (math.ceil((self.anzahl("slio_eingangskarte_4_de") +
self.anzahl("korrektur_slio_4_x_dc_24v_4_x_dc_0v"))))
self._anzahl["slio_8_x_dc_24v"] = anzahl.get("slio_8_x_dc_0v", 0)
self._anzahl["korrektur_slio_8_x_dc_0v"] = anzahl.get("korrektur_slio_8_x_dc_0v", 0)
self._anzahl["slio_power_modul"] = self.anzahl("SLIO") * (self.anzahl("et_200sp_bundle_profinet_im_155_6pn_st_ba_2xrj45_SLIO") * 1 +\
self.anzahl("korrektur_slio_power_modul"))
self._anzahl["slio_8_x_dc_0v"] = self.anzahl("SLIO") * ((self.anzahl("slio_eingangskarte_8_de") +
(self.anzahl("slio_ausgangskarte_4_do") / 2)) * 1 +
self.anzahl("korrektur_slio_8_x_dc_0v"))
@@ -1998,11 +1998,12 @@ class HW():
# self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0)
self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = 0
self._anzahl["korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = 0
self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\
self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc")
anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc", 0)
self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] = self.anzahl("zuleitung_75_m_unterverteiler_4x4mm2_400vac") +\
self.anzahl("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc")
anzahl.get("korrektur_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc", 0)
if self._anzahl["zuleitung_75_m_unterverteiler_12x4mm2_24_vdc"] > 0 and self._anzahl["zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc"] > 0:
raise Exception("zuleitung 12x4 und 12x2.5 sollten nicht beide verwendet werden")
@@ -2036,15 +2037,26 @@ class HW():
l.append(k)
for item in l:
del self._anzahl[item]
with open('HW_Daten.txt', 'w') as convert_file:
convert_file.write(json.dumps(self._anzahl))
# with open('HW_Daten.txt', 'w') as convert_file:
# convert_file.write(json.dumps(self._anzahl))
def __repr__(self):
return repr(self._anzahl)
def set_config_data(self, section, newDict):
if section == "HW_Einzelpreise":
self.ep.update(newDict)
if section == "HW_Zeiten Hardwareplanung":
self.zpe_dienstl_hardwareplanung.update(newDict)
if section == "HW_Zeiten Elektro-Werkstatt":
self.zpe_e_werkstatt.update(newDict)
def anzahl(self, partname, default_val = 0):
return self._anzahl.get(partname, default_val)
def get_anzahl(self):
return self._anzahl
def summe_gesamt(self):
"""
:return: price sum of all given items within self._anzahl
@@ -2165,7 +2177,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -2199,7 +2210,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -2223,6 +2233,14 @@ class HW():
summe_h_schaltschrank_hardware = self.summe_h_schaltschrank_hardware()
summe_h_unterverteiler_hardware = self.summe_h_unterverteiler_hardware()
return (summe_h_schaltschrank_hardware + summe_h_unterverteiler_hardware)
def to_dict(self):
dhardware = self.get_anzahl()
dhardware["Summe_vorOrt"] = self.summe_vorort()
dhardware["Summe_Landsberg"] = self.summe_in_LL()
dhardware["Zeiten_Hardwareplanung"] = self.summe_h_zeiten_hardwareplanung()
dhardware["Zeiten_Unterverteiler_Werkstatt"] = self.summe_h_unterverteiler_e_werkstatt()
dhardware["Summe_gesamt"] = self.summe_gesamt()
return dhardware
class Dienstleistung():
# Angaben in h
@@ -2304,7 +2322,8 @@ class Dienstleistung():
return self._Hours.get(partname, default_val)
def get_hours_of(self, dlname):
return self._Hours.get(dlname, 0)
def get_hours(self):
return self._Hours
def summe_stunden_dienstleistung_in_landsberg(self):
"""returns hours necessary"""
hours_necessary = self.stunden_diensleistung_hardwareplanung() +\
@@ -2345,6 +2364,12 @@ class Dienstleistung():
def stunden_elektro_Landsberg(self):
return 0
def to_dict(self):
dDienstleistung = self.get_hours()
dDienstleistung["Summe_Dienstleistungen_Hardwareplanung"] = self.stunden_diensleistung_hardwareplanung()
dDienstleistung["Summe_Dienstleistungen_Elektrowerkstatt"] = self.stunden_elektrowerkstatt()
dDienstleistung["Summe_Dienstleistungen_in_LL"] = self.summe_stunden_dienstleistung_in_landsberg()
return dDienstleistung
#EMO
class EMO():
@@ -2363,9 +2388,14 @@ class EMO():
"Erdung": 0.5, #(h)
}
if RieterConfig.exists():
montagezeiten.update(RieterConfig.getDictAsFloat("Elektro-Montagezeiten"))
def __init__(self, ea: type[EA], hw: type[HW], mg: type[MG]):
# if RieterConfig.exists():
# montagezeiten.update(RieterConfig.getDictAsFloat("Elektro-Montagezeiten"))
def __init__(self, emoz=None):
if emoz:
self.set_config_data("Elektro-Montagezeiten", emoz)
self._Mengen = {}
def calc(self, ea: type[EA], hw: type[HW], mg: type[MG]):
#für jede Zeile (Eintrag im dict 'mengen') muss ein Wert übergeben werden, der aus den Klassen HW(), MG() oder EA() stammt
self._mehraufwand = 0.1
mengen = {
@@ -2412,22 +2442,25 @@ class EMO():
self._Mengen["Blitzleuchte_installieren"] = ea.anzahl("Blitzleuchte_Stoerung")
self._Mengen["Weiche_Stopper_anschliessen"] = hw.anzahl("stopper_weichenkabel_je_5m")
self._Mengen["Erdung"] = self._Mengen.get("Unterverteiler_montieren") * 10
def set_config_data(self, section, newDict):
if section == "Elektro-Montagezeiten":
self.montagezeiten.update(newDict)
def set_mehraufwand(self, PS):
if PS > 1 or PS < 0:
raise Exception("Falsche Spanne")
self._mehraufwand = PS
def dauer_emo_h(self):
keys_tätigkeiten_1 = [
"Unterverteiler_montieren",
"Sensoren_montieren",
"Seilzugschalter_installieren",
"Blitzleuchte_installieren",
"Weiche_Stopper_anschliessen",
"Erdung",
"Schaltschrank_aufstellen",
"Motor_verdrahten_und_anschliessen",
"Tableau_befestigen_und_anschliessen",
"Schnittstelle_Flyer_Putzmaschine"
"Unterverteiler_montieren",
"Sensoren_montieren",
"Seilzugschalter_installieren",
"Blitzleuchte_installieren",
"Weiche_Stopper_anschliessen",
"Erdung",
"Schaltschrank_aufstellen",
"Motor_verdrahten_und_anschliessen",
"Tableau_befestigen_und_anschliessen",
"Schnittstelle_Flyer_Putzmaschine"
]
keys_1 = 0
for k in keys_tätigkeiten_1:
@@ -2442,11 +2475,38 @@ class EMO():
for k in keys_tätigkeiten_2:
dauer = self._Mengen.get(k) / self.montagezeiten.get(k)
keys_2 += dauer
return math.ceil((keys_1 + keys_2))
def dauer_emo_h_incl_mehrauwand(self):
return math.ceil((keys_1 + keys_2))
def dauer_emo_h_incl_mehraufwand(self):
return (self.dauer_emo_h() * (1 + self._mehraufwand))
def get_dict_of_hours(self):
res = dict()
keys_tätigkeiten_1 = [
"Unterverteiler_montieren",
"Sensoren_montieren",
"Seilzugschalter_installieren",
"Blitzleuchte_installieren",
"Weiche_Stopper_anschliessen",
"Erdung",
"Schaltschrank_aufstellen",
"Motor_verdrahten_und_anschliessen",
"Tableau_befestigen_und_anschliessen",
"Schnittstelle_Flyer_Putzmaschine"
]
for k in keys_tätigkeiten_1:
res[k] = self.montagezeiten.get(k) * self._Mengen.get(k)
keys_tätigkeiten_2 = [
"Pritsche_montieren_umbauen_demontieren",
"Pritsche_in_RSM_montieren"
]
for k in keys_tätigkeiten_2:
res[k] = self._Mengen.get(k) / self.montagezeiten.get(k)
return res
def to_dict(self):
hoursEMO = self.get_dict_of_hours()
hoursEMO['Summe'] = self.dauer_emo_h()
hoursEMO['Summe inkl. Mehraufwand'] = self.dauer_emo_h_incl_mehraufwand()
return hoursEMO
class Anschlussl():
"""
@@ -2463,8 +2523,8 @@ class Anschlussl():
1.1:0.81
}
if RieterConfig.exists():
antrieb_cos_phi.update(RieterConfig.getDictAsFloat("cos phi"))
# if RieterConfig.exists():
# antrieb_cos_phi.update(RieterConfig.getDictAsFloat("cos phi"))
antrieb_strom = {
0.09:0.4,
0.12:0.55,
@@ -2475,8 +2535,8 @@ class Anschlussl():
1.1:2.55
}
if RieterConfig.exists():
antrieb_strom.update(RieterConfig.getDictAsFloat("Antriebsstrom"))
# if RieterConfig.exists():
# antrieb_strom.update(RieterConfig.getDictAsFloat("Antriebsstrom"))
mengen = {
#auskommentiert, was später berechnet wird
#"Anschlussspannung":400, #Volt
@@ -2497,7 +2557,12 @@ class Anschlussl():
#leistung
#gesamtanschlussleistung
}
def __init__(self, anzahl:dict, mg: type[MG]):
def __init__(self, aStr=None, cosPhi=None):
if aStr:
self.set_config_data("Antriebsstrom", aStr)
if cosPhi:
self.set_config_data("cos phi", cosPhi)
def calc(self, anzahl:dict, mg: type[MG]):
self._ANZAHL = self.mengen
anzahl = self.mengen ###vorerst
self._GZE_Faktor = 0.5
@@ -2529,6 +2594,11 @@ class Anschlussl():
anzahl.get("Gesamtstrom", 0) *\
self._x_Wurzel_3 / 1000
self._ANZAHL["Gesamtanschlussleistung"] = math.ceil((self._ANZAHL.get("Leistung")))
def set_config_data(self, section, newDict):
if section == "Antriebsstrom":
self.antrieb_strom.update(newDict)
if section == "cos phi":
self.antrieb_cos_phi.update(newDict)
def set_Versorgung_SPS_und_Peripherie(self, Strom):
self._Versorgung_SPS_und_Peripherie = Strom
def set_x_Wurzel_3 (self, x):
@@ -2568,8 +2638,8 @@ class Ergebnis():
"Anlagenbetreuung_durch_Montage": 36
}
if RieterConfig.exists():
preis_kostenart_h.update(RieterConfig.getDictAsFloat("Kosten pro h"))
# if RieterConfig.exists():
# preis_kostenart_h.update(RieterConfig.getDictAsFloat("Kosten pro h"))
eingaben_h = {
"Pflichtenheft":0,
"SPS_Programmierung":150,
@@ -2581,12 +2651,16 @@ class Ergebnis():
"PC_Anlagenbetreuung":0,
"Anlagenbetreuung_durch_Montage":0
}
def __init__(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]):
def __init__(self, kph=None):
if kph:
self.set_config_data("Kosten pro h", kph)
def calc(self, anzahl_h:dict, hw: type[HW], dl: type[Dienstleistung], emo: type[EMO]):
self._Anteil_Inbetriebnahmeunterstützung_durch_Montage = 1
self._Anteil_PC_Visualisierung_an_SPS = 0.3
self._Abweichung_softwareerstellung = 0
self._Abweichung_dienstleistung_in_LL = 0
self._anzahl = anzahl_h
# TODO die folgende Zeile raus?
self._anzahl = dict()
self._anzahl["E_Werkstatt"] = dl.stunden_elektrowerkstatt()
self._anzahl["Schaltschrankbau_extern_Mehrkosten"] = hw.get_h_of("unterverteiler_fuer_1neuenhauser_pm") +\
hw.get_h_of("unterverteiler_fuer_1flyer") +\
@@ -2600,7 +2674,7 @@ class Ergebnis():
self._anzahl["Pflichtenheft"] = anzahl_h.get("Pflichtenheft", 0)
self._anzahl["SPS_Programmierung"] = anzahl_h.get("SPS_Programmierung", 0) * (1 + self._Abweichung_softwareerstellung)
self._anzahl["PC_Programmierung_Visualisierung"] = anzahl_h.get("SPS_Programmierung", 0) * self._Anteil_PC_Visualisierung_an_SPS
self._anzahl["Montage_elektrisch"] = emo.dauer_emo_h_incl_mehrauwand()
self._anzahl["Montage_elektrisch"] = emo.dauer_emo_h_incl_mehraufwand()
self._anzahl["Inbetriebnahmetest_Hardware_durch_Montage"] = anzahl_h.get("Montage_elektrisch", 0) * 0.1
self._anzahl["SPS_Inbetriebsetzung"] = anzahl_h.get("SPS_Inbetriebsetzung", 0)
self._anzahl["PC_Inbetriebsetzung"] = anzahl_h.get("PC_Inbetriebsetzung", 0)
@@ -2612,6 +2686,9 @@ class Ergebnis():
self._anzahl["SPS_Anlagenbetreuung"] = anzahl_h.get("SPS_Anlagenbetreuung", 0)
self._anzahl["PC_Anlagenbetreuung"] = anzahl_h.get("PC_Anlagenbetreuung", 0)
self._anzahl["Anlagenbetreuung_durch_Montage"] = anzahl_h.get("Anlagenbetreuung_durch_Montage", 0)
def set_config_data(self, section, newDict):
if section == "Kosten pro h":
self.preis_kostenart_h.update(newDict)
def set_Abweichung_dienstleistung_in_LL(self, PS):
if PS > 1 :
raise Exception("Falsche Spanne")
+1 -2
View File
@@ -832,7 +832,6 @@ class TestObjectMethods(unittest.TestCase):
self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 0)
self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0)
self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0)
self.assertEqual(hw.anzahl("memory_card_256_mb"), 1)
self.assertEqual(hw.anzahl("memory_card_2_gb"), 0)
self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 1)
self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1)
@@ -1192,7 +1191,7 @@ class TestObjectMethods(unittest.TestCase):
hw = rek.HW(Anzahl_HW, mg, eas)
emo = rek.EMO(eas, hw, mg)
self.assertAlmostEqual(emo.dauer_emo_h(), 241)
self.assertAlmostEqual(emo.dauer_emo_h_incl_mehrauwand(), 265.1)
self.assertAlmostEqual(emo.dauer_emo_h_incl_mehraufwand(), 265.1)
def test_dienstleistung(self):
Anzahl_MG = {
-13
View File
@@ -1147,7 +1147,6 @@ class HW():
"sps_simatic_s7_1517_3": 1,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
#"memory_card_256_mb": 0
#"memory_card_2_gb": 0
"et200_sp_ea_ebene":2,
"netzwerk_fernwartung":1,
@@ -1299,7 +1298,6 @@ class HW():
"sps_simatic_s7_1517_3": 3828, # 790008101
"sps_simatic_s7_1518_4": 5402, # 6ES7518-4AP00-0AB0
"sps_et200_1512sp": 623, # 709000003
"memory_card_256_mb": 250, # 708015093
"memory_card_2_gb": 474, # 708015094
"et200_sp_ea_ebene": 0, # 790009001
"netzwerk_fernwartung": 750, # 790011001
@@ -1436,7 +1434,6 @@ class HW():
"sps_simatic_s7_1517_3": 0,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
"memory_card_256_mb": 0,
"memory_card_2_gb": 0,
"et200_sp_ea_ebene":60,
"netzwerk_fernwartung":0,
@@ -1476,7 +1473,6 @@ class HW():
"sps_simatic_s7_1517_3": 0,
"sps_simatic_s7_1518_4": 0,
"sps_et200_1512sp": 0,
"memory_card_256_mb": 0,
"memory_card_2_gb": 0,
"et200_sp_ea_ebene":120,
"netzwerk_fernwartung":0,
@@ -1567,7 +1563,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -1594,11 +1589,6 @@ class HW():
self._anzahl["sps_simatic_s7_1518_4"] = self.mengen.get("sps_simatic_s7_1518_4", 0)
self._anzahl["sps_et200_1512sp"] = self.mengen.get("sps_et200_1512sp", 0)
self._anzahl["memory_card_256_mb"] = anzahl.get("speicherkarte_fuer_sps2_mb") + \
anzahl.get("sps_simatic_s7_1515_2") + \
anzahl.get("sps_simatic_s7_1517_3") + \
anzahl.get("sps_simatic_s7_1518_4")
self._anzahl["memory_card_2_gb"] = anzahl.get("sps_simatic_s7_1518_4", 0)
self._anzahl["et200_sp_ea_ebene"] = self.mengen.get("et200_sp_ea_ebene", 0)
@@ -2080,7 +2070,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -2114,7 +2103,6 @@ class HW():
"sps_simatic_s7_1517_3",
"sps_simatic_s7_1518_4",
"sps_et200_1512sp",
"memory_card_256_mb",
"memory_card_2_gb",
"et200_sp_ea_ebene",
"netzwerk_fernwartung",
@@ -2976,7 +2964,6 @@ class TestObjectMethods(unittest.TestCase):
self.assertEqual(hw.anzahl("sps_simatic_s7_1517_3"), 1)
self.assertEqual(hw.anzahl("sps_simatic_s7_1518_4"), 0)
self.assertEqual(hw.anzahl("sps_et200_1512sp"), 0)
self.assertEqual(hw.anzahl("memory_card_256_mb"), 1)
self.assertEqual(hw.anzahl("memory_card_2_gb"), 0)
self.assertEqual(hw.anzahl("et200_sp_ea_ebene"), 2)
self.assertEqual(hw.anzahl("netzwerk_fernwartung"), 1)
+175
View File
@@ -0,0 +1,175 @@
# Mengengerüst
[allgemein]
SYSTEM=fa
RSM=25
Flyer=7
Flyer_Puffer=0
Flyer_Electrojet_incl_intergrierte_Putzmaschine=0
Flyer_Electrojet_incl_intergrierte_Putzmaschine_Vorpuffer=0
Flyer_Electrojet_incl_intergrierte_Putzmaschine_Nachpuffer=0
Neuenhauser-Putzmaschine=2
Neuenhauser-Putzmaschine_Vorpuffer=4
Neuenhauser-Putzmaschine_Nachpuffer=2
Cason-Putzmaschine=0
Cason-Putzmaschine_Vorpuffer=0
Cason-Putzmaschine_Nachpuffer=0
Puffer=0
Anzahl_der_Pufferstrecken_pro_Puffer=1
Begegnungsstrecke_Bypass=2
Turm=0
Turm_Anzahl_Wendlungen=0
[rsm_direct]
#Bedientableau_2fach_Direct=
#Bedientableau_2fach_Direct=
#Lichtschranke_Traverse=
[rsm_fa]
Flex_A_Premium=False
Getriebe_in_der_Mitte=False
RSM_Einfahrt_Ein_Beidseitig=False
Sensor_optisch_Traverse_zusätzlich=3
Bedientableau_1fach_Korrektur=0
Bedientableau_2fach_Korrektur=-2
Weiche_Korrektur=1
RRA_bi_Korrektur=0
RRA_bi_auf_Haupstrecke=3
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=0
[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=2
Bedientableau_2fach_Korrektur=0
Weiche_Korrektur=0
RA_uni_abhebbar_Korrektur=0
Meldelampe_Überstrom_Korrektur=0
Hauptschalter_Ein-Meldung_Korrektur=-1
Werma_Rundumleuchte_Störung_Korrektur=-1
[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=0
Werma_Rundumleuchte_Störung=0
RA_uni=0
RA_uni_ohne_SPS_Ansteuerung=0
RA_bi=0
RA_bi_ohne_SPS-Ansteuerung=0
Doppelstreckenantrieb=0
[puffer]
Sensor_optisch_Traverse_Korrektur= 0
Weiche_Korrektur= 0
RA_bi_ungerade_Schiene= 0
Meldelampe_Überstrom_Korrektur= 0
Hauptschalter_Ein-Meldung_Korrektur= 0
[turm]
RA_bi_Korrektur=0
RA_bi_ohne_SPS_Korrektur=0
# Ein und Ausgaenge
[EAS]
schaltschrank=1
#bedienst_dreifach=0
#bedienst_vierfach=0
#bedienst_sechsfach=0
#gemeinsame_Weichenrueckstellung=0
#RA_unidirektional_mit_gemeinsamer_Wendung= 0
#RA_bidirektional_abhebbar_gemeinsWend= 0
#RA_in_RSM_bidirektional= 0
#Doppelstreckenantriebgemeinsame_Wendung= 0
#gemeinsame_Wendung= 0
#Frequenzumrichter= 0
#Spulenumsetzstation=0
# Hardware
[HW]
schaltschrankgehaeuse_b1x1200+1x800_zubehoer=1
sps_simatic_s7_1515_2=0
sps_simatic_s7_1517_3=1
sps_et200_1512sp=1
et200_sp_ea_ebene=1
netzwerk_fernwartung=1
anlagenrechner=1
unterverteiler_fuer_1flyer=1
unterverteiler_fuer_2flyer=3
unterverteiler_fuer_puffer=0
korrektur_5_rsm_zusaetzlich_im_unterverteiler=0
korrektur_10_rsm_zusaetzlich_im_unterverteiler=0
ET200_SP=0
#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=560
kleinteile_rohre_schellen_kabelbinder_ect=1
zuleitung_75_m_unterverteiler_12x4mm2_24_vdc_or_zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc='zuleitung_75_m_unterverteiler_12x2_5mm2_24_vdc'
#korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc=-5
# Dienstleistungen
[DL]
# Angaben in [h]
Bedienerhandbuch= 4
SPS_Doku=0
#Oberfläche_Simulation=0
#SPS_Test_im_Haus_Simulation=0
#PC_Doku=0
#Vormontage_im_Haus=0
[Ergebnis]
#Pflichtenheft=0
SPS_Programmierung=150
SPS_Inbetriebsetzung=160
#Montage_elektrisch=0
#SPS_Inbetriebsetzung=0
#PC_Inbetriebsetzung=0
#Schulung_vor_Ort_beim_Kunden=0
#Abnahme=0
#SPS_Anlagenbetreuung=0
#PC_Anlagenbetreuung=0
#Anlagenbetreuung_durch_Montage=0
+172
View File
@@ -0,0 +1,172 @@
# Mengengerüst
[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]
#Bedientableau_2fach_Direct=
#Bedientableau_2fach_Direct=
#Lichtschranke_Traverse=
[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
# Ein und Ausgaenge
[EAS]
schaltschrank=1
#bedienst_dreifach=0
#bedienst_vierfach=0
#bedienst_sechsfach=0
#gemeinsame_Weichenrueckstellung=0
#RA_unidirektional_mit_gemeinsamer_Wendung= 0
#RA_bidirektional_abhebbar_gemeinsWend= 0
#RA_in_RSM_bidirektional= 0
#Doppelstreckenantriebgemeinsame_Wendung= 0
#gemeinsame_Wendung= 0
#Frequenzumrichter= 0
#Spulenumsetzstation=0
# Hardware
[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'
korrektur_zuleitung_75_m_unterverteiler_12x4mm2_24_vdc=-5
# Dienstleistungen
[DL]
# Angaben in [h]
Bedienerhandbuch= 16
SPS_Doku=15
#Oberfläche_Simulation=0
#SPS_Test_im_Haus_Simulation=0
#PC_Doku=0
#Vormontage_im_Haus=0
[Ergebnis]
#Pflichtenheft=0
SPS_Programmierung=150
SPS_Inbetriebsetzung=130
#Montage_elektrisch=0
#SPS_Inbetriebsetzung=0
#PC_Inbetriebsetzung=0
#Schulung_vor_Ort_beim_Kunden=0
#Abnahme=0
#SPS_Anlagenbetreuung=0
#PC_Anlagenbetreuung=0
#Anlagenbetreuung_durch_Montage=0