发电厂机组级的性能计算和分析模块作为监控息系统SIS(SupervisoryInfOrmat*tem)的一个重要功能模块,为其他模块提供决策依据,是SIS执行全厂综合优化服务的基础。由于各发电厂系统结构千差万别,设计开发具有通用性并且可扩展的发电厂机组级性能计算和分析模块无疑具有重要意义。
组件对象模型COM(CompoentObjectModel)是Microsoft提出并在当前被大量使用的分布式组件标准,具有很好的开放性、兼容性和可扩展性。本文介绍了COM技术在发电厂SIS机组性能计算模块中的应用。
一、机组性能计算模块的结构和功能
本文所开发的发电厂SIS系统的机组性能计算模块主要由两部分组成,包括系统组态和性能计算两个子模块,而性能计算模块又是一个包括数据通信层、性能计算层和界面层的三层结构模式。软件结构如图1所示。
发电厂系统组态模块是一个系统结构的图形组态界面,其中包括锅炉、汽机、加热器、凝汽器等设备的图元组件。该模块具有规格化布局、智能纠错和自动连线的功能,通过直接拖拉移动各设备图元就可很方便的得到系统的组成结构图,并可以将发电厂系统和设备的相关信息存储在组态图文件当中。机组性能计算分析模块通过读取组态图文件获得发电厂系统以及设备的一系列参数。性能计算组件通过相关接口读取系统参数,并通过数据库接口层获得计算中所需要的现场实时数据或历史数据,然后调用系统性能计算的通用模型函数对整个系统进行分析计算,得到一系列能反映发电厂性能和经济性指标的实时或离线的数据,zui后在界面层用报表或趋势图的形式显示出来。
二、COM技术特点
COM是一种平台独立的、分布式的和面向对象的可创建交互式二进制软件组件系统,是关于如何建立组件以及如何通过组件构建应用程序的一种编程规范。
从实际应用的角度看,COM中zui基本的元素是组件对象,组件对象之间及组件对象与系统之间通过接口进行互操作。COM实现了对象的封装,访问对象的*途径是通过接口。接口是一组逻辑相关的操作的集合,每个COM对象可以有多个接口,每个接口都是由一个共同的基类IUnknown接口派生,实现了对象接口查询和生命期控制的基本功能。在由对象和接口构成的COM基本框架中,采用全局*标识符GUID标识组件对象和接口,操作系统可通过查询注册表得到对象标识进行对象的创建和初始化。COM组件程序和客户程序之间通信的桥梁是COM库,COM库中提供了对象创建和管理、内存管理及一些标准化操作的相关函数。COM标准提供了可重用机制、进程透明性和安全性机制。此外,COM规范中还实现了可连接对象机制、结构化存储、命名绑定和统一数据传输等扩展技术[1]。
COM应用是基于客户/服务器模型的,作为位于操作系统之上的标准中间件,使客户端和服务器间实现了无缝连接和网络透明的功能。COM应用模型具有高稳定性、强扩展性、高性能、可重用性、语言无关性以及进程透明性等诸多优点。鉴于此,将COM技术融入了对SIS模块的设计当中。
三、基于COM机组性能计算模块的软件设计
3.1发电厂设备图元组件
在本系统的机组系统结构组态模块中,zui初构想是将系统各设备模块(包括锅炉、汽缸、加热器、凝汽器、泵等)都做成COM控件进行图形加功能的组态,但由于发电厂机组系统结构一般相当复杂,构成各异,而且各个设备之间并不是独立运行的,在运行时各设备间会相互影响,因此将各设备功能独立出来进行组件只用来完成系统图形组态,得到直观的系统整体组成结构图。在图元组件中定义了设备型式、设备运行状况、位置序号等一系列属性,各设备相关参数被作为图元组件的属性进行设定并保存。然后在机组性能计算模块中通过读取组态图文件导出系统结构和设备参数,将系统作为一个整体对象进行下一步的性能计算和分析。
3.2机组性能计算动态链接库组件
机组性能计算组件是系统的核心部分,主要包括热力系统性能计算、锅炉性能计算和机组性能综合计算。以热平衡、等效焓降以及智能分析等理论为基础构建了一组热力系统和锅炉性能计算的通用算法模型,然后用COM组件对这些算法模型进行封装。COM组件可做成两种类型,即进程内组件(通常是动态链接库DLL形式)或进程外组件[2]。不能直接进行客户调用进程外组件的功能,必须通过代理(proxy)模块和存根(stub)模块实现过程调用。而客户调用进程内组件的功能是通过组件接口的虚函数表(VTable)直接进行的,因此效率非常高。针对机组性能计算组件对执行速度要求高的特点,采取了通过进程内组件(DLL方式)封装算法模型以实现快速调用。
从发电厂性能计算流程和软件灵活性方面考虑,将锅炉性能计算组件和热力系统性能计算组件分开设计。由于计算组件均不涉及到用户图形界面,故选用VC6.0中提供的ATL(ActiveTemplaibrary)进行开发,这样的组件代码会更加简练。组件除了提供IUnknown和IDispatch等标准接口外,在锅炉性能计算组件中还设计了IBoiLSys和IconnectDB等主要接口,IBoilSys接口提供了ReadBProp(读取锅炉相关参数),GetBEf(计算锅炉效率)和GetBIH(计算输入热量)等一系列方法函数,而IconnectDB接口主要提供与数据库通信的相关函数。在热力系统性能计算组件中还设计了IHeaterSys,IEconomic和IconnectDB等接口,其中IHeaterSys接口提供了ReadHProp(读取热力系统相关参数),GetHEf(计算汽机侧效率),GetHDi(计算各加热器抽气量),GetH-VQ(计算单位蒸汽吸热量),GetLoad(计算机组负荷)等一系列方法函数,IEconomic接口提供了GetEfd(计算发电效率),GetTHuse(计算汽机热耗率)等一系列计算经济性的方法函数。
通过ATL将以上各组件编译成DLL库文件后,在客户程序模块中先初始化COM库,并从类型库中添加入组件的.tlb文件,就可以创建组件的包装类,迸而创建组件对象,利用对象完成组件的各项功能。这种COM组件Client/Server实现模式如图2所示。
将算法模型设计成了COM组件,系统便具有了COM的诸多优点。比如若在以后运行过程中需要更新或修改算法模型,只要改变接口函数的具体实现部分,而无须重新设计组件和定义组件接口,重新编译动态链接库就可以完成对系统的升级。组件就如一个标准化的零件,为软件的更新和复用提供了极大的方便。
3.3数据库接口设计
组件进行机组性能计算和分析时需要获得相关的实时或历史的现场数据,组件与相关的现场数据库间的通信是通过数据库接口进行的。MicroSoft推出的基于COM技术的OLEDB/ADO技术继承了COM模型的配置灵活性和健壮性,而且为几乎所有的关系数据源和非关系数据源提供了高性能的一致的访问接口,具有良好的通用性和移植性和更快的访问数据源的速度。OLEDB是一组全新的数据库底层COM接口,它可以对不同数据源迸行转换。组件化技术的应用使得OLEDB程序实现了功能分配,从而减轻了服务器端的负荷,因此提高了数据访问性能。ADO对OLEDB中的大量接口进行了封装,在模型层次上基于OLEDB,应用上高于OLEDB,不提供底层控制。在VisualC++6.0的ATL中提供了TOLEDB模板类用于简化OLEDB数据应用程序和数据提供程序的设计[3]。基于VC6开发的本系统的数据库接口主要采用OLEDB来设计。
OLEDB由枚举器(enumerator)、数据源(datasource)、会话(session)、命令(command)、行集(rowset)和事务(transaction)等几种COM对象组成,各自都包含一系列COM接口,这些对象和接口机制支撑起面向应用的OLEDB模板类。利用OTlFlDB模板类提供的方法函数进行数据库编程,避免了直接调用COM组件对象和众多复杂的接口,可简化操作流程。
由于本系统是基于通用性的,数据源类型和位置具有不可确定性,因此可动态加载数据源是实现数据访问的关键所在。通过打开一个数据链接属性对话框进行数据源选择和属性设置。利用OLEDB模板类实现动态加载数据源的简要原理性过程如下:
CDataSourcem-Connect;//数据源对象
CSessionm-Session;//会话对象
m-Connect.Open(AfxGetMainWnd()->
GetSafeHwnd());//弹出数据链接属性对话框,选择数据源
USES-CONVERSION;
m-Session.Open(m-Connect);//创建会话对象
OLEDB模板通过CAccessorRowset类使用访问器(Accessor)和行集设置和检索数据,并可通过Cac-cessorRowset的派生类CCommand执行SQL数据查询命令。CAccessorRowset模板类的结构见图3。
本系统中通过CColumns对象的open()函数获取数据源表中的列信息;然后通过CManualAccessor(手动存取器类)对象将数据源表中的所有列进行绑定操作,以便能快速地将各表的所有数据记录以列表的形式显示出来。
在获取了数据源的表和列的具体信息后,接下来才可为程序中已定义好的各运算变量确定各自在数据源中对应的表名和列名。在系统运行过程中通过CDynamicAccessor(动态存取器类)对象来动态创建访问器并从行集中获得特定列的数据信息,从而对各变量进行赋值。
通过以上操作过程就可基本实现机组性能计算模块与现场数据库平台间的数据通信。由于采用了OLEDB标准设计,系统为各类数据源提供了一个统一而且快速灵活的数据访问接口。
四、结束语
本文设计开发的发电厂机组级的性能计算和分析模块由于采用了COM技术,在设计开发中具有扩展方便、通用性好和灵活性高等优点。作为SIS系统重要的基础模块,在发电厂现场应用中运行、性能稳定,为SIS系统其他模块的功能充分实现提供了可靠的保障。
SIS系统中的经济性分析、负荷分配和全厂调度等其他功能模块也可采用COM组件的形式来构架,会十分有利于系统集成和功能扩展。