为了实现宏的可移植性,每个(新)宏都必须有自己的命名空间。这意味着在一个宏中可以以任何方式分配名称,而不考虑同一名称是否已经在模型中分配过。甚至在一个模型中多次插入相同的宏也必须是可能的。
可能发生这样的情况,一个名称为"Throttle_1"的组件出现在主模型以及宏 1 和宏 2 中,当在 EbsScript 中使用这些名称时,必须弄清楚是指这些对象中的哪一个。这可以通过名字的上下文来实现。
一旦在模型中插入一个宏,一个新的命名空间就会被创建,并带有宏的名字。在 EbsScript 编辑器中,可以在 EbsScript 上下文栏中设置所使用的变量指向哪个命名空间。
这也适用于额外插入的被动工作表(与默认的名为<计算>的主动工作表平行)。
EbsScript 行
Throttle_1.DP12RN:=0;
因此,如果上下文设置为"全局"或"(顶层)"(默认设置),则将主模型中"Throttle_1"的压力损失设为 0。
要用这个命令把 Macro1(宏 1)中的"Throttle_1"的压力损失改为0,必须在编译前把上下文改为"Macro1"。
另外,也可以通过变量本身来指定命名空间:
Macro1::Throttle_1.DP12RN:=0;
将 Macro1 中"Throttlel_1"的压力损失设置为0,即使上下文被设置为"(顶层)"。
反之亦然,前面的"::"可以访问顶层上下文中的组件或管道,即使 EbsScript 编辑器的上下文没有设置为"(顶层)"。
::Throttle_1.DP12RN:=0;
由于宏可以在其他宏中使用,所以也可以将名称串联起来。表达式
Condensing::ExternalCooling::Electro_3.Q
指向宏"ExternalCooling"中 Electro_3 管道的电功率,该宏本身包含在宏"Condensing"中。
在 EbsScript 中,可以使用"..."来跳转到上级上下文,例如
::ActContext::..::component.spec.
尤其是,这使从一个宏到达连接的组件变得更容易。
为了改变上下文(例如在编译时跳转到一个宏上下文),有以下指令:
如果通过使用工况工具栏上的"活跃上下文 "组合框来切换上下文,将创建一个新的窗口,显示该上下文中的对象。
当在宏的属性窗口(EbsScript 在计算前运行,EbsScript 在计算后运行,EbsScript 接管名义值)中编辑一个(新)宏的 EbsScript 时,组合框"活跃上下文(Active Context)"显示这个宏的上下文。在这里,这个上下文不能被改变。
工况工具栏上的"打开上下文(Open Context)"组合框和 EbsScript 编辑器"EbsScript 上下文"工具栏上的"活跃上下文(Active Context)"组合框是相互独立的。
要在 EbsScript 运行时改变上下文,可以使用 EbsScript 函数 setContext, getContext, resetContext, setGlobalContext(见 EbsScript 函数-->计算函数)。