23. Februar 2021

INOSIM Fernsteuerung über die COM-Schnittstelle

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.

Screenshot of Excel Workbook

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.

TT_remote_control_2

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

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.

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.

Downloads

  • 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.

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

Mehr Tipps & Tricks

In INOSIM Simulationen können benutzerdefinierte, stochastische Teilanlagen-Störungen genutzt werden, um die Realität in einer Anlage möglichst präzise abzubilden. Mit dem Add-On Statistische Analyse kann dann…

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…

19. März 2020

Das Reporting-Objekt

Ab INOSIM 12 ist das Reporting-Objekt Bestandteil des Objektmodells. Es ermöglicht den Zugriff auf die Ergebnisberichte über Visual Basic und bietet dadurch vielfältige Optionen zur…

mehr

INOSIM Kontakt

Zu den lokalen Geschäftszeiten

Deutschland +49 231 97 00 250

USA +1 214 663 3101

Indien +91 9766 331 092