Hallo zusammen,
ich bin noch relativ neu in Python. Einfache Gui Anwendungen in Qt oder Flet bekomme ich schon sehr gut hin.
Als nächstes Projekt soll ich eine Art Auftragssteuerung für eine Fertigung erstellen.
Das erfassen, bearbeiten und speichern der Aufträge in SQL funktioniert bereits.
Mein Problem ist nun die Aufträge zeitlich einzugliedern, z.B.:
Auftrag A hat eine Fertigungsdauer von 9 Stunden
Auftrag B ... 3 Stunden
Auftrag C ...18 Stunden
Der Arbeitstag hat 8 Stunden, es wird von Montag bis Freitag gearbeitet.
Wie bekomme ich es nun hin, dass die Endzeiten des Auftrag richtig berechnet werden, so dass ich die Startzeit für den Folgeauftrag erhalte usw....
Für jeden Tipp bin ich dankbar.
Liebe Grüße
Gantt Diagramme / Ablauf von Fertigungsaufträge
Was bedeutet eine Fertigungsdauer von 18 Stunden? Dass der Arbeiter das Teil in die Maschine einlegt und nach 18 Stunden ist es fertig, oder dass der Arbeiter 18 Stunden lang ohne Pinkelpause daran herumschraubt?
Ist Dein Problem, einen Algorithmus zu entwickeln oder ist das Problem, den Algorithmus in Python umzusetzen?
Was hast Du schon überlegt?
Ist Dein Problem, einen Algorithmus zu entwickeln oder ist das Problem, den Algorithmus in Python umzusetzen?
Was hast Du schon überlegt?
- noisefloor
- User
- Beiträge: 3993
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Wenn die Fertigung strikt linear ist, ist das doch eine relativ einfach Addition unter Berücksichtigung der Arbeitszeit.
Also wenn Auftrag A 9h dauert und jeder Arbeitstag 8h hat und um 8 Uhr beginnt, dann wäre das Teil A um 17 Uhr fertig. Der Arbeitstag endet aber um 16 Uhr, also ist das Teil am nächsten Tag um 9 Uhr fertig. Wenn es wirklich so einfach ist, lässt sich das relativ leicht in Code umsetzen.
Wenn jetzt in irgendeiner Form Optimierung dazu kommt, d.h. möglichst wenig Überträge von Tag X auf X+1 oder auf keine Fall einen Übertrag von Freitag auf den kommenden Montag oder Restriktionen beim Umsortieren von Aufträgen, dann wird es deutlich komplexer.
Gruß, noisefloor
Also wenn Auftrag A 9h dauert und jeder Arbeitstag 8h hat und um 8 Uhr beginnt, dann wäre das Teil A um 17 Uhr fertig. Der Arbeitstag endet aber um 16 Uhr, also ist das Teil am nächsten Tag um 9 Uhr fertig. Wenn es wirklich so einfach ist, lässt sich das relativ leicht in Code umsetzen.
Wenn jetzt in irgendeiner Form Optimierung dazu kommt, d.h. möglichst wenig Überträge von Tag X auf X+1 oder auf keine Fall einen Übertrag von Freitag auf den kommenden Montag oder Restriktionen beim Umsortieren von Aufträgen, dann wird es deutlich komplexer.
Gruß, noisefloor
- __blackjack__
- User
- Beiträge: 13764
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Mal den VIC-20 angeworfen und das ganze für eine Arbeitswoche von Mo bis Fr, jeweils 8 Stunden von 8 Uhr morgens, mit einer einstündigen Mittagspause in BASIC geschrieben:
Testlauf:
Code: Alles auswählen
10 T$="MODIMIDOFR"
100 W=1:T=0:S=0:READ N
110 FOR I=1 TO N
120 : READ AN$,AS
130 : PRINT "AUFTRAG ";AN$
140 : PRINT "VON ";
150 : GOSUB 900
160 : S=S+AS
170 : J=INT(S/8)
180 : S=S-J*8:T=T+J
190 : J=INT(T/5)
200 : T=T-J*5:W=W+J
210 : PRINT "BIS ";
220 : GOSUB 900
230 : PRINT
240 NEXT:END
250 :
900 REM ZEITPUNKT AUSGEBEN
910 REM (WOCHE,TAG,STUNDE)
920 PRINT "W";MID$(STR$(W),2);
930 PRINT " ";
940 PRINT MID$(T$,T*2+1,2);
950 PRINT S+8-(S>=4);"UHR"
960 RETURN
970 :
9000 REM # AUFTRAEGE
9010 DATA 3
9020 REM NAME,DAUER (H)
9030 DATA "A",9
9040 DATA "B",3
9050 DATA "C",18
Code: Alles auswählen
RUN
AUFTRAG A
VON W1 MO 8 UHR
BIS W1 DI 9 UHR
AUFTRAG B
VON W1 DI 9 UHR
BIS W1 DI 13 UHR
AUFTRAG C
VON W1 DI 13 UHR
BIS W1 DO 15 UHR
READY.
“The city's central computer told you? R2D2, you know better than to trust a strange computer!” — C3PO
-
- User
- Beiträge: 68
- Registriert: Samstag 28. Januar 2023, 20:19
- Wohnort: Nähe Wien
- Kontaktdaten:
@Sabine81:
Feiertage und andere Schließtage (Betriebsurlaub) werden eine Rolle spielen.
Du wirst in deiner Anwendung einen Kalender brauchen.
Werden fallweise Überstunden gemacht?
Soll die Anwendung multiuserfähig werden?
Schönes Wochenende!
Feiertage und andere Schließtage (Betriebsurlaub) werden eine Rolle spielen.
Du wirst in deiner Anwendung einen Kalender brauchen.
Werden fallweise Überstunden gemacht?
Soll die Anwendung multiuserfähig werden?
Schönes Wochenende!
und um möglicherweise gleich im Bereich "Lineare Optimierung" zu landen: wieviele Fertigungsaufträge können denn parallel bearbeitet werden? Immer nur einer zur Zeit oder mehrere?
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
- __blackjack__
- User
- Beiträge: 13764
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Der BASIC-Ansatz hat offensichtlich ein Problem, nämlich das die Endzeit gar nicht die Endzeit ist, sondern die Anfangszeit für den nächsten Auftrag. Das fällt beispielsweise an der Mittagspause auf. Auftrag B ist schon um 12 fertig; vor der Mittagspause. Das gleiche Problem hat der Code am Tagesende wenn ein Auftrag am Ende eines Arbeitstages fertig ist, dann wird als Endzeit 8 Uhr morgens am Folgetag ausgegeben.
Das mit der Mittagspause ist in der folgenden Version 2 behoben, das mit den Tagen noch nicht:
Neben der Endzeit bezüglich der Mittagspause ist T$ mit den Wochentagen jetzt etwas leichter lesbar (dafür werden 4 Bytes verschwendet
) und es sind mehr Testfälle, damit man das Problem mit dem Tagesende sehen kann (und das W1 keine Konstante ist):
In der nächsten Version werde ich wohl den Zeitpunkt auf *einen* Wert reduzieren (S) und die anderen beiden (W und T) wenn benötigt daraus berechnen, weil dann das Problem mit der Endzeit IMHO leichter zu lösen ist.
Das mit der Mittagspause ist in der folgenden Version 2 behoben, das mit den Tagen noch nicht:
Code: Alles auswählen
10 T$="MO DI MI DO FR"
20 REM =================
30 REM FERTIGUNGSDAUER
40 REM V2 13.01.2025
50 REM =================
100 W=1:T=0:S=0:READ N
110 FOR I=1 TO N
120 : READ AN$,AS
130 : PRINT "AUFTRAG ";AN$
140 : PRINT "VON ";
150 : IS=1:GOSUB 900
160 : S=S+AS
170 : J=INT(S/8)
180 : S=S-J*8:T=T+J
190 : J=INT(T/5)
200 : T=T-J*5:W=W+J
210 : PRINT "BIS ";
220 : IS=0:GOSUB 900
230 : PRINT
240 NEXT:END
250 :
900 REM ZEITPUNKT AUSGEBEN
910 REM (WOCHE,TAG,STUNDE)
920 PRINT "W";MID$(STR$(W),2);
930 PRINT " ";
940 PRINT MID$(T$,T*3+1,2);
950 PRINT S+8-(S>=4 AND (IS=1 OR S>4));"UHR"
960 RETURN
970 :
9000 REM # AUFTRAEGE
9010 DATA 5
9020 REM NAME,DAUER (H)
9030 DATA "A",9
9040 DATA "B",3
9050 DATA "C",18
9060 DATA "D",42
9070 DATA "E",23
Code: Alles auswählen
AUFTRAG A
VON W1 MO 8 UHR
BIS W1 DI 9 UHR
AUFTRAG B
VON W1 DI 9 UHR
BIS W1 DI 12 UHR
AUFTRAG C
VON W1 DI 13 UHR
BIS W1 DO 15 UHR
AUFTRAG D
VON W1 DO 15 UHR
BIS W2 FR 8 UHR
AUFTRAG E
VON W2 FR 8 UHR
BIS W3 DI 16 UHR
“The city's central computer told you? R2D2, you know better than to trust a strange computer!” — C3PO
Sirius3 hat geschrieben: ↑Freitag 10. Januar 2025, 15:01 Was bedeutet eine Fertigungsdauer von 18 Stunden? Dass der Arbeiter das Teil in die Maschine einlegt und nach 18 Stunden ist es fertig, oder dass der Arbeiter 18 Stunden lang ohne Pinkelpause daran herumschraubt?
Ist Dein Problem, einen Algorithmus zu entwickeln oder ist das Problem, den Algorithmus in Python umzusetzen?
Was hast Du schon überlegt?
Die Fertigungsdauer würde bedeuten, die Mitarbeiter in der Produktion würden insgesamt 18 Stunden benötigen um das Teil zu bauen. Da wir aktuell keine Schichtarbeit haben, würde es in dem Beispiel 2,25 Tage dauern bis dieser Auftrag abgeschlossen ist.
Mein Problem ist es, dies in Code umzusetzen.
Feiertage, Schließtage und Überstunden spielen hier sicher auch eine Rolle.
Überstunden kommen immer dann zu tragen, wenn ein Auftrag nicht rechtzeitig fertig werden würde.
Aktuell fehlt in dem Unternehmen jegliche Übersicht zu wieviel % die Fertigung ausgelastet ist.
Irgendwann soll die Anwendung auch Multiuserfähig werden.
- noisefloor
- User
- Beiträge: 3993
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Ok - aber dazu brauchst du doch nur die Anzahl der benötigten Arbeitsstunden aufzusummieren und auf den theoretisch verfügbaren Wert zu beziehen. Dann hast du die Auslastung. Wann was gemacht wird ist die Gesamtauslastung erst mal egal.Aktuell fehlt in dem Unternehmen jegliche Übersicht zu wieviel % die Fertigung ausgelastet ist.
Gruß, noisefloor