Creator und Destroyer

In dieser Rubrik befindet sich das gleichnamige Creator-Objekt.

Mit Creator-Objekten wird das Erzeugen von Kind-Objekten einer bestimmten ID gesteuert. Ist die Bedingung für das Erzeugen einer neuen Generation von Kind-Objekten erfüllt, dann werden diese als Kopie Ihre Mutter-Objekte an der Position ihrer Mutter-Objekte erzeugt.

Mit den Creator-Objekten lassen sich somit Objekt-Quellen in einer Anlage realisieren um z.B. Förderelemente mit Teilen zu versorgen.

Folgende Schritte sind notwendig, um ein dynamisches Objekt von einem Creator erzeugen zu lassen:

  1. Erzeugen des dynamischen Objekts (z.B. eine dynamische Ellipse).

  2. Innerhalb der Rubrik "Grundeinstellungen->Creator/Destroyer Einstellungen" in der Eigenschaft "Objekt ist ein Mutterobjekt mit der ID" eine im Projekt eindeutige ID angeben. Diese ID muss im Bereich 1 bis 30 liegen.

  3. Das Mutter-Objekt an der Stelle fixieren, an denen die Kind-Objekte erzeugt werden sollen. Hierzu wird oft ein feststehendes Objekt verwendet an dem das Mutter-Objekt über eine Verbindung mit konstanter Distanz angebunden wird.

  4. Creator-Objekt auf der Zeichenfläche erzeugen und an der Eigenschaft "Creator hat die ID" die am Mutter-Objekt eingestellte ID eintragen.

  5. An der Eigenschaft "Create-Trigger" einen Operanden (oder eine Konstante angeben), welcher als Trigger das Erzeugen der Mutter-Objekte steuert.

  6. An der Eigenschaft "Trigger-Typ" ist einzustellen, wann das Erzeugen erfolgen soll. Beispielsweise bei einer pos. Flanke des Operanden, der an "Create-Trigger" angegeben wurde. Ist bei "Create-Trigger" die Konstante '1' angegeben, dann muss als Typ "Bei Status 1 mit Pausezeit" selektiert sein. In diesem Fall ist dann auch eine "Trigger-Pausezeit" anzugeben.

Optional kann die max. Anzahl der Create-Zyklen (also die max. Anzahl der vorhandenen Generationen) in der Eigenschaft "Max. Create-Zyklen" festgelegt werden. Ist diese max. Anzahl erreicht, dann werden keine neuen Kind-Objekt mehr erzeugt, auch wenn die Bedingung dazu erfüllt ist. Erst wenn die Anzahl der vorhandenen Generationen, durch Zerstörung von Generationen mit Hilfe von Destroy-Objekten, unter der maximalen Anzahl liegt, können wieder neue Kind-Objekte erzeugt werden.

Beispiel

Im folgenden Bild ist eine Anordnung mit Creator zu sehen.

Das Mutter-Objekt welches vom Creator zu erzeugen ist, ist ein Kreis. Das Mutter-Objekt hat die ID = 1, d.h. die Eigenschaft "Objekt ist ein Mutterobjekt mit der ID" ist auf den Wert "1" eingestellt.

Der Kreis ist über eine Verbindung mit konstanter Distanz an einem feststehenden Objekt angebracht. Damit bleibt das Mutter-Objekt immer an der gleichen Stelle und die Kind-Objekte werden von dort aus in die Anordnung eingefügt.

Der Creator wird über ein blaues Rechteck symbolisiert. Bei ihm ist die Eigenschaft "Creator hat ID" auf "1" eingestellt, somit ist der Creator für diese ID "zuständig". Als "Create-Trigger Operand" wurde der Bit-Operand IM.M0.0 angegeben, dieser soll bei einer einer pos. Flanke das Erzeugen auslösen. Somit ist als "Trigger-Typ" die Auswahl "Bei pos. Flanke" zu selektieren.

Das Umschalten des Trigger-Operanden IM.M0.0 wird über einen Taster vorgenommen, dem dieser Operand zugeordnet wurde.

Die erzeugten Kind-Objekte werden in einem Behälter gesammelt, der sich unterhalb des Mutter-Objekts befindet und mit Hilfe von feststehenden Rechtecken zusammengebaut wurde.

Damit sind alle Teile der Anordnung beschrieben und die Simulation kann gestartet werden.

Zunächst fällt auf, dass das Creator-Objekt in der Simulation nicht mehr zu sehen ist, denn dieses hat ja als Objekt keine Funktion.

Sobald man den Taster betätigt, wird ein Kind-Objekt erzeugt und dieses fällt in den Behälter. Dort werden alle Kind-Objekte gesammelt. Auf diese Weise kann man eine Anordnung mit Objekten versorgen, die dann in irgendeiner Form weiterverabeitet werden.

Die Eigenschaft 'Neutral bei Kollision nicht kopieren' (ab V1.7.1.0)

Wenn diese Eigenschaft ausgewählt ist, kann ein Mutter-Objekt als neutral bei einer Kollision gesetzt werden, ohne dass die Kind-Objekte davon betroffen sind. Dies ist z.B. dann sinnvoll, wenn mehrere Mutter-Objekte mit unterschiedlichen Creator-IDs an der gleichen Position oder hintereinander platziert werden müssen. Dann werden die erzeugten Kind-Objekte von den einzelnen Mutter-Objekten nicht beeinflusst.

Im Beispiel haben beide Creator den gleichen Trigger. Diese erzeugen also gleichzeitig die Kind-Objekte.

Verwendung eines Destroyers

