曲 豫 賓 ,楊 帆 ,李 芳
(南通紡織職業(yè)技術(shù)學(xué)院,南通 226007)
國家電網(wǎng)發(fā)展極為迅速,而電力供應(yīng)的穩(wěn)定及時直接影響著國民經(jīng)濟的發(fā)展,如何及時獲取某個區(qū)域的電網(wǎng)狀態(tài),并對電網(wǎng)運行情況進行分析統(tǒng)計成為各個電網(wǎng)子公司都要解決的問題。特別是在偏遠(yuǎn)的山區(qū),如何能夠保證電網(wǎng)的暢通,及時響應(yīng)網(wǎng)絡(luò)狀態(tài),是一個亟待解決的現(xiàn)實問題。配電自動化指的是利用計算機技術(shù)、通信技術(shù)、傳感器技術(shù),結(jié)合配電設(shè)備等,對配電網(wǎng)進行在線監(jiān)測或者離線數(shù)據(jù)分析,使得配電網(wǎng)可以一直處于正常、高效、經(jīng)濟的運行狀態(tài)。目前,配電網(wǎng)系統(tǒng)中數(shù)據(jù)采集部分應(yīng)用的通信媒體主要有以下幾種方式:短距離長線、市話網(wǎng)、Internet網(wǎng)絡(luò)、自組網(wǎng)絡(luò)(CDPD網(wǎng))、數(shù)傳電臺和GSM無線通信網(wǎng)絡(luò)[1]。不同的通信媒介有其自身的優(yōu)點,應(yīng)該因地制宜選擇不同的傳輸介質(zhì)。GPRS是通用分組無線業(yè)務(wù)(General Packet Radio Service)的英文簡稱,它支持TCP/IP協(xié)議,可以與Internet進行數(shù)據(jù)互聯(lián)。GPRS具有實時性強、數(shù)據(jù)容量大、覆蓋面較廣、信號較強等優(yōu)勢,適合作為配電自動化系統(tǒng)的傳輸介質(zhì)[2]。近年來,已經(jīng)有學(xué)者提出并設(shè)計了完整的基于GPRS的配電網(wǎng)監(jiān)測系統(tǒng)[3-6],文獻中對于服務(wù)器端如何與配電自動化設(shè)備進行接口,服務(wù)器端該如何設(shè)計以滿足用戶需求描述并不多。電網(wǎng)業(yè)務(wù)復(fù)雜,需求靈活,特別是縣市一級的用戶往往要面對個性化的業(yè)務(wù)需求,多變個性化的業(yè)務(wù)需求要求配變電管理系統(tǒng)服務(wù)器設(shè)計能夠快速開發(fā)及部署,針對多變的業(yè)務(wù)需求要能夠?qū)崿F(xiàn)快速迭代,在保證開發(fā)效率的基礎(chǔ)上如何兼顧服務(wù)器系統(tǒng)運行的健壯性,也是配變電管理系統(tǒng)開發(fā)設(shè)計時候要重點解決的問題之一。在軟件架構(gòu)方面進行合理的設(shè)計,采用高內(nèi)聚、低耦合的系統(tǒng)設(shè)計原則,使用成熟穩(wěn)定的2G網(wǎng)絡(luò),或者目前正在逐步完善的3G網(wǎng)絡(luò),通過傳感器收集配電網(wǎng)信息,在服務(wù)器端及時分析處理,可以作為對遠(yuǎn)程配電網(wǎng)監(jiān)測的一個完整的解決方案。
配電網(wǎng)監(jiān)測系統(tǒng)是一個整體的系統(tǒng),需要多個終端硬件、數(shù)據(jù)傳輸網(wǎng)絡(luò)、服務(wù)器處理系統(tǒng)等多個系統(tǒng)的配合完成。配電網(wǎng)遠(yuǎn)程監(jiān)測系統(tǒng)要完成監(jiān)測和數(shù)據(jù)分析任務(wù),需要實現(xiàn)如下的幾個功能模塊:
1)電網(wǎng)傳感器的功能設(shè)計。傳感器處于整個系統(tǒng)的基礎(chǔ)部分,它負(fù)責(zé)整個系統(tǒng)的數(shù)據(jù)采集及上傳,起著下位機的角色。該傳感器在整個系統(tǒng)中又被稱為綜測儀。綜測儀要完成電網(wǎng)數(shù)據(jù)的采集、數(shù)據(jù)的數(shù)字化,以及將數(shù)據(jù)按照約定協(xié)議在應(yīng)用層打包上傳等功能。該部分屬于系統(tǒng)的硬件實現(xiàn)部分,在本文中不再具體闡述。與整個系統(tǒng)框架相關(guān)的是電網(wǎng)傳感器與服務(wù)器通信時候的協(xié)議設(shè)計。綜測儀要向服務(wù)器傳輸諸如停電數(shù)據(jù)、實時數(shù)據(jù)、運行參數(shù)、整點數(shù)據(jù)等電網(wǎng)數(shù)據(jù)信息。
2)遠(yuǎn)程服務(wù)器的功能設(shè)計。遠(yuǎn)程服務(wù)器在整個系統(tǒng)中起著數(shù)據(jù)匯聚的作用,遠(yuǎn)程服務(wù)器采用C#來實現(xiàn),負(fù)責(zé)停電數(shù)據(jù)、實時數(shù)據(jù)、運行參數(shù)以及整點數(shù)據(jù)的接收、分析、處理、存儲,用戶管理,電網(wǎng)線路管理,下位機綜測儀管理,系統(tǒng)日志管理等。
3)數(shù)據(jù)展示模塊的功能設(shè)計。數(shù)據(jù)展示模塊是用戶直接查看,分析數(shù)據(jù)的模塊,設(shè)計的原則重在給用戶提供快捷方便的數(shù)據(jù)展示頁面,提高用戶的體驗。系統(tǒng)設(shè)計采用Web頁面及基于Android的手機客戶端展示兩種方式。Web頁面具有易于部署、用戶無須升級等優(yōu)點,而Android手機客戶端具有方便,可隨時隨地訪問數(shù)據(jù)、管理數(shù)據(jù)等優(yōu)點,而且在手機客戶端上也可以實現(xiàn)較為復(fù)雜的業(yè)務(wù)邏輯,滿足用戶的個性化數(shù)據(jù)管理需求。
配電網(wǎng)監(jiān)測系統(tǒng)的核心在于綜測儀硬件的實現(xiàn),系統(tǒng)的軟件架構(gòu)實現(xiàn),高性能多并發(fā)服務(wù)器設(shè)計,以及具有良好用戶體驗客戶端的設(shè)計。其中硬件功能的實現(xiàn)不屬于本文論述的內(nèi)容。本文的重點在于軟件架構(gòu)實現(xiàn)及服務(wù)器設(shè)計上。目前配電網(wǎng)監(jiān)測系統(tǒng)主要面向地市級電網(wǎng)子公司,因此可擴展,易于部署和維護的服務(wù)器設(shè)計才能更好地滿足用戶需求。
高內(nèi)聚低耦合的軟件架構(gòu)設(shè)計有利于軟件系統(tǒng)功能的擴展和傳輸介質(zhì)的升級,系統(tǒng)架構(gòu)設(shè)計見圖1。通用的協(xié)議設(shè)計,使得整個系統(tǒng)具有良好的擴展性。具體到各層分別實現(xiàn)不同的業(yè)務(wù)邏輯:①數(shù)據(jù)采集層,負(fù)責(zé)數(shù)據(jù)采集及傳輸。數(shù)據(jù)采集層與傳輸層之間采用自定義協(xié)議,使用socket通信,此種方案的優(yōu)點在于避免中間層,服務(wù)器可以設(shè)計高并發(fā)的架構(gòu)以承載多個綜測儀終端,提高傳輸效率。②數(shù)
據(jù)采集層與傳輸層使用TCP協(xié)議進行雙向通信,傳輸層采用成熟的2G網(wǎng)絡(luò)或者3G網(wǎng)絡(luò),傳輸層負(fù)責(zé)把數(shù)據(jù)采集層獲取的數(shù)據(jù)完整傳輸?shù)綐I(yè)務(wù)處理層中去。③業(yè)務(wù)處理層作為數(shù)據(jù)的交匯層,負(fù)責(zé)解析數(shù)據(jù),對數(shù)據(jù)進行分析、處理、存儲。該層的關(guān)鍵問題是數(shù)據(jù)接收和數(shù)據(jù)持久化。為了提高系統(tǒng)開發(fā)效率以及提高系統(tǒng)穩(wěn)定性,數(shù)據(jù)持久化采用ORM進行處理。采用ORM設(shè)計的優(yōu)點是解除業(yè)務(wù)處理邏輯與數(shù)據(jù)存儲的耦合,便于數(shù)據(jù)庫的更新和調(diào)整。目前系統(tǒng)采用SQL Server數(shù)據(jù)庫進行數(shù)據(jù)存儲,未來節(jié)約成本可以采用MySQL數(shù)據(jù)庫進行數(shù)據(jù)存儲。數(shù)據(jù)接口層采用Microsoft ADO.NET Entity Framwok進行實現(xiàn)。在數(shù)據(jù)接口層,采用面向?qū)ο蟮木幊趟枷胍约皵?shù)據(jù)庫視圖可以有效解決業(yè)務(wù)重構(gòu)問題。④數(shù)據(jù)展示層負(fù)責(zé)電網(wǎng)數(shù)據(jù)的展示。為了提高用戶體驗,Web頁面采用Jquery技術(shù)進行異步刷新,展示電網(wǎng)實時數(shù)據(jù),采用圖表控件可視化展示電網(wǎng)運行參數(shù)等數(shù)據(jù)。
Windows操作系統(tǒng)提供了選擇、異步選擇、事件選擇、重疊I/O和完成端口(Completion Port)共5種I/O模型。每一種模型均適用于一種特定的應(yīng)用場景[7]。選擇模型通過輪詢網(wǎng)絡(luò)讀和寫隊列方式socket提供服務(wù);異步選擇模型基于Windows窗口消息機制進行事件處理;事件選擇模型為每個socket連接建立事件對象,通過事件等待模型提供服務(wù);重疊I/O模型基于I/O端口,在該端口上提交重疊結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu),端口完成時使用異步事件對象模型或者完成例程進行操作。為了提高系統(tǒng)并發(fā)性,系統(tǒng)設(shè)計采用基于IOCP的模型。IOCP模型是Windows上非常復(fù)雜的網(wǎng)絡(luò)編程模型,該模型引入完成端口的概念,通過多個工作行程在完成端口上進行業(yè)務(wù)操作。每個socket都綁定在一個完成端口上,通過重疊I/O異步發(fā)送數(shù)據(jù)收發(fā)。基于IOCP的網(wǎng)絡(luò)模型工作流程如圖2所示。
圖1 配電網(wǎng)監(jiān)測系統(tǒng)分層架構(gòu)設(shè)計
在.NET平臺上,完成基于IOCP的網(wǎng)絡(luò)通信過程,提供了更加方便友好的使用方法。該模型是Windows系統(tǒng)中最復(fù)雜的網(wǎng)絡(luò)編程模型,提供了良好的擴展性。系統(tǒng)中配電網(wǎng)遠(yuǎn)程監(jiān)測系統(tǒng)的服務(wù)器設(shè)計共涉及核心類5個,以類庫的方式為整個解決方案提供應(yīng)用類。服務(wù)器類庫結(jié)構(gòu)圖見圖3。
SocketListener類是服務(wù)器包的核心類,負(fù)責(zé)服務(wù)器啟動及監(jiān)聽,數(shù)據(jù)讀寫操作等。該類以單件模式運行。整個系統(tǒng)中運行一個SocketListener類的實例對象,在端口7020進行監(jiān)聽。BufferManager類用于對Socket-AsyncEventArgs所使用的緩沖區(qū)集中進行管理,便于緩沖區(qū)的分配釋放與回收。MySocketAsyncEventArgs是自定義的SocketAsyncEventArgs類,用于定義配變電管理系統(tǒng)數(shù)據(jù)收發(fā)中所要用到的信息,Socket-AsyncEventArgsPool是用于保存SocketAsyncEventArgs對象的池,該池以棧的形式進行對象分配回收,該工具類同時也作為發(fā)送數(shù)據(jù)請求指令的統(tǒng)一入口。Token類中定義了用于同步界面與業(yè)務(wù)邏輯的處理方法,通過事件機制,異步刷新客戶端狀態(tài)展示。MessageHandler類負(fù)責(zé)處理各種類型的報文信息,比如整點數(shù)據(jù)、統(tǒng)計數(shù)據(jù)、停電數(shù)據(jù)、運行參數(shù)等,該類以靜態(tài)方法向外提供服務(wù)。該類將服務(wù)器中接收到的數(shù)據(jù)校驗以后,傳入先進先出消息隊列,通知其他類持久化到數(shù)據(jù)庫中。
SocketListener類作為系統(tǒng)用于提供監(jiān)聽服務(wù)的類,通過在主線程中定義并初始化靜態(tài)對象為其他類提供引用。
public static SocketAsyncServer.SocketListener mySocketListener;
SocketListener類中通過同步信號量EventWaitHandle向數(shù)據(jù)庫服務(wù)器中寫數(shù)據(jù)的線程發(fā)出有信號的事件。
private EventWaitHandle _messagesCanWriteToDBSignal;
SocketListener類中通過事件機制來實現(xiàn)對完成端口數(shù)據(jù)的讀寫,其關(guān)鍵代碼如下:
圖2 IOCP網(wǎng)絡(luò)編程模型
圖3 服務(wù)器類庫結(jié)構(gòu)圖
MessageHandler類的作用是報文處理,實現(xiàn)報文處理的關(guān)鍵代碼如下:
數(shù)據(jù)展示采用兩種方式與服務(wù)器進行通信,分別實現(xiàn)不同類型數(shù)據(jù)的展示。日常統(tǒng)計數(shù)據(jù)采用Ado.NET連接SQL服務(wù)器,從數(shù)據(jù)庫服務(wù)器獲取數(shù)據(jù)并展示。Web頁面具有訪問方便、易部署的特點。不要求實時的數(shù)據(jù)都可以采用直接從數(shù)據(jù)庫中取數(shù)據(jù)的方式進行訪問,這樣可以降低服務(wù)器設(shè)計難度并提高軟件的健壯性。第二種方式是實時數(shù)據(jù)的讀取,采用socket進行數(shù)據(jù)通信。
實時數(shù)據(jù)請求要求服務(wù)器能及時進行響應(yīng),服務(wù)器端采用支持多并發(fā)的服務(wù)器,將數(shù)據(jù)請求指令轉(zhuǎn)發(fā)給下位機,獲取下位機上傳數(shù)據(jù)以后,以socket回發(fā)給客戶端。
實時數(shù)據(jù)的獲取展示問題是服務(wù)器端框架設(shè)計中的一個亮點和關(guān)鍵點。實時數(shù)據(jù)獲取及展示存在兩個問題:一是普通客戶配置的服務(wù)器性能較差,不能滿足海量客戶機及Web瀏覽器數(shù)據(jù)請求及數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù);二是由于實地網(wǎng)絡(luò)環(huán)境的差異性,普遍來講城市網(wǎng)絡(luò)信號較好,而郊區(qū)網(wǎng)絡(luò)信號較差,這是制約該系統(tǒng)能否進行實時數(shù)據(jù)展示的非常重要的一個問題。如果刷新速度較慢,那么用戶體驗較差。有鑒于此,提出了socket+數(shù)據(jù)庫緩沖的解決方案。該方案設(shè)計模型見圖4。
Web瀏覽器通過socket與服務(wù)器端監(jiān)聽進程在7019端口進行通信,服務(wù)器端采用IOCP模型進行設(shè)計可以實現(xiàn)5000左右客戶端的并發(fā)連接。服務(wù)器伺服進程接收到實時數(shù)據(jù)請求以后,進入數(shù)據(jù)請求隊列,發(fā)送給下位機,即指定編號的下位機。這里用到了之前提到的IOCP模型。下位機在接受到指令后,檢索并上傳數(shù)據(jù)到服務(wù)器端。服務(wù)器端將該實時數(shù)據(jù)存儲到數(shù)據(jù)庫中。這是系統(tǒng)的亮點。如果網(wǎng)絡(luò)狀況較差,則存在多條數(shù)據(jù)疊加的情況,那么數(shù)據(jù)庫中的數(shù)據(jù)會被最新數(shù)據(jù)覆蓋。這樣可以解決服務(wù)器端由于性能較低無法及時響應(yīng)及網(wǎng)絡(luò)較差延時較大的問題。在Web瀏覽器端設(shè)置定時的異步刷新,從數(shù)據(jù)庫中取出最新數(shù)據(jù),并展現(xiàn)給用戶,實踐證明,該方案可以有效解決服務(wù)器性能瓶頸及網(wǎng)絡(luò)延遲較大的問題,有效提高用戶體驗。
圖4 實時數(shù)據(jù)訪問模型
基于IOCP的遠(yuǎn)程配電網(wǎng)監(jiān)測系統(tǒng)服務(wù)器端框架設(shè)計能夠滿足監(jiān)測電網(wǎng)并管理電網(wǎng)數(shù)據(jù)的需求。軟件架構(gòu)設(shè)計具有良好的擴展性,服務(wù)器設(shè)計合理能夠滿足多綜測儀客戶端并發(fā)的需求。但是該系統(tǒng)也存在一些需要完善和優(yōu)化之處。目前服務(wù)器運行成本較高,服務(wù)器框架仍需要優(yōu)化。為了管理的方便,可以采用Windows系統(tǒng),要降低用戶成本可以采用Linux操作系統(tǒng),并使用開源網(wǎng)絡(luò)框架,比如Mina或者Libevent等高性能框架,進一步提高系統(tǒng)性能及穩(wěn)定性??梢钥紤]在Linux服務(wù)器端使用C語言或者JAVA語言進行服務(wù)器設(shè)計,提高服務(wù)器處理效率,也可以添加分布式數(shù)據(jù)庫緩存,提高MySQL數(shù)據(jù)庫訪問速度。
[1] 張海龍.基于GPRS的配電網(wǎng)遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的研制[D].沈陽:沈陽工業(yè)大學(xué),2009.
[2] 鐘章隊,蔣文怡,李紅君.GPRS通用分組無線業(yè)務(wù)[M].北京:人民郵電出版社,2001.
[3] 趙燕云.電網(wǎng)設(shè)備遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計[J].西安科技大學(xué)學(xué)報,2012,32(4):505-506.
[4] 趙啟成,靳國輝,杜良.基于GSM_GPRS供配電遠(yuǎn)程監(jiān)測系統(tǒng)的開發(fā)與應(yīng)用[J].油氣田地面工程,2010(9):69.
[5] 張宇,趙春,林森.配電網(wǎng)運行狀態(tài)在線監(jiān)測系統(tǒng)[J].電工技術(shù),2012(9):9.
[6] 何四海,易建波,王均,李永彬.基于智能手機的配電網(wǎng)現(xiàn)場作業(yè)管理系統(tǒng)[J].中國電力,2010,45(7):78-83.
[7] 羅莉琴,詹祖橋.Windows網(wǎng)絡(luò)編程[M].北京:人民郵電出版社,2011.