之前使用的宏机制只能存储和重复使用部分模型。新的宏机制通过将单个组件组合在一起来制作用户自己的组件,这些组件可以是 作为一个"黑匣子"集成在模型中。在这里,可以定义输入和输出的数量和类型,规格和结果值以及 EbsScripts,它们在计算之前和之后自动被调用。这个 EbsScript 使用了一个独立的名称,重复多次地使用宏就不会产生冲突。
宏可以像正常的组件一样使用,可以移动、复制和插入,也可以将它们集成到模型中。双击宏打开其属性窗口,可以查看和修改宏的外部属性。
在创建宏时,必须定义宏的属性,这些属性在宏的外部是可见的。
要改变宏的内部属性,必须打开宏。
通过使用菜单指令 "插入"à"宏-对象"可以在模型中插入一个新的宏。. 现在可以宏的位置,名称和描述。这个描述也会以文本的形式出现在宏的显示屏上。
用鼠标右键,可以从上下文菜单中选择"打开宏-对象"指令来打开宏。
宏(内部)的属性将显示在下列选项卡中:
根据宏的类型,一些选项卡可能是空的。
"宏名称"字域用于编辑组件的名称,对象名称的具体规则请参见对象名称。
"描述"字域用于输入该组件的附加描述。
"EPOS接口 (DCS)使用的标识"字域有助于将一个对象(通常是测量值)与控制系统联系起来。在此输入名称,EPOS接口在此名称之下从控制系统接收数据。
"范围"和"标签"这两个字域是可以自由使用的,它们可以用于分类和识别(例如参考P&ID流程图)。
用户定义的计算
每个Ebsilon组件的计算(特别是宏)都可以被用户定义的计算覆盖。
有下列一些模式:
• 内核脚本:
组件通过内核脚本进行计算(像组件93);不能通过函数:ksGetSPEC, ksGetRES, ksSetSPEC, ksSetRES来访问规格/结果值;相反,可以通过名称直接来访问值。 请注意:这需要EbsScript/EbsOpen授权许可。
• XUI-DLL:
XUI- DLL的计算接口与组件65的计算接口相同,相关描述参见 ”/Data/Examples/Programmable/ebsuser.h“。对规格/结果值、(结果)特征线、(结果)宏的访问只能通过组件的 IDispatch 接口借助 EbsOpen 接口来实现(请注意:需要EbsScript/EbsOpen授权许可才能实现)。
对于宏来说,覆盖是指不计算宏内的组件,只分别计算内核脚本和XUI-DLL。
• XUI-DLL 路径
设置路径(另见"通用设置和模型选项/通用设置概览/路径/通用";标题:路径中的变量)。
"计算"选项卡显示 EBSILONProfessional 的计算核心如何使用宏。
在"端口"选项卡中,可以定义宏与外部的连接。
通过点击"点击插入项目..."字域,可以定义一个新的连接,也可以通过高亮显示一行并按"删除"按钮来删除一个连接。如果点击第二列的一个字域,就会出现一个下拉列表,在这里可以定义管道的类型。
对于引脚,可以在第三列激活一个标题为"无"的复选框。在这种情况下,用户可以隐藏引脚。引脚只能隐藏在宏的外侧,在宏内则始终可见。
在第四列中,用户可以定义连接是进入宏(入口用白色小方块标记)还是从宏中出来(出口用黑色小方块标记)。
在"描述"列中输入的文字将作为描述出现在宏的外部属性窗口中。
模型中会显示一个镜像。除非旋转宏或制作其镜像,否则外部显示中的连接是向上的。流入管道显示为入口,流出管道显示为出口。
在内部显示中,连接向下。在这里,流入的管道显示为出口,流出的管道显示为入口。在这个显示中,宏的符号表征"外部世界"。
可以将宏内部的建模与外部连接起来。这可以通过正常的方式来完成(如"外部世界"一样)。还可以在宏内部集成更多的宏。由于宏有自己的命名空间,所以在宏内部指定名称时不依赖于外部建模(因此,宏内部可以有一个组件,它的名称与宏外部的组件名称相同)。
规格值可在内部宏属性窗口的"规格值"选项卡中定义。名称和描述可以自由输入,默认值的数量可以从下拉列表中选择。之后这些默认值就会出现在外部属性窗口中,用户可以在这里输入所需的值。
如果用户选择"文本",规格值将被定义为文本。在这种情况下,用户可以输入文本而不是数字。
如果用户选择"组合条目",用户可以创建下拉菜单。在这种情况下,用户可以指定枚举器和属于每个枚举器的相应文本。然后枚举器的值就可以在 EbsScript 或模型中使用了。
这里存在为规格和结果值提供选择框的可能性。这样就不需要输入数字,只需要从选择框中选择一个项。这些项由宏创建者通过选择"选择框条目"来定义,并同时设置规格和结果值的维度。之后点击"选择框条目"一栏的按钮就可以打开一个对话框,在这里可以指定要显示的文本和对应的索引号。
在宏中定义的规范值可以直接与宏里面的组件的规范值对接。这就为用户省去了在 EbsScript 中的分配。要做到这一点,需要在宏界面属性窗口的"规格值"表单的"自动转移"(automati...)栏中输入所需的规格值,以便将该值转移。要将一个宏规格值分配给宏内的多个规格值,也可以输入多个规格值(用";"分隔)。
类似地,结果值的自动对接也是可能的。这里也可以使用"自动-转移"(automati...)栏中的表达式。此外,特征线、结果特征域、矩阵和结果矩阵也可以通过这种方式对接,但总是只能作为一个整体(通过指定特征线/矩阵的名称)。
在输入错误的情况下,将在模拟仿真时发出一个关于宏的错误信息。
结果值可以在内部宏属性窗口的两个选项卡中定义。其中一个选项卡允许指定单个结果值。另一个选项卡允许指定结果数组。名称和描述可以自由输入,默认值的数量可以从下拉列表中选择。这些默认值之后就会出现在外部属性窗口中。
结果值的分配必须在宏内部的 EbsScript 中完成。在这里输入的值在完成计算后,在宏外部可见。
规格值可以为宏用户设置为"只读"。
此外,还可以设置"值的可见性"(开/关/灰度)和"类别"(规格/名义值)以及物理变量。所有这些设置也可以为运行时间改变(通过xui-Dll,参见示例文件"Data/Examples/xui_dll_macro.ebs")。
EbsScripts 可以在内部宏属性窗口的一个选项卡中定义。EbsScripts 必须在 EbsScript-浏览器中创建。
如果计算(模拟或验证)已经完成,并且模型中的宏是可用的,那么在调用 EBSILONProfessional-计算核心之前,会调用"计算前运行 EbsScript 脚本"。在这个 EbsScript 脚本中,可以在宏内部的组件中输入规格值。但是,由于计算尚未完成,此时管道值还不可用。
计算完成后,调用"计算后运行EbsScript脚本"。所有的管道值都存在于这个 EbsScript 脚本中。可以用来将宏内部的结果转移到宏外部可见的结果值中。
在 EbsScripts 的设定规范页面中,有第三个关于接管标称值的条目。在这里,宏的行为可以通过 EbsScript 的"hasNominalValues"和"TakeOverNominalValues"这两个函数的实现来定义。"hasNominalValues"的返回值定义了该宏是否显示在标称值接管对话框中(前提是用户没有在常规设置中禁止这一点),以及是否调用函数 "takeOverNominalValues"。
function hasNominalValues():boolean;
begin
// return true to indicate that the component
// has calculated new nominal values
hasNominalValues:=false;
end;
procedure takeOverNominalValues(source_profile_id, real_target_profile_id : integer; full_specification:boolean);
begin
// copy the nominal-values in this procedure
// arguments reflect the selection from the user in the dialog after the calculation
// (resp. the preselected options)
end;
示例模型 Makro_NominalValues.ebs:
该模型描述一个带压力损失的混合器。对组件60模式 P2 = min (P1, P3)改编,反向设定压力规格,通过压力损失,也就是组件2来计算管道中较高的压力。
模型有四个工况
- 全局解释
- 本地解释
- 识别
- 模拟
在本地和全局设计中,标称值取自计算结果。
管道位置可以在内部宏属性窗口的选项卡中定义。
定义管道连接后,可以选择"管道位置"选项卡来移动管道端口。要移动连接的位置,请选择"用户定义"复选框。
也可以在宏中应用特征曲线。为此,宏中每个特性必须包含以下内容:
要搜索宏中的对象,请激活搜索窗口(双目图标)中的"打开宏"复选框。这样,宏中的对象也会被包含在搜索中。
默认情况下,QT 图表是跨越宏限绘制的,即宏中包含的热交换器将与宏外的热交换器在图表中的显示是完全一样的。
可以将宏作为一个对象整体插入到 QT 图表中。为此,在宏界面属性对话框中有一个新的工作表单"QT图表",在此输入图表中宏连接的解释。
首先,可以选择宏是否
• 不是一个热交换器
• 一个没有辅助凝结水的简单热交换器
• 一个带有辅助凝结水的简单热交换器,或
• 一个双层热交换器
随后,将定义哪些引脚分别是热侧和冷侧的入口和出口(如适用,分别是辅助凝结水和第二个冷引脚)。