Autor
|
Thema: Werkerbegleitung & Aufträge generieren (2758 / mal gelesen)
|
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 13. Jun. 2018 13:15 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin neu hier und hoffe auf Eure Unterstützung. Ich habe schon nach ähnlichen Beiträgen zu meinen Fragen gesucht, jedoch hat mir das, was ich gefunden habe, noch nicht ausreichend weitergeholfen. Gleiches gilt für die Plant Simulation Hilfe. Es geht um Folgendes: Ich erstelle ein Simulationsmodell zur Kommissionierung. Hierbei werden drei unterschiedliche BE-Typen erstellt, eingelagert und anhand von Kundenaufträgen wieder ausgelagert. Für einen Teil der BEs sind noch weitere Bearbeitungsschritte erforderlich (BEs "TShirt" im angehängten Modell). Ich habe zwei konkrete Anliegen. a) Ich nutze Werker für die Transport- und Bearbeitungsvorgänge. Im mit "individuell" überschriebenen Teil des Modells nehmen die Werker jeweils ein BE von der Station "IndivEinzel_auf" auf und transportieren es in Abhängigkeit eines Attributs entweder zum "AP18" oder zu "AP14" oder "AP16". Die Werker übernehmen dann an den Stationen "AP14" und "AP16" auch die Bearbeitung des jeweiligen BE. Jedoch bleiben die Werker nach Ankunft nicht dort, kehren stattdessen zu "IndivEinzel_auf" zurück und holen das nächste BE. Daher habe ich mich am Beispiel "Werkerbegleitung" orientiert und versucht das umzusetzen. Nun kehren die Werker aber nach dem ersten Anlauf nicht wieder zu "AP14" und "AP16" zurück. Kann mir hierbei jemand helfen und mir sagen, wie ich die Anfrage-, Erhalt- und Freigabesteuerungen der Stationen programmieren muss? b) Das Modell ist bislang statisch aufgebaut. Das soll nur vorübergehend sein. Ich möchte die Auslagerungsaufträge zufällig generieren, abhängig von einer Benutzereingabe über einen Dialog. Ein Auftrag weist dann eine bestimmte Anzahl der unterschiedlichen BEs auf, die von den Werkern des "WP3" aus den "WäschecontainerH/L" und "LagerIndiv" ausgelagert werden. Ich habe mir überlegt, über die INIT-Methode die Eingabe im Dialog auszulesen. Nur wie geht es dann weiter.. Könnten die Objekte "Stapel" oder "Warteschlange" mir hier helfen? Weiterer Input zur möglichen Auslagerung wäre klasse! Das Modell habe ich angehängt. Vielen Dank schon einmal für eure Hilfe & viele Grüße!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 15. Jun. 2018 15:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mittlerweile versucht eine Methode aus einem anderen Beitrag hier im Forum zu implementieren (http://ww3.cad.de/foren/ubb/Forum262/HTML/000296.shtml). Leider funktioniert es in meinem Modell noch nicht. Mag mal jemand über das angehängte Modell und die Methode drüber schauen und mir sagen, was ich falsch mache? Ich habe das Beispiel zu vor an einem anderen Modell "nachgebaut" - da funktionierte es.. Was mich außerdem sehr verwirrt ist, dass ich es nicht schaffe, über die Methode "PrüfeGelegt" zu verhindern, dass, wenn die nachfolgende Station belegt ist, der Werker mit dem aufgenommenen BE zur anderen Station gehen soll. Hat da jemand einen Hinweis für mich? Ich freue mich über jede Hilfe und Anregung, danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 17. Jun. 2018 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Hallo MaxSim, eine Empfehlung zur Lösung ist angehängt. Für dich ist die MA bindung für AP relevant. Diese erreichst du durch Dienste. Der WErke darf nicht anderes machen dürfen, bis die Hemden gelegt sind. Dazu kannst du die Events von AP-Stationen und Stationen (Eingang und Ausgang) nutzen. vG Nadin ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 18. Jun. 2018 07:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, das sieht richtig gut aus, vielen Dank! Kannst du mir kurz erklären, wie genau "current" in den Methoden arbeitet? Steige da noch nicht ganz durch. Viele Grüße! [Diese Nachricht wurde von MaxiSim am 18. Jun. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 05. Jul. 2018 18:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, das Modell hat sich mittlerweile weiterentwickelt - und ich stehe vor mehreren, kleineren Herausforderungen. Vielleicht kannst du - oder jemand anderes - mir noch einmal helfen. Als erstes möchte ich dafür sorgen, dass die Lager "L_Komm_K1", "L_Komm_K2" und "L_Komm_K3" täglich zu vorgegebenen Uhrzeiten geleert werden. Dafür habe ich die entsprechenden Ausgangssteuerungen programmiert und mit "self.methAufr" werden die Methoden zu den Zeitpunkten aufgerufen. Das Ganze soll so funktionieren, wie im Modell "Auslagertouren" im Anhang. Dort funktioniert es einwandfrei. Im eigentlichen Modell aber nicht, habe schon alles versucht, was mir sinnvoll - und auch nicht sinnvoll - erschien.. Mache ich da doch noch irgendwas falsch? Vor der Auslagerung sollen die BEs entsprechend ihrer Zuordnung zu einem Kunden, bzw. einer Verteilung nach, in die Lager eingelagert werden. Dazu erhalten die vorgelagerten Montagestationen über die Methoden "PrüfeZiel..." ein BE-Ziel zugewiesen. Für die Montagestationen "M_WcH" und "M_WcL" funktioniert das auch. Nur die "M_LagerIndiv_aus" schickt jedes BE zum AP26 und achtet nicht auf die Zuordnung durch das Attribut "KundeID"... Ich habe globale Variablen im Modell, die die Anzahl der eingelagerten BEs überwachen. Merkwürdigerweise werden trotzdem mehr BEs eingelagert als in der "Tbl_Aufträge" vermerkt, wenn man die Anzahl der BEs in der Quelle erhöht. Eigentlich stellen die Variablen Abbruchkriterien in den Methoden "PrüfeZiel.." dar. Auch hier verstehe ich nicht, was ich falsch mache. Am merkwürdigsten sind die Statistiken der Eingänge und Ausgänge in den "L_Komm_K.." und der Senke "S_Wäsche". Diese steigen auf bis zu 40.000 an, obwohl nur 4.000 BEs durch die Quelle erzeugt werden. Dafür habe ich absolut keine Erklärung.. Die beiden Modelle sind angehängt (derzeit etwas unübersichtlich, weil mitten in der Bearbeitung). Vielen Dank schon einmal für die Mühen! Liebe Grüße! Edit: Im hochgeladenden Beispielmodell war eine Steuerung falsch eingetragen. [Diese Nachricht wurde von MaxiSim am 05. Jul. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Zitat:
for var i := 1 to Lager.AnzahlBEs Lager.Inhalt.Umlagern(Senke) next self.methAufr(1:00:00) self.methAufr(30:00)
Was macht diese Methode in Auslagertouren in deinen Augen genau??? Bitte Stepp per Stepp beschreiben. ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 09:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, danke für deine Antwort! Die Methode soll den gesamten Inhalt des Lagers auf die Senke umlagern, sobald sie aufgerufen wird. Der erste Aufruf der Methode erfolgt aus der INIT-Methode. Das Umlagern aus dem Lager mittels der for-Schleife habe ich einem anderen Foreneintrag entnommen. Die Umlagerung erfolgt für jedes BE, das sich in dem Moment im Lager befindet nacheinander. Ich glaube ich weiß, worauf du hinaus willst. Die for-Schleife braucht es gar nicht. Der Befehl if Lager.AnzahlBEs > 1 Lager.Inhalt.Umlagern(Senke) end reicht scheinbar aus.. Der nächste Methodenaufruf soll dann nach 1h und der nächste Aufruf nach 30 Minuten erfolgen. Daraufhin soll sich dieser Zyklus wiederholen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
ok, nächste Frage: Wie heufig wird die Methode nach t:= 2 h aufgerufen?
------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 10:31 <-- editieren / zitieren --> Unities abgeben:
Die Methode wird immer nach t = 30:00 Minuten aufgerufen.. Habe eine globale Variable hinzugefügt, in deren Abhängigkeit zwischen den "Wartezeiten" geschaltet wird. Das scheint zu funktionieren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
besser. nächste Frage: Wie viele BEs von welcher Art sollen zum jeweiligen Zeitpunkt ausgelagert werden? Wann ist die erste Auslagerung. ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 11:11 <-- editieren / zitieren --> Unities abgeben:
Danke! Für die Frage springe ich mal in das "richtige" Modell. "Auslagertouren" diente nur als Beispiel. Zu den jeweiligen Zeitpunkten soll der komplette derzeitige Inhalt (also alle BEs jeder Art) der drei Lager ausgelagert werden. Im Zielzustand läuft das Modell über einen noch zu definierenden Zeitraum, Annahme jetzt eine Arbeitswoche. Dementsprechend erzeugt die Quelle 5 mal den täglichen Input auf kontinuierliche Weise. Die erste Auslagerung ist um 10:00:00 des ersten Tages. Dazu kommt dann natürlich noch eine Einschwingphase, die ich noch ermitteln werde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
das Hauptmodell habe ich noch nicht angeschaut...las uns bei Auslagertouren bleiben ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
besser die Zeit in Tabelle oder globale Variable definieren. Den Startaufruf-Zeitpunkt in Init zu kpdieren ist ein wenig ungünstig. Zitat: Zu den jeweiligen Zeitpunkten soll der komplette derzeitige Inhalt (also alle BEs jeder Art) der drei Lager ausgelagert werden.
Liegt dieses Verhalten in "Auslagertouren" vor? ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 13:07 <-- editieren / zitieren --> Unities abgeben:
"Auslagertouren" hat im Gegensatz zu dem richtigen Modell nur ein einziges Lager, es ist aber das gleiche Prinzip. Es wird zu den Zeitpunkten der komplette Lagerinhalt umgelagert, unabhängig von der Art des BEs. Das Verhalten müsste meines Verständnisses nach also vorliegen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Also nach dem Auslagern sieht das bei mir like Pic aus....Wenn alles umgelagert wird, warum werden noch BEs im Lager angezeigt? ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 13:49 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 14:05 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Ausschließlich ein BE wird mit dieser Methode ausgelagert. Also das "Umlagern"-Befehl betrift ein BE und lagert dieses auf die Senke um. For-Schleife war schon richtig. Einmal die For-Schleife einflegen und wieder Testen. Dann Bitte das Ergebnis beschreiben... ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 06. Jul. 2018 14:24 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 06. Jul. 2018 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Das die for-Schleife mit und ohne Haltepunkt nicht alles auslagert, kannst du an in der Statistik von Lager sehen...das wäre die Verifizierung, die nicht klappte. Modell zeigt ein unerwartetes verhalten. Jetzt geht es die Ursache aufzufindeb. ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 09. Jul. 2018 11:37 <-- editieren / zitieren --> Unities abgeben:
Ich habe verschiedene Methoden implementiert. Am sinnvollsten erscheint mir die Kombination zweier For-Schleifen, die die x- und y-Dimension kombinieren. for var x := 1 to Lager.XDim for var y := 1 to Lager.YDim if Lager[x,y].Inhalt /= void repeat Lager[x,y].Inhalt.Umlagern(Senke) until Lager[x,y].Inhalt = void end next next Hier laufe ich aber in eine Endlosschleife, aus der ich noch keinen Ausweg gefunden habe. Ohne die repeat-Schleife, also so: for var x := 1 to Lager.XDim for var y := 1 to Lager.YDim if Lager[x,y].AnzahlBEs >= 1 Lager[x,y].Inhalt.Umlagern(Senke) end next next werden ohne Haltepunkt alle BEs umgelagert. Mit einem gesetztem Haltepunkt vor der Steuerung des Merkers MerkerMethodenaufruf wird wieder nicht der gesamte Lagerinhalt umgelagert. Ich weiß nicht wo der Fehler liegt. Zumal dieses Modell ja auch nur die Testumgebung für das richtige Modell ist.. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 09. Jul. 2018 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
jep Lager hat drei Dimensionen. Also die erste Methode ist richtig. die repeat wird nicht beendet, da bedingung nie erfüllt wird. Aus Senke umzulagern ist ähnlich der Umlagerung auf eine Maschine. Stell dir vor du stehst vor einem kleinen Tisch auf dem du 2000 Teile legen sollst. Irgendwann sagst du, dass es kein Platz mehr da ist. Senke hat Kapazität Eins. Während die Methode "LagerAus" ausgeführt wird, erfolgt keine Be-Vernichtung durch die Senke. Also ist die Senke beim Umlagern belegt. Erst nachdem die Methode beendet ist, können andere Aktivitäten ausgeführt werden. Somit kannst das Lager nicht umlagern, solange kein Platz da ist. Auch deshalb kommt es zu einer Endlosschleife Zitat: Zumal dieses Modell ja auch nur die Testumgebung für das richtige Modell ist..
Verifizierte Testumgebung ist sehr wichtig. Wenn etwas im Test nicht richtig funktioniert, kann es im großen Modell NIE funktionieren. Generell werden Testumgebungen unter härteren Bedingungen Verifiziert, damit die Validierung im großen Modell mit großer Wahrscheinlichkeit funktioniert. Denn die Fehlersuche in der Testumgebung ist sehr viel einfacher.. Die Auslagerungssteuerung kann beispielsweise so aussehen: Code:
for var x := 1 to Lager.XDim for var y := 1 to Lager.YDim while Lager[x,y].AnzahlBEs > 0 waituntil Senke.leer prio 1 Lager[x,y].Inhalt.Umlagern(Senke) end next next if MerkerMethodenaufruf self.methAufr(1:00:00) else self.methAufr(30:00) end MerkerMethodenaufruf := NOT MerkerMethodenaufruf
vG Nadin
------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 10. Jul. 2018 07:40 <-- editieren / zitieren --> Unities abgeben:
Die Erklärung zur Senke ist super, das erklärt einiges. Danke! Damit funktioniert die Auslagerung im richtigen Modell wunderbar. Was mich noch sehr stutzig macht, sind die extrem hohen Eingangs- und Ausgangsstatistiken der L_Komm_Kx. Die steigen auf Werte über 30.000, obwohl die Quelle nur 4.000 BEs erzeugt. Es müssen also irgendwo Ein- und Austritte verzeichnet werden. Ist dir so ein Verhalten irgendwie bekannt? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 10. Jul. 2018 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
füge bitte das aktuelle Modell bei. ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 11. Jul. 2018 10:32 <-- editieren / zitieren --> Unities abgeben:
Das aktuelle Modell liegt anbei. Die Statistikwerte der L_Komm_K1/2/3 verstehe ich nicht. Sie geben an, dass mehrere Zehntausend Ein- und Ausgänge in/aus die/den Lager/n stattgefunden haben. Das kann ich mir nicht erklären. Ich habe deine Idee der Werkerbindung auch für diesen Teil des Modells umgesetzt. Damit will ich erreichen, dass nicht mehr BEs zu jedem Kunden eingelagert werden, als in der Tabelle Tbl_Aufträge gefordert. Leider funktioniert das noch nicht richtig. Wenn die Anzahl der BEs, die die Quelle produziert erhöht wird, missachtet die Einlagerung sämtliche Restriktionen, die eigentlich durch die globalen Variablen "K1_H" etc. gegeben sein sollen. Dafür findet in den Methoden, die das BEZiel für den Transport festlegen, eine entsprechende Prüfung statt. Daraufhin steuern die globalen Variablen "KX_H_vorgemerkt", ob bereits ein BE für den Transport vorgesehen ist (also analog zur anderen Werkerbindung). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 11. Jul. 2018 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
nett.... (1) Code: for var i := 1 to L_Komm_K1.XDim @.Umlagern(L_Komm_K1[1,2]) next
das heißt in Pseudocode: gehe die XDim durch Lagere solange XDim existiert das BE von einem Platz auf ein anderen Platz um. Deshalb in LAgerstatistik die Eingangs- und Ausgangsstatistik so hoch. (2) ...nicht in PrüfeZielH und P_Komm_KEin eine globale Variable doppelt auf den selben Wert setzen. Ist verwirrend
(3) z.B. current.K1_H_vorgemerkt := false wird jedes mal gesetzt, wenn BE den Puffer verläst. Sollte doch eig. nur dann gesetzt werden, wenn alles im Lager ist. Abfrage fehlt... --------------------------- Modell mit Verbesserungsvorschlägen ist angehängt vG Nadin ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 11. Jul. 2018 16:50 <-- editieren / zitieren --> Unities abgeben:
Danke! Zwei Probleme sehe ich noch. a) Ich brauche den Zugriff auf die einzelnen Lagerplätze (bezogen auf dein (1)). Ist ein Lagerplatz belegt, d. h. seine ZDim erreicht, wird der nächste Lagerplatz genutzt. Mit "[1,2]" wird ja immer nur ein Lagerplatz genutzt. Hier könnte ich die ZDim erhöhen, sodass ausreichend BEs Platz finden. Davon möchte ich aber auch Gründen einer gewissen Realitätsnähe und der Animation absehen. Gibt es eine andere Möglichkeit, die BEs auf den jeweils nächsten freien Lagerplatz umzulagern, ohne die for-Schleife zu nutzen, die die Statistik zerschießt? Ich habe es noch nicht geschafft, etwas dergleichen zu programmieren. b) Es werden immer noch mehr BEs in L_Komm_K eingelagert, als durch Tbl_Aufträge vorgegeben - auch trotz der Überprüfung des Vorgängers. Zum Testen habe ich eine unendliche Anzahl BEs in der Quelle eingestellt. Die Methode "PrüfeZielT" habe ich erweitert:
Code:
if M_LI.Voll = true if @.Inhalt.KundeID = 1 AND K1_T < Tbl_Aufträge[3,1] M_LI.BEZiel := AP24 elseif @.Inhalt.KundeID = 2 AND K2_T < Tbl_Aufträge[3,2] M_LI.BEZiel := AP25 elseif @.Inhalt.KundeID = 3 AND K3_T < Tbl_Aufträge[3,3] M_LI.BEZiel := AP26 else return end end @.Umlagern
Damit funktioniert es für die BEs TShirt. In den Methoden "PrüfeZielH" und "PrüfeZielL" habe ich eigentlich das gleiche Prinzip angewandt. Dennoch werden zu viele BEs eingelagert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 11. Jul. 2018 23:25 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
zu (1) @.Umlagern(L_Komm_K1[1,1]) beispielsweise erweitern Code: for i := 1 to L_Komm_K1.XDim-- alle Handtücher des Stapels auf die Wäschecontainer der y-Position 1 if L_Komm_K1.Zdim > L_Komm_K1[i,1].AnzahlBEs then exitloop; end next @.Umlagern(L_Komm_K1[i,1])
zu (2) else Print "" ist ehe kein Return. Mit return verläst du die Auslagerungssteuerung, die nie wieder angeht. Das ist ungünstig. besser beispielsweise mit weituntil den Zustand der Kn_Buchstabe abfangen
Code: var _tab: integer var _menge: integer:= @.anzahlBEs if M_LI.Voll = true if @.Inhalt.KundeID = 1 --AND K1_T < Tbl_Aufträge[3,1] if current.K1_T > Tbl_Aufträge[3,1] _tab := Tbl_Aufträge[3,1] waituntil _tab > current.K1_T prio 1 end M_LI.BEZiel := AP24 elseif @.Inhalt.KundeID = 2 --AND K2_T < Tbl_Aufträge[3,2] if current.K2_T > Tbl_Aufträge[3,2] _tab := Tbl_Aufträge[3,2] waituntil _tab > current.K2_T prio 1 end M_LI.BEZiel := AP25 elseif @.Inhalt.KundeID = 3 --AND K3_T < Tbl_Aufträge[3,3] if current.K3_T > Tbl_Aufträge[3,3] _tab := Tbl_Aufträge[3,3] waituntil _tab > current.K3_T prio 1 end M_LI.BEZiel := AP26 --else --return end end @.Umlagern
Aber auch hier werden die Zähler überschritten, da Erfassung nach Messung zeitversetzt erfolgt. Auch ganz die Logik von dir durchblicke ich noch nicht. Dies sei auch geschuldet, dass ich nicht alles Teste. Nur frage ich mich, warum du Prozentual würfelst um Produkt dem Kunden zuzuordnen und gleichzeitig im Dialog die prozentuale Absatzmenge abfragst. Wenn ich beispielsweise eine Verteilung von 10/10/90 im Dialog wählen würde, wird Kunde 3 mit deiner 33% Regeln nie alle Produkte bekommen, da einer der Stationen voll läuft und die Auslagerung für einen anderen Kunden blockiert. Oder verstehe ich da was falsch?
vG Nadin ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 12. Jul. 2018 09:53 <-- editieren / zitieren --> Unities abgeben:
Danke für deine kontinuierliche Hilfe! zu (1):
Code: @.Umlagern(L_Komm_K1[i,1])
soll doch sicherlich in die for-Schleife mit hinein und nicht hinter die Schleife, oder? zu (2):
Code:
if current.K1_T > Tbl_Aufträge[3,1] _tab := Tbl_Aufträge[3,1] waituntil _tab > current.K1_T prio 1
Ich verstehe nicht, warum hier geprüft werden soll, ob K1_T größer als die Aufragsmenge ist. Eigentlich soll die Variable ja nie größer als die Menge werden. Gibt es noch eine Möglichkeit, die zeitliche Versetzung zu umgehen? Die prozentuale Verteilung nutze ich zur Nachahmung einer "Reihum"-Strategie. Da als Ausgangsstrategie ja "Teil wegtragen" zur Anwendung kommen muss, aber nicht erst Kunde1, dann Kunde2 und dann Kunde3 nacheinander komplett bedient werden soll, habe ich die prozentuale Zufallszahl eingeführt. Das Volllaufen einer Station und damit einhergehendes Blockieren der anderen Kunden ist durch die AND-Verknüpfung in den Zielprüfungen eigentlich verhindert.
Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 12. Jul. 2018 23:16 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
zu (1) nein, da for-Schleife mehrmals durchlaufen wird und nur einmal umgelagert werden soll zu (2) Dies zeigt den allgemeinen Ansatz für Würfel-Wert und Prüfwert. Du prüfst, ob Prüfwert nicht überschritten wird und gleichzeitig in Würfel-Wert liegt. Dies ist ungünstig, da beides gleichzeitig vorliegen muss. Würfel-Wert ist ein hartes kriterium. Prüfwert gilt soweit es vorliegt. Somit kann der Prüfwert vorliegen oder nicht, was in deinem Ansatz nicht berücksichtigt wird. Zitat: Gibt es noch eine Möglichkeit, die zeitliche Versetzung zu umgehen?
Das liegt immer irgendwo vor. Berücksichtigen und klar definieren, ist die Regel. Zitat: Das Volllaufen einer Station und damit einhergehendes Blockieren der anderen Kunden ist durch die AND-Verknüpfung in den Zielprüfungen eigentlich verhindert.
Dieses Verhalten sehe ich nicht. Sehe Bild. AND bedeutet, dass alles gleichzeitig gelten muss. Also wenn dein Würfel-Wert Kunde 1 würfelt und dieser voll ist, dann wird dieser Auftrag nie zu Kunde 2 oder 3 zugeordnet. ---------------------------------------- kleiner Fehler meinerseits... in Methode "P_Komm_KAus" muss für Laken die prüfwariablen auch auf 0, wie die restlichen gesetzt sind. ---------------------------------------- die Methode "AuslagernLagerIndiv" zeigt auch nicht das Verhalten, dass du gerne haben willst. Mache mal Debbugen beispielsweise mit Erweitern des Codes zu: Code: if LagerIndiv[1,1].AnzahlBEs = 10 AND P_LI.leer = true -- Wenn sich 10 TShirts eines Kunden gesammelt haben for var i := 1 to 10 -- und der Puffer P_LI leer ist, LagerIndiv[1,1].Inhalt.Umlagern(P_LI) -- werden alle TShirts auf den P_LI umgelagert. next elseif LagerIndiv[2,1].AnzahlBEs = 10 AND P_LI.leer = true -- Umlagerung erfolgt in Abhängigkeit der for var i := 1 to 10 -- Belegung/Stapelhöhe der TShirts je Kunde. LagerIndiv[2,1].Inhalt.Umlagern(P_LI) next elseif LagerIndiv[3,1].AnzahlBEs = 10 AND P_LI.leer = true for var i := 1 to 10 LagerIndiv[3,1].Inhalt.Umlagern(P_LI) next else --das ist die Erweiterung if P_LI.leer = false print "********" print "Anzahl BEs 1: " , LagerIndiv[1,1].AnzahlBEs print "Anzahl BEs 2: " , LagerIndiv[2,1].AnzahlBEs print "Anzahl BEs 3: " , LagerIndiv[3,1].AnzahlBEs end end
------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 13. Jul. 2018 11:34 <-- editieren / zitieren --> Unities abgeben:
Zu (1): Außerhalb der for-Schleife ist die Variable i aber nicht definiert. Dementsprechend gibt es dort eine Fehlermeldung. Verstehe ich das falsch? Zu (2): Dass beides geprüft wird, war tatsächlich meine Intention. Erachtete dies als guten Weg zur Zielauswahl. Zur AND-Verknüpfung: Mein Verständnis ist so, dass wenn die Zufallszahl den Kunden1 würfelt und die Zählvariable noch nicht den Stand der nachgefragten Menge erreicht hat, dieser Kunde1 bedient wird. Im nächsten Durchlauf wird dann bspw. wieder der Kunde1 gewürfelt. Jetzt ist die Menge aber schon erreicht, d. h. die zweite Bedingung wird nicht erfüllt. Daher wird eine neue Zufallszahl gewürfelt. Das Ganze passiert solange, bis eines der Bedingungspaare erfüllt wird. Tritt gar nichts mehr ein, sind alle Kunden bedient und die Einlagerung in die L_Komm_KX stoppt. Mir fiel jetzt auf, dass die Werker keine Stapel mehr aus den M_WcX holen - ab dem Zeitpunkt, wo eine der Variablen die geforderte Menge erreicht hat. Du hast also Recht. Daher neue Umsetzung mittels getrennter Abfrage der Zufallszahl und der Kundenzugehörigkeit.
Code:
if ZielZufall <= 0.33 if K1_H < Tbl_Aufträge[1,1] waituntil P_Komm_K1.leer = true AND K1_H_vorgemerkt = false K1_H_vorgemerkt := true M_WcH.BEZiel := AP24 end elseif ...
Problem dabei ist, dass ohne eine else-Anweisung nach Erreichen der ersten Bestellmenge die Auslagerung abbricht. Mit else-Anweisung wird wieder zu viel eingelagert. Ich stehe buchstäblich auf dem Schlauch.. Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 13. Jul. 2018 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
zu (1) In Programmieren ist generell alles möglich, was der Programmmierer sich vorstellen kann... Die Vorstellung, dass Zählindex in For-Schliefe ausschließlich in dieser For-Schleife gilt, schränkt deine Phantasie ein. var i: integer; for i:= 1 to .... loop ... next; zu (2)
Zitat: zu (2) Dies zeigt den allgemeinen Ansatz für Würfel-Wert und Prüfwert.
Allgemein bitte nicht überlesen. Reale Herausforderungen erfordern individuelle Lösungen. Dennoch folgt die Struktur stets gleichen Regeln ;). Zitat: Im nächsten Durchlauf wird dann bspw. wieder der Kunde1 gewürfelt. Jetzt ist die Menge aber schon erreicht, d. h. die zweite Bedingung wird nicht erfüllt. Daher wird eine neue Zufallszahl gewürfelt. Das Ganze passiert solange, bis eines der Bedingungspaare erfüllt wird. Tritt gar nichts mehr ein, sind alle Kunden bedient und die Einlagerung in die L_Komm_KX stoppt.
Dies ist einer deiner Pflichtfelder... Zu jedem Pflichtfeld wird normalerweise irrgendwann ein Pseudocode geschrieben. Dieser Pseudocode baut auf die Prozesse auf. Die Prozesse sind beispielsweise mithilfe EPK oder Petri, uvm. darstellbar. Der Pseudocode kann beispielsweise so aussehen: ****************************************** Zähle Anzahl Kunden, die noch was wollen (Prüfmenge >= Menge Geliefert + Die in diesem Auftrag enthaltene Menge) Würfle entweder für 3 oder 2 Kunden (wenn Einer, dann den Einen übergeben) Bestimme Kunden, an dem diese Bestellung geht (Eindeutig ein Kunde, der es bekommen soll) Starte Auslagern (hier die Prüfungen und Warten, sobald erfüllt) ----Prüfung zu Ende Wenn alle Produkte Ferting, Ende Simulation ***************************************** Dokumentiere diesen Pseudocode und deine implementierte Lösung in EPK oder Petrinetz. Prüfe ausgewählte mögliche Extrema. Sind diese in dem Prozess möglich? Welchen Zustand haben die Variablen bei der Ausführung? Was ist das Ende? Was ist der Anfang? ...uvm. vG Nadin ------------------
Zitat: Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.
Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 26. Jul. 2018 18:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadin, mittlerweile funktioniert alles so, wie es soll - danke für deine Hilfe! Eine Ausnahme gibt es aber natürlich noch. Bei einer Simulation über einen längeren Zeitraum bekomme ich von einem der WerkerPools die Fehlermeldung im Anhang. Der Werkerpool ist aber in 3D vorhanden, ich habe die Attribute alle gecheckt, da wird nichts durch die Simulation verändert. Kennst du dieses Problem? Viele Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 27. Jul. 2018 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für MaxiSim
Moin, Ehe Zeit merken und kurz davor SimEnde legen, um danach zu debuggen. Wahrscheinlich kann Algorithmus für einen der MA keinen Weg zu Wekerpool berechnen. Vermutlich hilft den Werkerpool freier im Raum zu Positionieren.... k.a. mehrere Gründe möglich. ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxiSim Mitglied Student
Beiträge: 18 Registriert: 13.06.2018 TM Plant Simulation 14
|
erstellt am: 27. Jul. 2018 13:22 <-- editieren / zitieren --> Unities abgeben:
|