24. November 2022

Die Abfolge von INOSIM Ereignisaufrufen

Erfahrenen Anwendenden von INOSIM ist bewusst, dass sie mit einer ereignisdiskreten Simulationssoftware arbeiten. Für die meisten dieser Ereignisse können VBA-Steuerungen aufgerufen werden, um das Simulationsverhalten zu ändern. In diesem Artikel werden einige spezifische Ereignisse und Steuerungen und die Reihenfolge, in der sie aufgerufen werden, näher betrachtet. Wann wird z. B. das MaterialMix-Ereignis aufgerufen? Wie lassen sich für ein Ereignis zur Parametrisierung eines Vorgangs drei verschiedene Steuerungen aufrufen? Lernen Sie mehr über die Abfolge von INOSIM Ereignisaufrufen!

Das Demo-Prozessmodell

Die modellierte Demo-Anlage besteht aus einer Quelle, zwei Reaktoren, einem Filter und zwei Fässern. In den Reaktoren werden zwei Materialien, A und B, gemischt und dann durch den Filter in eines der Fässer geleitet. Das Modell kann heruntergeladen werden, den Link finden Sie am Ende dieser Seite.

Das Anlagenlayout und das Rezept des Demo-Prozesses sind unten dargestellt. Die Auftragsliste des Experiments enthält vier Aufträge für dieses Rezept. Während ein Auftrag zu Beginn des Simulationslaufs beginnt, sollen die anderen drei einen Tag später beginnen.

Bitte beachten Sie:

Dieses Modell wurde erstellt, um möglichst viele Steuerungen und die Ereignisse, welche diese aufrufen, darzustellen. Es ist kein Beispiel für ein durchdachtes Modell.

Einige Ereignisse können mehrere Steuerelemente aufrufen; z. B. wenn ein Material aus einer Quelle bezogen wird, werden die Steuerung Simulation.MaterialCost und die dem Projekt zugewiesene Steuerung MaterialCost aufgerufen. In der Regel ist es nicht sinnvoll, beide Steuerungen zu verwenden. Eine ausführliche Beschreibung der in diesem Artikel erwähnten Ereignisse, Steuerungen und Objekte finden Sie in unserer Anwenderdokumentation im Download-Bereich.

In den folgenden Abschnitten betrachten wir alle Steuerungsaufrufe durch INOSIM Ereignisse, die nach dem Betätigen der Simulations-Start-Schaltfläche auftreten.

Am Anfang des Simulationslaufs

Simulation.Init

Wird vom Simulationsinitialisierungsereignis aufgerufen (Start nach Reset). Einige Eigenschaften, die später schreibgeschützt werden, können hier geändert werden, z. B. der Inhalt einer Teilanlage oder die Mitgliederliste eines Teilanlagenpools.

Simulation.Start

Wird durch das Simulationsstartereignis (nach der Initialisierung) und durch jeden Neustart aufgerufen, nachdem die Simulation angehalten oder gestoppt wurde. (Siehe auch Simulation.Stop und Simulation.EndSim unten)

Steuerung Rezeptauswahl

In diesem Beispiel wurde das Kontrollkästchen Festes Rezept für Auftrag 1 deaktiviert. Daher wird diese Steuerung aufgerufen, sobald der Auftrag eingeplant ist. Sie erlaubt, das Rezept zu ändern, das dem Auftrag zugeordnet ist.

Simulation.OrderSchedule

Die Steuerung wird aufgerufen, wenn ein Auftrag eingeplant wurde.

Recipe Load

Wenn das Rezept zum ersten Mal geladen (verwendet) wird, wird diese Steuerung aufgerufen. Sie kann im mit dem Rezept verbundenen VBA-Code hinzugefügt werden, oder indem ein Rezeptobjekt WithEvents global deklariert wird.

Steuerung Teilanlagenpoolbelegung

Dem Teilgrundrezept Reaction ist ein Pool zugeordnet, daher wird die zugeordnete Poolbelegungssteuerung aufgerufen. Sie ermöglicht es, zu steuern, welche Teilanlage des Poolsbelegt werden soll (siehe Tipp & Trick Neue Steuerungen für Unit Pools in INOSIM  13 anwenden).

Simulation.OrderStart

Die Steuerung wird aufgerufen, wenn ein Auftrag gestartet wurde, d. h. wenn der Aufrag seine erste Teilanlage belegt hat.

Von Rezeptelementen ausgelöste Ereignisse

