Bei der Modellierung eines Prozesses kann es dazu kommen, dass eine bestimmte Eigenschaft, eines Objekt nicht angeboten wird: das Material des Equipments oder Verpackungstypen eines Auftrags. Dies lässt sich einfach über Custom Attributes lösen. Die Möglichkeiten gehen aber weit über die Zuordnung von einfachen Zeichenketten oder Zahlen hinaus: Wussten Sie, dass Sie in einem Custom Attribute auch ganze Objekte, z. B. ein Table-Objekt, speichern können? Dieser Tipp & Trick gibt einen Überblick über die verschiedenen Typen und Anwendungsmöglichkeiten der Custom Attributes.
Standardanwendungen von Custom Attributes
Mithilfe von Benutzerdefinierten Attributen, oder englisch Custom Attributes (CAs), können INOSIM-Objekten beliebige weitere Eigenschaften zugeordnet werden, die es ansonsten in der Software nicht gibt. Standardmäßig können CAs über die Softwareoberfläche erstellt und bearbeitet werden (z. B. das Material des Equipments im Teilanlagendialog hinterlegen). Die Verwendung der Werte während der Simulation erfolgt immer per VBA. Custom Attributes werden immer für alle Elemente einer Objektkategorie angelegt, so haben bspw. alle Teilanlagen das CA Material, auch solche, bei denen der Wert in der Simulation nicht benötigt wird. Für folgende Kategorien können CAs angelegt werden:
- Balkenzeilen
- Komponenten
- Benutzerdefinierte Balken
- Experimente
- Rezepte
- Materialien
- Phasen
- Aufträge
- Ressourcen
- Ressourcenpools
- Operationen*
- Prozeduren*
- Teilanlagen
- Teilanlagenpools
* Siehe Exkurs am Ende dieses Tipp und Tricks.
Die Erstellung eines neuen CAs erfolgt über das Menü Projekt > Benutzerdefinierte Attribute. Nun wird die Kategorie ausgewählt und per Rechtsklick > Neu öffnet sich ein Dialog, der abfragt, ob ein dynamisches oder permanentes CA erstellt werden soll. Im sich öffnenden Fenster wird ein Name für das CA vergeben, optional eine Einheit hinterlegt und der Datentyp festgelegt. Hier stehen Zahl, Farbe, Auswahl (Liste von Werten), Text, Wahrheitswert oder Datum zur Auswahl. Für permanente CAs kann ausgewählt werden, ob dieses schreibgeschützt (read-only) sein sollen, und ob es bei Simulationsstart zurückgesetzt werden soll.

Permanente vs. dynamische vs. „voll-dynamische“ Benutzerdefinierte Attribute
Der größte Unterschied zwischen permanenten und dynamischen CAs ist die Verfügbarkeit der Eigenschaft / der Werte vor und nach der Simulation. Während permanente CAs vor der Simulation in den Objekt-Dialogen bearbeitet und nach der Simulation eben dort oder im Gantt Chart angezeigt werden können, stehen die dynamischen CAs nur während der Simulation in VBA zur Verfügung. Die nachfolgenden Abbildungen zeigen die Verwendung von CAs in Dialogen und im Gantt-Chart.



Alle CAs, die über das Menü angelegt werden, sowohl permanente als auch dynamische CAs, erhalten einen spezifischen Datentyp: Zahlen werden als Double, Text als String gespeichert usw. In Abbildung 5 ist zu sehen, mit welchem Wert die CA-Typen initialisiert werden.

Objekte in CAs speichern
Neben den bereits vorgestellten Datentypen können auch Objekte in CAs abgelegt werden. Dazu werden diese CAs erst während der Simulation erstellt und bekommen z. B. ein Unit-Objekt übergeben. Diese CAs wollen wir hier „voll-dynamisch“ nennen.
Da die CustomAttributes-Eigenschaft in VBA letztendlich ein Dictionary Objekt ist, können neue CAs in VBA durch Benutzung flexibel und dynamisch (d. h. während der Simulation) angelegt werden. Auf diese Art hinzugefügte CAs sind nicht auf die üblichen Datentypen beschränkt, sondern können auch Objekte wie Table, Dictionary, Unit (z. B. die Haupt-Unit als CA eines Auftrags), enthalten. Hier soll dieser Typ „voll-dynamisch“ genannt werden.
Wird ein unbekanntes CA abgefragt, entweder durch einen Tippfehler („Mterial“) oder weil das CA noch nicht gesetzt wurde (z. B. Unit des Auftrags noch unbekannt), ist der Datentyp Empty (siehe Tipp und Trick „Viel Lärm um Nothing, Null und Empty“). In Abbildung 6 ist zu sehen, dass das dynamische CA Material, welches zuvor über den Benutzerdialog erstellt wurde, einen leeren String enthält, da es schon als Text definiert wurde. Die Abfrage des „voll-dynamischen“ CA Size liefert Empty zurück und kann jeden Datentypen aufnehmen: Strings, Zahlen und eben Objektreferenzen. In INOSIM V13 und älteren Versionen werden „voll-dynamische“ CAs mit Null initialisiert (siehe Tipp und Trick „Viel Lärm um Nothing, Null und Empty“).

