EBSILON®Professional Online Documentation
EbsScript 脚本 / EbsScript 函数 / 规范值函数
本主题中
    规范值函数
    本主题中

    规范值函数


    EbsScript 提供了对循环中所有量的直接访问。可以是:

    对于 EbsScript 编译器来说,这种访问是通过一种叫做 EBSVAR 的特殊数据类型实现的。上面提到的表达式就是 EBSVAR 常量。在脚本代码中,不需要引号(" ")来访问EBSVAR 常量。请注意以下的区别

     print (Steam_generator.P2N);   // EBSVAR constant, output: 120
    
     print ("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 变量
    2: 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,
               strUnit);

      println (rBu," ",strBu,
         " = ",rUnit," ",strUnit);

    end.

    CalcNCV

    根据指定对象的组份计算净热值 

    1: STRING 常数: 对象名称(管道或组件 1 / 33)

    2: REAL 变量: 计算热值

    BOOLEAN:
    true,如果可以计算
    false,如果不能计算 NCV(例如对于水管道) 

    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: 连接
     1= 进口
     2= 出口

    EBSCOMP: 发现的组件

    getCompAtPipe( ePipe, 1 )

    GetCompViaLink

    返回连接在管道另一端的组件,连接到组件的指定连接处。

    1: EBSCOMP: 组件

    2: INTEGER: 连接的数量

    EBSCOMP: 发现的组件

    getCompViaLink ( eSteamGenerator, i )

    GetDescription

    返回一个对象的描述性文本。

    1: STRING: 对象的名称

    2: INTEGER: 描述性文本的类型:
     1: 描述
     2: 用于控制系统的标识
     3: 应用范围
     4: 识别

    STRING: 发现的描述性文本

    var
    str:string;

    begin
    str:=getDescription( "3RA21T007", 1 );
    print (str);
    end.

    getEbsObjValue

    这个函数可以用来直接从一个对象的名称中确定它的值。可以选择指定一个字符串,当对象不存在时,将返回该字符串。如果对象存在但为空,该函数返回一个空字符串。

    这个函数主要在文本字段和过滤器中很有帮助。

    1: STRING: 对象-描述符

    2: STRING: 字符串,在出错的情况下返回

    STRING: 名称或值,取决于对象描述符

    例如 "Block750.ebs":

    println( getEbsObjValue ( "Steam_generator.T4", "Error"));
    returns:
    "600" (Hot RH temp.)

    println( getEbsObjValue ( "Steam_generator._3", "Error"));
    returns:
    "H2O_DAMPF_3" (Name of line connected to connection point 3)

    println( getEbsObjValue ( "Steam_generator._0", "Error"));
    returns:
    "Error" (case of error)

    GetEbsvar

     

    将字符串(第2个参数)标识的对象分配给一个 ebsclass 变量(第1个参数)--要考虑到上下文!

    1: EBSCLASS: 变量
    2: STRING: 常数

    BOOLEAN:
    true, 如果没问题
    false, 如果错误

    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));

    输出:FP1N

    GetEbsvarValueAsText

     

    第 11 版: 标志的文本
    (如在组合框的属性对话框中使用一样)

     

    1: EBSCLASS: 变量

    STRING:

    想要的描述文本标志

     

    // 模型中名为 turbien 的组件 6 // Turbine.FP1N 值为 0 ("P1 由 P1NSET 计算 (根据 Stodola 法则)")
    println (getEbsVarValueAsText (Turbine.FP1N));

    输出:P1 由 P1NSET 计算 (根据 Stodola 法则)

    GetExpression

    如果有一个规格值的表达式,这个函数将这个表达式作为一个字符串检索

    1: EBSVAR: 考虑的规格值

    2: STRING: 要求的表达式

    BOOLEAN:

    var

      str:string;

    begin

      if (getExpression (Start_value.M,
                                str)) then

      begin

        println (str);

      end;

    end.

    GetLinetypeAtLink

    返回一个组件的特定连接的连接类型(管道类型)

    1: EBSCOMP: 考虑的组件

    2: INTEGER: 要求的引脚(连接)的数量

    LINETYPEENUM

    var

      lt:linetypeenum;

    begin

      lt:=getLinetypeAtLink
          (Turbine, 1);

      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:
    true, 如果没问题
    false, 如果错误

    getName (ev, s);
    getName (Boundary_value.M, s);

    GetPipeAtLink

    返回连接到一个组件的指定连接的管道。

    1: EBSCOMP:

    2: INTEGER: 连接的数量

    EBSPIPE

    ePipe:= getPipeAtLink(eComp, i );

    GetPipeAtLogpipe

    返回连接到一个逻辑管道末端的管道。

    1: EBSPIPE:

    2: INTEGER: 连接
     1: 进口
     2: 出口

    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:
    true = 规格值(对于一个组件)或主要管道数据(对于一个管道)
    false = 结果值(对于一个组件)或组份数据(对于一个管道)

    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:
     true = 规格值(对于一个组件)或主要管道数据(对于一个管道)
    false = 结果值(对于一个组件)或组份数据(对于一个管道)

    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:
    true, 要考虑的规格值

    var

      str:string;

    begin

      if (hasExpression(Start_value.M)) then

      begin

        if (getExpression(Start_value.M, str))  
                                                    then

        begin

          println (str);

        end;

      end;

    end.

    ImperialToUnit

    将指定的值从英制单位转换成指定单位

    1: REAL: 要重新计算的值

    2: STRING: 要转换的单位

    REAL: 转换值 r := imperialToUnit(2.0 , "bar");

    IsAttached

     

    检查 EBSCLASS 变量是否被附加到循环中的一个对象上。

    1: EBSCLASS: 常数

    BOOLEAN:
    true, 如果 EBSCLASS 被连接。

    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:
    true, 如果 EBSVAR 为空。

    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:
    true, 如果参考为空

    b:= isNull (eComp);

    loadLibValues

    用标准值数据库中的数据替换当前工况中指定组件的所有规格值。

    1: STRING: 组件名称

    2: STRING: (可选):数据库内组件表管道的类型名称。默认值为"标准"。

    3: BOOLEAN:
    true = 如果在库中没有找到值,则设置为"空"
    false = 如果在库中没有找到值,则值保持不变

    BOOLEAN:
    true,

    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:
    true,

    false

    如果不能找到指定的 compname 组件名称,该函数现在返回一个空字符串(而不是终止运行中的EbsScript)

    setAdaptionPolynomial ("Turbine_1", "1+0.0001*M1")

    setDescription

    设置一个对象的描述性文本。

    1: STRING: 对象的名称

    2: INTEGER: 描述性文本的类型:
     1: 描述
     2: 控制系统的标识
     3: 应用范围
     4: 识别

    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 给定结果值。
    现在(从第 10 版开始)这个函数真正复制了所有的结果(组件和管道,还有空字段)。

    1: INTEGER: 要从其中取值的工况的 ID 

    BOOLEAN:
    true, 如果没问题
    false, 如果错误

    transferAllResults (4);

    transferValResults

    转移指定工况中所有测量点的 RESULT 值,并将其作为 MEASM 值输入当前工况中。这有助于用验证校核值进行假设模拟。

    1: INTEGER: 要从其中取值的工况的 ID 

    BOOLEAN:
    true, 如果没问题
    false, 如果错误

    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")。