Der Reaktor wird belegt, und der erste Vorgang (Laden) wird parametrisiert, beginnt und endet nach 1 Stunde. In diesem Beispiel rufen diese Ereginisse keine Steuerungen auf. (Außerdem werden zwei globale Steuerungen aufgerufen, die später erläutert werden.)

Die folgende Abbildung gibt einen Überblick über die Ereignisse für das Rezeptmodul Reaction mit einer einzelnen Operation namens Reaction.

Für das Rezeptmodul Reaction aufgerufene Ereignisse und Steuerungen

Die Operation Reaction im Rezept ist Bestandteil des Rezeptmoduls Reaction. Zusätzlich zu den im Operationsdialog verknüpften Steuerungen können Rezeptbausteine und Rezepte internen VBA-Code enthalten. Der Code ist über die Schaltfläche im Editor für Rezepte (Rezeptmodule) zugänglich. Der Code wird auch mit dem entsprechenden Element exportiert/importiert. Dies kann nützlich sein, wenn wiederverwendbare Rezeptmodule für eine einfache Weiterverteilung entworfen werden. Weitere Informationen finden Sie in der Anwendungsdokumentation.

Rezeptmodul-Parametrisierungsereignis

Rezeptmodul-Parametrisierungssteuerung

Diese Steuerung wird für das globale Parametrisierungsereignis für das komplette Rezeptmodul aufgerufen, d. h. vor der Parametrisierung der ersten Operation eines Rezeptmoduls. Die Steuerung ist über den Operationsdialog mit der Modulinstanz verbunden, siehe eingekreistes M über der Operation.

Operationsparametrisierungsereignis

Beim Operationsparametrierungsereignis können alle editierbaren Parameter eines Vorgangs geändert werden, z. B. Dauer, Menge, Ressourcenbedarf und vieles mehr. Nach Beendigung des Parametrisierungsvorgangs sind diese Parameter fix und können nicht mehr verändert werden.

Für diese spezifische Operation werden drei Steuerungen in dieser spezifischen Reihenfolge aufgerufen:

Operationsparametrisierungssteuerung

Operationsparametersteuerung, mit der Operation über den Operationsdialog verknüpft.

Rezeptmoduloperations-Parametrisierungssteuerung

Falls die Operation zu einem Rezeptmodul gehört, wird diese Steuerung, erstellt und verknüpft im rezeptspezifischen VBA Code, aufgerufen.

Rezeptoperations-Parametrisierungssteuerung

Die Steuerung wird erstellt und verknüpft im rezept-spezifischen VBA-Code.

Operationsstart-Ereignis

Im Idealfall erfolgt der Start der Operation direkt nach der Parametrisierung. Falls eine Operation jedoch auf eine Ressource, einen Transferpartner oder eine Synchronisationsverbindung wartet, können zwischen Parametrisierung und Start Wartezeiten entstehen.

Wie bei dem Parametrisierungsereignis werden drei Steuerungen für diese Operation in dieser spezifischen Reihenfolge aufgerufen:

Steueroperationsstart-Steuerung

Rezeptmoduloperationsstart-Steuerung

Rezeptoperationsstart-Steuerung

MaterialCost-Ereignis

Nachdem ein Materialtransfer von der Quelle abgeschlossen ist, aber vor dem Auslösen des End-Ereignisses, können zwei Steuerungen für die Materialkosten aufgerufen werden:

MaterialCost-Steuerung

Diese Steuerung wurde den Projekteigenschaften hinzugefügt.

Simulation.MaterialCost

Diese Steuerung wurde für das Simulationsobjekt erzeugt.

MaterialMix-Ereignis

Nachdem ein Transfer eines Materials in eine Teilanlage, die bereits ein Material enthielt, abgeschlossen ist, können zwei Steuerungen aufgerufen werden, um die neuen Materialeigenschaften, z. B. die Dichte der Mischung, zu berechnen.

Simulation.MaterialMix

Diese Steuerung wurde für das Simulationsobjekt erstellt und wird aufgerufen, wenn Materialien in einer beliebigen Teilanlage gemischt werden.

reactor1.MaterialMix

Die Variable reactor1 wurde global WithEvents als Unit-Objekt deklariert. Diese Steuerung wird nur aufgerufen, wenn Materialien in der Teilanlage gemischt werden, die der Variablen reactor1 während Simulation.Init zugewiesen wurde.

OperationEnd-Ereignis

Wie auch bei dem Parametrisierungs- und dem Start-Ereignis, so werden für diese Operation drei Steuerungen in dieser bestimmten Reihenfolge aufgerufen, wenn die Operation beendet ist:

Control Operation End

Recipe Module Operation End

Recipe Operation End

