EbsScript 提供了对循环中所有量的直接访问。可以是:
对于 EbsScript 编译器来说,这种访问是通过一种叫做 EBSVAR 的特殊数据类型实现的。上面提到的表达式就是 EBSVAR 常量。在脚本代码中,不需要引号(" ")来访问EBSVAR 常量。请注意以下的区别
print (Steam_generator.P2N); // EBSVAR constant, output: 120print ("Steam_generator.P2N"); // STRING constant, output: Steam_generator.P2N
在 Ebsilon 性能优化系统(EPOS)中,这种类型的 EBSVAR 可以作为基本数据类型用于若干操作中,特别是用于执行假设模拟和优化。在使用 EBSVAR 变量之前,它必须分配("附加")给循环中的一个量。
例如:在示例循环"block750.ebs"(可在 Ebsilon 光盘中找到)中,如果使用 EBSVAR 变量把名为 MDT_1,&, MDT_6 的汽轮机等熵效率改为 0.87,可以用这样一个脚本来完成:
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;
在函数调用中,可以使用变量而不是常量。在这种情况下,变量的值保持不变。但不能用常量代替变量,因为如果函数试图修改常量,就会出现错误。
正如可以在属性窗口中为一个规格值输入表达式,然后在计算前对其进行评估一样,也可以在 EbsScript 中把表达式作为字符串分配给 EBSVAR 变量。然而,需要注意什么会被评估:
指令
NDT_2B.ETAIN:=NDT_2A.ETAIN;
在 NDT_2B.ETAIN 处输入一个数值,即执行 EbsScript 时在 NDT_2A.ETAIN 处的相同数值。如果 NDT_2A.ETAIN 后来被改变,这对 NDT_2B.ETAIN 没有影响。
指令
NDT_2B.ETAIN:="NDT_2A.ETAIN";
为 NDT_2B.ETAIN 输入一个文本,即"NDT_2A.ETAIN"。当执行 EbsScript 时,NDT_2A.ETAIN 的情况完全不重要,因为表达式只是在调用 Ebsilon 计算内核之前被评估。如果NDT_2A.ETAIN 被改变,NDT_2B 也会用改变后的数值进行计算。
规格值函数:
名称 |
目的 |
参数 |
返回值 |
例子 |
|
Attach
|
将一个 EBSVAR 变量附加到循环中的一个量上,由一个 EBSVAR 常数指定。 |
1: EBSVAR 变量 |
无 |
attach (ev, Steam_generator.P2N ); |
|
buToUnit |
将一个数值从英国单位转换为指定单位 |
1: REAL: 值 2: STRING: 输出值的单位 |
REAL: 输入值转换为输出单位的值 |
var rBu,rUnit:real; strBu,strUnit:string; begin strBu:="psia"; strUnit:="mbar"; rBu:=100.0; rUnit:=buToUnit(100.00, println (rBu," ",strBu, end. |
|
CalcNCV |
根据指定对象的组份计算净热值 |
1: STRING 常数: 对象名称(管道或组件 1 / 33) 2: REAL 变量: 计算热值 |
BOOLEAN: |
b:=calcNCV ("Coal", r ); |
|
Clear |
删除指定量的值。在设计工况中,"清除"后的值是空的。在子工况中,恢复父工况继承值。 |
1: EBSVAR 常数 |
无 |
clear (Boundary_value.M); |
|
ClearInSubprofiles |
第 11 版: 删除所有(真实)子工况中的指定量的值。 |
1: EBSVAR 常数 |
无 |
clearInSubprofiles (Boundary_value.M); |
|
Detach
|
EBSVAR 变量和循环中的对象之间的联系被脱离。 |
1: EBSVAR: 要分离的 EBSVAR 变量 |
一个分配给对象的 EBSVAR 变量,该变量先前已分配给其他 EBSVAR 变量。 |
attach (ev, Steam_generator.P2N ); ev1:=detach (ev); 此后,ev1 被分配到Steam_generator.P2N 上。 |
|
fromObjectSessionId (见以下注释) |
第 11 版: getObjectID 的反函数 | 1: INTEGER: ID | EBSOBJECT: 由 ID 识别的对象参考 | 见组件示例"Component_93.ebs"中的组件"Kernel_Scripting_9" | |
GetAdaption Polynomial |
检索一个对象的适配多项式 |
1: STRING: 组件的名称 |
STRING: 发现的多项式 |
strPolynomial:= getAdaptionPolynomial ("Turbine_1"); |
|
GetAlias |
第 11 版: 返回规格值的假名 | 1: EBSVAR: EBSVAR 变量 | STRING: EBSVAR 变量的假名 | strAlias:=getAlias(evar); | |
GetEbsVarDescription |
返回规格值的描述 | 1: EBSVAR: EBSVAR 变量 | STRING: 变量的描述文本 | strDesc:=getEbsVarDescription(evar); | |
GetEbsVarIdentifier |
返回规格值的名称 | 1: EBSVAR: EBSVAR 变量 | STRING: 变量的名称 | strName:=getEbsVarIdentifier(evar); | |
GetEbsVarValueAsText |
返回分配给规格值的标志值的文本描述 | 1: EBSVAR: EBSVAR 变量 | STRING: 对分配给 EBSVAR 变量的标志值的文本描述 | strFlagText:=getEbsVarValueAsText(evar); | |
GetObjectSessionID (见以下注释) |
第 11 版: 组件 / 管道的明确整数-Id | 1: EBSOBJECT:对象名称 | INTEGER: Id; 这是一个内部值,只用于fromObjectSessionId。 | 见组件示例"Component_93.ebs"中的组件"Kernel_Scripting_9" | |
GetCompAtPipe |
返回连接到管道一端的组件。 |
1: EBSPIPE: 管道 2: INTEGER: 连接 |
EBSCOMP: 发现的组件 |
getCompAtPipe( ePipe, 1 ) |
|
GetCompViaLink |
返回连接在管道另一端的组件,连接到组件的指定连接处。 |
1: EBSCOMP: 组件 2: INTEGER: 连接的数量 |
EBSCOMP: 发现的组件 |
getCompViaLink ( eSteamGenerator, i ) |
|
GetDescription |
返回一个对象的描述性文本。 |
1: STRING: 对象的名称 2: INTEGER: 描述性文本的类型: |
STRING: 发现的描述性文本 |
var begin |
|
getEbsObjValue |
这个函数可以用来直接从一个对象的名称中确定它的值。可以选择指定一个字符串,当对象不存在时,将返回该字符串。如果对象存在但为空,该函数返回一个空字符串。 这个函数主要在文本字段和过滤器中很有帮助。 |
1: STRING: 对象-描述符 2: STRING: 字符串,在出错的情况下返回 |
STRING: 名称或值,取决于对象描述符 |
例如 "Block750.ebs": println( getEbsObjValue ( "Steam_generator.T4", "Error")); println( getEbsObjValue ( "Steam_generator._3", "Error")); println( getEbsObjValue ( "Steam_generator._0", "Error")); |
|
GetEbsvar
|
将字符串(第2个参数)标识的对象分配给一个 ebsclass 变量(第1个参数)--要考虑到上下文! |
1: EBSCLASS: 变量 |
BOOLEAN: |
getEbsvar (ev,"Boundary_value.M"); getEbsvar (ec,"Boundary_value"); |
|
GetEbsvarDescription
|
第 11 版: 为规格 / 结果值提供描述文本(在属性对话框中使用) |
1: EBSCLASS: 变量 |
STRING: 想要的描述文本
|
// 模型中名为 turbien 的组件 6 println (getEbsVarDescription (Turbine.FP1N)); 输出:进口压力处理 |
|
GetEbsvarIdentifier
|
第 11 版: 对象的名称(规格 / 结果值的名称,如"FMODE")。 |
1: EBSCLASS: 变量(对象的名称) |
STRING: 想要的描述文本 |
// 模型中名为 turbien 的组件 6 println (getEbsVarIdentifier (Turbine.FP1N)); |
|
GetEbsvarValueAsText
|
第 11 版: 标志的文本
|
1: EBSCLASS: 变量 |
STRING: 想要的描述文本标志 |
// 模型中名为 turbien 的组件 6 // Turbine.FP1N 值为 0 ("P1 由 P1NSET 计算 (根据 Stodola 法则)") |
|
GetExpression |
如果有一个规格值的表达式,这个函数将这个表达式作为一个字符串检索 |
1: EBSVAR: 考虑的规格值 2: STRING: 要求的表达式 |
BOOLEAN: |
var str:string; begin if (getExpression (Start_value.M, begin println (str); end; end. |
|
GetLinetypeAtLink |
返回一个组件的特定连接的连接类型(管道类型) |
1: EBSCOMP: 考虑的组件 2: INTEGER: 要求的引脚(连接)的数量 |
LINETYPEENUM |
var lt:linetypeenum; begin lt:=getLinetypeAtLink println (lt); end. |
|
GetLogicObj |
返回一个放置在管道上的对象(测量点、起始值、数值十字叉)。返回的对象是由索引决定的。 |
1: EPSPIPE: 考虑的管道 2: INTEGER: 索引 |
EBSOBJECT |
eObject:=getLogicObj (ePipe, i ); |
|
GetLogicObjCount |
返回放置在管道上的对象的数量(测量点、起始值、数值十字叉点)。 |
1: EBSPIPE: 考虑的管道 |
INTEGER |
n:=getLogicObjCount (ePipe); |
|
GetNameAbsolute
|
提供对象的完整名称,包括路径和前面的"::"。例如:“::Macro_object::Turbine_1.ETAI“ |
1: 1: EBSCLASS: 变量(对象名称) |
|
|
|
GetName
|
返回分配给指定 EBSVAR 变量的对象的名称。 |
1: EBSVAR: 常数 2: STRING: 变量对象描述符 |
BOOLEAN: |
getName (ev, s); |
|
GetPipeAtLink |
返回连接到一个组件的指定连接的管道。 |
1: EBSCOMP: 2: INTEGER: 连接的数量 |
EBSPIPE |
ePipe:= getPipeAtLink(eComp, i ); |
|
GetPipeAtLogpipe |
返回连接到一个逻辑管道末端的管道。 |
1: EBSPIPE: 2: INTEGER: 连接 |
EBSPIPE |
ePipe:= getPipeAtLogpipe (eLogPipe,1); |
|
GetRuntimeClass |
返回一个对象的数据类型为文本 |
1: EBSCLASS: |
STRING |
print (eObject," is an ", getruntimeclass (eObject)'); |
|
GetSpecs |
对于一个组件,该函数返回规格值或结果值。 对于一个管道,此函数返回主管道数据或组份数据。 |
1: ebsData: 要考虑的 Ebsilon 对象(组件或管道) 2: EBSVAR 数组: 带请求值的数组 3: INTEGER: 带请求值的数组 4: BOOLEAN: |
INTEGER: 提供值的数量 |
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 |
与 getSpecs 类似,但使用动态数组。 |
1: ebsData: 要考虑的 Ebsilon 对象(组件或管道)。 2: BOOLEAN: |
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 |
检查一个规格值是否是一个表达式 |
1: EBSVAR: 要考虑的规格值 |
BOOLEAN: |
var str:string; begin if (hasExpression(Start_value.M)) then begin if (getExpression(Start_value.M, str)) begin println (str); end; end; end. |
|
ImperialToUnit |
将指定的值从英制单位转换成指定单位 |
1: REAL: 要重新计算的值 2: STRING: 要转换的单位 |
REAL: 转换值 | r := imperialToUnit(2.0 , "bar"); | |
IsAttached
|
检查 EBSCLASS 变量是否被附加到循环中的一个对象上。 |
1: EBSCLASS: 常数 |
BOOLEAN: |
b = isAttached (ev); b:= isAttached (Boundary_value.M); 总为 "true" |
|
isClear |
如果指定的对象没有覆盖当前工况中的数据,则返回 true。 | 1: EBSPROFILED: 从 EBSPROFILED 类型派生出来的常量对象(如 EBSVAR) |
BOOLEAN: true, 如果指定的对象没有覆盖当前工况中的数据 |
var evar:ebsvar; b:boolean; begin getebsvar(evar,"Turbine.ETAIN"); b:=isClear( evar ); end; |
|
isEmpty |
检查一个值是否为空。 |
1: EBSVAR: 常数 |
BOOLEAN: |
b:= isEmpty (Boundary_value.M); |
|
isKindOf |
检查一个对象是否属于一个特定的类别 |
1: EBSCLASS: 要考虑的对象 2: STRING: 对象应属于的类的名称 |
BOOLEAN: |
var obj:ebsobject; begin obj:=Turbine; if (isKindOf(obj, "ebscomp6")) then begin println (obj, " is a turbine"); end; end; |
|
isNull |
检查,是否有一个参考没有附加到任何对象上 |
1: EBSCLASS: 要考虑的对象 |
BOOLEAN: |
b:= isNull (eComp); |
|
loadLibValues |
用标准值数据库中的数据替换当前工况中指定组件的所有规格值。 |
1: STRING: 组件名称 2: STRING: (可选):数据库内组件表管道的类型名称。默认值为"标准"。 3: BOOLEAN: |
BOOLEAN: false |
loadLibValues ("Steam_generator"); loadLibValues ("Boundary_value","Anthrazit-Ruhr"); |
|
refsEqual |
检查两个参考是否指向同一个对象。 |
1: EBSCLASS: 1. 参考 2: EBSCLASS: 2. 参考 |
true, 如果两个参考都指向同一个对象 |
b:= refsequal (eTurbine, eComp); |
|
setAdaption Polynomial |
设置一个组件的适配性多项式 |
1: STRING: 组件的名称 2: STRING: 多项式 |
BOOLEAN: false 如果不能找到指定的 compname 组件名称,该函数现在返回一个空字符串(而不是终止运行中的EbsScript) |
setAdaptionPolynomial ("Turbine_1", "1+0.0001*M1") |
|
setDescription |
设置一个对象的描述性文本。 |
1: STRING: 对象的名称 2: INTEGER: 描述性文本的类型: 3: STRING: 要设置的描述文本 |
- |
setDescription( "3RA21T007", 1, "New Description" ); |
|
setEmpty |
将指定对象的值设置为"空"。在设计工况中,这相当于"清除"。在子工况中,即使在父工况中有一个值,子工况中的值也将是"空"。 |
1: EBSVAR 常数 |
- |
setEmpty (Boundary_value.M); |
|
siToUnit |
将一个值从 Ebsilon 标准单位(SI单位)转换为指定单位 |
1: REAL: 输入值 2: STRING: 输出值的单位 |
REAL: EBSILON 标准单位转换为输出单位的值 |
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 |
将所有的结果(组件和管道值)从指定的工况转移到当前工况。这可以用来为在一个子工况中的 EposArchive 给定结果值。 |
1: INTEGER: 要从其中取值的工况的 ID |
BOOLEAN: |
transferAllResults (4); |
|
transferValResults |
转移指定工况中所有测量点的 RESULT 值,并将其作为 MEASM 值输入当前工况中。这有助于用验证校核值进行假设模拟。 |
1: INTEGER: 要从其中取值的工况的 ID |
BOOLEAN: |
transferValResults (4); |
|
unitToBu |
将一个数值从指定的单位转换为英国单位
|
1: REAL: 输入值 2: STRING: 输入值的单位 |
REAL: 把输入值转换为"英国单位" |
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 |
将一个数值从指定单位转换为英制标准单位 |
1: REAL: 输入值 2: STRING: 输入值的单位 |
REAL: 把输入值转换为英制标准单位 |
r:=unitToImperial(1.0,"bar"); | |
unitToSi |
将一个数值从指定单位转换为 Ebsilon 标准单位(SI 单位) |
1: REAL: 输入值 2: STRING: 输入值的单位 |
REAL: 输入值转换为 EBSILON 标准单位 |
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 |
将一个数值从指定的单位转换为美国的标准单位 |
1: REAL: 输入值 2: STRING: 输入值的单位 |
REAL: 输入值转换为美国标准单位 |
r:=unitToUSC(1.0,"bar"); | |
uscToUnit |
将指定的数值从美国标准单位转换成指定单位 |
1: REAL: 要重新计算的值 2: STRING: 要转换的单位 |
REAL: 转换后的数值
|
r:=uscToUnit(1.0,"bar"); |
注释:
以下两个函数
在组件 93 中提供方程时,需要在调用"propertyCallId"的上下文中使用(见组件示例"Component_93.ebs"中的组件"Kernel_Scrpting_9")。