Cancel
Showing results for 
Search instead for 
Did you mean: 

How to write a code to implement FIFO Strategy for a Warehouse

Creator
Creator

Hallo Zusammen,

 

ich habe ein Code (s.h Anhang) für ein Lager geschrieben. Der Quellcode ist so geschrieben, dass erstmal überprüft werden soll ob das Teil was gerade durchsucht wird ein Tauschteil ist, d.h es soll durch einen aus einen Puffer ersetzt werden ist aber der Puffer leer soll es vom Lager genommen werden.  Die Priorität die am Anfang gegeben ist determiniert einfach von welchem Lager es genommen werden soll (Lager oder Lager1). Es soll ja nur ein Teil ersetzt werden daher der counter (s) als Abbruchkriterium. Das Lager wird so wie jetzt gerade der Quellcode geschrieben ist immer nach der LIFO Strategie durchsucht, da das Lager jedesmal wenn es aufgerufen wird von x:=1 bis x:=x.dim von Lager durchsucht wird und dasselbe gilt ja für die y-achse von Lager. Meine Frage hier wie kann ich mein Quellcode so umwandeln das auch FIFO realisierbar ist?

 

Des Weiteren habe ich immer Probleme, dass wenn nur ein Teil im Lager vorhanden ist, meine Simulation irgendwie hängen bleibt... Ich vermute das es vielleicht daran liegen könnte, dass während ich mein Lager durchsuche (also Lager.belegt=true) eine weitere anfrage kommt die auch nach einem Teil sucht dies aber weil die andere Anfrage dieses Teil mehr oder weniger für sich schon in Anspruch genommen hat nicht mehr "finden" kann. Ich habe mir überlegt so eine Art locked system einzubauen, d.h es kann keine weitere Anfrage behandelt werden bis die vorherige Anfrage vollständig abgeschlossen ist. Könnte ich das mit einem einfachen "switch" machen der den Wert 0 annimmt wenn eine Anfrage gerade bearbeitet wird und 1 wenn eine weitere Anfrage bearbeitet werden kann, da die vorherige vollständig abgeschlossen ist oder kann man es irgendwie einfacher machen?

 

Generell habe ich auch manchmal das Problem, das bestimmte Teile irgendwie "verloren" gehen bzw. irgendwo hängen bleiben... Wie könnte ich am besten jedes einzelne Teil verfolgen? Ich habe mir auch da was überlegt, und zwar ein counter der immer hochgesetzt wird wenn ein Teil eine Station eintritt und verlässt. Man weiß ja genau wie viele Eingänge und Ausgänge es geben soll, also sollte der Counter nicht die Summe der Eingänge und Ausgänge entsprechen soll eine Fehlermeldung oder was ähnliches angezeigt werden. Jedesmal wenn der counter nicht hochgesetzt wird soll noch dazu der Name der Station (wo der Fehler aufgetreten ist) auf eine Excel Tabelle mit dem Teil-ID aufgeschrieben werden.   So kann man nachverfolgen wo genau die Probleme aufgetreten sind. 

 

Ich hoffe Ihr habt mich verstanden und sonst frag einfach gerne :-)

 

Viele liebe Grüße

 

Sabine 

 

 

 

 

5 REPLIES

Re: How to write a code to implement FIFO Strategy for a Warehouse

Gears Esteemed Contributor Gears Esteemed Contributor
Gears Esteemed Contributor

Wie rufen Sie Ihre Methode auf ?

Steffen Bangsow
freelance simulation specialist  
web: www.bangsow.eu
mail: steffen@bangsow.net

Re: How to write a code to implement FIFO Strategy for a Warehouse

Creator
Creator

Am Anfang der Simulation muss man auswählen welche Teile als kritisch(tauschteil) zu behandeln sind. Nach der Demontage gibt es eine Station die eingehende Teile nach dem Attribut tauschteil=true überprüft, ist dies der Fall dann wird die Methode suche im Lager aufgerufen. Ich kann versuchen ein kleines Modell dazu hoch zu laden da ich aus Vertraulichkeitsgründe das eigentliche Modell nicht hochladen kann. 

 

 

Danke :-)

Re: How to write a code to implement FIFO Strategy for a Warehouse

Gears Esteemed Contributor Gears Esteemed Contributor
Gears Esteemed Contributor

