Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Ausgangssteuerung erst wenn Safetystock erreicht

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Ausgangssteuerung erst wenn Safetystock erreicht (1133 mal gelesen)
pd8
Mitglied
Student


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 18. Jun. 2020 14:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Code_Zwischenpuffer_Ausgangssteuerung.PNG

 
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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 18. Jun. 2020 16:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 18. Jun. 2020 22:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Beispielmodell.PNG


Geanderter_Code_Zwischenpuffer_Ausgangssteuerung.PNG

 
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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 18. Jun. 2020 23:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich


20200529_Modell_Batches2.spp.txt

 
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


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 19. Jun. 2020 09:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Eigenschaften_der_Datei.PNG

 
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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 19. Jun. 2020 19:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich


ExamplePull.zip

 
zip

------------------
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


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 20. Jun. 2020 12:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


So_blockiertesdann.PNG

 
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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 20. Jun. 2020 14:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 15. Jul. 2020 18:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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_order

var _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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 15. Jul. 2020 21:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von pd8 an!   Senden Sie eine Private Message an pd8  Schreiben Sie einen Gästebucheintrag für pd8

Beiträge: 20
Registriert: 09.05.2020

erstellt am: 15. Jul. 2020 21:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von nadin1223 an!   Senden Sie eine Private Message an nadin1223  Schreiben Sie einen Gästebucheintrag für nadin1223

Beiträge: 938
Registriert: 29.03.2016

erstellt am: 15. Jul. 2020 22:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für pd8 10 Unities + Antwort hilfreich

(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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz