23. February 2021

INOSIM Remote Control via the COM-Interface

Did you know INOSIM can be remote-controlled by any program that can send signals via the COM-Interface? Let us sketch a scenario of how this feature can be used to ease your simulation efforts.

INOSIM is the perfect tool for the evaluation of complex what-if-scenarios. To meet your production goals, there are options like installing further reactors, but different production order lists must be considered as well. Simulating the combination of all options can easily result in a large number of experiments you need to simulate. This means you would need to manually select experiments and click on “Start Simulation” each time. In case a simulation run of a complex model takes one hour, 15 experiments could be easily simulated overnight, while your computer would be unused anyway. Of course, getting up once an hour to start another simulation run is not an option.

Wouldn’t it be nice if you could execute one INOSIM simulation run after the other automatically?

Any COM-Interface capable programming language can control INOSIM. The INOSIM RemoteControl object can be parametrized with the database file path, project and experiment name, visibility, and license to be used. Optionally, a user data value can be transmitted. You can even create a new database and import a project via the COM-Interface. More properties and options are described in the INOSIM user documentation (INOSIM > Appendix > COM Interface).

A simulation run is started by calling the RunSimulation property. Within your project’s VBA code, you can access the RemoteControl object. If you hand over a user data value, it is stored in the object’s UserData property. At the end of the simulation, a value can be stored in the object’s Result property.

Control INOSIM with Excel

In this Tip & Trick, let us introduce you to an Excel workbook with macros that can be used to run several experiments of one INOSIM project automatically. On the sheet “Remote Control Settings” you will need to specify

  • path and file name of the INOSIM database file (e.g., “C:\Databases\Example-DB.imdf”)
  • project name
  • whether the user interface of INOSIM should be visible, minimized in the taskbar or invisible during simulation. (Hiding the interface can speed up loading time.)
  • experiment names you want to run
  • optionally, a UserData value

Screenshot of Excel Workbook

How it works

As soon as you click on “Start”, the Excel macro will open the INOSIM database, load the specified project and select the correct experiment, reset, and then start the simulation run. To give it a try, you can download the project file and the Excel workbook with included macro at the end of this page.

The following code is used in the Excel macro:

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

The INOSIM project simulated in this example uses the following code to access the UserData property in the Simulation_Init procedure. The RemoteControl-object is nothing in case you started the simulation manually (INOSIM start button). Therefore, the value 2 is assigned to the variable Orderlist_nr. If the simulation was started via the COM-Interface, RemoteControl-object is not nothing and therefore the value of UserData is used.

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 the EndSim procedure, the following code is executed to hand over the total simulation duration in hours to the RemoteControl object’s Results property. This value is then printed to column E in the Excel spreadsheet.

If RemoteControl Is Nothing Then
	Console.Print total_duration
Else
	RemoteControl.Result = total_duration
End If

More than just ONE number as Result or UserData?

In this example, only numbers are used as UserData and Result. In fact, these properties have the data type Variant. This means that Strings, Booleans, even arrays (e.g., data matrices) can be processed as well. Let’s assume you need to transmit more than just the orderlist_nr variable to each simulation run, but additionally also the boolean value “Level Control” and the string value for “Product Name”. Use your Excel-VBA skills to write this data into an array, and assign it to the UserData property. Within the INOSIM model, use the array directly or transform it into a table object.

Vice versa, in INOSIM, an array can be created to store simulation results and assigned to the RemoteControl.Result property. Within Excel VBA, write this array into your desired format.

What follows is the adjusted Excel Macro “Start_Batch_Processing_Array” to use the values in columns E, F, G as an array for simulation input.

Screenshot of an Excel Workbook

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 Remote Control in INOSIM Version 14

In INOSIM Version 14, the RemoteControl object was expanded. The new key feature is the RunData Object, which contains parameters that can be used in the simulation. In comparison to the previous versions, it is now easy to pass different parameters to the simulation via the COM Interface. The RunData object supports the Item property, by which a key (string) for a certain parameter and the corresponding value can be set. These parameters can then be used in the simulation. It is also possible to change or add parameters during the simulation, which then are the output parameters of the simulation. In addition to that, the RunData object supports the count property, which gives the number of parameters, the Exists method, which checks if a key exists, the Keys method, which gives a list of all keys and the Load and Save method, which then load and save parameters from an external file.

The example described above is also available in V14:

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

Further information

Please note that, once the Excel macro has been started, it cannot be stopped and will try to perform all simulation runs in the list. In this case, use the Windows Task Manager to stop the Excel process, or keep pressing the ESC-key to stop the macro execution.

Open a separate Excel Instance

While the Excel macro is running, you cannot edit other Excel workbooks that have been opened in the same Excel instance. If you need to continue working on other workbooks while you are waiting for the simulation runs to finish, open them in a separate instance of Excel. To do so, simply keep pressing the ALT-key while opening Excel until you are asked if you want to open a new instance.

Build your custom simulation handler

You think the project name should be defined separately in each row? You would like to create a new database for each new run? Feel free to change the sheet and macro to meet your needs.

In this Tip & Trick we have demonstrated the use of INOSIM’s Remote Control feature with Excel, because it is commonly available. However, INOSIM can also be remote controlled from other COM-compatible software like MatLab or Python.

Downloads

  • Demo project file
  • Excel Workbook with macros
  • Excel Workbook
  • PDF printout of this Tip & Trick

More Questions?

Want to know more about this topic or have another question? Please contact us!

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

More Tips & Tricks

Benefit from your Excel VBA Know-how In this tip and trick we want to show you how to activate and use Excel’s VBA commands from…

Working With External Excel Workbooks Beside access to the Excel workbook built in to INOSIM (see tip Benefit From Your Excel Knowledge While Working With…

Did you know INOSIM can be remote-controlled by any program that can send signals via the COM-Interface? Let us sketch a scenario of how this…

more

Direct Contact

During local business hours

Germany +49 231 97 00 250