In diesem Artikel stelle ich ein einfaches AGV -Simulationsmodell vor . Es ist als Beispiel dafür gedacht, wie Teile-Routings in einer Fabrik simuliert werden können. Ich habe die Simulation in AnyLogic implementiert.
Ich habe bereits einige andere grundlegende Einführungen in AnyLogic bereitgestellt. Genauer gesagt habe ich zB zuvor in einer Reihe von YT-Videos einige grundlegende Förderermodelle vorgestellt. Hier ist eine Liste einiger grundlegender Einführungen in die AnyLogic-Simulationsmodellierung:
- Link : Einfaches Förderlinienmodell in AnyLogic
- Link : Förderstrecke mit Spur in AnyLogic
- Link : Förderband mit Arbeitsplatz in AnyLogic
- Link : Fließband mit Montagearbeitern in AnyLogic
- Link : Batch-Montageprozess an einer Förderer-Arbeitsstation in AnyLogic
- Link : Mobile Montagearbeiter in AnyLogic
Einen konzeptionellen Aufbau der AGV-Simulation habe ich in der Abbildung weiter unten im nächsten Absatz dargestellt.
Verwendung von AnyLogic für die AGV-Simulation mit Routings
In früheren Beiträgen in diesem Blog habe ich bereits verschiedene Softwareoptionen für diskrete Ereignisse vorgestellt. Ich liste unten einige Beispiele auf. Klar bin ich ein Fan von freien und offenen Simulationstools und Frameworks (siehe zB „simmer“). AnyLogic ist jedoch ein kommerzielles Tool.
- Link : Parkplatzsimulator mit Simmer in R
- Link : ProModel AutoCAD-Simulationsausgabe
- Link : Finanz-KPI-Simulation von Visual Components
- Link : Simmer in R für diskrete Ereignissimulation
- Link : Eingangsinspektionssimulation mit Simmer
- Link : Rückstandssimulation der FIFO-Produktion
In verschiedenen Simulationsprojekten habe ich mit verschiedenen ereignisdiskreten Simulationswerkzeugen gearbeitet , nicht nur mit den oben aufgeführten. Für AGV-Simulationen, die in Materialflussstudien eingebettet sind, finde ich AnyLogic und Simio jedoch zu den besten Simulationstools für diskrete Ereignisse . Ich habe auch die Möglichkeiten von FlexSim und Plant Simulation in Bezug auf die AGV-Simulation gesehen, und Sie könnten diese ebenfalls nutzen. In Bezug auf die Anpassungsfähigkeit bevorzuge ich jedoch AnyLogic. Hauptsächlich aufgrund seiner Struktur, Dokumentation und Transparenz – und der Tatsache, dass AnyLogic in JAVA codiert ist.
Simulationsstudien erfordern ein Vorgehensmodell
Ein häufiger Fehler, den ich oft beobachte, wenn Supply-Chain-Analysten mit der Simulation beginnen, ist, dass sie direkt zur Modellierung übergehen. Ein gutes Simulationsmodell kann jedoch erst entwickelt werden, wenn das Ziel der Simulationsstudie klar definiert ist. Darüber hinaus ist dies in der Regel nur möglich, wenn das zugrunde liegende System oder Problem von allen Beteiligten vollständig verstanden wurde. Ich empfehle die Verwendung eines Vorgehensmodells für jede Simulationsstudie. Die folgende Abbildung veranschaulicht mein Vorgehensmodell.
Tatsächlich wurde das von mir angewandte Vorgehensmodell in früheren Beiträgen auf diesem Blog veröffentlicht. Hier sind zwei relevante verwandte Artikel:
Daher ist es in den frühen Phasen der Simulationsstudie wichtig, die Situation vollständig zu verstehen. Geeignete Begriffe für diesen Schritt sind zB Situationsanalyse, Lückenanalyse und Problemdefinition. Die Datenerhebung ist Teil dieses Schrittes. Anschließend definiere ich meist explizit, was Bestandteil des zu entwickelnden Simulationsmodells ist und was nicht . Zum Beispiel habe ich einmal einen Trambetrieb und Tramfahrpläne in Zürich (Schweiz) simuliert. Ich habe bei diesem Projekt entschieden, dass der Personenfluss, der die Straßenbahnschienen blockiert, nicht im Detail umgesetzt wird. Stattdessen habe ich die Häufigkeit und Dauer der Schienenblockade mit einer zufälligen Verteilungskurve beschrieben.
Schließlich geht die Simulationsstudie mit der Entwicklung eines Layouts und eines konzeptionellen Modells weiter. Die konzeptionelle Modellierung umfasst z. B. Flussdiagramme sowie die Definition von Zustandsübergangsdiagrammen für relevante Geräte. Dies erleichtert die tatsächliche Implementierung der Simulationsmodellierung erheblich und gewährleistet einen gut strukturierten Code.
Ich skizzierte ein einfaches Layout der AGV-Simulation
Abhängig von dem Projekt, an dem ich arbeite, zeichne ich normalerweise selbst ein grobes Layout. Alternativ verlasse ich mich auf eine AutoCAD-Zeichnung (oder ähnliches), die mir vom Engineering-Team des Kunden geliefert wird.
Obige Abbildung zeigt einen zentralen Annahmebereich, der empfangenes Eingangsmaterial über Rollenbahnen weiterleitet. Kräne oder Roboter platzieren Teile auf AGVs am Ende des Förderers.
Die AGVs erleichtern den Materialfluss vom ersten Empfang an
Die AGVs, die den Kern dieser AGV-Simulation in AnyLogic darstellen, leiten Teile zu den Arbeitsbereichen. Dieser Routing-Prozess kann eine Entscheidungsfindung erfordern, möglicherweise auf einer sehr komplexen Ebene.
Beispielsweise möchte ich der Aufgabe das nächste AGV oder das AGV mit der geringsten Auslastung zuweisen. Ich könnte auch einer Situation gegenüberstehen, in der ich die tatsächliche Routing-Entscheidung modellieren möchte. Das heißt, ein AGV nimmt die Route A und ein anderes AGV die Route B durch das AGV-Spurnetz.
Implementierung der AGV-Simulation in AnyLogic
Ich habe diese AGV-Simulation in AnyLogic implementiert. Ein Screenshot des Modells ist unten zu sehen.
Im Wesentlichen besteht das Modell aus einer Quelle, die Teileankünfte generiert. Diese Teileankünfte werden an die Fördertechnik weitergeleitet. Sobald Teile an der definierten Endposition des Förderers angekommen sind, wird ein Transportauftrag ausgelöst. Tatsächlich ist dieser Task-Dispatch-Prozess ein standardmäßiger AnyLogic-Prozess. Ich hätte jedoch eine benutzerdefinierte Task-Dispatch-Logik mit JAVA implementieren können.
Sobald eines der AGVs dem Transport zugewiesen wurde, entscheidet das Modell unter Verwendung der standardmäßigen AnyLogic-Logik, wie oben beschrieben, in welchen Arbeitsbereich das Teil transportiert werden soll. Dazu habe ich zu Demonstrationszwecken eine benutzerdefinierte, aber einfache Entscheidungslogik implementiert. Ich beschreibe diese angepasste Logik im folgenden Kapitel weiter unten.
Da es sich um ein einfaches Beispiel handelt, habe ich die Arbeitsbereiche nicht im Detail implementiert. Außerdem habe ich auch den Pick-and-Place-Betrieb eines Roboters oder Krans am Bandauslauf nicht im Detail umgesetzt. Nach meinem Vorgehensmodell ist das völlig in Ordnung. Ich „darf“ diese Prozessschritte auf einer höheren Abstraktionsebene durchführen, solange das Studienziel und die Problemstellung nicht darauf hindeuten, dass ich diese Prozessschritte im Detail ausführen muss. Der Pick-and-Place-Vorgang kann zB zeitverzögert modelliert werden. Diese Zeitverzögerung kann zufällig verteilt werden, falls dies für die gewählte Flurfördereinrichtung geeignet ist.
Tatsächlich besteht eine weitere Abstraktion darin, dass ich die Arbeitsbereiche nicht visualisiert und kein benutzerdefiniertes Objekt implementiert habe, um sie darzustellen. Stattdessen habe ich einfach ein Standardknotenobjekt von AnyLogic verwendet. Der aktuell aktive Zielknoten, dh der aktuell relevante Arbeitsbereich, wird durch die Stationsvariable referenziert . Diese Variable wird durch einen benutzerdefinierten Routing-Algorithmus aktualisiert. Ich werde dies weiter unten in diesem Artikel erklären.
Sobald Teile im Arbeitsbereich angekommen sind, verweilt das Teil im Arbeitsbereich für eine festgelegte Vorgabezeit. Schließlich gelangt das Teil in die Spüle. Die Senke löscht das Teil und entfernt es dadurch aus dem Modell.
Implementieren von benutzerdefinierten Routing-Entscheidungen mit JAVA
Bei der Implementierung von AGV-Simulationen möchte ich unter anderem Einfluss auf die Routing-Entscheidungen nehmen. Das liegt ganz klar daran, dass Routings jeden Materialfluss erleichtern. Wenn ich in diesem Fall davon ausgehe, dass jedes vom Wareneingang kommende Teil dasselbe Eingangsmaterial darstellt, z. B. Rohteile zum Fräsen oder für andere Verarbeitungen, kann ich nicht einfach nach Materialart routen. Vielleicht möchte ich stattdessen basierend auf der Auslastung des Arbeitsplatzes oder anderen Kriterien weiterleiten. Der Punkt ist, dass die Routing-Entscheidung einfach anpassbar sein muss. Ich habe diesen Blogbeitrag geschrieben, um ein einfaches Beispiel dafür zu geben, wie man das in AnyLogic angehen könnte.
In diesem einfachen AGV -Simulationsmodell ermögliche ich benutzerdefiniertes Routing mit 4 Variablen und 1 Funktion:
- output_01 bis output_03 messen die Gesamtzahl der an den jeweiligen Arbeitsbereich gelieferten Teile
- Station referenziert den Zielarbeitsbereich des Teils (AnyLogic-Knotenobjekt)
- set_route ist eine Funktion, die eine kundenspezifische Routing-Entscheidung erleichtert
Der folgende Screenshot zeigt den Inhalt der Funktion set_route .
Die Funktion set_route implementiert einfach zyklisches Routing. Das heißt, der erste Teil geht an station_a , der zweite Teil geht an station_b und so weiter. Bei Bedarf könnte ich jedoch zusätzliche Funktionen und Variablen sowie andere Arten der Entscheidungsfindung spezifizieren. Letztendlich hängt die umzusetzende Logik von der konkreten Situation ab.
Die set_route- Funktion wird immer dann aufgerufen, wenn ein Agent in den moveTo_a- Block in der unteren Kette von Logikblöcken eintritt.
Diese Kette von Logikblöcken implementiert den folgenden Ablauf:
- src erzeugt Teile mit zufällig verteilten Intervallzeiten
- Fördern befördert das Teil von der Start- zur Endposition des Förderband-Markups
- get_transport fordert ein AGV auf, das Teil vom Fördererausgang abzuholen
- moveTo_a ruft set_route auf und transportiert einen Teil zu den Knotenreferenzen in station
- delay bewirkt, dass das Teil einige Zeit im Knoten (der den Arbeitsbereich darstellt) verweilt
- sink entfernt das Teil aus dem Modell
Ich kann den Funktionsaufruf im OnEnter-Abschnitt des moveTo_a-Blocks angeben. Siehe Screenshot unten.
Fazit und zugehörige Inhalte
In diesem einfachen AGV-Simulationsbeispiel habe ich gezeigt, wie Sie Teile-Routings in AnyLogic anpassen können. Die in diesem Beispiel verwendeten Routing-Kriterien und die Routing-Logik waren sehr einfach. Ein echter Routing-Algorithmus wäre oft ausgefeilter und auf die Anforderungen der Fabrik zugeschnitten, in der er betrieben wird. Solche Routing-Algorithmen werden schnell komplex und können eine Herausforderung darstellen.
In diesem Artikel habe ich bereits eine Vielzahl von Links zu verwandten Inhalten bereitgestellt. Trotzdem möchte ich hier einige zusätzliche Artikel mit dem interessierten Leser teilen:
- Link : Warteschlangensysteme analytisch gelöst
- Link : Agentenbasierte Simulation in Python
- Link : Maschinelles Lernen und diskrete Ereignissimulation
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply