EbsOpen 是一个全面的 COM 类库,它提供了对 EBSILON Professional 中所有应用、模型、流和组件数据的访问。它是一个强大的工具,适用于从模拟、验证和假设工况到参数研究以及运行中的发电厂的自动计算等活动。EBSILON 的 Excel 接口是 EbsOpen 可以实现集成的一个例子。
EbsOpen 提供了200多个类别,3500个方法和属性,可以用来读取、运行、编辑和与 EBSILON 和 EBSILON 模型进行交互。它适用于将 EBSILON Professional 的计算和数据与您的软件基础设施集成。EbsOpen 可用于许多常见的自动化和编程环境,如 Visual Studio.net(通过VB、C++或C#)或用于 MS Office 产品,例如 Excel 的可视化基本应用(VBA)环境。
本节的帮助文件介绍了 EbsOpen 并提供了一些如何使用它的例子。
EbsOpen 概述 用VBA使用 EbsOpen 用Visual Studio和C#使用 EbsOpe 使用 EbsOpen 读写组件,流和宏数据
EbsOpen COM 库位于安装 EBSILON Professional 的文件夹中。如果在安装 EBSILON 时使用了默认的目标文件夹,那这将是以下两个文件夹之一:
C:\Program Files\Ebsilon\EBSILONProfessional [version number]
或者
C:\Program Files (x86)\Ebsilon\EBSILONProfessional [version number]
是哪个文件夹取决于操作系统和安装的 EBSILON 版本(32位或64位)。
要使用 EbsOpen 库,需要对其类型库文件 EbsOpen.tlb 进行引用:
稍后将提供如何在VBA和C#中进行操作的例子。要探索 EbsOpen 提供的类别、方法和属性,可以使用 Microsoft Visual Studio 自带的 Oleview 程序打开 EbsOpen.tlb 文件:https://msdn.microsoft.com/en-us/library/d0kh9f4c.aspx
如果没有 Microsoft Visual Studio,OleWoo 是一个不错的替代性开源浏览器:http://www.benf.org/other/olewoo/
OleWoo 中的一些可用属性(用于计算运行状态)的视图如下所示:
也可以在VBA或Visual Studio环境中使用 Object Browser(对象浏览器)(更多细节见下文)来探索所有的 EbsOpen 类别、方法和属性,以找到需要的部分来将 EBSILON 和 EBSILON 模型与其它系统和应用程序集成。
本节将指导在Excel中设置和使用 EbsOpen 与VBA。假设你对VBA有一定的熟悉。启动M icrosoft Excel 并创建一个新的工作簿,按 Alt+F11 来启动VBA集成开发环境(IDE):
接下来如上图所示,从 "工具 "(Tools )栏下拉菜单中选择 "参考..."(References…)项,并如下图所示在 "参考 "对话框中按 "浏览 "(Browse)按钮,以添加一个参考项到 EbsOpen,并且在 "添加参考项"(Add Reference )对话框中从已安装的 EBSILON Professional 文件夹里选择 EbsOpen.tlb 文件。
一旦在VBA中添加了一个对 EbsOpen 类型库文件的参考,就可以使用VBA对象浏览器来查看可用的类别,方法和属性。要做到这一点,从查看菜单中选择浏览对象项或在VBA IDE中按 F2 键:
完成了上面的步骤,就可以开始在自己的VBA代码中使用 EbsOpen 了。下面是一个简单的VBA子程序,它使用 EbsOpen 来确定你在 Excel 工作簿中一个名为 ModelPath 的命名范围内指定的模型中有多少个组件和流:
请查看位于 EBSILON 安装文件夹的 \Data/Examples 子文件夹中的 EbsOpenDemo.xlsm 和 EbsOpen.xlsm 文件,以了解更多应用 EbsOpen 的例子。
注意:取决于你的操作系统/用户访问控制设置和 EBSILON 安装文件夹,可能需要将这些工作簿复制到一个非系统文件夹,并更新它们的 EbsOpen.tlb 参考,使之工作。
本节将描述在Visual Studio中通过C#来设置和使用 EbsOpen。假设您对Visual Studio和C#已有一定的了解。开始时,启动 Visual Studio 并按照以下步骤创建一个新的项目:
可以使用对象浏览器(Object browser)来探索 EbsOpen 提供的类别、方法和属性。一旦完成了上面的步骤启动C#项目,就可以开始对要使用 EbsOpen 的应用程序进行编码了。下面显示的代码来自 EbsOpenCSharpDemo 示例项目,可以在 EBSILON 安装文件夹的 Data\Examples 子文件夹中找到它。所列出的代码是一个简单的窗体应用程序(windows forms application),用于显示用户选择的模型中有多少个组件和流。该示例应用程序包括额外的代码,它将在一个下拉列表框中填入所选模型中的所有工况(Profile)和一个按钮,该按钮将为下拉列表框中选择的工况(Profile)运行模拟:
EbsOpen 为 EBSILON Professional 中的每个流和组件类型都定义了类别。从 EBSILON 模型中读取或写入数据的最简单方法如下:
上面的过程假定已经在代码中声明并设置了有效的 EbsOpen.Application 和 EbsOpen.model 对象。在代码中读取一个变量在VBA代码中是这样的:
Dim Efficiency_meter As EbsOpen.Comp32
Dim dsp As EbsOpen.Comp46
Set dsp = model.Objects.Item("DSP")
Set Efficiency_meter = model.Objects.Item("Efficiency_meter")
eff_max = Efficiency_meter.ETA //read parameter ETA from component Efficieny_Meter
dsp.MEASM = 590.0 //write flow rate of 590 kg/s into measuring point DSP
上面的程序很简单,但由于以下原因而受到限制:
bWriteSuccesful = dsp.MEASM.SetValueInUnit(1000, epUNIT_t_h)
在下面会详细介绍 Get/SetValueInUnit 方法,并在 EbsOpenDemo.xlsm 表单的示例代码中演示。
幸运的是,EbsOpen 的类别、方法和属性足够丰富,它们可以构建一个更通用的数据读取/写入方式。学习下面的 ReadVar 和 WriteVar VBA 函数代码就知道如何做了。这段代码是在 EBSILON 安装文件夹下的 Data\Examples 子文件夹中的 EbsOpenDemo.xlsm 文件里的 utilities 模块中,它可以被导出和导入到VBA项目中。
通过使用 Model Class’ ObjectbyContext 的方法,可以通过名称找到一个对象并将其分配给更通用的 EbsOpen.Data 类别,它的 EbsValues 属性可以用于按名称来查找任何对象参数。这些类别、方法和属性一起可以用来构造一个函数,该函数可以根据字符串参数来读取/写入组件、宏或流的名称和需要读取/写入的参数的数据。如上所述,还可以用测量单位相关的方法(GetValueInUnit和SetValueInUnit)来处理测量单位的转换。
使用测量单位方法需要知道 EBSILON 支持的各种测量单位的整数代码。这些代码的列表可以在 EbsOpen 里的 EpUnit 枚举中找到。下面是类型库查看器的截图,它显示了总共493个可用的测量单位代码的一部分:
也可以使用IDE中的代码完成特性,通过在子程序或函数中输入 EbsOpen.epUnit 来确定合适的测量单位代码,以获得可能的值列表。在VBA中如下所示:
EBSILON 帮助文件中也有测量单位代码的列表:http://www.ebsilon.com/help/EN/webframe.html#UnitsOfMeasure.html
注意:如果所需单位代码的文本是已知的,那么 EbsOpen.epUnit 部分可能会被删除,例如只使用 epUNIT_lb_s 来表示 lb/sec。对于像组件方法(component methods)这样的无尺寸参数,在 EbsOpenDemo.xlsm 例子中,当使用 ReadVar 时用 epUNIT_NONE,当使用 WriteVar 函数时用 epUNIT_INTEGRAL。可能需要在调试器中查看想读写的变量的 EbsValue 项来确定正确的测量单位代码。使用错误的测量单位代码会导致读写失败。检查 ReadVar 和 WriteVar 函数的返回值以确保它们成功。ReadVar 失败时返回字符串 "NaN",WriteVar 返回值为假。
下面是一些使用 ReadVar 函数的常见例子 -- 如果复制这段代码,则应适当更改所显示的工况(Profile)、组件、流和宏的名称:
从设计工况(Profile)中读取流的焓值(Btu/lb):
ReadVar(model, "Design", "H2O_DAMPF", "H", EbsOpen.EpUnit.epUNIT_btu_lb)
读取一条电力管道,单位是千瓦:
ReadVar(model, "Design", "Net_Electric", "Q", epUNIT_kW)
读取组件的设定规范值,单位为psia:
ReadVar(model, "Design", "Piping", "DP", epUNIT_psia)
从组件中读取方法值,无计量单位:
ReadVar(model, "Design", "Piping", "FMODE", epUNIT_NONE)
从逻辑管道中读取一个数值,单位为kW:
ReadVar(model, "Design", "HEAT", "Q", epUNIT_kW)
从宏对象中读取一个值:
ReadVar(model, "Design", "GSCND_1", "POPER", EbsOpen.EpUnit.epUNIT_psia)
从一个名为 GSCND_1 的宏对象内部读取一个组件的值。注意进入宏对象内部的语法:MacroName::ComponentName
ReadVar(model, "OD", "GSCND_1::Measuring_point_1", "MEASM", epUNIT_lb_h)
从一个名为 GSCND_1 的宏对象内部的逻辑管道中读取一个值:
ReadVar(model, "Design", "GSCND_1::Logic_1", "Q", EbsOpen.EpUnit.epUNIT_kW)
WriteVar 函数代码示例:
将以摄氏度为单位的温度写入边界值组件,并将更改保存到磁盘:
WriteVar(model, "Design", "Boundary_value", "T", epUNIT_GrdC, 454.444444, True)
为测量点组件写入测量类型。不要将更改保存到磁盘上:
WriteVar(model, "Design", "MPoint1", "FTYP", EbsOpen.epUNIT_INTEGRAL, 34, False)
注意:如果通过 WriteVar 函数写入的模型在 EBSILON 的另一个实例中被打开,把 SaveFlg 参数设置为真将不会永久改变模型的数据。如果 SaveFlg 设置为假,或者 SaveFlg 设置为真时模型已经打开,则 WriteVar 函数将只改变内存中加载的模型的临时副本而且改变不会是永久性的。
用户定义的模型和工况(Profile)变量(参见 Extras Model Options… Profile-Variables 和 Model-Variables)与组件、流和宏变量的处理方式不同。上面显示的示例 ReadVar 和 WriteVar 函数不能用于读取和写入模型和工况(Profile)变量,因为它们不包含在对象类别中。模型和工况(Profile)变量是在各自对象的配置类别中找到的。下面的 VBA 代码片段显示了如何读写模型和工况(Profile)变量:
模型和工况(Profile)变量没有度量单位且可以是布尔、字符型、整数、实数或字符串类型。请记住这一点,并且当在应用程序中通过 EbsOpen 来读/写这些变量时,要采取适当的措施来考虑这一点。
注意:
- 在接口 EbsOpen.Model 中添加了 SaveCopyAs 方法,在这里模型的副本以不同的名称保存,但当前模型被保留。
- 在接口 EbsOpen.Model 中添加了SimulateNew 和 ValidateNew 方法。
与模拟(Simulate )和验证(Validate)相反,这些方法不需要 CalculationErrors 参数(便于激活基于 .net 的语言)。