翟偉翔 蘇 適
(云南電力試驗(yàn)研究院新能源及智能電網(wǎng)研究所,云南 昆明 650217)
隨著節(jié)能調(diào)度、低碳減排等政策的實(shí)施,火電廠相繼安裝了廠級自動化發(fā)電控制(automatic generation control,AGC)負(fù)荷分配系統(tǒng)、廠級母線電壓控制系統(tǒng)、節(jié)能指標(biāo)管理和煤耗上傳等專用系統(tǒng)。如果這些系統(tǒng)與DCS連接采用傳統(tǒng)的硬接線方式,會帶來DCS、電纜和PLC設(shè)備的擴(kuò)容以及建設(shè)費(fèi)用的劇增。目前,與全廠機(jī)組DCS間的實(shí)時(shí)、雙向、多點(diǎn)的數(shù)據(jù)通信已成為這類系統(tǒng)的配置主流。
云南電網(wǎng)省調(diào)火電廠發(fā)電機(jī)組投產(chǎn)于1995~2005年,大多配置了相對先進(jìn)的DCS系統(tǒng),包括美國艾默生的Ovation、美國美卓的maxDNA、日本日立的HIACS和國電智深的EDPF。上述DCS系統(tǒng)均提供了形式各樣的數(shù)據(jù)通信接口方式,其中國電智深EDPF僅支持單向讀取數(shù)據(jù)。有的機(jī)組老版本的DCS系統(tǒng)針對數(shù)據(jù)通信接口的支持并不完善,例如Max1000和Max1000 Plus系統(tǒng)。前者通過硬件Modbus主站模件的形式提供外接通信,數(shù)據(jù)量與通信速率皆有限制;后者盡管提供了API數(shù)據(jù)接口開發(fā)方式,但由于DCS令牌環(huán)網(wǎng)限制,這種跨DPU的大量數(shù)據(jù)通信會造成環(huán)網(wǎng)數(shù)據(jù)擁堵和傳輸緩慢等故障。
2010年,云南電網(wǎng)省調(diào)7家火電廠相繼投運(yùn)了廠級AGC負(fù)荷分配系統(tǒng),將原來的單機(jī)AGC調(diào)度升級為全廠AGC調(diào)度方式。廠級AGC負(fù)荷分配系統(tǒng)與DCS間通信接口方案如圖1所示。
圖1 DCS通信接口方案Fig.1 Solution of DCS communication interface
系統(tǒng)經(jīng)DCS數(shù)據(jù)接口采集全廠機(jī)組運(yùn)行參數(shù),通過機(jī)組性能計(jì)算、基于快速性與全廠經(jīng)濟(jì)性的優(yōu)化分配,同時(shí)充分考慮到機(jī)組運(yùn)行工況,發(fā)出全廠機(jī)組指令分配結(jié)果,由DCS協(xié)調(diào)控制系統(tǒng)調(diào)節(jié)負(fù)荷,以實(shí)現(xiàn)廠級AGC調(diào)度模式。該系統(tǒng)符合“統(tǒng)一調(diào)度、分級管理”的原則,在電廠的節(jié)能減排、優(yōu)化運(yùn)行中發(fā)揮著重要作用。其中DCS為美國美卓maxDNA系統(tǒng)。
①負(fù)荷分配工作站計(jì)算機(jī)
工作站計(jì)算機(jī)安裝值長操作畫面軟件“力控”、機(jī)組性能計(jì)算軟件、負(fù)荷經(jīng)濟(jì)性優(yōu)化分配軟件和DCS通信接口OPC服務(wù)器軟件。通過DCS數(shù)據(jù)通信接口OPC服務(wù)器,全部機(jī)組運(yùn)行信息匯集于“力控”實(shí)時(shí)庫與畫面。運(yùn)行人員根據(jù)調(diào)度下達(dá)的全廠AGC總指令,按既定分配模式、策略和約束條件,向各機(jī)組下達(dá)分配后負(fù)荷指令。
②機(jī)組DCS系統(tǒng)Link站與歷史站
DCS系統(tǒng)通常配備Link站、歷史站、工程師站、操作員站和大屏顯示站。maxDNA DCS通過軟件背板(software backplane,SBP)機(jī)制完成DPU間和DPU與計(jì)算機(jī)間的網(wǎng)絡(luò)通信,與分布式實(shí)時(shí)庫的軟件接口類似。SBP支持?jǐn)?shù)據(jù)注冊、同步讀寫、異步讀寫和異步例外報(bào)告回調(diào)等方式,通信效率較高。按功能與權(quán)限劃分原則,DCS通信接口軟件安裝在歷史站與Link站較為合適。又因?yàn)檫@些DCS計(jì)算機(jī)安裝軟件多且雜,可靠性較弱,需要不定期的重啟維護(hù),所以通信接口軟件被開發(fā)成冗余OPC服務(wù)器,一個(gè)處于運(yùn)行態(tài)的激活SBP通信,另一個(gè)處于備用態(tài)同步數(shù)據(jù)。
maxDNA外部通信接口開發(fā)屬于API方式。安裝maxDNA軟件后,系統(tǒng)會注冊一個(gè)ActiveX控件MCS SbpCtl,控件可直接插入Visual C++和Visual Basic開發(fā)的對話框(或視圖面板)中使用[2]。Windows模板類庫 (Windows template library,WTL)為 Visual C++ 內(nèi)嵌開發(fā)平臺,通常用于具有窗口界面com服務(wù)器的開發(fā),使用方法與活動模板類庫 (active template library,ATL)類似,而ATL通常開發(fā)的是沒有窗口的dll或exe類型的com服務(wù)器。
WTL中控件的使用方法如下。
為提高通信效率,接口軟件采用異步回調(diào)的變量讀寫方式。首先,通過控件的PutMaxTime和PutMin-Time配置最大與最小更新時(shí)間;其次,通過控件的FillDataObject函數(shù)向SBP注冊讀寫變量;然后,數(shù)據(jù)變化超過死區(qū)或更新時(shí)間到達(dá)時(shí),控件已注冊事件響應(yīng)函數(shù)OnDataUpdate被調(diào)用。該函數(shù)原型有八個(gè)Variant變量和注冊點(diǎn)索引號被傳回,但只有第一個(gè)變量有值,其余都為空。該函數(shù)調(diào)用時(shí),變量名字符串BSTR同時(shí)被傳回,即使沒有用,也一定要用SysFreeString釋放掉,因?yàn)樵擃愖址嵌芽臻g構(gòu)造、接收端釋放的。DCS寫入點(diǎn)命名為XX.ForcedVal(不區(qū)分大小寫),相應(yīng)功能塊輸入量選為.ForcedVal,功能塊工作模式選擇為自動。
HIACS DCS H-5000M通過通信站(communication interface station,CIS)提供外部通信數(shù)據(jù)接口。CIS完成DCS與其他多個(gè)系統(tǒng)(最多8個(gè)接口)的異步通信,允許對通信數(shù)據(jù)和參數(shù)進(jìn)行組態(tài),推薦使用Modbus/TCP 通信協(xié)議[3]。
Modbus是一種事實(shí)工業(yè)標(biāo)準(zhǔn),廣泛應(yīng)用于制造業(yè)、電力、水電、冶金等工業(yè)領(lǐng)域中的數(shù)據(jù)采集和過程控制。從通信介質(zhì)上,Modbus分為 RS-485總線與TCP/IP以太網(wǎng);從協(xié)議幀格式上,Modbus分為遠(yuǎn)程終端(remote terminal unit,RTU)、ASCII和 TCP 三種協(xié)議。TCP協(xié)議數(shù)據(jù)傳輸數(shù)量大、效率高、使用廣泛。Modbus/TCP 通信系統(tǒng)結(jié)構(gòu)如圖2 所示[4-5]。
圖2 Modbus/TCP通信系統(tǒng)結(jié)構(gòu)Fig.2 Structure of Modubs/TCP communication system
圖2中,Modbus主站一般發(fā)起問題幀,是采用Modbus通信協(xié)議時(shí)通信的控制者,對于TCP來說,是客戶端。
Modbus從站應(yīng)答問題幀,是采用Modbus通信協(xié)議時(shí)通信的被動執(zhí)行者,對于TCP來說,是服務(wù)器。Modbus/TCP 常用的 Modbus功能碼有1、2、3、4、5、6、15和16,分別表示讀線圈、讀輸入狀態(tài)、讀保持寄存器、讀輸入寄存器、寫單個(gè)線圈、寫單個(gè)寄存器、寫多個(gè)線圈和寫多個(gè)保持寄存器。15號和16號命令用于接口應(yīng)用程序批量接收DCS數(shù)據(jù),其幀格式與其他命令略有不同,如圖3所示。
圖3 Modbus/TCP協(xié)議15、16號命令幀格式Fig.3 The format of the 15thand 16thcommand frames in Modbus/TCP
其中,對于2字節(jié)數(shù)據(jù),高字節(jié)在前,低字節(jié)在后。事務(wù)ID為順序標(biāo)志,2字節(jié),Modbus協(xié)議標(biāo)志為0。長度字段為后續(xù)幀字節(jié)長度,為7加實(shí)際數(shù)據(jù)區(qū)長度,除15、16號外,其余命令沒有實(shí)際數(shù)據(jù)區(qū)長度字段,為6加實(shí)際數(shù)據(jù)區(qū)長度。線圈地址為1~10000,寫寄存器地址通常為40001~50000,起始地址按0基地址相對量算。寫入模擬量無論是浮點(diǎn)型還是16位整型,都應(yīng)變換原有字節(jié)序,高字節(jié)在前,低字節(jié)在后。一個(gè)字節(jié)寫8個(gè)開關(guān)量,按地址排序從低位起。Modbus幀形成后,利用winsock的send函數(shù)發(fā)送時(shí),其函數(shù)參數(shù)“l(fā)en”應(yīng)配置為實(shí)際幀長度。
Ovation為美國艾默生過程控制公司的代表性DCS,廣泛應(yīng)用于國內(nèi)超臨界與超超臨界大型火力發(fā)電機(jī)組的主機(jī)控制系統(tǒng)。Ovation使用Unix作為操作員站和工程師站,并將一臺專用的Windows電腦作為OPC服務(wù)器與外界做通信接口。
DCS所有點(diǎn)都可通過OPC服務(wù)器對外發(fā)布。對于寫入DCS的點(diǎn),必須配置在OPC服務(wù)器上。OPC服務(wù)器重啟后,其上配置的寫入點(diǎn)會被重新初始化,不能恢復(fù)原有值,如其他控制器使用到這些點(diǎn),需做數(shù)據(jù)保護(hù),例如可以利用“心跳”信號邏輯,發(fā)現(xiàn)OPC服務(wù)器故障時(shí),進(jìn)行數(shù)據(jù)保持,待OPC服務(wù)器恢復(fù)后再重新選入。
OPC是國際工業(yè)標(biāo)準(zhǔn),OPC規(guī)范把硬件供應(yīng)商和軟件開發(fā)商分離開來,在設(shè)備、數(shù)據(jù)庫等數(shù)據(jù)源和客戶之間架起了一座橋梁,提供了一種軟件協(xié)議規(guī)范。管理這個(gè)標(biāo)準(zhǔn)的國際組織是OPC基金會,它是由一些世界上占領(lǐng)先地位的自動化公司與微軟(Microsoft)緊密合作而建立的,成員有400多家,幾乎所有電廠DCS供應(yīng)商都參與其中。OPC規(guī)范主要包括OPC數(shù)據(jù)訪問規(guī)范、OPC歷史數(shù)據(jù)訪問規(guī)范等。OPC數(shù)據(jù)訪問規(guī)范用于從OPC服務(wù)器獲取實(shí)時(shí)數(shù)據(jù),應(yīng)用廣泛[6-9]。
OPC通信采用Server/Client架構(gòu),Ovation通信接口的開發(fā)主要就是OPC客戶端的開發(fā)。OPC服務(wù)器通常支持兩種類型的訪問接口:自定義接口和自動化接口,它們分別為不同的編程語言環(huán)境提供訪問機(jī)制,自定義接口適合VC++設(shè)計(jì),運(yùn)行性能優(yōu)良。開發(fā)步驟如下。
①將OPC數(shù)據(jù)訪問規(guī)范的頭文件添加入VC++工程:opccomn.h,opccomn_i.c,opcda.h,opcda_i.c,opcda_catsid.c,opcEnum.h,opcEnum_i.c,opcenum_clsid.c。
②枚舉指定計(jì)算機(jī)上的OPC服務(wù)器。首先使用CoCreateInstance(CLSID_OpcServerList,NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServerList,(void**)&pOPCSvrList)或 CoCreateInstanceEx(CLSID_Opc-ServerList,NULL,CLSCTX_REMOTE_SERVER,pServerinfo,1,&mqi)創(chuàng)建接口 IOPCServerList實(shí)例;再使用EnumClassesOfCategories(1,&OPCDA_ImpList,1,&OPCDA_ImpList,&pEnum)創(chuàng)建 IEnumGUID 對象實(shí)例;最后通過IEnumGUID對象的next函數(shù)逐一獲得所有服務(wù)器的CLSID,再調(diào)用ProgIDFromCLSID就獲得了OPC服務(wù)器程序名。經(jīng)過該步可確認(rèn)OPC服務(wù)器的安裝情況與服務(wù)器名。
③連接OPC服務(wù)器。首先調(diào)用CLSIDFromProgID,由程序名獲得服務(wù)器的CLSID,然后利用CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnknown,(void**)&pUnknown)或 CoCreateInstanceEx(clsid,NULL,CLSCTX_REMOTE_SERVER,pServerinfo,1,&mqi),最終獲得服務(wù)器的IUnknown接口指針。
④注冊連接點(diǎn)關(guān)斷函數(shù)。定義COPCShutdown,從IOPCShutdown接口派生,實(shí)現(xiàn)其關(guān)斷回調(diào)函數(shù)。利用IUnknown的QueryInterface(IID_IConnectionPoint-Container)查詢到連接點(diǎn)容器對象,再由容器的Find-ConnectionPoint(IID_IOPCShutdown)進(jìn)一步找到關(guān)斷回調(diào)的IConnectionPoint對象。然后通過連接點(diǎn)對象的Advise()將步驟②中的COPCShutdown對象的IUnknown接口告知服務(wù)器對象。
⑤創(chuàng)建OPC項(xiàng)容器——OPC組。利用步驟③中IUnknown的 QueryInterface(IID_IOPCServer)查詢到OPC服務(wù)器對象指針,再調(diào)用AddGroup函數(shù)創(chuàng)建組,通過服務(wù)器對象的GetGroupByName獲得組對象指針。
⑥向組中添加OPC項(xiàng)。首先OPC項(xiàng)對象按OPCITEMDEF結(jié)構(gòu)數(shù)組組織。然后通過組對象再次獲得組的IOPCItemMgt接口指針。IOPCItemMgt對象指針調(diào)用AddItems添加OPC項(xiàng),函數(shù)返回OPCITEMRESULT中包含項(xiàng)在服務(wù)器中的句柄。
⑦同步讀所有項(xiàng)。通過組的IUnknown接口找到IID_IOPCSyncIO接口,再用 CoTaskMemAlloc構(gòu)造OPCHANDLE數(shù)組,并逐單元填入步驟⑥返回的項(xiàng)服務(wù)器句柄。接口的 Read()函數(shù)調(diào)用后返回的OPCITEMSTATE數(shù)組包含讀回?cái)?shù)據(jù),根據(jù)其中的客戶端句柄找到該數(shù)據(jù),并正確賦值。
⑧注冊數(shù)據(jù)變化等回調(diào)函數(shù)。定義COPCData-CallBack類,使其從IOPCDataCallback接口派生,實(shí)現(xiàn)數(shù)據(jù)變化、寫結(jié)束、讀結(jié)束回調(diào)函數(shù)。服務(wù)器注冊方法同步驟④,找到IID_IOPCDataCallback接口指針,調(diào)用其Advise()完成注冊。
⑨異步寫OPC項(xiàng)。利用組接口指針找到IID_IOPCAsyncIO2接口指針,調(diào)用其Write()函數(shù),傳遞事前構(gòu)造的OPCHANDLE和VARIANT數(shù)組完成數(shù)據(jù)項(xiàng)異步寫。
至此,當(dāng)OPC服務(wù)器數(shù)據(jù)到達(dá)更新時(shí)間或數(shù)據(jù)變化超過死區(qū)時(shí),會通過步驟⑨中的回調(diào)函數(shù)通知OPC客戶端。OPC使用完畢后,應(yīng)嚴(yán)格按以下順序斷開OPC連接。
①斷開連接點(diǎn)。分別得到關(guān)斷連接點(diǎn)和數(shù)據(jù)回調(diào)連接點(diǎn)指針,通過其Unadvise調(diào)用,注銷連接點(diǎn)。
② 注銷OPC組對象。切勿直接使用組對象的Rlease(),而應(yīng)通過服務(wù)器對象的RemoveGroup函數(shù)傳遞服務(wù)器組對象句柄的方式來釋放掉組對象。
③釋放OPC服務(wù)器對象。調(diào)用服務(wù)器對象Release()函數(shù)完成。
此外,在開發(fā)OPC客戶端時(shí)一定要注意內(nèi)存釋放問題。客戶端堆中分配的內(nèi)存和服務(wù)器函數(shù)返回的指針類型在使用完畢后必須通過CoTaskMemFree釋放掉。通過QueryInterface查詢到的接口指針在使用完畢后,必須通過Release減少引用計(jì)數(shù)。
北京國電智深控制技術(shù)公司生產(chǎn)的DCS系統(tǒng)EDPF,在國內(nèi)也有較廣泛的應(yīng)用,其性能穩(wěn)定,經(jīng)過幾次升級,組態(tài)軟件也得到很大改善。EDPF通過歷史站上的網(wǎng)關(guān)程序?qū)ν獍l(fā)布DCS數(shù)據(jù)點(diǎn),用戶通過專用Excel文件組態(tài)發(fā)送點(diǎn),網(wǎng)關(guān)程序采用UDP無連接的發(fā)送方式,每個(gè)網(wǎng)關(guān)程序有固定的點(diǎn)數(shù)限制,但可以啟動多個(gè)。UDP數(shù)據(jù)包格式如下。
UDP數(shù)據(jù)包接收程序開發(fā)方法很多,MFC下最簡單的方法就是直接從CAsyncSocket類繼承,依次經(jīng)過其Create()創(chuàng)建socket、Connect()連接對端等步驟,最后從其OnReceive()回調(diào)函數(shù)中就能接收到UDP數(shù)據(jù)包,再按其包格式進(jìn)行解析。EDPF的UDP網(wǎng)關(guān)發(fā)送軟件需要注冊運(yùn)行,一臺歷史站可以運(yùn)行多個(gè)這種程序。
HIACS DCS也定義了這種UDP發(fā)送程序,不過與SIS站的Modbus/TCP接口軟件相比,它是單向的。它通過操作員站 (process operation control,POC)和歷史站上的CoreView軟件添加發(fā)送點(diǎn),配置發(fā)送周期(最小為2 s)、接收方IP地址以及端口號。
配置完后,需要啟動managnet.exe開始發(fā)送。對于本地通信,發(fā)送數(shù)據(jù)報(bào)大小最好限制在8 kB以內(nèi),模擬量數(shù)據(jù)包格式如下:包頭標(biāo)志符(1字節(jié))、包數(shù)量(1字節(jié),分次傳送包總量+1)、傳送的數(shù)據(jù)類型數(shù)(1字節(jié))、分次傳送序號(1字節(jié))、機(jī)組單元號(1字節(jié))、傳送的數(shù)據(jù)類型(1字節(jié))、接口號(1字節(jié))、包類型標(biāo)志‘A’(1字節(jié))、‘A’數(shù)據(jù)長度(2字節(jié),模擬量字節(jié)數(shù))和模擬量數(shù)據(jù)區(qū)(模擬量float類型)。開關(guān)量包類型標(biāo)志為‘D’,數(shù)據(jù)區(qū)內(nèi)8個(gè)開關(guān)量點(diǎn)占一個(gè)字節(jié)。
DCS通信接口程序是開展數(shù)據(jù)采集、運(yùn)行指標(biāo)計(jì)算與考核、電廠運(yùn)行優(yōu)化、機(jī)組負(fù)荷分配等工作的基本條件。由于篇幅所限,本文結(jié)合實(shí)際工程總結(jié)了四類分散控制系統(tǒng)數(shù)據(jù)通信接口實(shí)現(xiàn)方案與軟件開發(fā)的關(guān)鍵技術(shù)問題。
OPC作為標(biāo)準(zhǔn)化的技術(shù)規(guī)范,應(yīng)將DCS通信接口軟件開發(fā)成OPC服務(wù)器,從而直接與第三方監(jiān)控軟件或應(yīng)用軟件互連互通。基于本文方案和原理開發(fā)的DCS OPC服務(wù)器已在7個(gè)電廠的廠級AGC系統(tǒng)中得到應(yīng)用,具有運(yùn)行穩(wěn)定、可靠和占用資源少等優(yōu)點(diǎn)。
[1]翟偉翔,劉友寬,蘇適,等.火電廠廠級負(fù)荷優(yōu)化分配系統(tǒng)研制[J].電力自動化設(shè)備,2011,31(3):126 -130.
[2]美國美卓公司.Visual Basic and MCSSbpCtl user reference manual[EB/OL].[2011 -02 -16].軟件安裝目錄McsmaxDOCSAppsDocsMAXSbpCtl.html.
[3]日本日立控制系統(tǒng)有限公司.HIACS系統(tǒng)CoreView對外通訊組態(tài)工具使用說明書[EB/OL].[2011-02-18].http://wenku.baidu.com/view/4169bc8371fe910ef12df806.html.
[4]白焰,鐘艷輝,秦宇飛.基于VC的Modbus協(xié)議通信測試軟件的實(shí)現(xiàn)——Modbus串口通信與Modbus/TCP通信[J].現(xiàn)代電力,2008(6):64-67.
[5]汪義旺,崔鳴,祁春清.RS-485/Modbus在FFU控制系統(tǒng)中的應(yīng)用[J].自動化儀表,2010,31(6):39 -41,44.
[6]陸鳳蘭.OPC標(biāo)準(zhǔn)通信接口在電廠輔控系統(tǒng)集成中的應(yīng)用評論推薦[J].華東電力,2006,34(10):34 -37.
[7]王樹東,董蕾,劉旭東,等.OPC技術(shù)在城市污水處理中的應(yīng)用[J].自動化儀表,2010,31(5):52 -54,58.
[8]陸會明,鄧慧,張智光.實(shí)現(xiàn)電站DCS開放性的OPC開發(fā)方案[J].電力自動化設(shè)備,2007,27(7):95 -97.
[9]盧湛.火電廠輔控系統(tǒng)的集成與應(yīng)用[J].自動化儀表,2010,31(2):43-46.