Ereignisse, die für den Transfer vom Reaktor zum Filter aufgerufen werden

Die Abfolge der Ereignisse ist in der folgenden Abbildung dargestellt. Die Ereignisse, die zur selben Operation gehören, werden horizontal ausgerichtet, während die vertikale Position die Reihenfolge darstellt, in der sie aufgerufen werden. Dies könnte auf den ersten Blick verwirrend aussehen. Wir empfehlen Ihnen, das Modell herunterzuladen und die Ereignisaufrufsequenz selbst mit Breakpoints, Konsolennachricht o. ä. zu untersuchen.

Bitte beachten Sie: Aufgrund der spezifischen Struktur des Konstrukts influxoutfluxstartTransfer wird, wenn ein influx oder outflux nach der Parametrisierung beginnen kann, das Start- und Endereignis sofort aufgerufen.

Steueroperations-Steuerung für IN

[Wartet auf die Beendigung von Loading]

Steueroperationsparametrisierungs-Steuerung für Transfer

Operationstransfer-Steuerung für die Transferverknüpfung zwischen Transfer und IN

Diese Steuerung wurde der Transferverknüpfung zugeordnet (daher blau markiert). Sie kann verwendet werden, um den Transfer (Menge, Dauer, Massenstrom, Material) zu parametrisieren.

Steueroperationsstart-Steuerung für IN

Steueroperationsende-Steuerung für IN

Steueroperationsparametrisierungs-Steuerung für OUT

Teilanlagenpooltransfer-Steuerung

Diese Steuerung wird immer dann aufgerufen, wenn ein simpletransfer oder ein simpleinflux/outflux in oder aus einem Teilanlagenpool parametrisiert wird. Der Transferpartner kann durch Zuweisung einer anderen Teilanlage ausgewählt werden. Die Steuerung kann zurückgerufen werden, wenn der Transfer gestoppt wird, z. B. weil der Entrance/ExitState gesperrt ist, eine Störung vorliegt oder die Teilanlage voll/leer ist. Erfahren Sie mehr über dieses Steuerelement in diesem Tipp & Trick.

Steueroperationsstart-Steuerung für OUT

In diesem Beispiel plant die Steuerung, die mit dem Operationsstartereignis verknüpft ist, den Aufruf eines anderen Steuerelements, um den EntranceState des gewählten Fasses in 60 Minuten ab jetzt zu schließen.

Steueroperationsend-Steuerung für OUT

Steueroperationsparametrisierungs-Steuerung für Filtration

Steueroperationsstart-Steuerung für Filtration

Steueroperationsstart-Steuerung für Transfer

Schließlich kann der Transfer starten. Material wird jetzt von einem Reaktor, durch den Filter und in das Fass B transferiert.

Steuerung aufgerufen von Simulation.ScheduleSub

Mit Hilfe der ScheduleSub-Methode des Simulationsobjekts können beliebige Steuerungen zu einem spezifischem Zeitpunkt der Simulation aufgerufen werden. In diesem Fall schließt die Steuerung den EntranceState des Transferspartners Fass B.

Teilanlagenpooltransfer-Steuerung

Die Steuerung wird erneut aufgerufen, weil der Transfer gestoppt wurde (weil der EntranceState von Fass B gesperrt ist). In diesem Beispiel wird Fass A, die andere Teilanlage aus dem Pool, ausgewählt, um Fass B als Transferpartner zu ersetzen.

Das Material wird nun vom Filter in Fass A transferiert.

Steueroperationsend-Steuerung für Transfer

Steueroperationsend-Steuerung für Filtration

Exkurs: ScheduleSub-Methode

Die ScheduleSub-Methode des Simulationsobjekts plant den Aufruf einer bestimmten Steuerung (Sub-Prozedur) zu einem bestimmten Punkt in der (Simulations-)Zeit ein. Das ist ein guter Weg, bestimmte Dinge zu einem bestimmten Zeitpunkt zu erzwingen (z. B. manuelles Starten oder Beenden eines Fehlers über VBA). Man muss jedoch sicher stellen, dass die als Argumente übergebenen Objekte zu diesem zukünftigen Zeitpunkt noch gültig sind.

In diesem Beispiel ruft die Startsteuerung der Operation OUT das Sub Macro1.CloseOpenEntrance in 60 Minuten ab jetzt auf und übergibt zwei Argumente: die Zielteilanlage für den Transfer (Barrel B) und den Zielzustand der EntranceState-Eigenschaft (ulocked).

