Mit der neuen INOSIM 13 Version wurde der Basic-Editor umgestellt. So unterstützt dieser nun zusätzlich zu der WWB-COM auch die WWB.NET Sprachvariante, welche mit Visual Basic .NET kompatibel ist. Damit können auch .NET Bibliotheken in INOSIM verwendet werden. In der neuen INOSIM Version wird für die Sprache in Visual Basic deshalb jetzt standardmäßig WWB.NET verwendet. Bisher galt in INOSIM WWB-COM als Standardsprache für den Code in VBA.
Standardsprache bedeutet, dass bei Einfügen eines neuen Makros in ein Projekt die Standardsprache in dem jeweiligen Makro gesetzt wird. Bereits bestehende Makros sind davon nicht betroffen. Welche Sprache ein Makro verwendet, ist in der ersten Codezeile zu sehen:
Makro mit WWB-COM
Makro mit WWB.NET
Durch Ändern der ersten Codezeile kann so auch die verwendete Sprache für das entsprechende Makro umgestellt werden.
Welche Standardsprache für ein neues Makro verwendet wird, ist ebenfalls änderbar. Die Einstellung ist im INOSIM Basic-Editor unter Extras > Optionen zu finden:
Bei der Verwendung von WWB.NET müssen einige Unterschiede im Vergleich zu WWB-COM beachtet werden! Im Folgenden werden die wichtigsten Unterschiede dargestellt.
Set-Anweisung
In WWB-COM ist es erforderlich, dass bei der Zuordnung von Objekten ein Set genutzt wird. Diese Anweisung gibt es in WWB.NET nicht. Die Objektzuweisung erfolgt, wie auch bei anderen Zuordnungen von Variablen, mit einem einfachen Gleichheitszeichen.
Im folgenden Beispiel wird ein Produktionsauftrag erstellt. Für die Zuordnung eines Rezeptes, eines Materials und des neuen Auftrags zu der Auftrags-Variablen wird in WWB-COM hier ein Set benötigt, da es sich um Objekte handelt.
'#Language "WWB-COM"
Set o = New Order 'set because an object is assigned
o.Name = "Order"
Set o.Recipe = Recipes("Production (V1)") 'set because an object is assigned
Set o.Material = Materials("Produkt") 'set because an object is assigned
Orders.Add o
'#Language "WWB.NET"
o = New Order
o.Name = "Order"
o.Recipe = Recipes("Production (V1)")
o.Material = Materials("Produkt")
Orders.Add o
Events wie Simulation_Init
Bei Prozeduren (Subs), die bestimmte Events handhaben, muss dieses Event explizit angegeben werden. Beispiele für dieses geänderte Verhalten sind die Initialisierung der Simulation und die EndSim, also das Ende der Simulation.
Für die Initialisierung ändert sich der Code in WWB.NET im Vergleich zu WWB-COM wie folgt. Durch die explizite Angabe, welches Event diese Prozedur handhabt, ist es möglich, die Routine in WWB.NET umzubenennen.
'#Language "WWB-COM"
Private Sub Simulation_Init()
End Sub
'#Language "WWB.NET"
Private Sub Simulation_Init() Handles Simulation.Init
End Sub
IsEmpty/IsNull/IsObject
Die Funktionen IsEmpty, IsNull und IsObject gibt es in WWB.NET nicht. Mit der Funktion isEmpty kann in WWB-COM danach gefragt werden, ob einem Variant bereits ein Wert zugeordnet wurde. Ist noch kein Wert zugewiesen, so gibt die Funktion isEmpty den Wert False zurück. In WWB.NET gibt es den Typ Variant nicht, weshalb die Funktion nicht mehr benötigt wird.
Mit der Funktion isNull kann in WWB-COM bestimmt werden, ob etwas den Wert Null (nicht 0) hat. Einträge in Dictionaries und in Table-Objekten, denen noch kein Wert zugewiesen worden ist, haben den Wert Null. Dies ist auch relevant für Benutzerdefinierte Attribute, da diese Eigenschaft ein Dictionary ist. Wenn man ein Benutzerdefiniertes Attribut in VBA erzeugt und diesem noch kein Wert zugeordnet wurde, hat es den Wert Null. Um in WWB.NET zu bestimmen, ob ein Wert Null ist, wird stattdessen die Funktion IsDBNull verwendet.
'#Language "WWB-COM"
If IsNull(Units("Tank 1").CustomAttributes("Diameter")) Then
Units("Tank 1").CustomAttributes("Diameter") = 3
End If
'#Language "WWB.NET"
If IsDBNull(Units("Tank 1").CustomAttributes("Diameter")) Then
Units("Tank 1").CustomAttributes("Diameter") = 3
End If
Mit IsObject lässt sich bestimmen, ob es sich bei der abgefragten Variablen um ein Objekt handelt. In WWB.NET kann dies durch die Funktion IsReference ermittelt werden.
'#Language "WWB-COM"
If IsObject(Units("Tank 1")) Then
'True
End If
'#Language "WWB.NET"
If IsReference(Units("Tank 1")) Then
'True
End If
Enum
Ein Enum ist ein Wertetyp, der in INOSIM für Variablen verwendet wird, für die nur bestimmte Konstanten in Frage kommen. Ein typisches Beispiel hierfür ist der OperationState, der den Zustand angibt, in dem eine Operation sich befindet. Der OperationState kann dabei bOpOpen, bOpStarting, bOpStarted, bOpFinished oder bOpCancelled sein. Weitere Beispiele für Enums in INOSIM sind: AllocationMode, OperationStage, MaintenanceControlArg, PendingUnitsMode etc.
Falls man Werte eines Enums in WWB.NET zuweisen möchte, muss zusätzlich zum Enum-Wert der Enum-Name angegeben werden.
In dem Beispiel wird die neue Poolbelegungssteuerung aus INOSIM 13 angewendet (siehe Neue Steuerungen für Unit Pools in INOSIM 13 anwenden). Hier wird das Enum PendingUnitMode verwendet, um zu entscheiden, welche Unit aus dem Pool für die Belegung in Frage kommt. In diesem Fall soll nur die Unit mit dem Namen Tank 1 belegt werden.
'#Language "WWB-COM"
Sub Pool_Allocation(proc As ProcedureInstance, p As UnitPool, u As Unit, ByRef allocate As Boolean)
Dim pm As Unit
If u Is Nothing Then 'identifies the first call of the control
For Each pm In p.Members
If pm.Name="Tank 1" Then
proc.PendingUnitsMode(pm.Name) = puAllocate
Else
'all other tanks are ignored
proc.PendingUnitsMode(pm.Name) = puIgnore
End If
Next
End If
End Sub
'#Language "WWB.NET"
Sub Pool_Allocation (proc As ProcedureInstance, p As UnitPool, u As Unit, ByRef allocate As Boolean)
Dim pm As Unit
If u Is Nothing Then
'identifies the first call of the control
For Each pm In p.Members
If pm.Name="Tank 1"Then
proc.PendingUnitsMode(pm.Name) = PendingUnitMode.puAllocate
Else
proc.PendingUnitsMode(pm.Name) = PendingUnitMode.puIgnore
'all other tanks are ignored
End If
Next
End If
End Sub
Variants und Arrays
In WWB.NET gibt es keine Variants. Alternativ können die Variablen als Objekte deklariert werden. So können auch Arrays, die in WWB-COM normalerweise als Variants deklariert werden, in WWB.NET als Object-Arrays definiert werden. Zusätzlich ist es in WWB.NET auch möglich, Listen statt Arrays zu nutzen, um mehr als einen Wert in einer Variablen zu speichern. In dem folgenden Beispiel werden Werte aus einem Excel-Sheet in einem Array gespeichert und anschließend der erste Wert aus dem Array in der Konsole ausgegeben.
'#Language "WWB-COM"
Private Sub Simulation_Init()
Dim n_rows As Integer
Dim n_columns As Integer
n_rows=Parameters.Sheets("Sheet").LastRow 'number of last used row in Excel sheet
n_columns=Parameters.Sheets("Sheet").LastColumn 'number of last used column in Excel sheet
Dim a As Variant 'array as variant
ReDim a (n_rows,n_columns) As Object 'sizing of dimensions
a=Parameters.Sheets("Sheet").RangeYX(1,1,no_rows,no_columns) 'Read in values for array from Excel sheet
Console.Print a(1,1) 'Print out the first value in the console
End Sub
'#Language "WWB.NET"
Private Sub Simulation_Init() Handles Simulation.Init
Dim n_rows As Integer
Dim n_columns As Integer
n_rows=Parameters.Sheets("Sheet").LastRow 'number of last used row in Excel sheet
n_columns=Parameters.Sheets("Sheet").LastColumn 'number of last used column in Excel sheet
Dim a (,) As Object 'number of dimensions defined by comma
ReDim a (n_rows,n_columns) As Object 'sizing of dimensions
a=Parameters.Sheets("Sheet").RangeYX(1,1,no_rows,no_columns) 'Read in values for array from Excel sheet
Console.Print a(1,1) 'Print out the first value in the console
End Sub
Datentypen
In WWB.NET sind die Grenzen für die Datentypen Long und Integer weiter. Zusätzlich gibt es für ganzzahlige Werte den Datentypen Short in WWB.NET:
Datentyp | WWB.NET | WWB-COM |
Short | – 32,768 to 32,767 | – |
Integer | -2.15 E+18 to 2.15 E+18 | – 32,768 to 32,767 |
Long | – 9.2 E+18 to 9.2 E+18 | -2.15 E+18 to 2.15 E+18 |
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Table-Objekte anwenden
In INOSIM Modellen ist es sehr praktisch, die Eingabe für Ihre Rezepte in Excel-Tabellen zu organisieren, um entweder einen besseren Überblick über Ihre Eingabe zu…
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…
Intervall-Auswertung des Transfer-Reports
Intervall-Auswertung des Transfer-Reports In diesem Tipp stellen wir Ihnen vor, wie Sie aus den von INOSIM erzeugten Reports automatisiert per VBA weitere Daten berechnen, um…