Einleitung

Labels sind eines der wichtigsten Instrumente zum Aufbau von Simulationsmodellen in FlexSim. Sie werden verwendet um Informationen zu speichern. Dies können bestimmte Eigenschaften eines Objektes sein, Daten für die Modellanalyse, wie zum Beispiel Wartezeiten oder Referenzen auf andere Objekte, damit zum Beispiel ein Transporter weiß, wohin ein Werkstück als nächstes gebracht werden muss.

Trigger bieten die Möglichkeit während der Laufzeit des Modells auf Events zu reagieren. Mit ihrer Hilfe lassen sich zum Beispiel Werte, die den Prozessablauf steuern, dynamisch anpassen oder auch Informationen zu den zugehörigen Events festhalten

Grundlagen über Labels

Zunächst wollen wir Labels allgemein definieren, bevor wir im nächsten Abschnitt erklären, wie man diese erstellt. Jedes Label setzt sich aus drei Komponenten zusammen:

  1. Das Objekt auf dem es sich befindet
  2. Label können auf so gut wie jedem Objekt in FlexSim angelegt werden. Am meisten Verwendung finden sie auf FlowItems, Fixed Resources, Task Executern und Process Flow Tokens. Nur über eine Referenz auf das jeweilige Objekt kann auf ein Label zugegriffen werden.

  3. Der Name des Labels
  4. Objekte können beliebig viele Labels besitzen. Um zwischen ihnen zu unterscheiden, wird jedem Label ein Name gegeben. Dieser muss, für Labels auf dem jeweiligen Objekt, einzigartig sein.

  5. Der Wert des Labels
  6. Die eigentliche Information, die im Label gespeichert ist. Wie bereits im Eingangstext angedeutet handelt es sich hierbei meist um Zahlen, Text (string im Programmierjargon) oder Referenzen auf andere Objekte im Modell (sogenannte pointer).

Erstellen eines Labels

Statische Labels können einem ausgewählten Objekt manuell in der Eigenschaftenleiste am rechten Bildschirmrand hinzugefügt werden. Klicken Sie hierzu auf das grüne Plus-Symbol im entsprechenden Bereich. Dann müssen Sie auswählen, welchen Datentyp das Label enthalten soll. Die häufigsten Arten sind wie bereits erwähnt Zahlen (Number), Text (String) und Objektreferenzen (Pointer).

Hinzugefügte Labels erscheinen in einer tabellarischen Übersicht mit zwei Spalten. In der linken Spalte steht, grau hinterlegt, der Name des Labels. In der rechten Spalte steht der Wert des Labels. Beides kann geändert werden, indem Sie auf die entsprechende Zelle klicken und den neuen Namen/Wert eintippen.

Bei einem Pointer-Label bietet es sich an, statt den Namen des Objektes direkt einzutippen (was fehleranfällig sein kann), den Verweis auf das Objekt über das Sampler-Tool automatisch zu generieren. Klicken Sie dazu zunächst auf die Pipette , die oberhalb der Labeltabelle erscheint, wenn ein Pointer-Feld ausgewählt ist. Klicken Sie anschließend auf das Objekt, auf das verwiesen werden soll.

Bevor wir uns anschauen, wie Label dynamisch während der Modelllaufzeit erzeugt und darauf zugegriffen werden kann, wollen wir zunächst ein weiteres wichtiges Thema behandeln – Events und Trigger.

Events und Trigger

FlexSim arbeitet eventbasiert. Das Simulationsmodell reagiert auf diskrete Ereignisse, wie den Abschluss eines Arbeitsschritts, dem Verstreichen einer Wartezeit oder dem Erreichen eines bestimmten Punktes auf einem Förderband.

Viele Objekte reagieren automatisch auf bestimmte, mit ihnen assoziierte Events und führen dazugehörige Logiken aus. So reichen zum Beispiel bereits wenige Verbindungen zwischen Objekten, um einen funktionieren Materialfluss zu erzeugen.

Um reale Prozesse nachzubilden, ist es allerdings fast immer nötig, eigene Funktionen und Logiken zu implementieren. Dazu dienen die sogenannten Trigger. Diese erlauben es Aktionen auszuführen, sobald ein bestimmtes Event eintritt. Sie können im Triggers-Tab, am unteren Ende der Eigenschaftenleiste eines Objektes, erstellt werden.

Wie bereits bei den Labels, kann ein neuer Trigger über das grüne Plus-Symbol hinzugefügt werden. Welche Events dabei zur Verfügung stehen hängt von dem ausgewählten Objekt ab. Ein Prozessor bietet zum Beispiel die Möglichkeit auf das Eintreffen eines Items zu reagieren. Informationen über alle verfügbaren Trigger-Events sind in der englischen Dokumentation verfügbar (Verweis zum Link einfügen?).