Im obigen Beispiel wurden Kind-Objekte erzeugt und danach in der Anordnung belassen. Meist werden Kind-Objekte in einem Anlagenvorgang verarbeitet und an einer anderen Stelle wieder beseitigt. Dies ist schon alleine deswegen sinnvoll, um die Anzahl der Objekte in einer Simulation möglichst gering zu halten. Denn jedes physikalische Objekt "belastet" die Physik-Engine und kostet somit Rechenzeit.

Um Kind-Objekte zu beseitigen, kommen Destroyer zum Einsatz. Dabei kann jedes geometrische Objekt als Destroyer konfiguriert werden. Dazu sind die Eigenschaften "Objekt ist ein Destroyer" und "Objekt zerstört Kind-Objekte mit ID" in der Rubrik "Grundeinstellungen->Creator/Destroyer Einstellungen" entprechend einzustellen.

Beispiel

Das obige Beispiel wird um einen Destroyer erweitert. Im folgenden Bild ist die veränderte Anordnung zu sehen.

Dabei wurde an der rechten Seite des Behälters die Seitenbegrenzung durch ein Rechteck ersetzt, welches an der Kolbenstange eines Zylinder befestigt ist. Als Verbindung wurde die Verbindung zu einem Körper verwendet.

Somit bewegt sich das Rechteck nach links, sobald der Zylinder ausfährt.

Innerhalb des roten Rechtecks wurde die Eigenschaft "Objekt ist ein Destroyer" ausgewählt und in "Objekt zerstört Kind-Objekte mit ID" die Zahl "1" angegeben. Denn der Destroyer soll nur die Kind-Objekte mit eben dieser ID beseitigen.

Wird hier die Zahl "0" angegeben, dann zerstört der Destroyer alle Kind-Objekte unabhängig von deren ID.

Damit zeigt die Anordnung in der Simulation folgendes Verhalten:

Nachdem einige Kind-Objekte erzeugt wurden, wird der Zylinder mit Hilfe des Tasters ausgefahren. Somit bewegt sich der Destroyer mit der Kolbenstange nach links. Jedes Kind-Objekt welches dabei von dem Destroyer berührt wird, wird beseitigt.

Destroyer zusätzlich von einem Operanden abhängig machen (ab V1.5.4.0)

Ab der Version 1.5.4.0 ist es möglich, zusätzlich einen Operanden für den Destroyer anzugeben. Dazu wird an der Eigenschaft "Operand für Destroyer" ein Bit-Operand eingetragen. Ist ein solcher Operand vorhanden, dann werden Kind-Objekte erst zerstört, wenn auch der Status des Operanden den Wert 1 (true) besitzt. Hat der Operand den Wert 0 (false), dann werden die Kind-Objekte nicht zerstört.

Ist an der Eigenschaft der Wert 0 und somit kein Operand angegeben, dann ist der Destroyer immer aktiv.

Mehrere Objekte Erzeugen und Zerstören

In den vorausgegangenen Beschreibungen wurde teilweise von Generationen im Zusammenhang mit Kind-Objekten gesprochen. Diese Ausdrucksweise lies schon vermuten,. dass man nicht nur einzelne Objekte erzeugen lassen kann.

Möchte man mehrere Objekte in einem Vorgang erzeugen lassen, die dann einer Generation angehören, dann vergibt man bei allen Mutter-Objekten die gleiche ID. Dabei ist es unerheblich, ob diese Mutter-Objekte einen Bezug zueinander haben oder nicht. Auch müssen sich die Mutter-Objekte nicht an der gleichen Stelle befinden, diese können über die gesamte Anordnung verteilt sein.

Die Mutter-Objekte können aber auch eine (Körper-) Einheit bilden oder über andere Verbindungen zueinander in Bezug stehen.

Beispiel

Das bekannte Beispiel wurde nochmals verändert. Das Kreis-Objekt wurde ersetzt durch eine etwas komplexere Form.

Der neue Körper besteht aus insgesamt 6 dynamischen geometrischen Formen, welche über eine Körper-Gruppe zu einem Körper zusammengefügt wurden. Alle Objekte sind als Mutter-Objekt mit der gleichen ID (im Beispiel die ID = 1) konfiguriert. Somit werden deren Kind-Objekte in einem Creator-Zyklus erzeugt, bilden also eine Generation an Kind-Objekten. Berührt eines dieser Kind-Objekte einen Destroyer, dann wird die gesamte Generation beseitigt und nicht nur das den Destroyer berührende Kind-Objekt.

Sobald der Destroyer ein Kind-Objekt des Körpers berührt, wird der gesamte Körper beseitigt. Ein etwaiger zusätzlich vorhandener Körper ist davon zunächst nicht betroffen, denn dieser gehört einer anderen Generation an.

Fazit

Mit den Creator- und Destroyer-Objekten können die Quellen und Senken einer Anordnung realisiert werden. Die ID fasst dabei die Objekte zu einer Generation zusammen. Über diese ID wird auch die Zugehörigkeit zum Creator hergestellt.

Jede geometrische Form kann als Destoyer konfiguriert werden, sofern es sich um ein Physik-Objekt handelt (dynamisch oder feststehend). Ist eine bestimmte ID angegeben, dann werden nur Kind-Objekte mit dieser ID beseitigt. Sollen alle Kind-Objekte unabhängig von deren ID beseitigt werden, dann ist "0" als ID am Destroyer anzugeben.

Es ist zu beachten, dass ein Destroyer immer die gesamte Generation an Kind-Objekten zerstört, sobald auch nur ein Kind-Objekt diesen berührt.

Es können mehrere Destoyer auf die gleiche ID eingestellt werden, denn es ist ja durchaus denkbar, dass Kind-Objekte an unterschiedlichen Stellen der Anordnung zu beseitigen sind.

Mehrere Creator auf die gleiche ID einzustellen macht allerdings keinen Sinn.