Autor
|
Thema: Umlagermethode von BEs mit Eckumsetzer (811 / mal gelesen)
|
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 05. Nov. 2021 20:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich bin neu bei Plant Simulation und habe versucht eine Methode fürs Umlagern von BE herzustellen für mein Modell im Rahmen meines Studiums. Ich habe ein Modell abgebildet, dass ein logistisches System fürs Kommissionieren darstellt. Ich habe Aufträge die abarbeitet werden müssen, und eine Kommissionierliste als Basis dafür. Diese Liste -als Benützer definiertes Attribut- geht mit dem BE auf der Reise durch die Anlage, wo es je nach Bedarf, eventuell mehrere Stationen durchlaufen muss. Folgende Aufgabe soll die Methode erfüllen: Die Methode soll dienen als Ausgangssteuerung bei Eckumsetzer aufgerufen werden.Es soll überprüfen, ob der BE, der sich auf dem Eckumsetzer befindet, Produkte aus derjenigen Station braucht, oder nicht. Wenn nicht, fährt der BE geradeaus bis zum nächsten Eckumsetzer. Als zusätzliche Bedingung wird geprüft, ob die Zielstation nicht voll ist. Beim Eckumsetzer ist beim Reiter Attribute als Strategiemethode eingegeben. Meine Methode schaut wie folgt aus: ------------------------------------- var BE : object BE :=@ --- @ bezeichnet das aktuelle BE if BE /= void then for var i:=1 to BE.tblOrder.Ydim loop if BE.tblOrder["Station",i]="Station1" and Station1.Eckumsetzer_10.voll = false --- Umlagern nach Benützerdefinierte BE-Attribut in der Tabelle Order BE.umlagern(Station1.Eckumsetzer_10) exitloop end next end ----------------------------- Wenn ich es laufen lässt, kommt die Fehlermeldung, dass die falsche Anzahl von Paramter übergibt. Siehe Screenshot. Wenn mir jemand, helfen könnte, wäre super. Danke für eure Hilfe, Viele Grüße, Seb
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 05. Nov. 2021 22:15 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
Hi Seb, Zitat: Wenn ich es laufen lässt, kommt die Fehlermeldung, dass die falsche Anzahl von Paramter übergibt. Siehe Screenshot. Wenn mir jemand, helfen könnte, wäre super.
die Methode erwartet (dies sagt die Fehlermeldung: "1 übergeben Integer, erwartet 0") Code: param n: integer [...]
nur was diese Methode aufruft, verstehe ich nicht ... Aber dies ist auch nicht deine Frage 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 |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 06. Nov. 2021 09:22 <-- editieren / zitieren --> Unities abgeben:
Hi Nadin, Danke für die Rückmeldung Kann es sein, dass daran liegt, dass ich die Methode beim Reiter Attribut vom Eckumsetzer -siehe Screenshot im Anhang- hinzugefügt und Plant Simulation erwartet ein Integer von 0 bis 3 als Rückgabe? 0 bis 3 sind in dem Fall die Standardausgänge vom Eckumsetzer. Bzw. Plant Simulation kann nicht nicht mit einem Pfad als Ziel anfangen, sondern braucht ein Integer als Ziel in der Methode? Es liegt warhscheinlich daran, dass ich mich falsch ausgedrückt habe Die Methode dient dazu zu entscheiden, ob der BE in der Station ausgeschleust muss oder fährt gerade aus auf die Fördertechnik weiter bis zur nächsten Eckumsetzer, bzw. Entscheidepunkt. Dabei ist für die Methode wichtig was dieser BE braucht, bzw. in welcher Station sich diese Produkte befinden. Danke Lg, Seb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 06. Nov. 2021 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
Zitat: Kann es sein, dass daran liegt, dass ich die Methode beim Reiter Attribut vom Eckumsetzer -siehe Screenshot im Anhang- hinzugefügt und Plant Simulation erwartet ein Integer von 0 bis 3 als Rückgabe? 0 bis 3 sind in dem Fall die Standardausgänge vom Eckumsetzer.
ok, es gibt verschiedene Bausteine in der Klassenbibliothek. Die Bezeichnung von deinem Baustein ist "Umsetzer". Es gibt auch den Eckumsetzer ;) Und deine gewählte Strategie für Umsetzer ist "Methode am Umsetzpunkt". danke, jetzt kann ich folgen :D Zitat: Die Methode soll dienen als Ausgangssteuerung bei Eckumsetzer aufgerufen werden. [...]
Umsetzer entscheidet nicht in der Ausgangssteuerung wo ein BE hingeht. Weil auf einem Umsetzer das BE den richtigen Ausgang schon davor anfahren muss ... Deshalb ... die "Methode am Umsetzpunkt", wo du grade diese Logik einbinden versuchst; dies ist der richtige Ort ;) Der Parameter der an die Methode übergeben wird ist der Eingang, an welchen das BE eingetreten ist. Der Parameter der in der Methode gesetzt wird, ist der Ausgang, an welchen das BE austreten soll. Code: param EingangsNr: integer?.AusgangFürBE := 0 /* Nummer des Ausgangs */
------------------ 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: 949 Registriert: 29.03.2016
|
erstellt am: 06. Nov. 2021 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
nur aus Neugierde: Wie sieht dein Ansatz/Methode zur Aktualisierung von tbOrder an Station(en) aus? ------------------ 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 |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 06. Nov. 2021 17:18 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für die Hinweise Entschuldigung, in meiner Branche ist genau verkehrt Von nun her, werde ich Umsetzer schreiben, um nicht die Leute zu verwirren Super, danke für die ausführliche Erklärung. Ich habe meinen Ursprünglichen Fehler verstanden. Ich habe nun die Methode umgeändert -siehe Screenshot im Anhang. Es funktioniert für die BEs die nur von einer Station etwas brauchen, bzw. Einzelzeiler. Ist schon etwas gutes Ich habe es mit einer For Schleife hergestellt, nehmen ich aber an, dass es daran liegt, dass es nicht vollständig funktioniert. ----------------- param EingangsNr: integer var BE: object for var i:=1 to @.tblOrder.Ydim if @.tblOrder["Station",i]="Station1" then if Station1.Eckumsetzer_10.voll= false ?.AusgangfürBE:= 3 else ?.AusgangfürBE:= 0 end elseif @.tblOrder["Station",i]/="Station1" then ?.AusgangfürBE:= 0 end next ----------------- Was sollte ich in der Methode anpassen, damit es auch funktioniert für BE die auch von mehreren Station fahren. Mit der jetzigen Methode kriege ich die Fehlermeldung " Es gibt kein eintretendes BE". Ich hätte an einer While Schleife gedacht, aber ich kann mir vorstellen wie ich es abbilden könnte. Zu deiner letzten Frage, es hängt zusammen und ist die weitere spannende Aufgabe Danke LG Seb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 06. Nov. 2021 21:37 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
Zu Fehlermeldung im Bild ... vorsicht!!! Fehlermeldung kommt, weil das BE nicht mehr auf dem Umsetzer ist. Während der Ausführung der Methode "mUmsetzer1" ist das BE auf dem Umsetzer auf dem Umsetzpunkt. Dein @ ist aber nicht mehr auf dem Umsetzer. Es sollte aber da sein!!! Da wirkt eine Methode oder irgendetwas anderes dazwischen... zu Code: exitloop war schon richtig mal Code kommentiert: Code: param EingangsNr: integer var BE: object //setzte net, also wozu inizialisierenfor var i:=1 to @.tblOrder.Ydim //gehe die Order-Tabelle durch if @.tblOrder["Station",i]="Station1" then //wenn Station-Name auftaucht /* Tipp: nicht hard kodiert in Coding "Station1 usw. verwenden. Man kommt auf die Idee die Stationsnamen auch mal zu ändern ;-) */ if Station1.Eckumsetzer_10.voll= false //Prüfkriterium 1 /*Nur am Rande: es gibt EinObj.vg(1) ("vg" = Vorgänger ist ein Attribut), damit kannst du vorgelagertes Objekt auch abfragen*/ ?.AusgangfürBE:= 3 else ?.AusgangfürBE:= 0 end //hier return oder exitloop elseif @.tblOrder["Station",i]/="Station1" then //das ist das gleiche wie im if-Teil, nur NOT... weshalb ein else hier reicht /*TIPP: IF-Else enthält immer ein Else-Block. Sollte else nee eintreten, dann meist auch mit "debug". Damit man auch etwas merkt*/ ?.AusgangfürBE:= 0 //hier return oder exitloop end next
Zitat: Ich hätte an einer While Schleife gedacht, aber ich kann mir vorstellen wie ich es abbilden könnte.
While und For ist gleiche Logik, also wenig unterschied... Zitat: Zu deiner letzten Frage, es hängt zusammen und ist die weitere spannende Aufgabe
Die gesamte Informationsverarbeitung-Pipeline zu betrachten, hilft manchmal die relevanten Attribute/Events/Prozesse zu identifizieren und auch mögliche einfachere Implementierungen anzuwenden. bzw. deine tblOrder-Tabelle ist ok... halt nicht elegant ;-) ------------------ 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 |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 06. Nov. 2021 23:39 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Es funktioniert, ich habe es soeben probiert. Ich hatte nicht gedacht an die if ..elseif.. end so zu verchachteln. Wegen des Hard Kodieren, muss ich natürlich aufpassen. Ich muss noch lernen wie ich es verbessern kann. Danke für den Tipp Ich kummere mich um die Stationen jetzt um die Stationen Danke u schönen Abend LG, Seb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 07. Nov. 2021 19:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich habe noch ein paar Versuche heute gemacht und ich bin doch auf etwas drauf gekommen :/. Wenn ich einen BE habe, der durch mehrere Stationen fahren muss, verhält sich das System nicht wie gedacht. Ich habe festgestellt, dass der BE nur durch die erste Station zB Station 1 -siehe Screenshot- "umgesetzt" wird. Er wird in der Station 1 bearbeitet, dann fährt er weiter aber stoppt nicht an den folgenden Stationen. Ich habe versucht die Ursache zu finden, aber könnte keine finden. Woran könnte es liegen? Danke, LG, Seb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 07. Nov. 2021 20:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
Mach dich bitte mit debugging vertraut. dies bedeutet beispielsweise in einer Methode mal paar Klassenhaltepunkte (rechts-klick mit der Maus) einfügen und anschauen, wie die Attribute von BE zum Zeitpunkt, wo es nicht so funktioniert, aussehen... ------------------ 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 |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 08. Nov. 2021 02:29 <-- editieren / zitieren --> Unities abgeben:
Danke, ich habe diesen Automatismus nicht, aber ich werde es jetzt machen. Ich habe den Gedenkefehler gefunden. Die Zählervariable i wurde fix die Wert 1 zugewiesen. Ich habe jetzt 2 Fälle mit eigenen Schleifen gedacht. Einerseits, wenn es nur eine Zeile in der tblOrder vorhanden ist, und anderseitsm wenn es mehrere Zeilen in der tblOrder vorhanden sind. Ich habe es versucht mit einer globaler Variable zu erledigen, welche ich in der zweiten Schleife aufrufe. Aber ich habe es doch rausgelassen. Wäre es doch einen sinnvollen Ansatz gewesen? Jetzt habe ich folgende -komplizierte - Methode hergestellt. Ich habe es probiert und mit debug getestet. Es hat bei den ersten BE funktioniert, und beim dritten kommt die Fehlermeldung -siehe Screenshot- "es gitb kein eintretendes BE" :/ ---------------- param EingangsNr: integer var i: integer var FirstPos : boolean
FirstPos := true if @.tblOrder.yDim=1 then // wenn es nur eine einzige Zeil1e in tblOrder vorhanden ist for i:=1 to @.tblOrder.yDim if @.tblOrder["Station",i]="Station2" then //wenn Station-Name auftaucht if Station2.Eckumsetzer_20.voll= false then//Prüfkriterium 1 ?.AusgangfürBE:= 3 else ?.AusgangfürBE:= 0 end elseif @.tblOrder["Station",i]/="Station2" then //wenn Station-Name nicht auftaucht ?.AusgangfürBE:= 0 exitloop end next elseif @.tblOrder.yDim/=1 then // wenn es mehr als eine Zeile in tblOrder vorhanden ist for i:=1 to @.tblOrder.yDim loop//gehe die Order-Tabelle durch if FirstPos=true if @.tblOrder["Station",i]="Station2" then //wenn Station-Name auftaucht bei der ersten Zeile if Station2.Eckumsetzer_20.voll= false //Prüfkriterium 1 ?.AusgangfürBE:= 3 else ?.AusgangfürBE:= 0 end exitloop elseif @.tblOrder["Station",i]/="Station2" then //wenn Station-Name nicht auftaucht bei der ersten Zeile Zählervariable um eins inkrementieren FirstPos:= false end elseif FirstPos=false if @.tblOrder["Station",i]="Station2" and LastPos <= @.tblOrder.yDim then //wenn Station-Name nicht auftaucht bei der ersten Zeilen if Station2.Eckumsetzer_20.voll= false //Prüfkriterium 1 ?.AusgangfürBE:= 3 else ?.AusgangfürBE:= 0 end else // wenn keine Kriterien erfüllt, fährt geradeaus ?.AusgangfürBE:= 0 end end next end ---------------- Wenn jemand einen guten Tipp hätte, wäre ich dankbar. Danke für eure Hilfe, LG, Seb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 08. Nov. 2021 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für Sebba22
Zitat: Zu Fehlermeldung im Bild ... vorsicht!!! Fehlermeldung kommt, weil das BE nicht mehr auf dem Umsetzer ist. Während der Ausführung der Methode "mUmsetzer1" ist das BE auf dem Umsetzer auf dem Umsetzpunkt. Dein @ ist aber nicht mehr auf dem Umsetzer. Es sollte aber da sein!!! Da wirkt eine Methode oder irgendetwas anderes dazwischen...
i.d.r. sind Methoden für diese Aufgabe nie länger als paar Zeilen.. ;) nur ein Beispiel.. Code:
param EingangsNr: integervar intAusgangFürBE : integer := 0 //hierhin wird umgelagert, wenn die Bedingung nicht erfüllt ist for var i:=1 to @.tblOrder.yDim if @.tblOrder["Station",i]="Station2" and Station2.Eckumsetzer_20.voll= false then intAusgangFürBE:= 3 //wenn Bedingung erfüllt, dann ändere den Wert exitloop //und raus aus der for-Schleife end next ?.AusgangfürBE:= intAusgangFürBE //setze den Ausgang im Umsetzer
------------------ 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 |
Sebba22 Mitglied Logistikplaner
Beiträge: 7 Registriert: 05.11.2021 Plant Simulation v16 - Studenten Version
|
erstellt am: 08. Nov. 2021 22:54 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|