Autor
|
Thema: Ausgangssteuerung erst wenn Safetystock erreicht (1133 mal gelesen)
|
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 18. Jun. 2020 14:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich arbeite gerade an folgender Problemstellung: ein Zwischenpuffer wird mit über einer Demontage beliefert und hat dadurch auf einen Schlag einen Wert X im Puffer. Von diesem Puffer soll nun wieder eine gewisse Menge Y auf einmal zu verschiedene Nachfolger getragen werden. Ich habe eine Steuerung, die den Nachfolger mit den niedrigsten Bestand im Puffer beliefert. Dies funktioniert. Ich habe eine Steuerung, sodass die Aufnahme sich der Kapazität des Mitarbeiters bzw. wie viel der Mitarbeiter aufnehmen soll. Dies Funktioniert. Aktuell wird ab dem Zeitpunkt, in dem die Demontage erfolgt ist gepushed. Dies führt dazu, dass die Nachfolger immer weiter beliefert werden, obwohl sie den Nachschub garnicht brauchen. Ich habe versucht dies über eine Steuerung mit Safetystock zu regeln, jedoch ist die im Ausgang des Zwischenpuffers. Jetzt geht er die ganze Steuerung durch führt aber nichts aus, wenn der Safetystock der Nachfolger nicht unterschritten ist. Dies macht Sinn, jedoch weiß ich nicht wie ich diese Lösung so umschreiben kann damit der Zwischenpuffer erst garnicht den Werker ruft, wenn der Safetystocks der Nachfolger nicht unterschritten sind. Wo muss ich die Methode reinschreiben, sodass der Werker erst nicht zu dem Zwischenpuffer läuft? Könnt ihr mir da bitte weiter helfen? Vielen Dank und schöne Grüße pd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 18. Jun. 2020 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
Moin, schön aufgeräumt dein Code bitte ein Bild von Modell (AP-Puffer usw. das verstehe ich nicht) und kurze Kommentare vor jedem Block im Code... ---schon mal am Rande
Zitat: Wo muss ich die Methode reinschreiben, sodass der Werker erst nicht zu dem Zwischenpuffer läuft?
@.umlagern ruft in der Regel den Werker. --> umlagern verzögern bis Bedingung erfüllt ------------------ Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten. (Matthew Austern) [Diese Nachricht wurde von nadin1223 am 18. Jun. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 18. Jun. 2020 22:29 <-- editieren / zitieren --> Unities abgeben:
Abend Nadin, danke schon mal. anbei sind die Bilder, ich hoffe es ist verständlich. Ich habe gerade schnell versucht den kompletten Umlagerung block in eine if zu packen und nur aufzurufen wenn safetystock unterschritten ist, jedoch funktioniert dies auch nicht. Er hat auch schon ein BE in der Hand obwohl die Ausgangssteuerung noch nicht mal durch laufen ist.. Vielen Dank dir schon mal Schöne Grüße pd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 18. Jun. 2020 23:30 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
push nimmt das, was kommt. pull nimmt nur das, was es braucht! Und AnzahlBes weiß nicht, dass schon was bestellt ist. Aber noch nicht eingetroffen ist Kleines Beispiel ist angehängt. Aufpassen: Wenn nicht if-else-Block, dann return nach @.umlagern, sonst lagerst du das BE 2x um!
------------------ 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 |
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 19. Jun. 2020 09:04 <-- editieren / zitieren --> Unities abgeben:
hallo Nadin, aus welchen Gründen auch immer kann ich die Datei nicht öffnen. Obwohl sie in .spp vorliegt. Vllt hast du eine andere Version. Ich habe 15.0.3 & die Testlizenz. Kannst es auch gerne versuchen in Bilder zu schicken oder auf einen anderen Weg Schöne 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: 19. Jun. 2020 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
|
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 20. Jun. 2020 12:46 <-- editieren / zitieren --> Unities abgeben:
Klasse! Super Lösung, für spätere Zwecke sehr variabel einsetzbar. Ich habe die Steuerung jetzt verstanden. Und hat auch ohne Unternetzwerke funktioniert In meinem Modell arbeite ich viel mit Unternetzwerken. Die _orderTabelle_init erkennt die ZielPuffer im Unternetzwerk und die Tabelle wird ja dann in die orderTabelle in den vorgelagerten Ausgangspuffer kopiert. Dieser befindet sich jetzt wieder in einem Unternetzwerk und erkennt vermutlich dadurch nicht den Puffer, der dann auch als Zielort definiert wird. Deshalb bleibt der Werker aktuell nach dem aufnehmen auf dem Arbeitsplatz und der Zielort Werker ist sein aktueller Standort was ja nicht sein kann.. Kannst du mir bei der richtigen Ansprache der Unternetzwerke helfen? Ich habe Bilder angehängt. Vielen Dank schonmal!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 20. Jun. 2020 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
in _orderTabelle_init hat Spalte 1 den Format objekt--> mit Maus Puffer markieren und in Zelle dieser Tabelle ablegen. ------------------ 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 |
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 15. Jul. 2020 18:50 <-- editieren / zitieren --> Unities abgeben:
Ich bin weiter Basteln dieser Steuerung und habe Sie immer weiter angepasst. Wichtig ist zu wissen, dass es mehrere Vorgänger geben kann, sodass sich ein Vorgänger immer erst dann einen Neuen Auftrag ziehen soll, wenn kein Auftrag in seiner eigenen orderTabelle ist. Ich wollte die Überprüfung, der ersten beiden waituntil mit einer benutzerdefinierten Variable umgehen, sodass diese erst wieder aufgerufen werden, wenn der Batch komplett abgearbeitet ist. Leider ohne Erfolg. Wie kann ich eine Variable definieren, sodass sie nicht bei jeden Durchgang wieder neu initialisiert. Globale geht in diesem Fall auch nicht, da es ja mehrere Vorgänger geben könnte.. Kann mir dabei jemand helfen? Vielen Dank für den Support!!
Code: var _orderTable : table := ?.Attr_ordervar _be : object var _orderTabelle_Rohmaterial_Zwischenpuffer : object := root._orderTabelle_Rohmaterial_Zwischenpuffer var Safetystock : integer := Prozessparameter["Safetystock",1] If ?.anzahlBEs = Safetystock then _be := .Benutzerobjekte.Rohmaterial.erzeugen(~.Puffer_Quelle_Rohmaterial.Quelle) _be.Zielort := Demontagestation end //if j = 0 then var y : integer := _orderTabelle_Rohmaterial_Zwischenpuffer.YDim
waituntil _orderTabelle_Rohmaterial_Zwischenpuffer.YDim > 0 --warte bis Bestellung in der Gesamtordertabelle ist waituntil _orderTable.YDim < 1 -- warten bis kein Auftrag mehr abgearbeitet wird, dann kann sich neuer Auftrag aus Gesamtordertabelle gezogen werden //Übertragung der Bestellung in die Station/Puffer, wo die Bestellungabgearbeitet wird & Bestellung aus Haupttabelle löschen _orderTabelle_Rohmaterial_Zwischenpuffer.kopiereBereichNach({1,1}..{2,1}, _orderTable,1,1) _orderTabelle_Rohmaterial_Zwischenpuffer[1,1] := void _orderTabelle_Rohmaterial_Zwischenpuffer[2,1] := void _orderTabelle_Rohmaterial_Zwischenpuffer.KopiereBereichNach({1,2}..{2,*},_orderTabelle_Rohmaterial_Zwischenpuffer,1,1) //end //j := 1 var _orderNeed: integer := _orderTable[2,1] // warte bis AnzahlBes im Puffer > als das Los oder Arbeiter schon da //hier transportiert der Arbeiter genau ein Los auf einmal waituntil ?.AnzahlBes >= _orderNeed or current.AP_Puffer.belegt @.Zielort := _orderTable[1,1] //setze Zielort von BE _orderTable[2,1] -=1; //dies vermindert die bestellte Menge um 1 @.umlagern() //jetzt umlagern waituntil @.standort /= ? if _orderTable[2,1]= 0 current.AP_Puffer.inhalt.kapazität:= current.AP_Puffer.inhalt.anzahlBes //setze MA Kapa auf genau gleich Los _orderTable.entferneZeile(1) // lösche die Bestellung aus der Order //j := 0 end
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 15. Jul. 2020 21:25 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
werde noch nicht ganz schlau aus dienem Code... wie funktioniert es mit sagen wir mal 2 BE in einem Auftrag? Weil eig - also ich gehe davon aus, dass dies immer noch eine Ausgangsteuerung ist - deine zweites waituntil die Umlagerung verhindern.... und dies bitte auch prüffen...
Zitat: //Übertragung der Bestellung in die Station/Puffer, wo die Bestellungabgearbeitet wird & Bestellung aus Haupttabelle löschen _orderTabelle_Rohmaterial_Zwischenpuffer.kopiereBereichNach({1,1}..{2,1}, _orderTable,1,1) _orderTabelle_Rohmaterial_Zwischenpuffer[1,1] := void _orderTabelle_Rohmaterial_Zwischenpuffer[2,1] := void _orderTabelle_Rohmaterial_Zwischenpuffer.KopiereBereichNach({1,2}..{2,*},_orderTabelle_Rohmaterial_Zwischenpuffer,1,1) //end
------------------ 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 |
pd8 Mitglied Student
Beiträge: 20 Registriert: 09.05.2020
|
erstellt am: 15. Jul. 2020 21:39 <-- editieren / zitieren --> Unities abgeben:
der Wunsch wäre, dass beim 2. BE die ersten 2 waituntil garnicht mehr abgefragt werden, sondern erst wieder bei einem neuen Batch. Das bekomme ich aktuell nicht gecodet. Der Hintergrund hinter der Steuerung ist, dass es mehrere Vorgänger geben kann und somit soll ich ein Vorgänger immer erst dann ein Auftrag holen, wenn er selbst keinen mehr abarbeiten. der Code bzgl. dem kopieren funktioniert meiner Ansicht nach. Wobei ich dir recht gebe, dass ich das durch eine Änderung die ich vorgenommen habe, auch mit Zeilentfernen machen könnte. Vielen Dank für deinen Support! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 938 Registriert: 29.03.2016
|
erstellt am: 15. Jul. 2020 22:08 <-- editieren / zitieren --> Unities abgeben: Nur für pd8
(1) Zitat: der Wunsch wäre, dass beim 2. BE die ersten 2 waituntil garnicht mehr abgefragt werden, sondern erst wieder bei einem neuen Batch.
Das ist eine Ausgangssteuerung...Diese wird beim Umlagern immer aufgerufen...Damit ist die Eventposition nicht mit diesem Wunsch vereinbar!! (2)
Zitat: Der Hintergrund hinter der Steuerung ist, dass es mehrere Vorgänger geben kann und somit soll ich ein Vorgänger immer erst dann ein Auftrag holen, wenn er selbst keinen mehr abarbeiten.
Zerleg mal den Workflow in Events und Prozesse (also deine Idee (1) und (2))...Kannst beispielsweise EPK, UML oder was auch immer hierzu verwenden... Ziel ist: Suche dir das passende Event und gestalte den passenden Prozess hierzu. Zitat: der Code bzgl. dem kopieren funktioniert meiner Ansicht nach. Wobei ich dir recht gebe, dass ich das durch eine Änderung die ich vorgenommen habe, auch mit Zeilentfernen machen könnte.
nö. KopiereBereichnach überschreibt nur den Bereich, wohin kopiert wird. Unterer Eintrag bleibt stehen.
------------------ 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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|