孔祥玥,吳志鋒,舒 杰?,宋香榮
(1. 中國科學(xué)院廣州能源研究所,廣州 510640;2. 暨南大學(xué)韶關(guān)研究院,廣東 韶關(guān) 512000)
近年來以光伏發(fā)電為代表的分布式發(fā)電技術(shù)由于其經(jīng)濟(jì)可靠、環(huán)境友好的特點(diǎn),得到歐美多個發(fā)達(dá)國家的重視,政府紛紛出臺相關(guān)利好政策去扶持該技術(shù),分布式發(fā)電技術(shù)及其實(shí)施得到良好的發(fā)展與普及[1-3]。我國地域面積遼闊,太陽能資源豐富,為光伏的利用提供了有利的條件,據(jù)國家能源局統(tǒng)計,2017年我國分布式光伏發(fā)電裝機(jī)達(dá)到2 966萬kW,其中,新增裝機(jī)1 944萬kW,同比增長 3.7倍??梢姺植际桨l(fā)電技術(shù)的應(yīng)用在我國發(fā)展迅猛、前景可觀;隨著光伏發(fā)電設(shè)備成本以及安裝成本的進(jìn)一步下降,諸如屋頂光伏之類的分布式光伏電站將會在工業(yè)園區(qū)、商業(yè)建筑、大學(xué)園區(qū)乃至居民住宅中進(jìn)一步普及。
光伏發(fā)電存在隨機(jī)性以及間歇性的特點(diǎn),在實(shí)際應(yīng)用中,系統(tǒng)大部分時間處于無人值守運(yùn)行狀態(tài),為充分有效地協(xié)調(diào)發(fā)電、儲能以及負(fù)荷的功率平衡關(guān)系,對系統(tǒng)的運(yùn)行參數(shù)進(jìn)行實(shí)時監(jiān)控及數(shù)據(jù)分析顯得極為重要。國內(nèi)外學(xué)者對光伏電站遠(yuǎn)程監(jiān)控技術(shù)與應(yīng)用進(jìn)行了研究。ALUISIO等[4]提出一種基于1日預(yù)測調(diào)度功能的熱電聯(lián)供微電網(wǎng)監(jiān)控架構(gòu);MANUR等[5]提出一種基于多個獨(dú)立用戶和多個分布式電源的微電網(wǎng)并網(wǎng)監(jiān)控、通信、計算的通用平臺;姚玨菂等[6]針對惡劣的氣候環(huán)境提出了詳細(xì)的解決方案,設(shè)計了一套完整的光伏電站監(jiān)控系統(tǒng);王輝等[7]針對家庭式分布式電源(distributed energy resource, DER)設(shè)計了一套基于瀏覽器/服務(wù)器(browser/server, B/S)架構(gòu)的分布式電源并網(wǎng)監(jiān)控系統(tǒng);CHIEN等[8]深入探討了微電網(wǎng)監(jiān)控人機(jī)交互系統(tǒng)中的用戶需求以及接口模型。相關(guān)文獻(xiàn)及研究成果指出,已有的監(jiān)控系統(tǒng)大多基于上位機(jī)監(jiān)控軟件技術(shù),或者基于網(wǎng)頁(Web)瀏覽器,甚少采用手機(jī)APP形式。只要存在無線數(shù)據(jù)網(wǎng)絡(luò),手機(jī)客戶端就能隨時隨處接入系統(tǒng),便于用戶及時了解現(xiàn)場設(shè)備的運(yùn)轉(zhuǎn)情況。結(jié)合已有的實(shí)施案例及經(jīng)驗(yàn),本文提出一種基于客戶機(jī)/服務(wù)器(client/server, C/S)架構(gòu)的分布式電源遠(yuǎn)程監(jiān)控系統(tǒng),用戶可通過安卓(Android)移動終端對系統(tǒng)進(jìn)行實(shí)時監(jiān)控,并實(shí)時接收系統(tǒng)關(guān)注事件的消息推送。文中介紹了該監(jiān)控系統(tǒng)的總體架構(gòu),并著重對 Android客戶端及其后臺服務(wù)器軟件的功能和關(guān)鍵技術(shù)進(jìn)行詳細(xì)介紹。
分布式電源具有設(shè)備多、數(shù)據(jù)量大、分布區(qū)域廣、地理位置偏遠(yuǎn)等特點(diǎn),分布式發(fā)電單元之間的信息共享和交互要求較高。本文提出的分布式電源監(jiān)控系統(tǒng)采用分散采集、區(qū)域匯聚、集中處理的體系結(jié)構(gòu),由現(xiàn)場服務(wù)器對站點(diǎn)的發(fā)電單元數(shù)據(jù)進(jìn)行匯集,由云端服務(wù)器對數(shù)據(jù)進(jìn)行集中處理;數(shù)據(jù)傳輸層面采用C/S結(jié)構(gòu),由云端服務(wù)器提供高性能的超文本傳輸協(xié)議(hyper text transfer protocol, HTTP)服務(wù)以及消息推送服務(wù),以安卓應(yīng)用程序(Android application, Android APP)作為人機(jī)交互接口供電站用戶使用,確保系統(tǒng)的可靠性、安全性、實(shí)用性以及擴(kuò)展性。
圖1 系統(tǒng)架構(gòu)圖Fig.1 Architecture of the system
系統(tǒng)結(jié)構(gòu)從功能上劃分為4層,如圖1所示,由下至上分別為設(shè)備及數(shù)據(jù)采集層、現(xiàn)場數(shù)據(jù)管理層、用戶層以及服務(wù)層。
設(shè)備及數(shù)據(jù)采集層由分布式發(fā)電設(shè)備及相應(yīng)的測量設(shè)備、控制設(shè)備組成。其中,分布式發(fā)電設(shè)備如光伏組件、逆變器、匯流以及蓄電池等,實(shí)現(xiàn)太陽能等可再生能源的發(fā)電及電流電壓的轉(zhuǎn)換、平衡;測量設(shè)備包括模擬量測量及開關(guān)量檢測,對各種電流、電壓、頻率等電氣屬性以及開關(guān)的通斷進(jìn)行測量、匯報;控制設(shè)備根據(jù)上層下達(dá)的指令對各種保護(hù)開關(guān)進(jìn)行開合控制并對蓄電池進(jìn)行充放電控制等。
本地數(shù)據(jù)管理層通常由一臺性能稍好的計算機(jī)來實(shí)現(xiàn),負(fù)責(zé)兩個基本功能:一是對下層收集上來的數(shù)據(jù)進(jìn)行解析、整理,并按照一定的協(xié)議、格式將此數(shù)據(jù)上傳至云端數(shù)據(jù)庫服務(wù)器,實(shí)現(xiàn)云端數(shù)據(jù)與本地數(shù)據(jù)的同步;二是提取由云端應(yīng)用服務(wù)器下發(fā)的控制指令,并轉(zhuǎn)發(fā)至下層實(shí)現(xiàn)對現(xiàn)場設(shè)備的控制。對于具備預(yù)測調(diào)度功能的分布式發(fā)電系統(tǒng),該層根據(jù)氣象監(jiān)測數(shù)據(jù)以及預(yù)測算法運(yùn)行計算,進(jìn)而執(zhí)行相應(yīng)的調(diào)度操作。
用戶層主要為終端用戶提供客戶端應(yīng)用,通過該客戶端應(yīng)用,用戶可以方便地瀏覽設(shè)備狀態(tài)信息,對設(shè)備進(jìn)行遠(yuǎn)程控制,并接收系統(tǒng)的實(shí)時推送消息??蛻舳藨?yīng)用可以是WEB客戶端,也可以是APP客戶端。WEB客戶端以B/S的方式進(jìn)行運(yùn)作,用戶主要通過計算機(jī)的瀏覽器對服務(wù)器進(jìn)行訪問;APP客戶端以C/S的方式進(jìn)行運(yùn)作,用戶通過手機(jī)APP對服務(wù)器進(jìn)行訪問。相對于WEB應(yīng)用,手機(jī)APP在接收服務(wù)器的推送消息方面顯得更勝一籌,對設(shè)備的突發(fā)事件掌握得更為及時,有利于對分布式電源系統(tǒng)的整體監(jiān)控。
服務(wù)層包括應(yīng)用服務(wù)以及數(shù)據(jù)庫服務(wù),該層在系統(tǒng)中負(fù)責(zé)四大功能:一是接收本地數(shù)據(jù)庫上傳的運(yùn)行數(shù)據(jù),與本地服務(wù)器維持?jǐn)?shù)據(jù)同步;二是響應(yīng)客戶端的請求,包括數(shù)據(jù)查詢修改以及對控制命令的轉(zhuǎn)發(fā);三是與本地服務(wù)器及移動客戶端維持長連接,對消息進(jìn)行及時推送;四是對海量的發(fā)電數(shù)據(jù)進(jìn)行管理及備份。
云端服務(wù)器的框架采取 Apache+PHP+MySQL的形式,其中,Apache是一個開源的、模塊化的Web服務(wù)器;MySQL是一種關(guān)系型數(shù)據(jù)庫管理軟件,具有輕巧、高效以及部分開源等特性;PHP是一種通用的腳本語言,主要適用于 Web開發(fā),對MySQL具有良好的支持。如此,Apache、PHP和MySQL成為一個開源、跨平臺的服務(wù)器組合,可以輕松構(gòu)建于Windows或Unix操作系統(tǒng)之上。服務(wù)器的主要功能模塊及工作流程如圖2所示。
圖2 服務(wù)器工作流程Fig. 2 Flowchart of the server
如圖2所示,Android客戶端與服務(wù)器之間的數(shù)據(jù)交互有兩種形式。一種是請求-響應(yīng)的形式,由Android客戶端向服務(wù)器提交HTTP請求,服務(wù)器對此請求進(jìn)行解析從而獲取請求參數(shù),通過PHP庫函數(shù)中的mysqli接口對MySQL數(shù)據(jù)庫進(jìn)行相應(yīng)操作,最后將操作結(jié)果經(jīng)過JS對象標(biāo)記(JavaScript object notation, JSON)封裝后形成一個HTTP響應(yīng)返回給Android客戶端;一種是服務(wù)器的主動推送形式,服務(wù)器與Android客戶端通過WebSocket協(xié)議維持一個長連接,當(dāng)有新消息過來的時候,服務(wù)端查出該消息對應(yīng)的目標(biāo)地址,并找到相應(yīng)的WebSocket通道進(jìn)行消息下發(fā)。
根據(jù)分布式電源監(jiān)控的具體需求,把 Android客戶端(以下簡稱APP)的用戶功能梳理成5部分,具體如圖3所示。
圖3 Android客戶端結(jié)構(gòu)圖Fig. 3 Structure of the App
軟件的主要功能如下:
村干部來源于鄉(xiāng)村,對本地風(fēng)土人情文化、各家各戶的情況了如指掌,了解村民思想、顧慮、訴求、目的,熟悉村民思想工作的方法,因此,更容易將國家的政策精神傳達(dá)到戶,便于分散的農(nóng)戶統(tǒng)一思想、統(tǒng)一認(rèn)識、統(tǒng)一進(jìn)行旅游開發(fā)。
①登錄/注冊模塊。系統(tǒng)內(nèi)用戶劃分為多個類別,包括超級管理員、管理員、操作員、游客等,對應(yīng)不同的操作權(quán)限。用戶登錄后,App從服務(wù)器獲取其權(quán)限類別,用戶僅能進(jìn)行權(quán)限規(guī)定范圍之內(nèi)的操作。
②站點(diǎn)管理模塊、設(shè)備管理模塊。管理員級別以上的用戶可以對此項(xiàng)進(jìn)行管理,包括新增、刪除、信息修改等。其中,設(shè)備管理模塊還具有對設(shè)備的控制功能,主要體現(xiàn)在對設(shè)備通、斷的控制。
③數(shù)據(jù)查看模塊。數(shù)據(jù)查看模塊包括遙測、遙信實(shí)時數(shù)據(jù)的查看、告警事件的查看以及遙測歷史數(shù)據(jù)的查看。遙測歷史數(shù)據(jù)可選擇以1 min、5 min、1 h或1 d為步進(jìn)量來進(jìn)行查看,具有曲線圖以及數(shù)據(jù)表格的展現(xiàn)形式。
④設(shè)置模塊。設(shè)置模塊包括用戶設(shè)置以及系統(tǒng)設(shè)置,用戶設(shè)置用于用戶的個人信息設(shè)置、密碼修改;系統(tǒng)設(shè)置用于公司信息設(shè)置、數(shù)據(jù)字典管理以及用戶權(quán)限管理,系統(tǒng)設(shè)置權(quán)限僅對超級管理員開發(fā)。
APP的開發(fā)平臺采用安卓工作室(Android Studio),開發(fā)語言采用Java及HTML、JSP等。Android Studio是基于IntelliJ IDEA的官方Android應(yīng)用開發(fā)集成開發(fā)環(huán)境(integrated development environment,IDE),除了IntelliJ本身所具有的強(qiáng)大的代碼編輯器和開發(fā)者工具,Android Studio還提供了多個可提高Android應(yīng)用構(gòu)建效率的功能,如開發(fā)中協(xié)助調(diào)試的Android設(shè)備模擬器等。
Android客戶端軟件的開發(fā)遵循模型-視圖-控制器(model-view-controller, MVC)模式,這是一種軟件設(shè)計典范,在當(dāng)前的網(wǎng)頁、Android以及iOS的應(yīng)用開發(fā)中廣泛流行,該技術(shù)采用業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法來組織代碼,有助于管理復(fù)雜的應(yīng)用程序,簡化了分組開發(fā),同時也讓應(yīng)用程序的測試更加容易。在該模式下,系統(tǒng)框架的分類有3種:模型(model)、視圖(view)、控制器(controller),控制器對象負(fù)責(zé)獲取用戶的按鍵和屏幕觸摸等事件,協(xié)調(diào)模型及視圖對象。
圖4 推送事件軟件流程圖Fig. 4 Flowchart of Notification
該軟件的主要控制邏輯包含兩部分,一是對服務(wù)器的主動推送事件的處理,二是App對用戶按鍵屏幕觸摸等事件的響應(yīng)處理。推送事件軟件流程如圖4所示,用戶登錄成功后,APP創(chuàng)建到服務(wù)器的WebSocket連接,并通過心跳機(jī)制與其保持連接,同時對指定端口進(jìn)行阻塞偵聽,一旦收到推送消息,則向服務(wù)器發(fā)送確認(rèn)消息,同時根據(jù)消息內(nèi)容對相應(yīng)數(shù)據(jù)進(jìn)行同步,并在用戶界面(user interface, UI)作相應(yīng)的頁面更新。
APP點(diǎn)擊事件軟件流程如圖5所示,APP對用戶按鍵、屏幕觸摸等事件進(jìn)行監(jiān)聽,對于涉及顯示具體數(shù)據(jù)的操作,APP從服務(wù)器請求數(shù)據(jù),如果網(wǎng)絡(luò)請求成功,則在UI顯示中作相應(yīng)的更新,同時把該數(shù)據(jù)同步到本地數(shù)據(jù)庫中;如果網(wǎng)絡(luò)請求失敗,則從本地數(shù)據(jù)庫中調(diào)取數(shù)據(jù)到UI中作相應(yīng)的更新,同時在UI中提示網(wǎng)絡(luò)請求失敗。
圖5 點(diǎn)擊事件軟件流程圖Fig. 5 Flowchart of Click Event
APP的網(wǎng)絡(luò)數(shù)據(jù)請求通過HTTP異步請求代理實(shí)現(xiàn),具體采用GitHub上的開源庫Asynchttpclient[9],該代理構(gòu)建于Apache的HttpClient庫,所有的網(wǎng)絡(luò)請求都在APP的UI主線程以外執(zhí)行,采用線程池來處理并發(fā)請求,回調(diào)函數(shù)則在原線程中執(zhí)行。
Asynchttpclient的應(yīng)用說明如圖 6所示,APP在主線程中通過 ProcessRequest.get()函數(shù)向服務(wù)器提交網(wǎng)絡(luò)請求,具體的網(wǎng)絡(luò)通信在后臺執(zhí)行,執(zhí)行結(jié)果以回調(diào)函數(shù)的形式在主線程中進(jìn)行。
圖6 Asynchttpclient應(yīng)用說明圖Fig. 6 Usage of Asynchttpclient
服務(wù)器消息推送采用WebSocket協(xié)議,APP端采用 GitHub開源軟件包 WebSocketClient[10],這是完全用Java編寫的WebSocket客戶端軟件包,該軟件中WebSocket協(xié)議的實(shí)現(xiàn)基于RFC6455[11],能夠很好地工作于Android4.0及更高版本中。
圖7 WebSocket應(yīng)用說明圖Fig. 7 Usage of WebSocket
WebSocketClient的應(yīng)用說明如圖7所示,自定義一個類繼承自 WebSocketClient,重寫 onOpen()函數(shù)用以打開連接,重寫onMessage()函數(shù)用以處理接收到的新消息,重寫 onFragment()函數(shù)以處理收到的數(shù)據(jù)幀。當(dāng)連接被關(guān)閉或發(fā)生錯誤時,則分別調(diào)用onClose()、onError()函數(shù)進(jìn)行相應(yīng)處理。
APP在本地的數(shù)據(jù)采用SQLite數(shù)據(jù)庫進(jìn)行存儲與管理。SQLite是一款輕量級、零配置、跨平臺的開源數(shù)據(jù)庫,支持標(biāo)準(zhǔn)的SQL語句操作,廣泛應(yīng)用于iOS以及Android的APP中。SQLite的基本應(yīng)用包括數(shù)據(jù)庫的建立(采用openOrCreateDatabase()函數(shù))以及數(shù)據(jù)表格的建表、增刪改查等操作(采用execSQL()函數(shù))。
為查看系統(tǒng)的運(yùn)行效果,做了以下準(zhǔn)備工作:把后臺PHP代碼以及Java代碼部署到服務(wù)器上,做好相關(guān)配置,并啟動Apache以及MySQL服務(wù);在Android Studio3.0.1上完成APP代碼的編譯,并運(yùn)行于自帶的Android模擬器上。App順利運(yùn)行,其部分截屏如圖8所示。
圖8 App部分截屏Fig. 8 Screenshot of the App
經(jīng)過多次反復(fù)試驗(yàn),結(jié)果表明,本系統(tǒng)確實(shí)能夠準(zhǔn)確及時地展現(xiàn)分布式發(fā)電單元的實(shí)時運(yùn)行數(shù)據(jù),能夠?qū)崟r接收系統(tǒng)推送,并能夠?qū)刂茊卧逻_(dá)設(shè)備通、斷等控制指令,實(shí)現(xiàn)遙測、遙信以及遙控等功能,達(dá)到了設(shè)計要求。
隨著以光伏發(fā)電為代表的可再生能源發(fā)電技術(shù)的發(fā)展以及國家政策的相關(guān)扶持,分布式發(fā)電的普及化和規(guī)?;俏磥淼陌l(fā)展趨勢。本文提出的基于Android應(yīng)用以及云端管控的分布式電源監(jiān)控系統(tǒng),對系統(tǒng)中各功能模塊進(jìn)行合理抽象的劃分,普遍適用于各種規(guī)模的分布式發(fā)電微電站,能夠準(zhǔn)確、實(shí)時的實(shí)現(xiàn)對分布式發(fā)電單元的遙測、遙信、遙控以及歷史數(shù)據(jù)的查詢;隨著云服務(wù)器租賃成本的日漸下降以及 Android手機(jī)的良好普及,進(jìn)一步體現(xiàn)出該系統(tǒng)的經(jīng)濟(jì)性、實(shí)用性。
參考文獻(xiàn):
[1]ALI A, LI W H, HUSSAIN R, et al. Overview of current microgrid policies, incentives and barriers in the European Union, United States and China[J]. Sustainability, 2017,9(7): 1146. DOI: 10.3390/su9071146.
[2]BAYINDIR R, BEKIROGLU E, HOSSAIN E, et al.Microgrid facility at European Union[C]//Proceedings of 2014 International Conference on Renewable Energy Research and Application. Milwaukee, WI, USA: IEEE,2014: 865-872. DOI: 10.1109/ICRERA.2014.7016509.
[3]謝曉惟,梁秀紅,梁勃.德國光伏發(fā)電綜述[J]. 太陽能, 2015(2): 6-10, 14. DOI: 10.3969/j.issn.1003-0417.2015.02.002.
[4]ALUISIO B, CAGNANO A, DE TUGLIE E, et al. An architecture for the monitoring of microgrid operation[C]//Proceedings of 2016 IEEE Workshop on Environmental, Energy, and Structural Monitoring Systems (EESMS). Bari, Italy: IEEE, 2016: 1-6. DOI:10.1109/EESMS.2016.7504809.
[5]MANUR A, VENKATARAMANAN G, SEHLOFF D.Simple electric utility platform: a hardware/software solution for operating emergent microgrids[J]. Applied energy, 2018, 210: 748-763. DOI: 10.1016/j.apenergy.2017.07.073.
[6]姚玨菂,王延民,孫東旭. 20MW光伏電站監(jiān)控系統(tǒng)設(shè)計與優(yōu)化[J]. 電子設(shè)計工程, 2015, 23(5): 50-54. DOI:10.3969/j.issn.1674-6236.2015.05.016.
[7]王輝,王敬華,徐丙垠,等.基于B/S架構(gòu)的分布式電源并網(wǎng)監(jiān)控系統(tǒng)設(shè)計[J]. 電力系統(tǒng)保護(hù)與控制, 2016,44(14): 160-165. DOI: 10.7667/PSPC151070.
[8]CHIEN S C, FUJIYAMA M, ISHIDA T, et al. User interface model for microgrid systems monitoring: from user needs to design requirements[C]//Proceedings of the 5th IET International Conference on Renewable Power Generation (RPG). London, UK: IEEE, 2016. DOI:10.1049/cp.2016.0530.
[9]Android Asynchronous Http Client[Z/OL]. (2015-09-19)[2017-12-18]. https://loopj.com/android-async-http/.
[10]Java-WebSocket[Z/OL]. (2012-02-04)[2017-12-18]. http://tootallnate.github.io/Java-WebSocket/.
[11]The WebSocket Protocol: RFC6455[Z/OL].(December 2011)[2017-12-18]. https://datatracker.ietf.org/doc/rfc6455/.