EbsScript bietet einen direkten Zugriff auf alle Größen in der Schaltung. Dies können sein:
Für den EbsScript-Compiler ist dieser Zugriff durch einen speziellen Datentyp, genannt EBSVAR, realisiert. Die oben erwähnten Aussagen sind EBSVAR Konstanten. Sie benötigen in Ihrem Script Code keine Anführungszeichen (””), um auf eine EBSVAR Konstante zuzugreifen. Beachten Sie den Unterschied zwischen
print (Steam_generator.P2N); // EBSVAR Konstante, Ausgabe: 120
print ("Steam_generator.P2N"); // STRING Konstante, Ausgabe: Steam_generator.P2N
Im EBSILON Performance Optimization System (EPOS) kann dieser EBSVAR Typ als ein grundlegender Datentyp in mehreren Anwendungen benutzt werden, insbesondere für die Durchführung von What-If -Rechnungen und Optimierungen. Ehe eine EBSVAR Variable verwendet werden kann, muss sie einer Größe der Schaltung zugeordnet ("attached") sein.
Beispiel: In unserer Beispielschaltung ”block750.ebs” (auf der EBSILON-CD verfügbar) wollen wir den isentropen Wirkungsgrad der MD-Turbinen, genannt MDT_1, , MDT_6, abändern in 0.87. Unter Verwendung einer EBSVAR-Variablen können Sie dies mit solch einem Script durchführen:
var
i:integer;
s:string;
ev:ebsvar;
begin
for i:=1 to 6 do begin
s:=printToString ("MDT_",i,".ETAIN");
getEbsvar(ev, s);
ev:=0.87;
end;
end;
In den Funktionsaufrufen können Sie Variablen anstelle von Konstanten benutzen. In diesem Falle bleibt der Wert der Variablen unverändert. Aber es ist nicht möglich, eine Konstante anstelle einer Variablen zu verwenden, da ein Fehler auftritt, wenn die Funktion versuchen würde, die Konstante zu modifizieren.
Genau wie man im Eigenschaftenfenster beim Spezifikationswert einen Ausdruck eintragen kann, der dann vor der Berechnung ausgewertet wird, kann auch im EbsScript einer EBSVAR-Variablen ein Ausdruck als String zugewiesen werden. Man sollte sich allerdings dessen bewusst sein, was wann ausgewertet wird:
Die Anweisung
NDT_2B.ETAIN:=NDT_2A.ETAIN;
trägt bei NDT_2B.ETAIN einen Zahlenwert ein, nämlich denselben Wert, der bei Ausführung der EbsScript-Zeile bei NDT_2A.ETAIN stand. Ändert man später NDT_2A.ETAIN, wirkt sich das auf NDT_2B.ETAIN nicht aus.
Die Anweisung
NDT_2B.ETAIN:="NDT_2A.ETAIN";
trägt bei NDT_2B.ETAIN einen Text ein, nämlich "NDT_2A.ETAIN". Was bei Ausführung der EbsScript-Zeile bei NDT_2A.ETAIN stand, spielt überhaupt keine Rolle, da erst vor Aufruf des Ebsilon-Rechenkerns der Ausdruck ausgewertet wird. Ändert man NDT_2A.ETAIN, wird auch NDT_2B mit dem geänderten Wert berechnet.
Vorgabewertefunktionen:
Name |
Zweck |
Argumente |
Rückgabewert |
Beispiel |
Attach
|
Ordnet der EBSVAR-Variable die Größe in der Schaltung zu, die durch die EBSVAR- Konstante spezifiziert ist |
1: EBSVAR: Variable |
keiner |
attach (ev, Steam_generator.P2N ); |
buToUnit |
rechnet einen Wert, gegeben in British-Units, in die angegebene Einheit um |
1: REAL: Wert 2: STRING: Einheit des Ausgangwertes |
REAL: in die Ausgabe-Einheit umgerechneter Eingangswert |
var rBu,rUnit:real; strBu,strUnit:string; begin strBu:="psia"; strUnit:="mbar"; rBu:=100.0; rUnit:=buToUnit(100.00, println (rBu," ",strBu, end. |
CalcNCV |
Berechnet den unteren Heizwert gemäß der Zusammensetzung des spezifizierten Objekts |
1: STRING: Konstante: Objektname (Linie oder Komponente 1/33) 2: REAL: Variable: berechneter Heizwert |
BOOLEAN: |
b:=calcNCV ("Coal", r ); |
Clear |
Löscht den Wert für die spezifizierte Größe. Im Designprofil ist der Wert nach ”clear” leer. In einem Unterprofil wird der vom Elternprofil vererbte Wert wiederhergestellt. |
1: EBSVAR Konstante |
Keiner |
clear (Boundary_value.M); |
ClearInSubprofiles |
löscht Daten eines EbsVars in allen (echten) Unterprofilen |
1: EBSVAR constant |
None |
clearInSubprofiles (Boundary_value.M); |
Detach
|
Die Verbindung zwischen der EBSVAR- Variablen und dem Objekt in der Schaltung wird gelöst. |
1: EBSVAR: Die frei zu gebende EBSVAR Variable |
Eine EBSVAR Variable, die dem Objekt zugeordnet ist, das zuvor der anderen EBSVAR Variablen zugeordnet war. |
attach (ev, Steam_generator.P2N ); ev1:=detach (ev); danach ist ev1 dem Steam_generator.P2N zugeordnet |
GetAdaption Polynomial |
Ermittelt des Anpassungspolynom zu einer Komponente |
1: STRING: Name der Komponente |
STRING: das gesuchte Polynom |
strPolynomial:= getAdaptionPolynomial ("Turbine_1"); |
GetAlias |
Vorgabewert-Alias (falls vorhanden, sonst ““) |
1: EBSVAR: The EBSVAR variable |
STRING: the alias to the EBSVAR variable |
strAlias:=getAlias(evar); |
GetCompAtPipe |
Liefert die an einem Leitungsende angeschlossene Komponente. |
1: EBSPIPE: Leitung 2: INTEGER: Anschluss |
EBSCOMP: die gesuchte Komponente |
getCompAtPipe( ePipe, 1 ) |
GetCompViaLink |
Liefert die Komponente, die am anderen Ende der Leitung angeschlossen ist, die mit dem spezifizierten Anschluss der Komponente verbunden ist. |
1: EBSCOMP: Komponente 2: INTEGER: Nummer des Anschlusses |
EBSCOMP: die gesuchte Komponente |
getCompViaLink ( eSteamGenerator, i ) |
GetDescription |
Liefert einen Beschreibungstext zu einem Objekt. |
1: STRING: Name des Objekts 2: INTEGER: Typ des Beschreibungstextes: |
STRING: Gesuchter Beschreibungstext |
var begin |
GetEbsObjValue |
Diese Funktion ermöglicht es, zum Namen eines Ebsilon-Objekts direkt den Wert dieses Objekts zu ermitteln. Optional kann auch ein Text angegeben werden, der geliefert werden soll, wenn zum angegebenen Namen kein Objekt existiert. Wenn das Objekt existiert, aber leer ist, liefert diese Funktion einen leeren String. Diese Funktion ist hauptsächlich in Textfeldern und Filtern von Nutzen. |
1: STRING: Objekt-Descriptor 2: STRING: Text, der im Fehlerfall übergeben wird. |
STRING: Name bzw. Wert des gesuchten Objektes |
Für Beispiel "Block750.ebs": println( getEbsObjValue ( "Steam_generator.T4", "Error")); println( getEbsObjValue ( "Steam_generator._3", "Error")); println( getEbsObjValue ( "Steam_generator._0", "Error")); |
GetEbsVar
|
Liefert im 1. Parameter das ebsclass-Object zu dem durch den String im 2. Parameter bezeichneten Objekt - Kontext beachten! |
1: EBSCLASS: Variable |
BOOLEAN: |
getEbsVar (ev, ”Boundary_value.M”); getEbsVar (ec, ”Boundary_value”); |
GetEbsVarDescription
|
Liefert Beschreibungstext zum Vorgabewert/Ergebniswert |
1: EBSCLASS: Variable |
STRING: Gesuchter Beschreibungstext |
// Komponente 6 namens Turbine im Modell println(getEbsVarDescription(Turbine.FP1N)); Ausgabe : Vorgabe Eintrittsdruck |
GetEbsVarIdentifier
|
Liefert Name des Objekts (Name des Vorgabewerts/Ergebniswerts, z.B. “FMODE“) (wie im Eigenschafts-Dialog verwendet wird)
|
1: EBSCLASS: Variable (Name des Objekts) |
STRING: Gesuchter Beschreibungstext |
// Komponente 6 namens Turbine im Modell println(getEbsVarIdentifier (Turbine.FP1N)); Ausgabe: FP1N |
GetEbsVarValueAsText
|
Liefert Texte für Flags (wie sie im Eigenschafts-Dialog in den Kombo-Boxen verwendet werden)
|
1: EBSCLASS: Variable |
STRING: Gesuchter Beschreibungstext |
// Komponente 6 namens Turbine im Modell // Turbine.FP1N hat Wert 0 („P1 aus P1NSET berechnet (aus Stodola-Gesetz)“) println(getEbsVarValueAsText (Turbine.FP1N)); Ausgabe : P1 aus P1NSET berechnet (aus Stodola-Gesetz) |
GetExpression |
Liefert, falls bei einem Vorgabewert ein Ausdruck eingetragen ist, diesen Ausdruck als Text (als String) |
1: EBSVAR: zu betrachtender Vorgabewert 2: STRING: gewünschter Ausdruck |
BOOLEAN: |
var str:string; begin if (getExpression (Start_value.M, begin println (str); end; end. |
GetLinetypeAtLink |
Liefert den Leitungstyp zu spezifizierten Anschluss einer Komponente Bauteile vom Typ 33, 45, 46, 105 und 147: falls das Bauteil auf einer Leitung andockt und für "linkNo" der Wert 1 angegeben wird, dann wird der Typ der Leitung zurückgegeben |
1: EBSCOMP: betrachtete Komponente 2: INTEGER: Nummer des Anschlusses |
LINETYPEENUM |
var lt:linetypeenum; begin lt:=getLinetypeAtLink println (lt); end. |
GetLogicObj |
Liefert ein auf einer Leitung platziertes Objekt (Messstelle, Startwert, Wertekreuz). Welches Objekt geliefert wird, wird durch einen Index bestimmt. |
1: EPSPIPE: betrachtete Leitung 2: INTEGER: Index |
EBSOBJECT |
eObject:=getLogicObj (ePipe, i ); |
GetLogicObjCount |
Liefert die Zahl der auf einer Leitung platzierten Objekte (Messstellen, Startwerte, Wertekreuze). |
1: EBSPIPE: betrachtete Leitung |
INTEGER |
n:=getLogicObjCount (ePipe); |
GetNameAbsolute
|
Gibt den vollständigen Namen des Objekts inklusive Pfad und führenden „::“. Z.B. „::Macro_object::Turbine_1.ETAI“ |
1: EBSCLASS: Variable (Name des Objekts) |
|
|
GetName
|
Ermittelt den Namen des Objektes, das der spezifizierten EBSVAR-Variablen zugeordnet ist. |
1: EBSVAR: Konstante 2: STRING: Variable |
BOOLEAN: |
getName (ev, s); |
getObjectSessionId (siehe Hinweis unten)
|
ab Release 11: Eindeutige Integer-Id zu Bauteil/Leitung |
1: EBSOBJECT: Objectname
|
INTEGER: Id;dies ist ein interner Wert, der ausschließlich zur Übergabe in fromObjectSessionId bestimmt ist |
siehe Komponentenbeispiel „Component_93.ebs“ im Bauteil „Kernel_Scripting_9“) |
fromObjectSessionId (siehe Hinweis unten)
|
ab Release 11: Umkehr-Funktion zu getObjectID |
1: INTEGER: ID
|
EBSOBJECT: Objekt-Referenz, die durch ID identifiziert wurde |
siehe Komponentenbeispiel „Component_93.ebs“ im Bauteil „Kernel_Scripting_9“) |
GetPipeAtLink |
Liefert die am spezifizierten Anschluss einer Komponente angeschlossene Leitung |
1: EBSCOMP: 2: INTEGER: Nummer des Anschlusses |
EBSPIPE |
ePipe:= getPipeAtLink(eComp, i ); |
GetPipeAtLogpipe |
Liefert die am Ende einer Logikleitung angeschlossene Leitung |
1: EBSPIPE: 2: INTEGER: Anschluss |
EBSPIPE |
ePipe:= getPipeAtLogpipe (eLogPipe,1); |
GetRuntimeClass |
Liefert den Datentyp eines Objekts als Text |
1: EBSCLASS |
STRING |
print (eObject," is an ", getruntimeclass (eObject)'); |
GetSpecs |
Liefert zu einer Komponente ihre Vorgabe- oder Ergebniswerte bzw. zu einer Leitung die thermodynamischen Leitungsgrößen oder die Zusammensetzungsgrößen |
1: ebsData: zu untersuchendes Ebsilon-Objekt (Komponente oder Leitung) 2: array of EBSVAR: Array mit den gewünschten Werten 3: INTEGER: Länge des Arrays 4: BOOLEAN: |
INTEGER: Anzahl der gelieferten Werte |
var i,n:integer; are:array[1..30] of ebsvar; strName:string; begin n:=getSpecs(Turbine, are, 30, false ); for i:=1 to n do begin if (getName (are[i], strName)) then begin println (strName," ",are[i]); end; end; end. |
GetSpecsResults |
Wie getSpecs, aber unter Verwendung von dynamischen Arrays |
1: ebsData: zu untersuchendes Ebsilon-Objekt (Komponente oder Leitung) 2: BOOLEAN: |
array of EBSVAR |
var i,n:integer; are:array of ebsvar; strName:string; begin are:=getSpecsResults(Turbine, false); n:=length(are); for i:=0 to n-1 do begin if (getName (are[i], strName)) then begin println (strName," ",are[i]); end; end; end. |
HasExpression |
Stellt fest, ob ein Vorgabewert ein Ausdruck ist. |
1: EBSVAR: Zu untersuchender Vorgabewert |
BOOLEAN: false: sonst |
var str:string; begin if (hasExpression(Start_value.M)) then begin if (getExpression(Start_value.M, str)) begin println (str); end; end; end. |
ImperialToUnit |
Einheitenumrechnung: Imperial-Standard-Einheit in vorgegebene Einheit |
1: REAL: der neu zu berechnende Wert 2: STRING: die Einheit, in die umgerechnet werden soll |
REAL: umgerechneter Wert |
r := imperialToUnit(2.0 , "bar"); |
IsClear |
Liefert true, falls Objekt im aktuellen Profil keine Daten überschreibt (also die eines darüber liegenden Profils nutzt) |
1: EBSPROFILED: Konstantes Objekt vom Typ abgeleitet vom Typ EBSPROFILED (z. B. EBSVAR) |
BOOLEAN: true, wenn das Objekt die Daten im aktuellen Profil nicht überschreibt |
var evar:ebsvar; |
IsAttached
|
Prüft, ob eine EBSCLASS-Variable einem Objekt in der Schaltung zugeordnet ist. |
1: EBSCLASS: Konstante |
BOOLEAN: |
b = isAttached (ev); b:= isAttached (Boundary_value.M); ist immer ”true” |
isEmpty |
Prüft, ob ein Wert leer ist. |
1: EBSVAR: Konstante |
true, wenn EBSVAR leer ist. |
b:= isEmpty (Boundary_value.M); |
isKindOf |
Prüft, ob ein Objekt einer bestimmten Klasse angehört. |
1: EBSCLASS: zu untersuchendes Objekt 2: STRING: Name der Klasse, auf die geprüft werden soll |
BOOLEAN: |
var obj:ebsobject; begin obj:=Turbine; if (isKindOf(obj, "ebscomp6")) then begin println (obj, " is a turbine"); end; end; |
isNull |
Prüft, ob eine Referenz keinem Objekt zugeordnet ist |
1: EBSCLASS: zu untersuchendes Objekt |
BOOLEAN: |
b:= isNull (eComp); |
loadLibValues |
Ersetzt alle Spezifikationswerte der spezifizierten Komponente innerhalb des aktuellen Profils durch die Daten aus der Standardwerte Datenbank. |
1: STRING: Komponentenname 2: STRING: (optional) Typname der Zeile der Komponententabelle innerhalb der Datenbank. Der Standardwert lautet ”standard”. 3: BOOLEAN: |
BOOLEAN: false |
loadLibValues ("Steam_generator"); loadLibValues ("Boundary_value","Anthrazit-Ruhr"); |
refsEqual |
Prüft, ob zwei Referenzen auf das gleiche Objekt zeigen. |
1: EBSCLASS: 1. Referenz 2: EBSCLASS: 2. Referenz |
BOOLEAN: |
b:= refsequal (eTurbine, eComp); |
setAdaption Polynomial |
Setzt das Anpassungspolynom einer Komponente |
1: STRING: Name der Komponente 2: STRING: Polynom |
BOOLEAN: false (Gibt nun einen leeren String zurück, falls der angegebene Komponentenname nicht gefunden wird (anstatt das laufende EbsScript zu bebenden)) |
setAdaptionPolynomial ("Turbine_1", "1+0.0001*M1") |
setDescription |
Setzt einen Beschreibungstext zu einem Objekt. |
1: STRING: Name des Objekts 2: INTEGER: Typ des Beschreibungstextes: 3: STRING: zu setzender Beschreibungstext |
- |
setDescription( "3RA21T007", 1, "Neue Beschreibung" ); |
setEmpty |
Setzt den Wert für das spezifizierte Objekt auf ”leer”. Im Design-Profil wird dies auch durch die Funktion "clear" gemacht. In Unterprofilen wird der Wert aber auch dann auf "leer" gesetzt, wenn im Elternprofil ein Wert vorhanden ist. |
1: EBSVAR Konstante |
- |
setEmpty (Boundary_value.M); |
siToUnit |
rechnet einen Wert, gegeben in Ebsilon-Standardeinheiten (SI-Einheiten), in die angegebene Einheit um |
1: REAL: Eingangswert 2: STRING: Einheit des Ausgangswertes |
REAL: in die Ausgabe-Einheit umgerechneter Eingangswert |
var rsi,rUnit:real; strsi,strUnit:string; begin strsi:="bar"; strUnit:="mbar"; rsi:=100.0; rUnit:=siToUnit(100.00, strUnit); println (rsi," ",strsi," = ",rUnit," ",strUnit); end. |
transferAllResults |
Übernimmt alle Ergebnisse (Komponenten- und Leitungswerte) aus einem Profil in das aktuelle Profil. Dies ist insbesondere für die Übergabe von Ergebnisdaten, die in einem Unterprofil berechnet wurden, an EposArchive von Nutzen. Diese Funktion kopiert ab Release 10 nun wirklich alle Ergebnisse (Komponenten und Leitungen, auch leere Felder ). |
INTEGER: Id des Profils, aus dem die Werte entnommen werden |
true, wenn o.k. |
transferAllResults (4); |
transferValResults |
Übernimmt die RESULT-Werte aller Messstellen aus einem Profil und trägt sie als MEASM-Werte in das aktuelle Profil. Dies ist insbesondere hilfreich, um mit validierten Werten What-if Simulationen durchzuführen. |
INTEGER: Id des Profils, aus dem die Werte entnommen werden |
true, wenn o.k. |
transferValResults (4); |
unitToBu |
rechnet einen Wert von der angegebenen Einheit in British Units um |
1: REAL: Eingangswert 2: STRING: Einheit des Eingangswerts |
REAL: in die "British-Units" umgerechneter Eingangswert |
var rBu,rUnit:real; strBu,strUnit:string; begin strBu:="psia"; strUnit:="mbar"; rUnit:=100.0; rBu:=unitToBu(100.00, strUnit); println (rUnit," ",strUnit," = ",rBu," ",strBu); end. |
unitToImperial |
Einheitenumrechnung: vorgegebene Einheit in Imperial-Standard-Einheit |
1: REAL: Eingangswert 2: STRING: Einheit des Eingangswerts |
REAL: Eingangswert umgerechnet in die zöllige Standardeinheit |
r:=unitToImperial(1.0,"bar"); |
unitToSi |
rechnet einen Wert von der angegebenen Einheit in die Ebsilon-Standardeinheiten (SI-Einheiten) um |
1: REAL: Eingangswert 2: STRING: Einheit des Eingangswerts |
REAL: in die Ebsilon-Standard-Einheit umgerechneter Eingangswert |
uses @units; var rsi,rUnit:real; strsi,strUnit:string; u,uDef:UNIT_Enum; d:DIM_Enum; begin strUnit:="mbar"; rUnit:=100.0; rsi:=unitToSi(100.00, strUnit); u:=unitsGetUnitFromText (strUnit); d:=unitsGetDimFromUnit (u); uDef:=unitsGetDefaultUnit (d); strsi:=unitsGetTextFromUnit (uDef); println (rUnit," ",strUnit," = ",rsi," ",strsi); end. |
unitToUSC |
Einheitenumrechnung: vorgegebene Einheit in US-Cust.-Standard-Einheit |
1: REAL: Eingangswert 2: STRING: Einheit des Eingangswerts |
REAL: Eingangswert umgerechnet in die US Customary Standardeinheit |
r:=unitToUSC(1.0,"bar"); |
uscToUnit |
Einheitenumrechnung: US-Cust.-Standard-Einheit in vorgegebene Einheit |
1: REAL: der neu zu berechnende Wert 2: STRING: die Einheit, in die umgerechnet werden soll |
REAL: umgerechneter Wert |
r:=uscToUnit(1.0,"bar"); |
Hinweis: Die beiden Funktionen
- getObjectSessionId
- fromObjectSessionId
werden im Zusammenhang mit dem Aufruf „propertyCallId“ beim Absetzen von Gleichungen im Bauteil 93 benötigt (siehe Komponentenbeispiel „Component_93.ebs“ im Bauteil „Kernel_Scripting_9“)