發(fā)電廠機組級的性能計算和分析模塊作為監(jiān)控息系統(tǒng)SIS(SupervisoryInfOrmat*tem)的一個重要功能模塊,為其他模塊提供決策依據,是SIS執(zhí)行全廠綜合優(yōu)化服務的基礎。由于各發(fā)電廠系統(tǒng)結構千差萬別,設計開發(fā)具有通用性并且可擴展的發(fā)電廠機組級性能計算和分析模塊無疑具有重要意義。
組件對象模型COM(CompoentObjectModel)是Microsoft提出并在當前被大量使用的分布式組件標準,具有很好的開放性、兼容性和可擴展性。本文介紹了COM技術在發(fā)電廠SIS機組性能計算模塊中的應用。
一、機組性能計算模塊的結構和功能
本文所開發(fā)的發(fā)電廠SIS系統(tǒng)的機組性能計算模塊主要由兩部分組成,包括系統(tǒng)組態(tài)和性能計算兩個子模塊,而性能計算模塊又是一個包括數據通信層、性能計算層和界面層的三層結構模式。軟件結構如圖1所示。
發(fā)電廠系統(tǒng)組態(tài)模塊是一個系統(tǒng)結構的圖形組態(tài)界面,其中包括鍋爐、汽機、加熱器、凝汽器等設備的圖元組件。該模塊具有規(guī)格化布局、智能糾錯和自動連線的功能,通過直接拖拉移動各設備圖元就可很方便的得到系統(tǒng)的組成結構圖,并可以將發(fā)電廠系統(tǒng)和設備的相關信息存儲在組態(tài)圖文件當中。機組性能計算分析模塊通過讀取組態(tài)圖文件獲得發(fā)電廠系統(tǒng)以及設備的一系列參數。性能計算組件通過相關接口讀取系統(tǒng)參數,并通過數據庫接口層獲得計算中所需要的現場實時數據或歷史數據,然后調用系統(tǒng)性能計算的通用模型函數對整個系統(tǒng)進行分析計算,得到一系列能反映發(fā)電廠性能和經濟性指標的實時或離線的數據,zui后在界面層用報表或趨勢圖的形式顯示出來。
二、COM技術特點
COM是一種平臺獨立的、分布式的和面向對象的可創(chuàng)建交互式二進制軟件組件系統(tǒng),是關于如何建立組件以及如何通過組件構建應用程序的一種編程規(guī)范。
從實際應用的角度看,COM中zui基本的元素是組件對象,組件對象之間及組件對象與系統(tǒng)之間通過接口進行互操作。COM實現了對象的封裝,訪問對象的*途徑是通過接口。接口是一組邏輯相關的操作的集合,每個COM對象可以有多個接口,每個接口都是由一個共同的基類IUnknown接口派生,實現了對象接口查詢和生命期控制的基本功能。在由對象和接口構成的COM基本框架中,采用全局*標識符GUID標識組件對象和接口,操作系統(tǒng)可通過查詢注冊表得到對象標識進行對象的創(chuàng)建和初始化。COM組件程序和客戶程序之間通信的橋梁是COM庫,COM庫中提供了對象創(chuàng)建和管理、內存管理及一些標準化操作的相關函數。COM標準提供了可重用機制、進程透明性和安全性機制。此外,COM規(guī)范中還實現了可連接對象機制、結構化存儲、命名綁定和統(tǒng)一數據傳輸等擴展技術[1]。
COM應用是基于客戶/服務器模型的,作為位于操作系統(tǒng)之上的標準中間件,使客戶端和服務器間實現了無縫連接和網絡透明的功能。COM應用模型具有高穩(wěn)定性、強擴展性、高性能、可重用性、語言無關性以及進程透明性等諸多優(yōu)點。鑒于此,將COM技術融入了對SIS模塊的設計當中。
三、基于COM機組性能計算模塊的軟件設計
3.1發(fā)電廠設備圖元組件
在本系統(tǒng)的機組系統(tǒng)結構組態(tài)模塊中,zui初構想是將系統(tǒng)各設備模塊(包括鍋爐、汽缸、加熱器、凝汽器、泵等)都做成COM控件進行圖形加功能的組態(tài),但由于發(fā)電廠機組系統(tǒng)結構一般相當復雜,構成各異,而且各個設備之間并不是獨立運行的,在運行時各設備間會相互影響,因此將各設備功能獨立出來進行組件只用來完成系統(tǒng)圖形組態(tài),得到直觀的系統(tǒng)整體組成結構圖。在圖元組件中定義了設備型式、設備運行狀況、位置序號等一系列屬性,各設備相關參數被作為圖元組件的屬性進行設定并保存。然后在機組性能計算模塊中通過讀取組態(tài)圖文件導出系統(tǒng)結構和設備參數,將系統(tǒng)作為一個整體對象進行下一步的性能計算和分析。
3.2機組性能計算動態(tài)鏈接庫組件
機組性能計算組件是系統(tǒng)的核心部分,主要包括熱力系統(tǒng)性能計算、鍋爐性能計算和機組性能綜合計算。以熱平衡、等效焓降以及智能分析等理論為基礎構建了一組熱力系統(tǒng)和鍋爐性能計算的通用算法模型,然后用COM組件對這些算法模型進行封裝。COM組件可做成兩種類型,即進程內組件(通常是動態(tài)鏈接庫DLL形式)或進程外組件[2]。不能直接進行客戶調用進程外組件的功能,必須通過代理(proxy)模塊和存根(stub)模塊實現過程調用。而客戶調用進程內組件的功能是通過組件接口的虛函數表(VTable)直接進行的,因此效率非常高。針對機組性能計算組件對執(zhí)行速度要求高的特點,采取了通過進程內組件(DLL方式)封裝算法模型以實現快速調用。
從發(fā)電廠性能計算流程和軟件靈活性方面考慮,將鍋爐性能計算組件和熱力系統(tǒng)性能計算組件分開設計。由于計算組件均不涉及到用戶圖形界面,故選用VC6.0中提供的ATL(ActiveTemplaibrary)進行開發(fā),這樣的組件代碼會更加簡練。組件除了提供IUnknown和IDispatch等標準接口外,在鍋爐性能計算組件中還設計了IBoiLSys和IconnectDB等主要接口,IBoilSys接口提供了ReadBProp(讀取鍋爐相關參數),GetBEf(計算鍋爐效率)和GetBIH(計算輸入熱量)等一系列方法函數,而IconnectDB接口主要提供與數據庫通信的相關函數。在熱力系統(tǒng)性能計算組件中還設計了IHeaterSys,IEconomic和IconnectDB等接口,其中IHeaterSys接口提供了ReadHProp(讀取熱力系統(tǒng)相關參數),GetHEf(計算汽機側效率),GetHDi(計算各加熱器抽氣量),GetH-VQ(計算單位蒸汽吸熱量),GetLoad(計算機組負荷)等一系列方法函數,IEconomic接口提供了GetEfd(計算發(fā)電效率),GetTHuse(計算汽機熱耗率)等一系列計算經濟性的方法函數。
通過ATL將以上各組件編譯成DLL庫文件后,在客戶程序模塊中先初始化COM庫,并從類型庫中添加入組件的.tlb文件,就可以創(chuàng)建組件的包裝類,迸而創(chuàng)建組件對象,利用對象完成組件的各項功能。這種COM組件Client/Server實現模式如圖2所示。
將算法模型設計成了COM組件,系統(tǒng)便具有了COM的諸多優(yōu)點。比如若在以后運行過程中需要更新或修改算法模型,只要改變接口函數的具體實現部分,而無須重新設計組件和定義組件接口,重新編譯動態(tài)鏈接庫就可以完成對系統(tǒng)的升級。組件就如一個標準化的零件,為軟件的更新和復用提供了極大的方便。
3.3數據庫接口設計
組件進行機組性能計算和分析時需要獲得相關的實時或歷史的現場數據,組件與相關的現場數據庫間的通信是通過數據庫接口進行的。MicroSoft推出的基于COM技術的OLEDB/ADO技術繼承了COM模型的配置靈活性和健壯性,而且為幾乎所有的關系數據源和非關系數據源提供了高性能的一致的訪問接口,具有良好的通用性和移植性和更快的訪問數據源的速度。OLEDB是一組全新的數據庫底層COM接口,它可以對不同數據源迸行轉換。組件化技術的應用使得OLEDB程序實現了功能分配,從而減輕了服務器端的負荷,因此提高了數據訪問性能。ADO對OLEDB中的大量接口進行了封裝,在模型層次上基于OLEDB,應用上高于OLEDB,不提供底層控制。在VisualC++6.0的ATL中提供了TOLEDB模板類用于簡化OLEDB數據應用程序和數據提供程序的設計[3]。基于VC6開發(fā)的本系統(tǒng)的數據庫接口主要采用OLEDB來設計。
OLEDB由枚舉器(enumerator)、數據源(datasource)、會話(session)、命令(command)、行集(rowset)和事務(transaction)等幾種COM對象組成,各自都包含一系列COM接口,這些對象和接口機制支撐起面向應用的OLEDB模板類。利用OTlFlDB模板類提供的方法函數進行數據庫編程,避免了直接調用COM組件對象和眾多復雜的接口,可簡化操作流程。
由于本系統(tǒng)是基于通用性的,數據源類型和位置具有不可確定性,因此可動態(tài)加載數據源是實現數據訪問的關鍵所在。通過打開一個數據鏈接屬性對話框進行數據源選擇和屬性設置。利用OLEDB模板類實現動態(tài)加載數據源的簡要原理性過程如下:
CDataSourcem-Connect;//數據源對象
CSessionm-Session;//會話對象
m-Connect.Open(AfxGetMainWnd()->
GetSafeHwnd());//彈出數據鏈接屬性對話框,選擇數據源
USES-CONVERSION;
m-Session.Open(m-Connect);//創(chuàng)建會話對象
OLEDB模板通過CAccessorRowset類使用訪問器(Accessor)和行集設置和檢索數據,并可通過Cac-cessorRowset的派生類CCommand執(zhí)行SQL數據查詢命令。CAccessorRowset模板類的結構見圖3。
本系統(tǒng)中通過CColumns對象的open()函數獲取數據源表中的列信息;然后通過CManualAccessor(手動存取器類)對象將數據源表中的所有列進行綁定操作,以便能快速地將各表的所有數據記錄以列表的形式顯示出來。
在獲取了數據源的表和列的具體信息后,接下來才可為程序中已定義好的各運算變量確定各自在數據源中對應的表名和列名。在系統(tǒng)運行過程中通過CDynamicAccessor(動態(tài)存取器類)對象來動態(tài)創(chuàng)建訪問器并從行集中獲得特定列的數據信息,從而對各變量進行賦值。
通過以上操作過程就可基本實現機組性能計算模塊與現場數據庫平臺間的數據通信。由于采用了OLEDB標準設計,系統(tǒng)為各類數據源提供了一個統(tǒng)一而且快速靈活的數據訪問接口。
四、結束語
本文設計開發(fā)的發(fā)電廠機組級的性能計算和分析模塊由于采用了COM技術,在設計開發(fā)中具有擴展方便、通用性好和靈活性高等優(yōu)點。作為SIS系統(tǒng)重要的基礎模塊,在發(fā)電廠現場應用中運行、性能穩(wěn)定,為SIS系統(tǒng)其他模塊的功能充分實現提供了可靠的保障。
SIS系統(tǒng)中的經濟性分析、負荷分配和全廠調度等其他功能模塊也可采用COM組件的形式來構架,會十分有利于系統(tǒng)集成和功能擴展。