Es ist deshalb besonders darauf zu achten, dass die Schreibweise von in der Oberfläche angelegten CAs in VBA korrekt ist. Ansonsten wird auf ein neues „voll-dynamisches“ CA zugegriffen. Insbesondere ist zu beachten, dass die Namen von CAs case-sensitiv sind (Groß-/Kleinschreibung beachten), im Gegensatz zu den Namen von z. B. Teilanlagen oder Rezepten.
Beispiele für die Anwendung „voll-dynamischer“ CAs
- Das Cond-Objekt einer Verknüpfungsbedingung an ein dynamisches CA des zugehörigen Auftrags hängen.
- Dictionary-Objekt mit Rezeptparametern dem CA eines Rezepts zuweisen.
- Jeder Teilanlage ein Table-Objekt zuordnen, in dem alle bearbeiteten Aufträge sowie die Wartezeiten in diesem Auftrag dokumentiert werden.
Beispiel LinkCondition-Objekt
Im Beispielmodell (siehe Downloads) soll mit dem Beginn der Reinigung gewartet werden, solange eine andere Teilanlage noch belegt ist und die Reinigung erst nach dem Ende der Belegung gestartet werden. Im Regelfall lässt sich dies über Synchronisationsverknüpfungen oder Signal- und Wait-Operationen abbilden. Sind die Regeln komplexer, bietet es sich an, eine Verknüpfungsbedingung im Rezept zu implementieren und per Suspend-Methode die Prozedur anzuhalten. Zeitbasiert oder eventgetriggert kann die Prozedur durch Aufruf der Resume-Methode wiederaufgenommen werden. Dazu muss das zuvor suspendierte LinkCondition-Objekt zugänglich sein. Dieses könnte in einer globalen Variable, einem globalen Dictionary oder eben einem „voll-dynamischen“ CustomAttribute z. B. des Auftrags, gespeichert werden.
Sub cond_reaction(cond As OrderLinkCondition)
If Units("Mixer").ActiveOperations.Count > 0 Then
cond.Suspend
cond.OrderOperationFrom.Order.CustomAttributes("Cond") = cond
'CA "Cond" was not created via the user interface
End If
End Sub
Zu einem passenden Zeitpunkt, z. B. dem End-Event der letzten Operation des letzten Batch, wird überprüft, ob ein wartendes LinkCondition-Objekt sich in einem Auftrags-CA befindet. Für dieses wird die Resume-Methode aufgerufen und anschließend das CA auf Nothing gesetzt.
Sub mixing_end(cop As OrderOperation)
'only after the last batch of the order has finished and only if there is an object in the CA "Cond"
If cop.OrderProcedure.Batch = cop.Order.Batches AndAlso IsReference(cop.Order.CustomAttributes("Cond")) Then
Dim cond As OrderLinkCondition
cond = cop.Order.CustomAttributes("Cond")
cond.Resume
cop.Order.CustomAttributes("Cond") = Nothing
'reset the CA value to Nothing, since a resumed Condition has no further use
End If
End Sub
Exkurs: Warum je zwei Kategorien für Operationen und Prozeduren?
Bei CAs für Operationen und Prozeduren gibt es zudem eine Besonderheit, denn hier gibt es je zwei Kategorien:
- für Operationen
- „Grundoperationen (Grundrezepte und Rezeptmodule)“
- „Steueroperationen“
- für Prozeduren
- „Teilgrundrezepte (Grundrezepte und Rezeptmodule)“
- „Teilsteuerrezepte“
Wenn während der Simulation ein Auftrag ein Rezept durchführt, werden aus den Teilgrundrezepten Teilsteuerrezepte und aus den Grundoperationen Steueroperationen. Während die jeweils erstgenannten („…Grund…“) einzigartig im Modell sind, werden für jede Ausführung von Rezeptkomponenten Kopien in Form von „…Steuer…“ angelegt. Deren Eigenschaften wie Dauer und Menge [Duration/Amount] können per VBA geändert werden.
Permanente CAs von Grundoperationen und Teilgrundrezepten können im Rezepteditor betrachtet und bearbeitet werden. Permanente CAs von Steueroperationen und Teilsteuerrezepten, also Bestandteile der tatsächlich durchgeführten Aufträge, können im Gantt-Chart angezeigt werden.
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Modellierung von veränderlichen Ressourcenbedarfen
In der Prozessindustrie ist es nicht ungewöhnlich, dass sich der Bedarf an Ressourcen über eine Prozessoperation ändert. Typische Beispiele hierfür sind Kühlmäntel von Reaktoren, in…
Auswertung von Tankfüllständen
INOSIM stellt eine Reihe vordefinierter Ergebnisse und Auswertungen zur Verfügung, entweder im Gantt-Diagramm oder als Excel-Report. Insbesondere die Excel-Reports können für weitere Auswertungen genutzt werden.…
Transfer-Graph Visualisierung mit Tableau
Dieser Tipp & Trick stellt Ihnen ein praktisches Werkzeug zur Visualisierung und Analyse von Transfers in Ihrem Modell mit der BICON-Erweiterung zur Verfügung. Die Tableau-Arbeitsmappe…