Die Steuerung CloseOpenEntrance gibt eine Meldung auf der Konsole aus und setzt dann die EntranceState-Eigenschaft. Wurde sie auf ulocked gesetzt, ruft sich die Steuerung mit der ScheduleSub-Methode in 60 Minuten selbst erneut auf, um den EntranceState desselben Geräts wieder zu öffnen.

Sub StartControl_CloseEntrance(cop As OrderOperation)
    Simulation.ScheduleSub("Macro1.CloseOpenEntrance",60*60,DateReferenceType.bRelative,cop.Transfer.OtherUnit, UnitEntranceExitState.uLocked)
End Sub

Sub CloseOpenEntrance(u As Unit, target_state As UnitEntranceExitState)
    Console.Information("Simulation.ScheduleSub to set EntranceState of " & u.Name & " to " & target_state)

    u.EntranceState = target_state

    If target_state = UnitEntranceExitState.uLocked Then
        Simulation.ScheduleSub("Macro1.CloseOpenEntrance",60*60,DateReferenceType.bRelative,u, UnitEntranceExitState.uOpen)
    End If
End Sub

Alternativverzweigungs- und Verknüpfungs-Bedingungen

Wenn eine alternative Verzweigung eine Verknüpfungsbedingung hat, wird immer die zugewiesene Steuerung aufgerufen. Liegen mehrere Verknüpfungsbedingungen vor, werden die Steuerungen nacheinander aufgerufen. Die Reihenfolge richtet sich standardmäßig nach der Reihenfolge, in der die Verbindungen erstellt wurden. Sie können diese Sequenz beeinflussen, indem Sie die Sequenznummern der Verknüpfung anpassen, wie in der folgenden Abbildung dargestellt.

 

Wie oben dargestellt, wurde die Sequenz 1 der Verknüpfung vor Short Clean zugewiesen, die Sequenz 2 der Verknüpfung vor Long Clean. Daher werden die Steuerungen der Verbindungsbedingungen in der folgenden Reihenfolge aufgerufen:

Verknüpfungsbedingungs-Steuerung vor Short Clean

Verknüpfungsbedingungs-Steuerung vor Long Clean

Die Steuerung setzt den Wert des Verknüpfungsbedingungs-Objekts auf false, so dass weder kurze noch lange Reinigung ausgeführt werden.

Störungs- und Wartungsereignisse

Für Reactor 1 ist die Wartung 8 Stunden nach Simulationsbeginn fällig. (Einstellungen: alle 48 h, Anfangsalter 40 h, Zeitplan: Breakpoint) Mit diesen Einstellungen beginnt die Wartung nicht sofort bei Fälligkeit, sondern erst, wenn die Teilanlage verfügbar ist. Leider tritt in diesem Beispiel eine Störung auf, während die Wartung auf die Verfügbarkeit der Teilanlage wartet.

Eine Störungssteuerung und eine Wartungssteuerung wurden über den Dialog mit der Teilanlage verbunden. Zusätzlich wurde eine Steuerung für die Variable reactor1 erstellt, die global als Unit-Objekt WithEvents deklariert wurde (siehe oben). Diese Steuerung wird nach der im Dialog verknüpften Steuerung aufgerufen.

Bitte beachten Sie, dass für den Beginn und das Ende einer Störung die gleiche Steuerung aufgerufen wird. Das Gleiche gilt für das Wartungsereignis, einschließlich des Einplanungsereignisses dieser. Das Argument reason gibt an, ob es sich um den Beginn oder das Ende (oder die Einplanung) handelt. Die Abfolge der Ereignisse ist auch in der nachstehenden Abbildung dargestellt.

Wartungssteuerung (Einplanung)

Die Steuerung wird mit Argument bMaintenanceSchedule aufgerufen, wenn die Wartung fällig ist.

Störungssteuerung (Beginn)

Die Steuerung wird mit Argument bFailureBegin zu Beginn der Störung aufgerufen.

Störungssteuerung (Ende)

Die Steuerung wird mit Argument bFailureEnd zum Ende der Störung aufgerufen.

Wartungssteuerung (Beginn)

Die Steuerung wird mit Argument bMaintenanceBegin zum Beginn der Wartung aufgerufen.

Simulation.OrderEnd

Diese Steuerung wird für jeden Auftrag aufgerufen, wenn alle ihre ProcedureInstances beendet sind.

Wartungssteuerung (Ende)

Die Steuerung wird mit Argument bMaintenanceEnd zum Ende der Wartung aufgerufen.

Während die Simulation fortschreitet