Wenn Sie eine waituntil-Anweisung verwenden und die Methode mehrmals aufgerufen wird (z.B. von unterschiedlichen Stationen), dann kann es sein, dass eine Methode einer anderen das Teil "wegschnappt". Das Verhalten ist dann nicht beherrschbar.

 

FIFO Strategie Lager: das einfachste ist, Sie schreiben eine Bestandsliste. Die Lagerliste müsste einen Verweis auf das Teil und die x,y Koordinate im Lager enthalten. Neu eingelagerte Teile werden an das Ende der Liste geschrieben, auszulagernde Teile werden vom Beginn der Liste ab gesucht. Wenn ein Teil ausgelagert wird, wird die Zeile in der Bestandsliste gelöscht.

 

Wenn Sie eine überschaubare Anzahl an Teilen haben, sollten Sie je Teil einen Puffer benutzen, damit haben Sie am wenigsten Probleme.

Steffen Bangsow
freelance simulation specialist  
web: www.bangsow.eu
mail: steffen@bangsow.net

Re: How to write a code to implement FIFO Strategy for a Warehouse

Creator
Creator

Wenn Sie eine waituntil-Anweisung verwenden und die Methode mehrmals aufgerufen wird (z.B. von unterschiedlichen Stationen), dann kann es sein, dass eine Methode einer anderen das Teil "wegschnappt". Das Verhalten ist dann nicht beherrschbar. ---> Ja ist in der Tat so, weil es zwei Demontage Stationen gibt die auch gleichseitig die Methode aufrufen können. 

 

FIFO Strategie Lager: das einfachste ist, Sie schreiben eine Bestandsliste. Die Lagerliste müsste einen Verweis auf das Teil und die x,y Koordinate im Lager enthalten. Neu eingelagerte Teile werden an das Ende der Liste geschrieben, auszulagernde Teile werden vom Beginn der Liste ab gesucht. Wenn ein Teil ausgelagert wird, wird die Zeile in der Bestandsliste gelöscht. --> so was ähnliches habe ich bereits versucht aber wenn Punkt eins noch nicht gelöst ist (wegschnappen) hilft mir das leider nicht so viel. 

 

Wenn Sie eine überschaubare Anzahl an Teilen haben, sollten Sie je Teil einen Puffer benutzen, damit haben Sie am wenigsten Probleme --> wir haben bereits alles mit Puffern modelliert und wollten jetzt untersuchen wie es aussieht wenn man stattdessen Lagern benutzen. Insgesamt haben wir so um die 16-20 Teile aber es gibt ja Neuteile und Aufbearbeitete Teile also sind es am Ende so um die 40 Puffern. 

 

Was ich mir auch überlegt habe und vielleicht zwar nicht so ganz richtig ist aber funktionieren könnte ist alles als ein HBW zu modellieren, so kann man jede Position genau ansprechen dann auch wie Sie schon vorgeschlagen haben eine Tabelle haben und diese von hinten nach Vorne abarbeiten wobei könnte man es nicht irgendwie über ein Time stamp machen? also das man nach dem "jüngsten" Teil sucht? Oder man könnte ein Sequence number einführen?

Re: How to write a code to implement FIFO Strategy for a Warehouse

Gears Esteemed Contributor Gears Esteemed Contributor
Gears Esteemed Contributor

Zur Vermeidung der doppelten Aufrufe könnten Sie alle Teile in eine Sequenz bringen (Warteschlange). Für die Warteschlange könnten Sie überprüfen, ob die Tauschteile im Lager vorhanden sind. Wenn das Tauschteil vorhanden ist und eine Demontagestation frei ist, wird das Teil umgelagert (und das Tauschteil für eine Auslagerung markiert).

Das funktioniert ganz gut mit einer Generator-Methode Kombination. Als globale Bedingung könnten Sie zuerst abfragen, ob eine der Demontagestation frei ist.

 

Wenn Sie so viele verschiedene Teile im Lager zu verwalten haben und komplexere Auslagerungsbedingungen haben (Name, nicht zur Auslagerung markiert), könnten Sie eine SQLite Datenbank zur Lagerverwaltung benutzen (siehe hier für ein Beispiel: http://www.bangsow.de/detail.php?id=502 ).

Sie könnten dann den Einlagerzeitpunkt in der Datenbank vermerken und für FIFO beim Auslagern absteigend nach Einlagerzeit sortieren (SQL:  SORT BY Einlagerzeit ASC LIMIT 1).

 

Steffen Bangsow
freelance simulation specialist  
web: www.bangsow.eu
mail: steffen@bangsow.net