Autor
|
Thema: Bearbeitungszeiten addieren (2019 mal gelesen)
|
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 11. Feb. 2009 00:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hätte eine Frage auf dessen Lösung ich im Moment nicht komme. Zum besseren Verständnis habe ich das Layout und die Methode hochgeladen. Die Montagestation nimmt je nach Variantentyp entweder ein Teil aus dem Behälter 1, oder aus dem Behälter2 oder kein Teil raus. Dementsprechend sind die verschiedenen Bearbeitungszeiten durch die unterschiedlichen Positionen in den Behälter gegeben......und es funktioniert alles! Nun habe ich Varianten die jeweils ein Teil aus beiden Behältern brauchen. Das umlagern funktioniert auch. Ich habe aber in meiner Station dadurch 2 verschiedene Bearbeitungszeiten die nacheinander laufen und nicht parallel. z.B. VarianteF nimmt ein Teil aus Behälter 1 mit der Bearbeitungszeit 5sek und nimmt dann ein Teil aus Behälter 2 mit der Bearbeitungszeit 4 sek, also insgesamte Bearbeitungszeit von 9 sek. Ich bin bisher gescheitert einen Weg zu finden und bräuchte Hilfe, wäre sehr dankbar. Liebe Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LaBonita Mitglied Dipl.-Math.
Beiträge: 151 Registriert: 26.07.2007 eM-Plant 7.5 bis 8.1 VB Java C#
|
erstellt am: 12. Feb. 2009 00:27 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Hallo Tema, Du musst die Bearbeitungszeit der Montagestation auf die entsprechende Zeit setzen, bevor Dein auslösendes Element (das montiert werden soll) in die Station eintritt. Als passive Steuerung könntest Du also immer basierend auf dem aktuellen Teil in der Montagestation mit dem Wissen, welches als nächstes eintreten wird, die Zeit für das kommende Teil setzen. Also in etwa so: Ein Bruder sitzt im Kaffee und bestellt für die Schwester, die das Cafe betritt, wenn er es verläßt einen Kaffee usw. Einzig die Initialisierung ist etwas trickreich. Alle Klarheiten beseitigt? Gruß, Ortrun Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 12. Feb. 2009 14:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, so wie ich dich verstanden habe, soll ich die Zeit der Montagestation vorsetzen. Wenn ja, dann würde das leider nicht auf meine Aufgabe zutreffen. Ich habe das Problem das die Teile aus einem Behälter mit mehreren Positionsteile kommen und diese je nach Position auch verschiedene Zeiten beanspruchen. Ich müsste die Methode so flexibel wie möglich halten. Die Methode unten ist meine jetzige, so wie man sieht sind die Bearbeitungszeiten abhängig von der Variante und Position im Behälter aus welches das Anbauteil montiert wird. Das beste wäre, wenn ich diese Methode jetzt für die VarianteA umschreib, sodass es die Zeiten abhängig der beiden Position einnimmt. z.B. Pos_Beh1 = 2 --> 8 sek Pos_Beh2 = 3 --> 6 sek -->also ist die Gesamtbearbeitungszeit der Montagestation = 14sek. Für die restlichen Varianten, wäre die Methode ausreichend, da nur ein Teil aus einem der beiden Behälter entnommen wird. Ich hoff es war verständlich!? (Hauptteil:string) is do inspect Hauptteil when "VarianteA", "VarianteM","VarianteD" then Pos_Beh1; if Pos_Beh1=1 then Montagestation.Bearbeitungszeit:=5; elseif Pos_Beh1=2 then Montagestation.Bearbeitungszeit:=8; elseif Pos_Beh1=3 then Montagestation.Bearbeitungszeit:=11; end; when "VarianteA", "VarianteC" then Pos_Beh2; if Pos_Beh2=1 then Montagestation.Bearbeitungszeit:=2; elseif Pos_Beh2=2 then Montagestation.Bearbeitungszeit:=4; elseif Pos_Beh2=3 then Montagestation.Bearbeitungszeit:=6;; end; else Montagestation.Bearbeitungszeit:=1; end; end; Liebe Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grebla Mitglied
Beiträge: 12 Registriert: 03.12.2008
|
erstellt am: 12. Feb. 2009 16:18 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Dann erstelle eine Tabelle, in der du eben diese Zeiten festlegst. if Pos_Beh2=1 then Montagestation.Bearbeitungszeit:=2; elseif Pos_Beh2=2 then Montagestation.Bearbeitungszeit:=4; elseif Pos_Beh2=3 then Montagestation.Bearbeitungszeit:=6;; end; else Montagestation.Bearbeitungszeit:=1; end; end; Würde dann so aussehen: Pos_Beh2 | Bearbeitung -------------------------- 1 | 2 2 | 4 3 | 6 Analog für Pos_Beh1. Die Zeiten holst du über Variablen, zeit1 und zeit2. Dann kannst du die Methode umschreiben (zB) if Pos_Beh1 = 1 AND PosBeh2 = 3 then zeit1 := Tabelle1["Bearbeitung", 1]; zeit2 := Tabelle2["Bearbeitung", 2]; Montagestation.Bearbeitungszeit := zeit1 + zeit2; end; Fertisch.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 12. Feb. 2009 18:39 <-- editieren / zitieren --> Unities abgeben:
Hallo, da hätte ich auch drauf kommen müssen, dass ich die Zeiten in Tabellen setzen soll. Ich will es so einfach wie möglich halten, da die Flexibilität und Übersichtlichkeit ein wichtiger Punkt sind. Umso weniger Tabellen und Methoden umso besser ist es. Die 3 Positionen sind nur zur Vereinfachung gedacht, eigentlich sind es bis zu 15 Positionen, also wäre deine Lösung etwas sehr umständlich und ich hätte ein Code der Seitenlang wäre. Ich konnte es aber durch setzen von weiteren Variablen lösen, aber die Idee der Tabellen, da hatte es gefehlt. Hier ist der Code: (Hauptteil:string) is x : integer; y : integer; zeit1 : real; zeit2 : real; do x := Pos_Beh1; y := Pos_Beh2; zeit1:=Bea_Beh1["Bearbeitungszeit", x]; zeit2:=Bea_Beh2["Bearbeitungszeit", y]; inspect Hauptteil when "VarianteA", "VarianteF", "VarianteE" then Montagestation.Bearbeitungszeit:= zeit1 + zeit2; when "VarianteC", "VarianteD" then Montagestation.Bearbeitungszeit:= zeit2; when "VarianteM", "VarianteH" then Montagestation.Bearbeitungszeit:= zeit1; else Montagestation.Bearbeitungszeit:=1; end; print Montagestation.Inhalt.Name; print Montagestation.Bearbeitungszeit; end; Vielen Dank!
Liebe Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grebla Mitglied
Beiträge: 12 Registriert: 03.12.2008
|
erstellt am: 16. Feb. 2009 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Also bitte, ein Code der seitenlang wäre???? Du brauchst 2 Tabellen und eine Methode, und die ist ein paar Zeilen lang. Überlege mal, hättest du 1635 Varianten, dann hättest du mit deinem Code so viel Spaß ) Du setzt 2 Variablen, TeilA und TeilB. Wenn deine Variante nur aus einem Teil besteht (zB. Pos_Beh1 ist 2) dann setzt du TeilA := 2 und TeilB := 0 oder was auch immer. if TeilA /= 0 and TeilB /= 0 then Montagestation.Bearbeitungszeit:= zeit1 + zeit2; elseif TeilA /= 0 and TeilB = 0 then Montagestation.Bearbeitungszeit:= zeit1; elseif TeilA = 0 and TeilB /= 0 then Montagestation.Bearbeitungszeit:= zeit2; end; Oder hast du auch eine 4 Variante? Ich denke nicht. Alternativ kannst du deine Varianten auch in einer Tabelle festhalten ("VarTabelle"), dann liest du automatisch aus drei Tabellen alle Varianten und Zeiten, die du brauchst. Variante | PosA | PosB ---------------------------------- A | 1 | 1 B | 1 | 3 C | 2 | 0 ... | ... | ... ZA | 51 | 1 0 steht für Teil in der Variante nicht Vorhanden. So kannst du in der Zeiten Tabelle auch eine Zeile 0 haben, mit der Bearbeitungszeit gleich 0. Die Variable "var" wäre in diesem Fall deine Variante. TeilA := VarTabelle["PosA", var]; TeilB := VarTabelle["PosB", var]; zeit1 := Tabelle1["Bearbeitung", TeilA]; zeit2 := Tabelle2["Bearbeitung", TeilB]; Montagestation.Bearbeitungszeit := zeit1 + zeit2; Somit hättest Du Dein Problem mit einem Fünfzeiler gelöst, für beliebig vielen Varianten und Positionen. Vorteil der Tabellen ist, Du kanst jederzeit die Werte aus einer Excel Tabelle per Knopfdruck importieren. Außerdem dienen die zur Übersicht, sonst musst du immer bei Änderung einer Zeit im Code suchen. Meiner Meinung nach sind max. 3 Tabellen und eine Methode ohne absoluten Verweise VIEL übersichtlicher und einfacher. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 16. Feb. 2009 11:51 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielleicht hatte ich mich nicht richtig ausgedrückt, aber mit dem was du geschrieben hast gebe ich dir recht und ich hatte es auch dann so gemacht. Ich habe 2 Tabellen und eine Methode und es läuft gut....Danke für die Hilfe. Ich habe insgesamt 9 Varianten, aber 3 Prozesse, deshalb die Vereinfachung der 3 Varianten. Meine Methode sucht sich auch die Bearbeitungszeiten nachdem es die Variante erkannt hat. Ich will es nun ändern und eine Methode schreiben, indem die Zeiten nach dem umlagern der beiden Quellen gesteuert wird. Also wenn die Quelle1 ein Teil ausgibt, dann wird in der Tabelle die dementsprechende Zeit geholt, wenn nioht dann habe ich eine fixe Bearbeitungszeit. Und wenn natürlich beide Quellen jeweils ein Teil ausgeben, dann wird in beiden Tabellen nach der zeit geschaut und addiert Ich suche quasi den Befehl, der sagt, wenn die z.b. Quelle1 ein Teil ausgibt dann mach dies und das. Wäre echt nett, wenn mir da jemand helfen könnte Liebe Grüße
[Diese Nachricht wurde von Tema am 16. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grebla Mitglied
Beiträge: 12 Registriert: 03.12.2008
|
erstellt am: 16. Feb. 2009 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|