EbsOpen ist eine umfassende COM-Klassenbibliothek, die den Zugriff auf alle Anwendungs-, Modell-, Leitungs- und Komponentendaten in EBSILON Professional ermöglicht. Es ist ein Werkzeug für die Simulation, Validierung und What-If-Szenarien. Außerdem können damit Parameterstudien und automatisierte Berechnungen für in Betrieb befindliche Kraftwerke bearbeitet werden. Die Excel-Schnittstelle für EBSILON ist ein Beispiel für die Form der Integration, die mit EbsOpen erreicht werden kann.
EbsOpen bietet mehr als 200 Klassen mit 3500 Methoden und Eigenschaften, die verwendet werden können um EBSILON Modelle zu lesen, zu bearbeiten und aus zu führen. Es eignet sich für die Integration von EBSILON Professional-Berechnungen und Daten aus der eigenen Softwareinfrastruktur. EbsOpen kann mit vielen gängigen Automatisierungs- und Programmierumgebungen wie Visual Studio.net (via VB, C ++ oder C #), oder Visual Basic für Applikationen (VBA) für MS Office-Produkte wie Excel, verwendet werden.
Dieser Abschnitt der Online Hilfe gibt eine Einführung in EbsOpen und liefert einige Beispiele dafür, wie es benutzt werden kann.
Die COM-Schnittstelle "EbsOpen" von EBSILONProfessional kann auch mittels der Python for Window Extensions "pywin32" von Python aus verwendet werden.
Das Python-Modul "EbsOpen.py" ist hierfür zwar nicht unbedingt notwendig, es erleichtert jedoch das Arbeiten mit der EbsOpen-Schnittstelle, da es Python Klassen fuer die einzelnen COM-Schnittstellen und -Klassen und Definitionen der Enumerationwerten enthält. Ebsopen.py befindet sich im Unterverzeichnis data/python des Ebsilon-Installationsverzeichnisses.
Siehe EbsOpen Class Documentation für weitere Details.
EbsOpen im Überblick EbsOpen mit VBA EbsOpen mit Visual Studio und C# Lesen und Schreiben von Komponenten-, Leitungs- & Makrodaten mit EbsOpen
Lesen und Schreiben von Modell- und Profilvariablen
Die EbsOpen COM Bibliothek befindet sich im Ordner, in dem Sie EBSILON Professional installiert haben. Wenn Sie den Standardzielordner verwendet haben, dann ist dies entweder:
C:\Programme\Ebsilon\EBSILONProfessional [Versionsnummer]
oder
C:\Programme(x86)\Ebsilon\EBSILONProfessional [Versionsnummer]
je nach Betriebssystem und EBSILON Version (32-Bit oder 64-Bit), die Sie installiert haben.
Um die EbsOpen Bibliothek zu nutzen, müssen Sie einen Verweis auf die Typ-Bibliothek EbsOpen.tlb machen:
Beispiele dafür, wie dies in VBA und C# zu tun ist, werden später gezeigt. Um die Klassen, Methoden und Eigenschaften, die EbsOpen bietet, kennen zu lernen, können Sie die Datei EbsOpen.tlb öffnen. Dies kann beispielsweise mit dem Oleview-Programm von Microsoft Visual Studio erfolgen:
https://msdn.microsoft.com/en-us/library/d0kh9f4c.aspx
Wenn Sie kein Microsoft Visual Studio besitzen, kann die Datei auch mit dem Open Source Viewer OleWoo geöffnet werden: http://www.benf.org/other/olewoo/
Eine Übersicht über einige verfügbare Eigenschaften (Berechnungslauf Status) in OleWoo wird in der nächsten Abbildung gezeigt.
Ebenso können Sie den Object Browser (mehr Details weiter unten) in der VBA oder Visual Studio Umgebung verwenden, um alle EbsOpen Klassen, Methoden und Eigenschaften anzuzeigen, die Sie zum Verbinden der EBSILON und EBSILON-Modelle mit Ihren anderen Systemen und Anwendungen benötigen.
In diesem Abschnitt werden Sie durch die Konfiguration und Verwendung von EbsOpen mit VBA in Excel eingeführt. Vorkenntnisse mit VBA werden vorausgesetzt. Um zu starten, öffnen Sie Microsoft Excel mit einem neuen Arbeitsblatt. Starten Sie das VBA Integrated Development Environment (IDE) durch Drücken von Alt+F11:
Wählen Sie wie oben dargestellt References… aus dem Pulldown-Menü Tools aus. Drücken Sie danach den Browse... Button. Folglich kann eine Referenz zu EbsOpen hinzugefügt werden, indem Sie wie unten dargestellt die Datei EbsOpen.tlb laden, die/ welche sich im Ordner befindet, in dem EBSILON Professional installiert wurde.
Anschließend können Sie den VBA Object Explorer benutzen, um verfügbare Klassen, Methoden und Eigenschaften darzustellen. Wählen Sie dazu den Object Browser aus dem View Menü aus oder drücken Sie F2 während Sie sich im VBA IDE befinden:
Nach Abschluss der oben beschriebenen Schritte können Sie EbsOpen in Ihrem eigenen VBA Code nutzen. In der nächsten Abbildung finden Sie eine einfache VBA Anwendung von EbsOpen in der bestimmt wird, wie viele Komponenten und Leitungen sich in einem Model befinden.
Für weitere Beispiele zu den Möglichkeiten in EbsOpen, öffnen Sie die Dateien EbsOpenDemo.xlsm und EbsOpen.xlsm im Unterverzeichnis \Data\Examples des EBSILON Installationsverzeichnisses.
HINWEIS: Abhängig von Ihrem Betriebssystem, Benutzerzugriffseinstellungen und dem EBSILON Installationsverzeichnis, müssen Sie die Arbeitsmappen gegebenenfalls in einen Nicht-System Ordner kopieren und deren EbsOpen.tlb Referenz aktualisieren, um diese öffnen zu können.
Dieser Abschnitt führt Sie durch die Anwendung von EbsOpen mit C# in Visual Studio. Vorkenntnisse mit Visual Studio und C# werden vorausgesetzt. Um zu beginnen, starten Sie Visual Studio und öffnen Sie ein neues Projekt:
Sie können den Object Browser dazu nützen, die in EbsOpen verfügbaren Klassen, Methoden und Eigenschaften darzustellen. Nachdem Sie die oben beschriebenen Punkte abgeschlossen haben, können Sie Ihren C# Code entwickeln. Der im Anschluss beschriebene Code ist aus dem Beispielprojekt EbsOpenCSharpDemo, das im Unterverzeichnis Data\Examples des EBSILON Installationsverzeichnisses liegt. Der beschriebene Code ist für eine einfache Windows-Anwendung die anzeigt, wie viele Komponenten und Leitungen sich in einem Modell befinden. Das Beispiel beinhaltet weitere Codeteile, die eine Dropdown-List-Box mit allen Profilen des ausgewählten Modells füllt und einen Button erstellt, der eine Simulation für ein in der Liste markiertes Profil ausführt:
EbsOpen hat für jede Leitung und jede Komponente in EBSILON Professional Klassen definiert. Der einfachste Weg um Daten zu / von einem EBSILON-Modell zu lesen oder zu schreiben funktioniert wie folgt:
Das Verfahren oben setzt voraus, dass Sie bereits gültige EbsOpen.Application- und EbsOpen.model-Objekte in Ihrem Code deklariert und eingestellt haben. Eine Variable in Ihren Code auszulesen sieht in VBA wie folgt aus:
Dim Efficiency_meter As EbsOpen.Comp32
Dim dsp As EbsOpen.Comp46
Set dsp = model.Objects.Item("DSP")
Set Efficiency_meter = model.Objects.Item("Efficiency_meter")
eff_max = Efficiency_meter.ETA //read parameter ETA from component Efficieny_Meter
dsp.MEASM = 590.0 //write flow rate of 590 kg/s into measuring point DSP
Die oben genannte Prozedur ist einfach, aber aus folgenden Gründen begrenzt:
bWriteSuccesful = dsp.MEASM.SetValueInUnit(1000, epUNIT_t_h)
Die "Get/SetValueInUnit" Methoden sind weiter unten näher beschrieben und im Spreadsheet EbsOpenDemo.xlsm weiter ausgeführt.
Glücklicherweise sind die Klassen, Methoden und Eigenschaften von EbsOpen geeignet, eine allgemeinere Art und Weise zu konstruieren um Daten zu lesen bzw. zu schreiben. Werfen Sie dafür einen Blick auf den Code im unteren Teil. Dieser Code liegt im Utilities-Modul der Datei EbsOpenDemo.xlsm im Unterordner Data\Examples des EBSILON Installationsverzeichnisses und kann in Ihr VBA Projekt importiert werden.
Wenn Sie die Model/Class/ObjectbyContext-Methode angewenden, können Sie ein Objekt über seinen Namen finden und der allgemeineren EbsOpen.Data-Klasse zuordnen. So ist es möglich, das Objekt mit jeder beliebigen Kenngröße über die EbsValues-Eigenschaften zu finden. Zusammen können diese Klassen, Methoden und Eigenschaften dazu verwendet werden, Funktionen zu generieren, die Daten auf Basis von String Argumenten für die Namen der Komponenten lesen und schreiben können. Wie oben dargelegt, existieren auch Methoden für die Umrechnung von Einheiten (GetValueInUnit and SetValueInUnit).
Die Verwendung der Einheiten-Umrechungs-Methoden setzt voraus, dass die Integer-Codes von EBSILON für die verschiedenen Einheiten bekannt sind. Eine Liste dieser Codes ist in der EpUnit-Aufzählung als Teil von EbsOpen aufgelistet. Die folgende Abbildung zeigt einen Teil der 493 verfügbaren Einheiten-Codes:
Sie können auch die Code-Vervollständigungs-Funktion in Ihrem IDE verwenden, um den richtigen Code für die entsprechende Einheit zu bestimmen. Dies kann durch eintippen von EbsOpen.epUnit. in einer Subroutine oder Funktion geschehen, um die Liste von möglichen Werten zu erhalten. (Vorgehensweise in VBA):
Das EBSILON Help File hat ebenso eine Liste von Einheiten-Codes: List with dimensions and units
HINWEIS: Der EbsOpen.epUnit Teil kann entfallen, wenn der Text für den Code der gewünschten Einheit bekannt ist (z.B.: nur die Verwendung von epUNIT_lb_s für lb/sec). Für dimensionslose Parameter, wie Komponenten oder Methoden, verwenden Sie epUNIT_NONE beim Einlesen mittels ReadVar, und epUNIT_INTEGRAL bei der Verwendung von WriteVar-Funktionen im Beispiel EbsOpenDemo.xlsm. Um den richtigen Einheiten-Code zu bestimmen, kann es notwendig sein auf das EbsValue-Item der Variable, die gelesen oder geschrieben werden soll, zu schauen. Die Nutzung des falschen Einheiten-Codes kann zu Fehlern führen. Kontrollieren Sie die Rückgabewerte aus der ReadVar- und WriteVar-Funktion um zu testen, dass diese erfolgreich war. Bei Fehlern gibt ReadVar den String “NaN” und WriteVar "False" zurück.
Im Anschluss werden einige gängige Beispiele für die Verwendung der ReadVar-Funktionen dargestellt. Die Profil-, Komponenten-, Leitungs- und Makro-Namen müssen entsprechend geändert werden, falls der Code kopiert wird:
Lese die Enthalpie einer Leitung in Btu/lb im Design-Profil:
ReadVar(model, "Design", "H2O_DAMPF", "H", EbsOpen.EpUnit.epUNIT_btu_lb)
Lese die Leistung einer Elektroleitung in kW:
ReadVar(model, "Design", "Net_Electric", "Q", epUNIT_kW)
Lese einen Vorgabewert einer Komponente in psia:
ReadVar(model, "Design", "Piping", "DP", epUNIT_psia)
Lese den Wert eines Flag-Vorgabewertes einer Komponente - einheitenlos:
ReadVar(model, "Design", "Piping", "FMODE", epUNIT_NONE)
Lese den Werte einer Leistung von einer Logikleitung in kW:
ReadVar(model, "Design", "HEAT", "Q", epUNIT_kW)
Lese den Wert eines Vorgabewertes einer Makro-Objektes:
ReadVar(model, "Design", "GSCND_1", "POPER", EbsOpen.EpUnit.epUNIT_psia)
Lese den Vorgabewert einer Komponente innerhalb des Makro-Objektes mit dem Namen GSCND_1. Beachten sie dei Syntax, um Bauteile innerhalb eines Makros anzusprechen: MaKroName::KomponentenName
ReadVar(model, "OD", "GSCND_1::Measuring_point_1", "MEASM", epUNIT_lb_h)
Lese den Ergebniswert einer Logikleitung innerhalb des Makro-Objektes mit dem Namen GSCND_1:
ReadVar(model, "Design", "GSCND_1::Logic_1", "Q", EbsOpen.EpUnit.epUNIT_kW)
WriteVar Funktionen Beispiel-Codes:
Schreibe den Werte eines Vorgabewertes einer Komponente 1 in °C und and speichere die Änderung im Modell auf der Festplatte:
WriteVar(model, "Design", "Boundary_value", "T", epUNIT_GrdC, 454.444444, True)
Schreibe den Werte eines Flag-Vorgabewertes einer Komponente 46 und and speichere die Änderung im Modell nicht auf der Festplatte:
WriteVar(model, "Design", "MPoint1", "FTYP", EbsOpen.epUNIT_INTEGRAL, 34, False)
HINWEIS: Wenn das Modell, in dem mit der Funktion WriteVar geschrieben wird, in einer anderen Instanz von EBSILON geöffnet ist, werden die Daten des Modells nicht dauerhaft geändert, wenn der Parameter SaveFlg auf True gesetzt wird. Wenn SaveFlg auf False gesetzt ist oder das Modell bereits geöffnet ist, wenn SaveFlg auf True gesetzt wird, ändert die WriteVar-Funktion nur eine temporäre Kopie des im Speicher geladenen Modells und die Änderung ist nicht dauerhaft.
Benutzerdefinierte Modell- und Profil-Variablen (Extras Model-Options… Profile-Variables und Model-Variables) werden anders behandelt als Komponenten, Leitungen und Makros. Die Beispiel Funktionen ReadVar und WriteVar können nicht zum Lesen und Schreiben von Modell- und Profil-Variablen verwendet werden, da diese nicht in der Objektklasse beinhaltet sind. Modell- und Profil-Variablen sind in der Konfigurationsklasse ihrer zugewiesenen Objekte enthalten. Das unten angefügte VBA Codestück zeigt das Lesen und Schreiben von Modell- und Profil-Variablen:
Modell- und Profil-Variablen haben keine Einheiten und können Boolean, Char, Integer, Real oder String Typen sein.
Hinweis :
Dem Interface EbsOpen.Model wurde die
- Methode SaveCopyAs hinzugefügt, bei der eine Kopie des Modells unter einem anderen Namen gespeichert wird, das aktuelle Modell aber beibehalten wird.
- Methoden SimulateNew und ValidateNew hinzugefügt. Im Unterschied zu Simulate und Validate erfordern diese NICHT den CalculationErrors-parameter
(erleichtert den Aufruf von .net-basierten Sprachen).