Nachdem der erste Auftrag abgewickelt wurde, sollen die drei übrigen Aufträge um Mitternacht beginnen. Da sie gleichzeitig (versuchen zu) starten, wird die Belegungsprioritäts-Steuerung für den Filter aufgerufen. Wenn alle Aufträge abgearbeitet sind oder das Enddatum der Simulation erreicht ist, endet die Simulation.

Belegungsprioritäts-Steuerung

Sie ist der Teilanlage Filter zugeordnet. Die Steuerung wird immer dann aufgerufen, wenn mehr als eine Prozedurinstanz (man kann sie sich als Teilanlagen-Prozeduren vorstellen, die nach einer Teilanlage suchen) auf diese Teilanlage wartet. Durch den Aufruf der MoveToFrontoder MoveToEnd-Methoden für ein PendingProcedureInstance-Objekt können diese innerhalb der Warteschlange (Warteliste einer Teilanlage) verschoben werden. (Hinweis: Eine Priorisierung von Prozedurinstanzen kann auch mit einer Teilanlagenpoolbelegungssteuerung erreicht werden.)

In diesem Beispiel wird die Simulation angehalten, wenn diese Steuerung zum ersten Mal ausgeführt wird. Sie müssen erneut die Schaltfläche Start drücken, um den Simulationslauf fortzusetzen.

Simulation.Stop

Wenn die Stop– oder Pause-Taste gedrückt wird oder der VBA-Befehl Simulation.Stop ausgewertet wird, wird diese Steuerung aufgerufen. Drücken Sie die Schaltfläche Start, um fortzufahren.

Simulation.Start

Siehe oben.

Simulation.EndSim

Diese Steuerung wird aufgerufen, wenn es keine offenen oder aktiven Aufträge mehr gibt oder wenn das Enddatum der Simulation erreicht ist. Während dieses Ereignisses ist das Reporting-Objekt  verfügbar. In diesem Tipp & Trick erfahren Sie mehr über das Objekt Reporting.

Simulation.Stop

Exkurs: Dim WithEvents

Die globale MaterialMix-Steuerung wird aufgerufen, wenn sich zwei Materialien in einer Teilanlage vermischen. Zusätzlich kann eine spezifische Steuerung für eine einzelne Teilanlage definiert werden. Lesen Sie hier, wie:

Verschiedene INOSIM Objekte können WithEvents deklariert werden, z. B. Teilanlagen und Rezepte. Durch Auswahl des Objekts aus dem Objekt-DropDown-Menü im Editor können Sie die für dieses Objekt verfügbaren Event-Steuerelemente im Prozeduren-DropDown-Menü durchsuchen, z. B. MaterialMix.

In der Simulation.Init-Prozedur wird der Variablen eine Teilanlage zugewiesen. Für die Behandlung von MaterialMix-Ereignissen von Reactor 1 wurde eine spezielle Steuerung festgelegt.

'#Language "WWB.NET"
Option Explicit
Dim WithEvents reactor1 As Unit

Private Sub Simulation_Init() Handles Simulation.Init
    reactor1 = Units("Reactor 1")
End Sub

Private Sub reactor1_MaterialMix(ByVal u As INOSIM.Unit, ByVal matIn As INOSIM.MaterialAmounts, ByVal matOut As INOSIM.Material) Handles reactor1.MaterialMix
    Console.Information("reactor1.MaterialMix")
End Sub

Downloads

(nur für registrierte Anwendende von INOSIM)

  • Beispielmodell Event Call Sequence.ixml
  • PDF-Ausdruck von diesem Tipp & Trick

Fragen?

Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.

Array ( [posts_per_page] => 3 [post_type] => [category__in] => Array ( [0] => 9 ) [orderby] => rand [order] => ASC )

Mehr Tipps & Tricks

26. November 2020

Schnelle Sortierung von Arrays

Bei der Sortierung von Arrays kann die Laufzeit des angewendeten Sortierverfahrens eine entscheidende Rolle spielen. Bei kleineren Datenmengen mag diese noch nicht sehr stark ins…

Erfahrenen Anwendenden von INOSIM ist bewusst, dass sie mit einer ereignisdiskreten Simulationssoftware arbeiten. Für die meisten dieser Ereignisse können VBA-Steuerungen aufgerufen werden, um das Simulationsverhalten…

In diesem Tipp & Trick geht es um den Einsatz eines VBA Timers zur Messung der Ausführungsdauer von VBA Steuerungen. Um die Perfomance eines Modells…

mehr

INOSIM Kontakt

Zu den lokalen Geschäftszeiten

Deutschland +49 231 97 00 250

USA +1 214 663 3101

Indien +91 9766 331 092