Autor
|
Thema: Shared Buffer Setup (383 / mal gelesen)
|
benvicious Mitglied
Beiträge: 2 Registriert: 10.01.2022
|
erstellt am: 10. Jan. 2022 14:53 <-- editieren / zitieren --> Unities abgeben:
Hallo liebes Forum! Da ich nun wirklich mit meinem Latein am Ende bin, hoffe ich, dass ihr mir bei folgendem Szenario weiterhelfen könnt. Ich schreibe aktuell meine Masterarbeit, in welcher ich den Einfluss verschiedener Puffersetups in flexiblen Automobilfertigungssystemen in Plant Simulation untersuchen soll. (BTW, ich habe vorher noch nie mit der Software gearbeitet.) In dem Thema habe ich sowohl klassische Puffer, welche zwischen zwei Fertigungsstationen liegen, als auch sog. Shared Buffer, in welchen mehrere Stationen ihre Werkstücke puffern dürfen. Für diese Shared Buffer habe ich ein Lager gewählt, da ich da mittels einer Methode fortlaufend prüfen kann, welche Bauteile im Lager liegen und diese passend an die vorgegebenen Stationen weiterleiten kann, sobald diese leer sind. Da ich allerdings schwankende und zwischen den Stationen abweichende Bearbeitungszeiten habe (negexp, 3:00 bis 5:00), möchte ich gerne begrenzen, wie viele Teile eine jeweilige Station puffern darf. Mein Plan ist, dass eine Station nach der Bearbeitung überprüft, wie viele Teile im Lager liegen und dies mit einem Grenzwert einer Tabelle vergleicht. An Hand dessen entscheidet die Station, ob sie das Bauteil in den Puffer übergibt oder ob sie warten muss, bis einer der ihr zugewiesenen Pufferplätze frei ist. Folgendes Beispiel: Station 2 führt Task 1 an zwei unterschiedlichen Modellen aus. Die Tabelle "SB_Grenzen" gibt den Grenzwert vor, bis zu welcher Menge Teile mit der Kennzeichnung T1 in den Puffer geschoben werden dürfen. Wenn der Wert in der Tabelle 0 ist, darf nicht in den Puffer gefahren werden, die Umlagerung erfolgt direkt zur Nachfolgestation. Wenn der Wert >0 ist, prüfe ich über eine for-Schleife die Anzahl der Teile und die Teile landen entsprechend im Lager. Zumindest in meiner Theorie.. Wenn der Grenzwert in der Tabelle 1 ist, funktioniert das System, sobald ich jedoch einen Wert >2 vorgebe, bricht das System zusammen und die Station läuft nach und nach das Lager mit mehr Teilen voll, als der Grenzwert eigentlich zulassen sollte. Könnt ihr mir da helfen? Habe ich einen Syntaxfehler oder ähnliches? Ich weiß leider nicht mehr weiter.. Liebe Grüße, Ben Code:
var Schwellenwert: integer Schwellenwert := SB_Grenzen[1,2]var i: integer var T1: integer if Schwellenwert = 0 @.umlagern(1) elseif Schwellenwert > 0 for i:= 1 to Lager.XDim loop if Lager[i,1].belegt if Lager[i,1].Inhalt.Name = "V1_T1" or Lager[i,1].Inhalt.Name = "V2_T1" T1 := T1 + 1 if T1 < Schwellenwert @.umlagern(2) elseif T1 >= Schwellenwert waituntil not StationL6.belegt @.umlagern(2) end end end next if T1 = 0 @.umlagern(2) end end
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 10. Jan. 2022 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für benvicious
ich werde noch nicht ganz schlau aus Steuerungsansatz, welchen du implementieren willst ... aber ich lese es mir mal heut Abend nochmal in ruhe durch... in deiner Methode fehlt mindestens exitloop um for-Schleife nach einer Umlagerung zu verlassen ------------------ 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: 11. Jan. 2022 00:22 <-- editieren / zitieren --> Unities abgeben: Nur für benvicious
Also ich vermute mal du möchtest diesen Lösungsansatz implementieren..... Zitat: "If there is space in the dedicated buffer the machine releases the part which then moves towards machineM2, otherwise the system controls if the part can be introduced in the shared buffer. If there is space available in the shared buffer the machine releases the part that enters in the shared buffer, otherwise the machine is blocked until a new space becomes available in the dedicated buffer or shared buffer." [Matta, A., Runchina, M., & Tolio, T. (2006). Automated flow lines with shared buffer. In Stochastic Modeling of Manufacturing Systems (pp. 99-120). Springer, Berlin, Heidelberg. S:111]
Wenn ich deinen Methodenansatz richtig interpretieren, dann wäre unten ein möglicher Lösungsansatz hierzu (nicht getestet).... Aber dein Methodenansatz passt nicht ganz zu dem Lösungsansatz ..... deshalb: Welchen Lösungsansatz versuchst du zu implementieren? Code: var Schwellenwert: integer Schwellenwert := SB_Grenzen[1,2] var _NF: integer := 1 --Puffer var T1: integer := Schwellenwert --inizialisieren auf Schwellenwertif Schwellenwert > 0 for var i:= 1 to Lager.XDim loop if Lager[i,1].belegt if Lager[i,1].Inhalt.Name = "V1_T1" or Lager[i,1].Inhalt.Name = "V2_T1" T1 -= 1 if T1 = 0 exitloop end end end next if T1 = 0 waituntil not StationL6.belegt prio 1 --prio im Mikrosystem abstimmen (ich vermute mal, du hast mehr als eines) end _NF := 2 --Lager end @.umlagern(_NF)
Bezugnehmend auf deine Massage: Nein, weil öffentliche Postings auch Anderen mit ähnlichen Problemen helfen!
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 |
benvicious Mitglied
Beiträge: 2 Registriert: 10.01.2022
|
erstellt am: 11. Jan. 2022 18:45 <-- editieren / zitieren --> Unities abgeben:
Der zitierte Lösungsansatz wäre der nächste Schritt, zunächst soll ein alleinstehender Shared Buffer verwendet werden, welcher Bauteile verschiedener Stationen in festgelegten Mengen (dazu die for-Schleife mit der Grenzwerttabelle) aufnehmen kann und an den zugehörigen Stellen einspeist. Ich habe deinen Methodenansatz geprüft, er hat zwar nicht direkt funktioniert, konnte jedoch damit meine Methode nochmal überarbeiten. Ich habe die If-Abfrage, welche prüft, ob das behandelte Werkstück noch in den Puffer darf aus der For-Schleife gezogen und lasse sie, nachdem die For-Schleife die Anzahl der bereits gepufferten Werkstücke gezählt hat, unabhängig den gemessenen Wert mit dem Grenzwert abgleichen. In den ersten Tests funktioniert es bisher super, vielen Dank schonmal! Aktuell sitze ich an einem kleinem Modell zu dem in deinem Zitat beschriebenem Ansatz und lasse nebenbei meine Methode mit dem Experimentverwalter testen. Wenn ich mehr herausgefunden bzw. eine Lösung habe, stelle ich den Aufbau hier in den Thread, wird wahrscheinlich aber erst morgen sein. VG Julian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|