EBSILON®Professional Online Documentation
EbsScript 脚本 / 内核脚本
本主题中
    内核脚本
    本主题中

    内核脚本


    EbsScript 通常在 EBSILONProfessional 用户界面中执行。EBSILONProfessional 的计算内核可以从 EbsScript 中调用,(通过"模拟"或"验证校核"等命令),在调用计算内核之前按照设置的参数进行计算。在计算内核的计算过程中,EbsScript 和用户都没有权限访问(甚至在这期间也不能中止)。只有在计算结束后,控制权才会交还给 EbsScript。

    在"内核脚本(KernelScripting)"的帮助下,可以在计算过程中进行直接访问。组件93("内核脚本")被用于此目的。用户可以通过使用 EbsScript 和内核脚本接口单元中定义的函数来对该组件的行为进行编程。有了这个函数,就可以在每个迭代步骤中访问管道和组件的值。组件 93 的输出管道的值也可以通过这些函数来设置。

    像每个组件一样,93 号组件也可以在一个模型中多次插入。因此,每个组件 93 都可以使用不同的 EbsScript,这样就可以创建几个不同的组件。

    通过组件 93 可以

    a) 直接设置输出管道的结果或

    b) 定义一个完整的方程组。

    - 以"设置输出管道的结果"的模式:使用函数 ksSetPipeValue - 规格值 FDEFEQN 必须被设置为 1

    - 以"定义方程"的模式:使用函数 ksAddEquation, ksSetEquation - 规格值 FDEFEQN 必须被设置为 0

    用来设置输出管道流体数据的函数 ksSetPipeFluidData 和 fluidSetAnalysis 总是可以使用。

    EBSILONProfessional 计算内核的工作方式是,所有的组件被逐一调用,并首先进行初始化。在这个步骤中,函数

    - ksGetMode (见下文)返回值"初始化"。

    计算阶段在初始化完成后开始。在这个阶段,函数

    - ksGetMode;   返回值为"计算"。

    由于求解是在迭代中进行的,这个阶段会延伸到许多迭代步骤。正在进行的迭代步骤的数量可以用函数

    - ksGetItNo; 来查询。

    在每个迭代步骤中,首先一个一个地调用所有的组件,并为矩阵设置它们的方程。

    在所有组件都设置好方程后,求解方程组,然后进行下一个迭代步骤,直到满足收敛标准或超过最大迭代次数。此后,所有组件被逐一再次调用。

    在收尾步骤中,函数

    - ksGetMode 返回值"结束"。

    这个步骤可以用来计算组件的结果值。

    Within the component 93 there is an EbsScript Editor present in the tab "Script" of the properties window. There are special functions for accessing the internal course of the calculation, which are defined in the unit "KernelScripting". This unit must be linked with the line在 93 号组件中,有一个 EbsScript 编辑器位于属性窗口的"脚本"标签中。在"KernelScripting"单元中定义了一些特殊函数,用于访问计算的内部过程。这个单元必须在脚本中以

    uses @KernelScripting;
    
    

    作为开始行。 单元名称前的"@"是接口单元的标识。这样的接口单元在 EbsScript 中不能自行应用,而是直接在 EBSILONProfessional 中实现。对于用户创建的普通 EbsScript 单元,单元的标识必须与 EbsScript 浏览器中的名称一致,并且不能以"@"开头。

        

    KernelScripting 单元具有以下函数:

    通用函数

    discontinue;  

    参数:   无

    返回值: 无

    函数的目的:

    函数"discontinue"允许在 KernelScripting 中中断 EbsScript 的执行。EbsScript 将在下一个迭代步骤中的相同位置继续执行。这个功能允许保留局部变量:

    例子:

    uses @KernelScripting;
    
    var
    
    i:integer;
    
    begin
    
    i:=1;
    
    while (true) do
    
    begin
    
    println("Step ",ksGetItNo(),": i=",i);
    
    i:=2*i;
    
    discontinue;
    
    end;
    
    end.
    

    在这个 EbsScript 中,有一个无限的循环(while (true))。这个循环的执行被"discontinue"命令打断了。在下一个迭代步骤中,程序在这个位置继续执行。最后在模拟结束时终止执行。下一次模拟运行将从头开始。这个例子产生的输出结果如下:

    Step 1: i=1
    
    Step 2: i=2
    
    Step 3: i=4
    
    Step 4: i=8
    
    Step 5: i=16
    
    Step 6: i=32
    
    Step 7: i=64
    
    Step 8: i=128  
    

    ...

     

    ksGetComp : ebsComp93

    参数: 无

    返回值: EBSCOMP93: 激活的组件 93

    函数的目的:返回当前正在处理的组件 93(作为数据类型 ebscomp93 的对象)。
     

    ksGetFPROG : INTEGER

    参数: 无

    返回值: INTEGER

    函数的目的:返回程序索引,即规格值 FPROG 的值。

    ksGetItNo : INTEGER

    参数: 无

    返回值: INTEGER

    函数的目的:返回当前迭代步骤的编号。

    ksGetMode : Mode

    参数: 无

    返回值: INTEGER: 模式

    函数的目的:

    返回模式,即计算内核当前所处的模式:

    取决于计算阶段,模式为(Mode):

    初始化(1),初始化阶段,

    计算(2),计算迭代阶段,

    完成(3), 完成阶段,

    辅助-调用预迭代(4)帮助调用预迭代。

     

    ksGetRES (index:Integer) : REAL

    参数:  INTEGER: 索引(指定的结果值)                                                                       

    返回值: REAL: 结果值

    函数的目的:返回由索引识别出的结果值的值。

     

    程序 ksSetRES (index:Integer; value:Real)

    参数:  INTEGER: 索引(指定的结果值)
                 REAL: 值
    返回值: 无

    程序的目的:设置由索引识别的结果值的值。

     

    ksGetSPEC (index:Integer) : REAL

    参数:  INTEGER: 索引(指定规格值)

    返回值: REAL: 规格值

    函数的目的:返回由索引识别的规格值的值。

     

    程序 ksSetSPEC (index:Integer; value:Real)

    参数: INTEGER: 索引(指定的规格值)
                REAL: 规格值
    返回值: 

    程序的目的:设置由索引识别的规格值的值。


    ksGetAccuracyCurrentStep():IterationStepAccuracyType

    参数: 无                                                                                                        

    返回值: IterationStepAccuracyType

    函数的目的:返回当前的收敛性

     

    ksGetAccuracyTrend():array of IterationStepAccuracyType

    参数: 无                                                                                                             

    返回值: IterationStepAccuracyType 的数组

    函数的目的: 返回收敛趋势(当前收敛在数组的末尾)
     

    用于设置 / 获取条件 / 流体属性的函数

    ksCopyPipe( source, dest:Integer; copyValues:Boolean = False; copyFluidData:Boolean = True ):Boolean;

    参数:  INTEGER: source, dest  
        BOOLEAN = False: copyValues 
        BOOLEAN = True: copyFluidData                                                                                                                                                                                                                       

    返回值: BOOLEAN: False / True

    函数的目的: 复制物理值(默认:关闭),流体规格(默认:打开)

     

    程序 ksGetPipeFluidData (index:Integer; var fluidData:FluidData; definedBy:CompositionDefinedByEnum = CompositionDefinedByMass)

    参数: INTEGER: 索引(指定的管道)
                FLUIDDATA: var fluidData
                CompositionDefinedByMass =CompositionDefinedByEnum (组份定义)

    返回值: 

    程序的目的:

    返回由索引识别的进口管道上的流体数据(材料组份和材料特定的量)。
    FluidData 是一个数据结构(记录),在 KernelScripting单元中定义。

     

    程序 ksSetPipeFluidData (index:Integer; const fluidData:FluidData; definedBy:CompositionDefinedByEnum = CompositionDefinedByMass)

    参数: INTEGER: 索引(指定的管道)
                FLUIDDATA: const fluidData
                CompositionDefinedByMass =CompositionDefinedByEnum(组份定义)

    返回值: 无 

    程序的目的:

    设置由索引确定的出口管道上的流体数据(材料组成和材料特定的量)。FluidData 是一个数据结构(记录),在 KernelScripting 单元中定义。这些数据必须始终完全被设置。这个函数只能用于一个出口管道。

     

    ksGetPipeValue (index:Integer; physValue:PhysValue) : REAL

    参数:  INTEGER: 索引(指定的管道)
                 PHYSVALUE: physValueM (对于质量流量),
                                        physValueP (对于压力),
                                        physValueH (对于焓)

    返回值: REAL: PhysValue

    函数的目的:

    返回索引指定的管道上变量 PhysValue 的值。PhysValue 可以取值为 PhysValueM(用于质量流量)、PhysValueP(用于压力)、PhysValueH(用于焓)。其它热力学参数,如温度或熵,在这个点上是不可用的,因为由于计算时间的限制,它们在每个迭代步骤中并不对所有管道进行计算。如果需要的话,可以通过 EbsScripts 中的属性函数(如 waterSteamTable)来计算其它热力学参数。

     

    ksSetPipeValue (index:Integer; physValue:PhysValue; value:Real)

    参数:  INTEGER: 索引(指定的结果值)
                 PHYSVALUE: physValueM (对于质量流量),
                                        physValueP(对于压力),
                                        physValueH(对于焓)
                 REAL: Value

    返回值: 

    函数的目的:

    在索引指定的出口管道上设置 PhysValue 变量的值。只能设置质量流量(PhysValueM)、压力(PhysValueP)和焓(PhysValueH)。索引在这里指的是出口管道,而不是连接器的号码。例如,对于 6 条进口管道,出口管道 1 的连接号码为 7。对于在循环中没有连接的出口管道,不需要指定数值。

    然而,如果使用没有连接的出口管道,必须始终指定所有数值,包括在逻辑管道、电气管道和机械轴上。为压力设定哪个值并不重要。对于质量流量,必须设置 M = 1,因为功率是作为质量流量和焓的乘积计算的。要设置功率,然后可以将 H 设置为功率的值。

    请注意,像 EbsScript 一样,KernelScripting 总是使用 EBSILONProfessional 默认标准单位(bar, °C, kg/s, kJ/kg, kW)。

    从 11 版开始:

    ksGetGlobalMaxTimeInterval:(time:Real)

    参数: 

    返回值: REAL: 全局最大残差项

    函数的目的:

    返回全局(模型)最大残差项(所有限时组件的残差项的最小值,以秒为单位)(仅用于时间序列计算

     

    ksGetMaxTimeInterval: REAL

    参数: 无

    返回值: REAL: 当前组件 93 的全局最大残差项

    函数的目的:当前组件 93 的最大残差项(仅用于时间序列计算

     

    程序 ksSetMaxTimeInterval: (time:Real)

    参数:     REAL: 时间

    返回值:   

    程序的目的:设置当前组件 93 的最大残差项(仅适用于时间序列计算

     

    程序 ksGetPipeUniversalFluid:( index:Integer; var universalFluid:UniversalFluidType; definedBy:UniversalCompositionDefinedByEnum = UniversalCompositionDefinedByMass );

    参数:   INTEGER: 索引
                  UniversalFluidType: var UniversalFluid
                  UniversalCompositionDefinedByEnum = UniversalCompositionDefinedByMass: definedBy

    返回值:   

    程序的目的: 从指定端口(索引)读取通用流体数据。

     

    程序 ksSetPipeUniversalFluid: ( index:Integer; const universalFluid:UniversalFluidType; definedBy:UniversalCompositionDefinedByEnum = UniversalCompositionDefinedByMass )

    参数:    INTEGER: 索引
                   UniversalFluidType: const UniversalFluid 
                   UniversalCompositionDefinedByEnum = UniversalCompositionDefinedByMass: definedBy
    返回值:  

    程序的目的:  将通用流体数据写到指定的端口。

      

    函数或程序:

    ksGetInPipeValue,

    ksGetOutPipeValue,

    ksGetInPipeFluidData,

    ksGetOutPipeFluidData,

    ksSetOutPipeValue

    ksSetOutPipeFluidData

    出于兼容性的原因也可用,但与 ksGet...和 ksSet...函数的区别仅在于管道的索引。在上面提到的新函数中,索引只是与管道的连接号相匹配,而在旧函数中,对进口和出口有单独的索引。如果是进口管道,索引和连接号是相同的(1-6),如果是出口,则有一个偏移(连接 7 至 15 可以通过索引 1 至 9 来处理。为了保持清晰度,建议使用新的功能,在这些功能中,索引总是与连接的号码相匹配(进口为 1 至 6,出口为 7 至 15)。

    EbsScript 可以对循环中所有的量进行只读访问,特别是所有的管道值,以及在各自正在进行的迭代步骤中的质量流量、压力和焓的所有有效值(见上文对 ksGetInPipeValue 的解释)。然而,只有通过为设置目的而实施的"ksSet..."函数才能改变这些值。

    某些 EbsScript 函数不能在 KernelScripting 中使用。调用计算内核基本上是不可能的。其他函数(改变工况、读取数据、改变颜色)只在表面上有影响,对计算过程没有影响。

    然而,在 KernelScripting 中可以应用打印命令,这对于诊断目的来说是非常有用的。计算完成后,可以在 EbsKernel 输出栏中查看打印输出,可以在菜单项"查看"下激活。在 EbsKernel 的输出栏中,为循环中包括的每一个 93 号组件创建一个表,同时也为所有输出创建一个总表。

     

    设置方程的函数

     

    以字符串形式指定方程

    通常情况下,在 EbsScript 中根据输入参数计算输出参数的值,并将其设置在相应的出口管道上。然而,这种方法并不适合验证校核,因为在这种方式下没有考虑错误的传播。作为一种替代选项,可以定义方程来将所有连接管道上的参数相互关联起来。

    这些是函数

    ksAddEquation ( equation:String; parameterVariables:String = ""; allowGeneralSolver:Boolean = false ):Integer

    参数:      STRING: 方程
                     STRING ="" : ParameterVariables - 变量的值在求解方程组的过程中作为不可改变的参数(常数)被保留在当前迭代步骤中。
                     BOOLEAN = false:  allowGeneralSolver                                                                                                              

    返回值:   INTEGER:

    函数的目的: 重新设置一个新的方程。返回新方程的索引,如果出错则返回 -1。

     

    ksSetEquation( eqIndex:Integer; equation:String; parameterVariables:String = ""; allowGeneralSolver:Boolean = false  ):Boolean

    参数:       INTEGER: eqindex                                                                                                        
                      STRING: 方程
                      STRING ="" : 在当前迭代步骤的方程组求解过程中,其值保持不变(恒定)的变量。

    返回值:  BOOLEAN:

    函数的目的:  

    重置当前迭代步骤中先前设置的 ksAddEquation 方程的系数。


    ksGetEquation( eqIndex:Integer ):String

    参数:     INTEGER: eqIndex                                                                                                          

    返回值:  STRING:

    函数的目的:  以字符串形式返回索引指定的方程。

     

    ksGetMaxEquationIndex: Integer

    参数:  无                                                                                                       

    返回值:  INTEGER:       

    函数的目的: 

    返回当前组件 93 的方程的最大索引(与远程方程的数量相对应)。

     

    ksRemoveEquation( eqIndex:Integer ):  BOOLEAN 

    参数:     INTEGER: eqIndex                                                                                                              

    返回值:  BOOLEAN:

    函数的目的:  删除索引指定的方程。


    以及程序:

    程序 ksRemoveAllEquations   

    参数:  无                                                                                                          

    返回值:   

    程序的目的: 移除组件中的所有方程

     

    方程应指定为字符串(例如:"M2 - M1 = 0")。

    下面的例子解释了这些函数的使用,描述一个简单的换热器计算,其中只考虑了质量和能量平衡(没有压力损失)。在这个例子中,主要流从连接 2 到连接 9,次级流从连接 5 到连接 14。

    procedure heatexchanger_simple;
    
    var
    
    i,iIndex,iLZ:integer;
    
    strEquation:string;
    
    bOk:boolean;
    
    var m1,m3:real;
    
    begin
    
    iLZ:=ksGetItNo;
    
     
    
    if ksGetMode = Initializing then
    
    // 质量和压力方程只需要在第1个迭代步骤中设置,
    
    // 因为它们在开始时保持不变。
    
    begin
    
    ksRemoveAllEquations;
    
    strEquation:="M9-M2=0";
    
    ksSetEquation (1,strEquation);
    
    strEquation:="M14-M5=0";
    
    ksSetEquation (2,strEquation);
    
    strEquation:="P9-P2=0";
    
    ksSetEquation (3,strEquation);
    
    strEquation:="P14-P5=0";
    
    ksSetEquation (4,strEquation);
    
    strEquation:="H9-H2=0";   // als Startwert
    
    ksSetEquation (5,strEquation);
    
    end
    
    else
    
    // 能量平衡方程在每个迭代步骤中都会发生变化,因为
    
    // 质量流量可能发生了变化
    
    begin
    
    m1:=ksGetPipeValue (2,PhysValueM);
    
    m3:=ksGetPipeValue (5,PhysValueM);
    
    if (iLZ<5 and m1 < 1) then m1:=1;
    
    if (iLZ<5 and m3 < 0.1) then m3:=0.1;
    
    strEquation:=printToString (m1,"*H2-",m1,"*H9+",m3,"*H5-",m3,"*H14=0");
    
    ksSetEquation (5,strEquation);
    
    end;
    
     
    
    // 以对数输出的方式输出方程(可选)
    
    iIndex:=ksGetMaxEquationIndex;
    
    for i:=1 to iIndex do
    
    begin
    
    strEquation:=ksGetEquation(i);
    
    print (strEquation,"\n");
    
    end;
    
    end;
    

     

    以结构形式指定方程

     

    除了以字符串形式指定方程外,还可以以结构形式传递方程信息。这可以通过以下函数来实现

     

    ksAddEquationNew ( equation:EquationType) : INTEGER 

    参数:    EQUATION: 方程

    返回值:  INTEGER:

    函数的目的:  重新设置一个新的方程。
       


    ksSetEquationNew ( eqIndex:Integer; equation:EquationType) : BOOLEAN       

    参数:     INTEGER: eqIndex
                    EquationType: 方程

    返回值:  BOOLEAN

    函数的目的: 将当前迭代步骤的系数替换为先前设定的带有给定索引的方程。

                         


    ksGetEquationNew  ( eqIndex:Integer; equation:EquationType) : BOOLEAN       

    参数:      EquationType: eqIndex                                                                                                                

    返回值:   BOOLEAN

    函数的目的:返回索引指定的方程。


     

    ksGetEquationParameter( eqIndex:Integer; index: integer) : Real       

    参数:    INTEGER: eqIndex                                                                             
                   INTEGER: index  

    返回值:  REAL

    函数的目的:返回索引为"eqIndex"的方程中给定"索引"的参数值。


    ksGetEquationParameters( eqIndex:Integer; ) :ARRAY OF REAL       

    参数:       INTEGER: eqIndex                                                                                                             

    返回值:    ARRAY OF REAL:

    函数的目的:返回索引为"eqIndex"的方程的所有参数值。

     

    程序 ksSetEquationParameter( eqIndex:Integer; index: integer; param:real) : Real       

    参数:    INTEGER: eqIndex                                                                             
                   INTEGER: index 
                   REAL: param 

    返回值:  无

    程序的目的: 对于给定的方程:设置参数 b {index} = param
     


    程序 ksSetEquationParameters( eqIndex:Integer; const params: array * of real; start: integer = 1)

    参数:    INTEGER: eqIndex                                                                             
                   ARRAY OF REAL: const params
                   INTEGER=1: param 

    返回值: 

    程序的目的: 对于给定的方程:将参数 b {start}, ..., b {start + length (param)}设置为数组"param"中的值。

     

    例子:

    uses @KernelScripting;
    
    var
    
        equation, equation1:EquationType;
    
    begin
    
        ksRemoveAllEquations;
    
        setLength(equation.LHS, 2);
    
        equation.LHS[0].Coeff.CoeffValue:=CoeffValueReal;
    
        equation.LHS[0].Coeff.Value:=1;
    
        equation.LHS[0].LineIndex:=1;
    
        equation.LHS[0].LineType:=PhysValueM;
    
        equation.LHS[1].Coeff.CoeffValue:=CoeffValueReal;
    
        equation.LHS[1].Coeff.Value:=-1;
    
        equation.LHS[1].LineIndex:=7;
    
        equation.LHS[1].LineType:=PhysValueM;
    
        equation.RHS.CoeffValue:=CoeffValueReal;
    
        equation.RHS.value:=0.0;
    
        ksAddEquationNew(equation);
    
     
    
        equation.LHS[0].LineType:=PhysValueP;
    
        equation.LHS[1].LineType:=PhysValueP;
    
        equation.RHS.value:=0.1;
    
        ksSetEquationNew(2, equation);
    
     
    
        equation.LHS[0].LineType:=PhysValueH;
    
        equation.LHS[1].Coeff.Value:=-2;
    
        equation.LHS[1].LineType:=PhysValueH;
    
        equation.RHS.value:=0;
    
        ksSetEquationNew(3, equation);
    
     
    
        ksGetEquationNew(1, equation1);
    
        println (length(equation1.LHS)," ",equation1.LHS[1].Coeff.Value);
    
    end.
    

     

    非线性方程

    除了变量 “m1“ – “m20“, “p1“ – “p20“, “p1“ – “p20“ (以及对于所有物质 “xn2_1“ – “xn2_20“, “xo2_1“ – “xo2_20“ 等,如果材料方程被激活的话),基本算术运算符 “+“, ”-“, ”*“, ”/“ 以及 ”^“ 表示幂,以及数学函数 exp, ln (自然对数), log (以10为底的对数), sqrt (根), sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, arsinh, arcosh, artanh 都可以在定义组件 93 方程式的字符串中使用。

    此外,可以调用内部单元和用户定义的标准单元的函数,这些函数返回一个数字类型(REAL,INTEGER),并且只有数字类型(不是"var"或"const")的参数(允许默认参数)。

    这里的一个例子是"@Standard"单元中的函数"propertyCallId"。该函数的使用在组件示例"Component_93.ebs"中进行了演示,例如在组件"Kernel_Scrpting_9"中。

    函数“value_of“: value_of(x) 有值 x,但导数总是 0,即表现为 x 的值先前已被计算并作为常数输入方程中。
    应用案例:见组件"Kernel_Scrpting_9"中的组件示例"Component_93.ebs":部分项

    + 0.15*( H9 - value_of(H9))

    在温度方程中,值为 0,导数为 0.15,从而可以防止导数在湿蒸汽区域消失。
    如果没有这个部分项,对 H9 的导数为 0,也就是说,如果在寻找解决方案的过程中跨越了湿蒸汽区域,对 H9 不会有任何改变。

     

    查询迭代的当前状态;根据迭代的进度来采取措施

    当对 KernelScripting 组件进行编程时,可以借鉴迭代的当前状态并直接影响它。以下是可用的函数:

    ksGetCurrentAccuracy( {physValue:PhysValue} ): REAL

    参数:       PHYSVALUE: physValue                                                                                                         

    返回值:   REAL:

    函数的目的: 

    允许检索当前的收敛程度,质量流量(PhysValueM)、压力(PhysValueP)和焓(PhysValueH)。

    这个函数在各个迭代步骤中的结果与收敛图中显示的曲线相对应。因此,可以根据迭代的进展情况采取某些措施。

     

    ksGetFinishingReason(): FinishingReasonEnum

    参数:                                                                                                                

    返回值:   FinishingReasonEnum

    函数的目的:在最后一个迭代步骤中,可以分析计算被终止的原因:

    FinishingReasonEnum = (=0 / =1/ =2 / =3/ =4); 

    o FinishingReasonConvergency (1), 达到了指定的收敛程度

    o FinishingReasonErrorAbort (2), 一个错误导致了一个过早的中止。

    o FinishingReasonMaxIterationsReached (3), 达到指定的最大迭代步数而没有达到期望的收敛程度。

    o FinishingReasonMaxTimeReached (4), 已经达到了指定的最大计算时间。

    (2)  情况"2"适用于以下情况:例如,93 号组件脚本以错误结束(例如,除零或"exit(-1);"),或者如果一个组件由于输入数据不一致而在第一步中止了模拟。

    (1)  "正常的模拟错误"只在最后一步产生,因此在这种情况下,其值为"1"

     

    在"结束"步骤之外调用该函数时

    o 返回 FinishingReasonInvalid (0)。

    = 0, // 当 Mode <> Finishing 时,调用 ksGetFinishingReason

    = 1, // 计算由于收敛而被终止

    程序 ksSignalNotConverged( signal:Boolean = True )

    参数:    BOOLEAN: Boolean = true: signal

    返回值:  

    程序的目的:

    这个函数的作用是防止计算在当前迭代步骤中被终止。如果不是所有的内部计算都已经完成,这一点特别有帮助。

     

    生成错误信息:

     

    对于内核脚本和内核表达,可以通过以下程序来生成错误、警告和评论信息。


        程序 ksSetWarning (text: String)

        程序 ksSetError (text: String; abortCalculation: Boolean = true)

        程序 ksSetComment (text: String)


    也可以选择启动计算的终止。调用 "abortCalculation = true" 可以终止运行中的模拟。

    在宏脚本和内核脚本中,也可以为某些组件设置错误报警。

     

    注意:KernelScripting 中的方程变化

    Ebsilon 程序块速求解的前提条件之一是方程组的结构在迭代过程中不发生变化。(即只允许改变系数和右手边的值,而不允许改变变量)。这就节省了每个迭代步骤中几个程序的重复。这节省了每个迭代步骤中几个程序的重复。

    通过 KernelScripting,用户负责设定方程。这可能导致在迭代过程中对方程组进行结构上的改变。这种情况会通过警告告知用户,但计算还是要执行。

    然而,在第 12 版中,在这些情况下会产生一个错误信息。然后必须对脚本或模型进行相应的调整,使方程组不再发生结构性变化。在许多情况下,这可以通过在某些迭代步骤中使用值为 0 的系数来实现。

     

    在 KernelScripting 中提供非本地(非局部)方程的函数

    应用这些函数用来创建一个通用蒸汽集箱的原型。可以为不直接连接到该组件的管道提供来自组件的方程。

    ksGetLineIndexFromLine ( line:ebspipe ):integer

    参数:       EBSPIPE: line         

    返回值:   INTEGER: L

    函数的目的:提供管道的内部管道索引 L

     

    ksGetLineIndexFromComp (comp:ebscomp; link:integer ):integer

    参数:      EBSCOMP: comp                                                                                                              
                     INTEGER: link

    返回值:    INTEGER: L

    函数的目的:  提供连接到一个组件的管道的内部管道索引 L。从而可以通过 m{L}、p{L} 和 h{L} 访问相应的变量。


    ksGetVariableMatrixIndex( variable:string ):integer

    参数:     STRING: variable     

    返回值:  INTEGER:

    函数的目的:为一个变量提供内部变量索引(例如"h1")。

     

    ksGetEquationPivotMatrixIndex (eqIndex:integer ):integer

     

    参数:       INTEGER: eqIndex    

    返回值:    INTEGER:

    函数的目的:返回一个方程的枢轴元素的内部变量索引

     

    带参数的方程

    为了避免在创建方程时进行复杂的字符串操作,可以用参数来创建方程;
      
    参数 a1, a2, .., a8192 适用于所有方程,用 ksSetParameters 设置。

    参数 b1, b2, .., b8192 适用于一个方程,用 ksSetEquationParameters 设置。

     

    ksGetMatrixIndexVariable (matrix_index:integer; use_local_naming:boolean = true):string;

    参数:      INTEGER: matrix_integer
                     BOOLEAN: use_local_naming        

    返回值:   STRING:

    函数的目的:把指定矩阵索引的内部变量返回为一个字符串。                  

     

    ksGetParameter (index:Integer) : REAL

    参数:      INTEGER: index

    返回值:   REAL:   

    函数的目的:返回参数 a(索引)

     

    ksGetParameters  : ARRAY OF REAL

    参数:    无      

    返回值: ARRAY OF REAL  

    函数的目的: 返回所有"a"参数(!!!结果字段是基于零的,所以"a (i)"的值在索引i-1处)。
     

    程序 ksSetParameter (index:Integer, parameter: REAL)

    参数:      INTEGER: index
                     REAL: parameter    

    返回值:      

    程序的目的:  设置参数 a(索引) = 参数

      

    程序 ksSetParameters  : (const params: array * of real; start:integer = 1)

    参数:    ARRAY OF REAL : const params
                   INTEGER =1: START     

    返回值: 

    程序的目的: 将参数 a (start), ..., a (start + length (param)) 设置为数组 "param" 中的值。                         

     

    程序 ksResetParameters     

    参数:                     

    返回值: 

    程序的目的: 取消所有先前设置的"a"参数值(即把所有参数设置为 0)。

    程序 ksResetEquationParameters (eqIndex:Integer)      

    参数:      INTEGER: eqIndex   

    返回值:   

    程序的目的: 对于指定的方程:丢弃所有先前设置的"b"参数值(即把所有参数设置为 0)。