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 influx–outflux–startTransfer 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 MoveToFront– oder 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
(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.
Mehr Tipps & Tricks
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…
Zwei Wege, Teilanlagen-Störungen zu simulieren
Mit der Integration von stochastischen Teilanlagen-Störungen in Ihr INOSIM-Projekt können Sie die Realität in Ihrem Modell noch präziser abbilden, da Störungen einen großen Einfluss auf…
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…