Wussten Sie, dass INOSIM mit jedem Programm ferngesteuert werden kann, das Signale über die COM-Schnittstelle senden kann? Hier erfahren Sie, wie dieses Feature verwendet werden kann, um Ihnen die Simulation zu erleichtern.
INOSIM ist das perfekte Werkzeug für die Bewertung komplexer Was-wenn-Szenarien. Um Ihre Produktionsziele zu erreichen, gibt es Optionen wie die Installation weiterer Reaktoren, aber auch unterschiedliche Produktionsauftragslisten müssen berücksichtigt werden. Die Simulation der Kombination aller Optionen kann leicht zu einer großen Anzahl von Experimenten führen, die Sie simulieren müssen. Dies bedeutet, dass Sie die Experimente manuell auswählen und jedes Mal auf Simulation starten klicken müssen. Wenn ein Simulationslauf eines komplexen Modells eine Stunde dauert, könnten leicht 15 Experimente über Nacht simuliert werden, während Ihr Rechner ohnehin unbenutzt bliebe. Aber natürlich ist es keine Option, einmal pro Stunde aufzustehen, um einen weiteren Simulationslauf zu starten.
Wäre es nicht schön, wenn Sie automatisch einen INOSIM-Simulationslauf nach dem anderen ausführen könnten?
Jede COM-Interface-fähige Programmiersprache kann INOSIM steuern. Das INOSIM RemoteControl-Objekt kann mit dem Datenbankdateipfad, dem Projekt- und Experimentnamen, der Sichtbarkeit und der zu verwendenden Lizenz parametrisiert werden. Optional kann ein Benutzerdatenwert übertragen werden. Über die COM-Schnittstelle können Sie sogar eine neue Datenbank erstellen und ein Projekt importieren. Weitere Eigenschaften und Optionen finden Sie in der INOSIM-Benutzerdokumentation (INOSIM > Anhang > COM-Schnittstelle).
Ein Simulationslauf wird durch Aufruf der RunSimulation-Eigenschaft gestartet. Innerhalb des VBA-Codes Ihres Projekts können Sie auf das RemoteControl-Objekt zugreifen. Wenn Sie einen Benutzerdatenwert übergeben, wird dieser in der UserData-Eigenschaft des Objekts gespeichert. Am Ende der Simulation kann ein Wert in der Result-Eigenschaft des Objekts gespeichert werden.
INOSIM mit Excel fernsteuern
In diesem Tipp & Trick stellen wir Ihnen eine Excel-Arbeitsmappe mit Makros vor, mit denen mehrere Experimente eines INOSIM-Projekts automatisch ausgeführt werden können. Auf dem Blatt Remote Control Settings müssen Sie eingeben:
- Pfad und Dateiname der INOSIM Datenbankdatei (z. B. C:\Databases\Example-DB.imdf)
- Projektname
- Ob die INOSIM Benutzeroberfläche während der Simulation sichtbar, minimiert in der Taskleiste oder unsichtbar sein soll. (Ausblenden der Oberfläche kann die Ladezeit beschleunigen.)
- Die Namen der Experimente, die Sie simulieren möchten.
- Optional einen UserData-Wert.
Wie es funktioniert
Sobald Sie auf Start klicken, öffnet das Excel-Makro die INOSIM Datenbank, lädt das angegebene Projekt und wählt das richtige Experiment, setzt zurück und startet den Simulationslauf. Um es auszuprobieren, können Sie die Projektdatei und die Excel-Arbeitsmappe mit enthaltenem Makro unten auf dieser Seite herunterladen.
Der folgende Code wird im Excel-Makro verwendet:
Sub Start_Batch_Processing()
Application.DisplayAlerts = False
Set sim = CreateObject("INOSIM.RemoteControl.12.0")
Dim s As Worksheet
Set s = ActiveSheet
sim.Database = s.Cells(1, 2) '"C:\Databases\Example12.imdf"
sim.Project = s.Cells(2, 2) '"T&T Remote Control"
sim.Visibility = CStr(s.Cells(3, 2)) '0 visible, 1 taskbar, 2 invisible
sim.License = "ExpertEdition"
sim.LogFile = "C:\Temp\Protocol.txt"
Dim r As Long
For r = 6 To s.Cells(4, 2) + 6
If s.Cells(r, 2) > 0 Then
sim.Experiment = CStr(s.Cells(r, 3))
sim.UserData = s.Cells(r, 4)
s.Cells(r, 5) = sim.RunSimulation
End If
Next
End Sub
Das in diesem Beispiel simulierte INOSIM Projekt verwendet den folgenden Code, um auf die UserData-Eigenschaft in der Simulation_Init-Prozedur zuzugreifen. Das RemoteControl-Objekt ist Nothing, wenn Sie die Simulation manuell gestartet haben (Schaltfläche Start). Daher wird der Variablen Orderlist_nr der Wert 2 zugewiesen. Wurde die Simulation über die COM-Schnittstelle gestartet, ist das RemoteControl-Objekt nicht Nothing und daher wird der Wert von UserData verwendet.
Dim Orderlist_nr As Integer
'data from remote control: which order list should be used
If RemoteControl Is Nothing Then
Orderlist_nr = 2
Else
Orderlist_nr = RemoteControl.UserData
End If
In der EndSim-Prozedur wird der folgende Code ausgeführt, um die gesamte Simulationsdauer in Stunden an die Results-Eigenschaft des RemoteControl-Objekts zu übergeben. Dieser Wert wird dann in Spalte E der Excel-Tabelle ausgegeben.
If RemoteControl Is Nothing Then
Console.Print total_duration
Else
RemoteControl.Result = total_duration
End If
Mehr als nur eine Zahl als Result oder UserData? Kein Problem!
In diesem Beispiel werden nur Zahlen als UserData und Result verwendet. Tatsächlich haben diese Eigenschaften den Datentyp Variant. Das bedeutet, dass Strings, Booleans, sogar Arrays (z. B. Datenmatrizen) ebenfalls verarbeitet werden können. Nehmen wir an, Sie müssen bei jedem Simulationslauf nicht nur die Variable orderlist_nr, sondern zusätzlich auch den booleschen Wert LevelControl und den String-Wert für ProductName übergeben. Verwenden Sie Ihre Excel-VBA-Kenntnisse, um diese Daten in ein Array zu schreiben und sie der UserData-Eigenschaft zuzuweisen. Verwenden Sie das Array innerhalb des INOSIM Modells direkt oder transformieren Sie es in ein Tabellenobjekt.
Umgekehrt kann in INOSIM ein Array zur Speicherung der Simulationsergebnisse erstellt und der RemoteControl.Result-Eigenschaft zugeordnet werden. Schreiben Sie dieses Array in Excel VBA in das gewünschte Format.
Es folgt das angepasste Excel-Makro Start_Batch_Processing_Array, um die Werte in den Spalten E, F und G als Array für die Simulationseingabe zu verwenden.
Sub Start_Batch_Processing_Array()
Application.DisplayAlerts = False
Set sim = CreateObject("INOSIM.RemoteControl.12.0")
Dim s As Worksheet
Set s = ActiveSheet
Dim Data As Variant
ReDim Data(1 To 2, 1 To 3) '2 rows, 3 columns
Dim c As Long
'write table header to array
For c = 1 To 3
Data(1, c) = s.Cells(5, c + 3)
Next
sim.Database = s.Cells(1, 2) '"C:\Databases\Example12.imdf"
sim.Project = s.Cells(2, 2) '"T&T Remote Control"
sim.Visibility = CStr(s.Cells(3, 2)) '0 visible, 1 taskbar, 2 invisible
sim.License = "ExpertEdition"
sim.LogFile = "C:\Temp\Protocol.txt"
Dim r As Long
For r = 6 To s.Cells(4, 2) + 6
If s.Cells(r, 2) > 0 Then
sim.Experiment = CStr(s.Cells(r, 3))
'sim.UserData = s.Cells(r, 4)
'write experiment input data
For c = 1 To 3
Data(2, c) = s.Cells(r, c + 3)
Next
sim.UserData = Data
s.Cells(r, 7) = sim.RunSimulation
End If
Next
End Sub
INOSIM Fernsteuerung in INOSIM Version 14
In INOSIM Version 14 wurde das RemoteControl-Objekt erweitert. Das neue Schlüsselfeature ist das RunData-Objekt, das Parameter enthält, die in der Simulation verwendet werden können. Im Vergleich zu den früheren Versionen ist es nun einfach, über die COM-Schnittstelle verschiedene Parameter an die Simulation zu übergeben. Das RunData-Objekt unterstützt die Item-Eigenschaft, mit der ein Key (String) für einen bestimmten Parameter und der entsprechende Wert festgelegt werden können. Diese Parameter können dann in der Simulation verwendet werden. Es ist auch möglich, Parameter während der Simulation zu ändern oder hinzuzufügen, die dann die Ausgabeparameter der Simulation sind. Zusätzlich dazu unterstützt das RunData-Objekt die Count-Eigenschaft, die die Anzahl der Parameter angibt, die Exists-Methode, die überprüft, ob ein Key vorhanden ist, die Keys-Methode, die eine Liste aller Keys liefert, sowie die Load– und Save-Methode, die Parameter aus einer externen Datei laden und speichern können.
Das oben beschriebene Beispiel ist auch in V14 verfügbar:
Sub Start_Batch_Processing_Array()
Application.DisplayAlerts = False
Set sim = CreateObject("INOSIM.RemoteControl.14.0")
Dim s As Worksheet
Set s = ActiveSheet
sim.Database = s.Cells(1, 2) '"C:\Databases\Example13.imdf"
sim.Project = s.Cells(2, 2) '"T&T Remote Control"
sim.Visibility = s.Cells(3, 2) '0 = visible, 1 = taskbar, 2 = invivible
sim.License = "ExpertEdition"
Dim r As Long
For r = 6 To s.Cells(4, 2) + 6
If s.Cells(r, 2) > 0 Then
sim.Experiment = CStr(s.Cells(r, 3))
sim.RunData.Item("Reactor Capability") = CBool(s.Cells(r, 5))
sim.RunData.Item("Cleaning Capability") = CBool(s.Cells(r, 6))
sim.RunData.Item("OrderList") = CInt(s.Cells(r, 4))
sim.RunSimulation
s.Cells(r, 7) = sim.RunData.Item("SimulationDuration")
End If
Next
End Sub
Weitere Informationen
Bitte beachten Sie, dass das Excel-Makro nach dem Start nicht mehr gestoppt werden kann und versuchen wird, alle Simulationsläufe in der Liste auszuführen. Stoppen Sie in diesem Fall den Excel-Prozess mit dem Windows Task-Manager.
Eine separate Excel-Instanz öffnen
Während das Excel-Makro ausgeführt wird, können Sie keine anderen Excel-Arbeitsmappen bearbeiten, die in derselben Excel-Instanz geöffnet wurden. Möchten Sie mit anderen Arbeitsmappen weiterarbeiten, während Sie auf die Simulationsläufe warten, öffnen Sie diese Arbeitsmappen in einer separaten Instanz von Excel. Halten Sie dazu einfach die ALT-Taste gedrückt, während Sie Excel öffnen, bis Sie gefragt werden, ob Sie eine neue Instanz öffnen möchten.
Bauen Sie Ihr eigenes Tool
Sie denken, der Projektname sollte in jeder Zeile separat definiert werden? Sie möchten für jeden neuen Durchlauf eine neue Datenbank erstellen? Dann können Sie das Sheet und das Makro nach Ihren Wünschen ändern.
In diesem Tipp & Trick haben wir die Verwendung der RemoteControl-Funktion von INOSIM mit Excel demonstriert, da es allgemein verfügbar ist. INOSIM kann aber auch von anderen COM-kompatiblen Programmen wie MatLab ferngesteuert werden.
- Demo Projektdatei
- Excel Arbeitsmappe mit Makros
- Excel Arbeitsmappe
- PDF-Ausdruck zu 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…
Benutzerdefinierte Graphen und Eigenschaften von Graphen in INOSIM Gantt
Custom Curves and Properties Of Curves in INOSIM Gantt In Ihrem Modell wird derselbe Rohstoff in mehreren Tanks aufbewahrt und Sie möchten den gesamten Lagerbestand…
Laufzeitfehler vermeiden und benutzerdefiniert abfangen
Dieser Tipp & Trick beschreibt eine Vielzahl von Methoden zur Vermeidung und Behandlung von Laufzeitfehlern in Ihrem VBA-Code. Sie werden mit den FindColumn– und FindRow-Methoden…