Sobald ein Trigger hinzugefügt wurde, können wiederum eine oder mehrere Funktionen ausgewählt werden, die FlexSim ausführen soll, sobald das jeweilige Event eintritt. Welche Optionen zu Verfügung stehen, hängt wiederum von dem Event ab, zu dem diese ausgeführt werden sollen. So besitzt ein On Entry-Trigger Informationen über das Item, welches eingetroffen ist, sodass zum Beispiel Labels auf diesem erzeugt oder verändert werden können.

Hinzufügen/Ändern eines Labels über Trigger

Die Optionen zum Hinzufügen eines Labels bzw. dem Verändern eines Labelwertes finden sich bei passenden Triggern unter dem Menüpunkt Data.

Set Label ist die simpelste dieser Optionen. Dabei lassen sich die drei Komponenten angeben, die das Label definieren. Zu welchem Objekt das Label gehört, seinen Namen und seinen Wert. Existiert noch kein Label mit diesem Namen auf dem angegebenen Objekt wird es erzeugt, andernfalls wird lediglich der neue Wert zugewiesen. Der Name muss dabei als Text, also von Anführungszeichen eingeschlossen, eingegeben werden.

Es ist bei manuell erstellten Labels, denen ein neuer Wert zugewiesen werden soll, nicht zwingend darauf zu achten, dass der Datentyp des alten (Zahl, Text, etc.) mit dem des neuen Wertes übereinstimmt. FlexSim ändert den Labeltyp im Zweifelsfall automatisch zu dem des neu zugewiesenen Wertes.

Das Objekt, zu dem das Label gehört, kann entweder direkt über das Pipettentool ausgewählt werden, wenn es sich um ein fixes Objekt handelt. Oder es wird ausgehend von einem Parameter des Trigger-Events festgelegt. Wie bereits erwähnt, kann zum Beispiel im On Entry-Event das eingetroffene Item über item referenziert werden. Welche Parameter zur Verfügung stehen variiert von Event zu Event. Weitere Informationen sind in der englischen Dokumentation zu finden.

Ein Trigger besitzt immer eine Referenz auf das Objekt, auf dem er definiert ist. Dieses kann stets über current angesprochen werden. Dies ist nützlich, da, mit den passenden Befehlen, von diesem aus auch auf daran angebundene Objekte verwiesen werden kann oder Eigenschaften wie der Füllstand für Entscheidungsprozesse zu Rate gezogen werden können.

In diesem Fall wird zum Beispiel das Label "Status" auf dem Processor auf "Busy" gesetzt, sobald ein Item eintrifft.

Labelwerte auslesen

Anhand eines einfachen Beispielmodells wollen wir nun demonstrieren, wie Labelwerte ausgelesen werden können, um damit Einfluss auf die Simulation zu nehmen.

Das Modell besteht lediglich aus einer Source, einem Processor und einer Sink, die in dieser Reihenfolge über "A-Verbindungen" verkettet sind.

In der Source erzeugen wir auf den erzeugten Items ein Label namens ProcessTime. Dieses soll, für jedes Item individuell, bestimmen, wie viel Zeit der Processor zum Bearbeiten des Teils benötigt. Hierfür haben wir einen On Creation-Trigger hinzugefügt, der ausgelöst wird, wenn ein Item in der Source erzeugt wird. Darin haben wir die Option Set Label gewählt. Als Zielobjekt ist das erzeugte Item ausgewählt, welches als Parameter des Events zur Verfügung steht. Als Wert ist keine feste Zahl eingestellt. Stattdessen wurde aus den Optionen, die über den Pfeil rechts neben dem Eingabefeld zur Verfügung stehen, die statistische Verteilung uniform(5, 15) ausgewählt. Diese gibt, wenn sie aufgerufen wird, eine zufällige (Dezimal-)Zahl zwischen 5 und 15 aus.

Nun wollen wir erreichen, dass der Processor, statt einem festen Wert, das auf den Items angelegte Label als Prozesszeit verwendet. Es gibt zwei Befehle zum Auslesen eines Labels. Beide beginnen mit einer Referenz auf das Objekt, auf dem das Label gespeichert ist. Glücklicherweise bietet die Prozesszeitoption des Processors, ähnlich der Events, einige mit ihr verbundene Parameter. So können wir auch hier über „item“ auf das zu bearbeitende Objekt verweisen.

Um den Wert des Labels auszulesen fügen wir den Namen des Labels, durch einen Punkt abgetrennt, an die Referenz an. Und das war es auch schon. Lassen wir das Modell nun laufen, wird die Prozesszeit durch das entsprechende Label bestimmt.

Die Zeitanzeige wurde extra hinzugefügt, um die unterschiedlichen Prozesszeiten besser in der Animation sichtbar zu machen. Sie basiert auf einer "Kinetic Tracked Variable". Deren Wert wird jeweils zu Beginn eines Prozesses zurückgesetzt und zählt dann parallel zur Modellzeit hoch.

Fazit

Wir hoffen, dass dieser kleine Einblick in Labels und Trigger Ihnen dabei hilft, sich in das Simulieren mit FlexSim einzuarbeiten.

Sollten Sie weitere Fragen haben, können Sie uns gerne unter info@pro-sim.de kontaktieren.

Autor: F. Möhlmann