方躍勝, 姚宏亮
(1.安徽水利水電職業(yè)技術(shù)學(xué)院, 安徽 合肥 231603; 2.合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院, 安徽 合肥 230009)
基于多Agent的智能微電網(wǎng)EMS設(shè)計(jì)與實(shí)現(xiàn)
方躍勝1, 姚宏亮2
(1.安徽水利水電職業(yè)技術(shù)學(xué)院, 安徽 合肥 231603; 2.合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院, 安徽 合肥 230009)
隨著智能時(shí)代的逐步到來,智能微電網(wǎng)技術(shù)已經(jīng)成為電力系統(tǒng)發(fā)展的前沿技術(shù).智能微電網(wǎng)作為未來電網(wǎng)發(fā)展的主流方向,能量管理系統(tǒng)是整個(gè)系統(tǒng)的核心.本文提出了一套較為完善的智能微電網(wǎng)EMS體系結(jié)構(gòu)和功能模塊,并對各模塊涵蓋的內(nèi)容進(jìn)行了簡單介紹.設(shè)計(jì)開發(fā)的基于多Agent的智能微電網(wǎng)EMS可充分地利用各地豐富的清潔可再生能源,實(shí)施多Agent對能量變化的實(shí)時(shí)監(jiān)控和預(yù)警,通過Agent Client/Server間的協(xié)作調(diào)度與控制維持電平的平穩(wěn),實(shí)現(xiàn)能源的充分、可靠地利用.
多Agent; 智能微電網(wǎng); EMS; 調(diào)度與控制; 可再生能源
自20世紀(jì)70年代以來,可持續(xù)發(fā)展思想逐步成為國際社會(huì)共識(shí),大力發(fā)展清潔可再生能源(包括水能、生物質(zhì)能、風(fēng)能、太陽能、地?zé)崮芎秃Q竽艿?已成為一場全球性的革命[1].世界發(fā)達(dá)國家和中國都在積極進(jìn)行智能電力的研究.歐美各國對智能電網(wǎng)的研究開展較早,日本也在智能微電網(wǎng)示范工程的建設(shè)方面處于世界領(lǐng)先地位.中國雖然起步略晚,但卻已經(jīng)興建了若干試點(diǎn)工程.隨著智能時(shí)代的逐步到來,智能微電網(wǎng)技術(shù)已經(jīng)成為電力系統(tǒng)發(fā)展的前沿技術(shù).作為智能電網(wǎng)的一個(gè)有機(jī)組成部分,微電網(wǎng)為分布式發(fā)電的綜合利用提供了一種有效的技術(shù)手段[2].智能微電網(wǎng)是一種由負(fù)荷和微型電源共同組成的系統(tǒng),可最大限度地利用可再生能源形成分布式供電,并提高供電的可靠性、降低成本以及實(shí)現(xiàn)智能化,并有效推動(dòng)主動(dòng)式配電網(wǎng)的發(fā)展[3].智能微電網(wǎng)具有局部能量平衡、靈活的并網(wǎng)或孤網(wǎng)運(yùn)行方式、可調(diào)度性能強(qiáng)等優(yōu)點(diǎn),并且能充分滿足用戶對電能質(zhì)量、供電可靠性和安全性的要求,在靈活性、多樣性、可控性、可塑性和獨(dú)立性等很多方面都顯現(xiàn)出獨(dú)到的優(yōu)勢[4].作為可再生能源利用最主要的課題之一,智能微電網(wǎng)隨之迎來了加速發(fā)展的新階段,并將對分布式電源與可再生能源的大規(guī)模接入產(chǎn)生重要的影響,尤其是分布式高滲透隨機(jī)能源,其接入后會(huì)影響到電網(wǎng)的平穩(wěn)性[5].智能微電網(wǎng)系統(tǒng)分為電源系統(tǒng)、儲(chǔ)能系統(tǒng)、多種可再生能源組網(wǎng)系統(tǒng)、能量管理系統(tǒng)(EMS,Energy Management System)、繼電保護(hù)系統(tǒng)、通訊系統(tǒng)六大部分,而EMS是整個(gè)微電網(wǎng)的核心部分,智能微電網(wǎng)安全經(jīng)濟(jì)的運(yùn)行方式與高質(zhì)量的供電服務(wù),離不開完善的EMS[6].
1.1 總體設(shè)計(jì)
1) 系統(tǒng)架構(gòu)設(shè)計(jì)
本文設(shè)計(jì)開發(fā)的基于多Agent的智能微網(wǎng)EMS的系統(tǒng)架構(gòu)分為拓?fù)浣Y(jié)構(gòu)與邏輯結(jié)構(gòu),如圖1、圖2所示.
2) 系統(tǒng)功能設(shè)計(jì)
圖1 基于多Agent的智能微網(wǎng)EMS系統(tǒng)架構(gòu)的拓?fù)浣Y(jié)構(gòu)
圖2 基于多Agent的智能微網(wǎng)EMS系統(tǒng)架構(gòu)的邏輯結(jié)構(gòu)
基于多Agent的智能微網(wǎng)EMS的總體功能設(shè)計(jì)如圖3所示.
圖3 基于多Agent的智能微網(wǎng)EMS的總體功能設(shè)計(jì)
3) 系統(tǒng)流程設(shè)計(jì)
基于多Agent的智能微網(wǎng)EMS實(shí)際運(yùn)行或仿真運(yùn)行時(shí)的流程如圖4所示.
1.2 概要設(shè)計(jì)
1.2.1 微網(wǎng)監(jiān)控模塊設(shè)計(jì)
為了對微網(wǎng)實(shí)時(shí)運(yùn)行(或者仿真運(yùn)行)中的各個(gè)設(shè)備的信息和狀態(tài)實(shí)時(shí)監(jiān)控,以便對整個(gè)系統(tǒng)的運(yùn)行監(jiān)測和統(tǒng)計(jì),我們設(shè)計(jì)開發(fā)了實(shí)時(shí)監(jiān)控模塊.在微網(wǎng)的運(yùn)行中,對實(shí)時(shí)拓?fù)渚W(wǎng)絡(luò)中的DER和負(fù)載設(shè)備的實(shí)時(shí)信息給予顯示,包括設(shè)備類型、設(shè)備名及設(shè)備采集的實(shí)時(shí)數(shù)據(jù)等,從而分析這些數(shù)據(jù)的變化得到系統(tǒng)當(dāng)前頻率和捕獲異常狀況并作出處理,這其中也包括開關(guān)元件的閉開等,而且要對設(shè)備間的調(diào)度結(jié)果給予反饋.
圖4 基于多Agent的智能微網(wǎng)EMS的系統(tǒng)流程圖
微網(wǎng)監(jiān)控模塊設(shè)計(jì)包括設(shè)備管理、開關(guān)操作、實(shí)時(shí)信息顯示、調(diào)度信息查詢、系統(tǒng)頻率顯示功能等.其中設(shè)備管理包括設(shè)備圖標(biāo)旋轉(zhuǎn)、設(shè)備注冊信息顯示、設(shè)備登錄狀態(tài)顯示、設(shè)備實(shí)時(shí)功率信息顯示功能.
1.2.2 微網(wǎng)調(diào)度控制策略設(shè)計(jì)
由微網(wǎng)的結(jié)構(gòu)分析可知,微網(wǎng)的靈活運(yùn)行和高質(zhì)量供電方式,離不開穩(wěn)定高效的調(diào)度控制策略.調(diào)度控制一直是微網(wǎng)能量管理的一個(gè)難點(diǎn),其中一個(gè)關(guān)鍵問題在于微網(wǎng)中的設(shè)備數(shù)目太多,很難很迅速地對系統(tǒng)故障和異常作出相應(yīng)處理,往往一旦某一個(gè)控制元件發(fā)生故障,就可能導(dǎo)致整個(gè)系統(tǒng)癱瘓.因此,微網(wǎng)管理系統(tǒng)應(yīng)該做到對電網(wǎng)中的突發(fā)事件做出自主反應(yīng),例如發(fā)電機(jī)故障,電壓跌落等,微網(wǎng)能夠協(xié)調(diào)調(diào)度各個(gè)設(shè)備間的用電,以使微網(wǎng)穩(wěn)定運(yùn)行.
目前,有兩種經(jīng)典的調(diào)度控制策略[7]:
1) 基于集中控制的平衡調(diào)度控制思想
集中式控制與常規(guī)電力系統(tǒng)分層控制的思想一致,較易實(shí)現(xiàn),因而目前多根據(jù)該思想進(jìn)行研究.集中式控制要求由微網(wǎng)中央控制器進(jìn)行優(yōu)化管理,協(xié)調(diào)整個(gè)層次控制系統(tǒng),包括經(jīng)濟(jì)調(diào)度,平衡調(diào)度等功能,目標(biāo)是通過優(yōu)化各DER單元的發(fā)電量及與主網(wǎng)間的功率交換使微網(wǎng)得到最大化利用.
2) 基于對等控制的調(diào)度控制思想
對等控制是根據(jù)微電網(wǎng)控制要求,靈活選擇與傳統(tǒng)發(fā)電機(jī)相類似的下垂特性曲線進(jìn)行控制,將系統(tǒng)的不平衡功率動(dòng)態(tài)分配給各機(jī)組承擔(dān),目標(biāo)是想要最大限度地實(shí)現(xiàn)微網(wǎng)內(nèi)DER單元和負(fù)荷的自治,但實(shí)現(xiàn)較為復(fù)雜.各就地控制器在搜集本地信息并與別的控制器、上層控制器交互信息的基礎(chǔ)上,各自進(jìn)行就地決策.但該控制方式?jīng)]有考慮系統(tǒng)電壓與頻率的恢復(fù)問題,也就是類似傳統(tǒng)發(fā)電機(jī)中的二次調(diào)整問題,因此,在微電網(wǎng)遭受嚴(yán)重?cái)_動(dòng)時(shí),系統(tǒng)的頻率質(zhì)量可能無法保證.此外,該方法僅針對基于電力電子技術(shù)的微電源間的控制.只有在極端的情況下,才使用對等控制方式,就是各Agent可以相互通信協(xié)作調(diào)度做出自主控制,例如發(fā)電機(jī)B1和B2可以通過負(fù)載A的發(fā)電請求,同時(shí)向A供電以達(dá)到A的用電需求量.
本文采用的基于集中控制的平衡調(diào)度控制思想就是通過微網(wǎng)中央控制器進(jìn)行優(yōu)化管理,例如在用電協(xié)調(diào)調(diào)度方面上,先統(tǒng)計(jì)系統(tǒng)各DER總的發(fā)電量和各個(gè)負(fù)載的用電功率,根據(jù)比例平均分配負(fù)荷的用電量.
2.1 微網(wǎng)結(jié)構(gòu)的建立和狀態(tài)的顯示
2.1.1 微網(wǎng)拓?fù)浣Y(jié)構(gòu)的定義
在本系統(tǒng)中,微網(wǎng)的拓?fù)浣Y(jié)構(gòu)是通過一張一張的位圖拼接而成,在C++Builder中使用封裝過后的TImage類來進(jìn)行拓?fù)浣Y(jié)構(gòu)的建立.除此之外在新建一個(gè)TImage對象的同時(shí),也要保存該對象的位置信息.本系統(tǒng)位置信息是用StructPosition來表示的,然后放到數(shù)據(jù)庫,讓下次載入和打開新建的微網(wǎng)準(zhǔn)確獲取每個(gè)TImage對象的準(zhǔn)確位置,這里的每個(gè)TImage對象即對應(yīng)相應(yīng)的一種設(shè)備.
TImage *pImage;//定義一個(gè)圖片對象,用來顯示一個(gè)設(shè)備
vector
struct StructPosition{ //保存拓?fù)湓匚恢?/p>
AnsiString sName; //設(shè)備名稱
//通過設(shè)備的名稱的前四個(gè)字母就可以判斷一種設(shè)備是哪一種設(shè)備,如PVge045表示的是//光伏電池,但是開關(guān)除外,開關(guān)是通過前兩個(gè)字母Sw來確定該設(shè)備是不是開關(guān),
//所以以后在設(shè)計(jì)設(shè)備的時(shí)候,如果不是開關(guān)的話,前面的圖片ID前面兩個(gè)字母就不能sw;
int sLeft;
int sTop; //(sLeft,sTop)在界面左上角的坐標(biāo)位置
int sWidth;
int sHeight; //設(shè)備寬度和高度,再通過左上角的坐標(biāo)就可以確定設(shè)備的具體大小了
AnsiString sDeviceID; //設(shè)備ID
};
StructPosition myPosition1;//用來保存一個(gè)設(shè)備顯示上的為位置信息的結(jié)構(gòu)體
vector
//將一組設(shè)備的信息放在動(dòng)態(tài)數(shù)組里面,保存后寫進(jìn)庫中的myTopology表中,載入的時(shí)候,
//讀這張表的數(shù)據(jù)到myvectorPosition中,再將其寫到相應(yīng)的myvectorImage中,進(jìn)行顯示.
新建拓?fù)涞木唧w步驟是:先清空當(dāng)前畫圖位置.登錄過后,在微網(wǎng)編輯菜單選項(xiàng)中,點(diǎn)新建微網(wǎng),清空畫圖位置,在該系統(tǒng)是調(diào)用的ClearWorldFiled();然后是在拖拽FormMain 中toolbar中的設(shè)備圖標(biāo)中拖拽事件中來顯示的.保存拓?fù)涞木唧w步驟是:在主菜單上單擊相應(yīng)的“保存”和“另存為”菜單項(xiàng),將相應(yīng)的位置信息,以及劃分的設(shè)備的Agent信息,開關(guān)關(guān)聯(lián)信息,分別保存到myTopology表、Agent設(shè)備表、相應(yīng)的設(shè)備Running表與開關(guān)關(guān)聯(lián)信息表中.具體實(shí)現(xiàn)由CreateNewDevice(X,Y,24,50,strDeviceName)完成,在每新建一個(gè)設(shè)備的時(shí)候,將其的位置信息保存到上面的兩個(gè)動(dòng)態(tài)數(shù)組中,最后在點(diǎn)擊菜單保存項(xiàng),就會(huì)將新建的拓?fù)浣Y(jié)構(gòu)和設(shè)備的一些基本信息保存到數(shù)據(jù)庫中,同理載入和打開拓?fù)涫切陆ǖ囊粋€(gè)逆過程.
2.1.2 微網(wǎng)結(jié)點(diǎn)拓?fù)浣Y(jié)構(gòu)的顯示
1) 設(shè)備信息的基本顯示
在自定義的信息響應(yīng)函數(shù)上myImageMouseMove(參數(shù)省略)中用CreatePanel(參數(shù)省略)來動(dòng)態(tài)創(chuàng)建一個(gè)面板來顯示相應(yīng)的位置信息.
2) 實(shí)時(shí)數(shù)據(jù)的顯示
在隨機(jī)數(shù)據(jù)實(shí)時(shí)產(chǎn)生的時(shí)候,根據(jù)實(shí)時(shí)數(shù)據(jù)庫,根據(jù)設(shè)備的名稱和設(shè)備的位置信息,就會(huì)自動(dòng)的顯示各種設(shè)備的功率信息,這是通過調(diào)用CreateLabel()函數(shù)來實(shí)現(xiàn)的,動(dòng)態(tài)的顯示標(biāo)簽.
圖5 微網(wǎng)編輯
2.2 微網(wǎng)編輯
微網(wǎng)編輯包括新建微網(wǎng),打開一個(gè)已經(jīng)建立好的微網(wǎng),再修改微網(wǎng)中相應(yīng)的設(shè)備信息.在微網(wǎng)編輯狀態(tài)下,可以根據(jù)微網(wǎng)實(shí)際運(yùn)行的結(jié)果進(jìn)行適當(dāng)?shù)木庉嫞谇叭斯ぷ鞯幕A(chǔ)上,我們還添加了圖標(biāo)旋轉(zhuǎn)的功能,可以對開關(guān)、總線等元件進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)之后各元件的狀態(tài)就會(huì)發(fā)生相應(yīng)的變化,而且有可能使與其關(guān)聯(lián)的設(shè)備及元件狀態(tài)發(fā)生改變,如圖5所示.
一開始新建或者打開微網(wǎng)后,要編輯設(shè)備的信息是通過FormCarveAgent(Agent劃分)窗體來實(shí)現(xiàn)的.在添加設(shè)備的時(shí)候,在彈出的對話框中,給設(shè)備劃分相應(yīng)的Agent,以及設(shè)備所屬的Agent類型,設(shè)備自身的型號類型和設(shè)備所受控制的開關(guān)(如果沒有開關(guān)也可以,此時(shí)設(shè)備默認(rèn)是沒有開關(guān)的,即只要該設(shè)備所在的Agent登錄,它默認(rèn)就是可以調(diào)度的),修改設(shè)備也是類似.這些設(shè)備信息在整個(gè)微網(wǎng)未保存前均保存在myvectorAgentDeviceInfo這個(gè)動(dòng)態(tài)數(shù)組中,其定義如下:
struct AgentTable //首先將未保存的設(shè)備信息保存在vector中,保存過后再插入Agent設(shè)備表中
{ AnsiString DeviceID;
AnsiString DeviceName;
AnsiString AgentName;
AnsiString DeviceType;
AnsiString switchID;//所屬開關(guān)的ID
}myAgentDeviceInfo;
vector
然后在微網(wǎng)保存時(shí)一起寫入數(shù)據(jù)庫“Agent設(shè)備表”、具體類型(通過設(shè)備ID,也即是FormMain中pImage->Name中前四個(gè)字母來區(qū)分,LOAD就是表示負(fù)載設(shè)備,PVge就是表示光伏電池,WTge表示風(fēng)力發(fā)電機(jī),BBgg表示蓄電池,FCge表示燃料電池,SwtN表示斷開的開關(guān),BusH和BusV表示的是總線信息)的“設(shè)備Running”表中,還有保存到開關(guān)關(guān)聯(lián)設(shè)備表中.
具體的是實(shí)現(xiàn)如下(單擊相應(yīng)開關(guān)設(shè)備圖片就可以用來斷開開關(guān)和閉合開關(guān),在這里用的是PopMenu控件).
閉合開關(guān)的操作:
if (Application->MessageBox("確認(rèn)閉合開關(guān)嗎?","確認(rèn)閉合",MB-OKCANCEL)==1)
{
ChangeSwitch(1);
//改變開關(guān)的狀態(tài),1表示閉合,0表示斷開,開關(guān)的斷開和閉合在數(shù)據(jù)庫的區(qū)分是通過開關(guān)ID(SwtN和SwtY),其中Y表示閉合,SwtN表示閉合,所以,開關(guān)一斷開設(shè)備ID就要改為相應(yīng)的Y或者N(也可以在開關(guān)Running表中,添加一個(gè)標(biāo)志位,在該平臺(tái)上就沒有這么做了,而是通過ChangeSwitchTable()函數(shù)來改變myTopology、開關(guān)關(guān)聯(lián)設(shè)備表、Agent設(shè)備表、開關(guān)Running這幾個(gè)表的開關(guān)相應(yīng)的ID).
QueryDiaoduAgent(agentDiaoduList);
}
具體的判斷哪些設(shè)備不能夠參與調(diào)度,即設(shè)備跟哪些開關(guān)相關(guān),是QueryDiaoduAgent(agentDiaoduList)來實(shí)現(xiàn)的,判斷的時(shí)候涉及到設(shè)備ID和編號,在此定義:
struct SwitchTableInfo
{
AnsiString deviceID;//具體設(shè)備的ID
AnsiString devicenumber;
//即開關(guān)關(guān)聯(lián)設(shè)備表中編號中“S”中前面的字符串
}mySwitchTable,myDeviceTable;
vector
//保存開關(guān)的“編號”信息,即S前的字符串
//下面帶“”的編號都是這個(gè)信息
vector
//保存其他設(shè)備除開關(guān)外的“編號”信息
在QueryDiaoduAgent()中,開始從開關(guān)設(shè)備關(guān)聯(lián)表中,讀取所有開關(guān)的“編號”信息,保存到myvectorSwitchTable中,然后遍歷所有已經(jīng)登錄過后的Agent的列表,即agentList,讀取每個(gè)agentList的設(shè)備ID,然后從開關(guān)關(guān)聯(lián)設(shè)備表讀取此ID的“編號”,只要這個(gè)“編號”包含(不需要相等)有在myvectorSwitchTable中的“編號(devicenumber)”,那么就說明這個(gè)設(shè)備受這個(gè)開關(guān)控制.只要有一個(gè)包含了某一個(gè)開關(guān)的devicenumber且此開關(guān)是斷開的就是不能參與調(diào)度的,將可以參與調(diào)度的Agent信息保存到agentDiaoduList這個(gè)數(shù)組中.
2.3 微網(wǎng)實(shí)時(shí)監(jiān)控模塊
2.3.1 設(shè)備注冊信息顯示功能
使用主菜單中的“微網(wǎng)運(yùn)行”菜單就可以加載實(shí)際運(yùn)行(或仿真運(yùn)行)的微網(wǎng),界面就會(huì)顯示整個(gè)拓?fù)渚W(wǎng)絡(luò)的結(jié)構(gòu).在微網(wǎng)運(yùn)行時(shí),當(dāng)鼠標(biāo)移動(dòng)到某個(gè)圖標(biāo)上,系統(tǒng)會(huì)在右下角創(chuàng)建一個(gè)顯示面板,顯示對應(yīng)設(shè)備的“設(shè)備ID”、“設(shè)備名”、“設(shè)備類型”、“所屬AgentID”,如圖6所示.實(shí)現(xiàn)過程是這樣的:和微網(wǎng)編輯時(shí)類似,所加載的微網(wǎng)的拓?fù)湫畔⒁彩窍缺蛔x取到一個(gè)Vector變量中,然后獲取鼠標(biāo)坐標(biāo)對應(yīng)的設(shè)備名,因?yàn)榇斯δ苤粚Σ糠衷O(shè)備元件有限,所以還要根據(jù)設(shè)備名判斷設(shè)備類型.當(dāng)符合顯示面板的情況,從Agent設(shè)備表中根據(jù)設(shè)備名查詢到“設(shè)備ID”、“設(shè)備類型”、“所屬AgentID”的信息,然后創(chuàng)建一個(gè)透明風(fēng)格的RichEdit在鼠標(biāo)當(dāng)前位置的右下角分別按行顯示設(shè)備ID、設(shè)備類型等信息.其中關(guān)鍵的地方就是調(diào)用Refresh()和Repaint()函數(shù)重畫,否則就不能成功顯示.實(shí)現(xiàn)代碼對應(yīng)在TFormMain::myImageMouseMove和TFormMain::CreatePanel函數(shù).
圖6 注冊信息顯示
2.3.2 設(shè)備登錄狀態(tài)和功率信息顯示功能
當(dāng)有Agent客戶端連接上時(shí),連接上的元件圖標(biāo)會(huì)變?yōu)榧t色,當(dāng)點(diǎn)擊“SimStart”按鈕,系統(tǒng)就向各個(gè)Agent發(fā)送采集指令.由于無法真正連接到設(shè)備,系統(tǒng)會(huì)產(chǎn)生一定范圍的隨機(jī)數(shù)來仿真,這時(shí)已連接設(shè)備的功率就會(huì)實(shí)時(shí)顯示功率的變化.
信息采集模塊就涉及到通信協(xié)議了,在UnitProtocal.cpp中定義了8種協(xié)議,每種協(xié)議定義客戶端Socket發(fā)送內(nèi)容的結(jié)構(gòu),以便解析這些內(nèi)容,用于不同的功能,對于Agent登錄,是根據(jù)協(xié)議1來通信的.
當(dāng)某個(gè)Agent客戶端連接到系統(tǒng)時(shí),系統(tǒng)首先判斷協(xié)議的類型,如果是Agent登錄,根據(jù)協(xié)議1,系統(tǒng)解析客戶端發(fā)送來的數(shù)據(jù),獲取設(shè)備名稱,并且將登錄事件寫入日志.同時(shí),根據(jù)設(shè)備名稱在Agent設(shè)備表中查詢到設(shè)備對應(yīng)的設(shè)備ID,把它的各種信息封裝為一個(gè)結(jié)構(gòu)體保存到一個(gè)Vector變量Agentlist中,然后就可以從myvectorPosition中獲取圖標(biāo)信息,然后改變其圖標(biāo)格式,加載對應(yīng)的紅色圖標(biāo);如果Agent客戶端斷開了連接,則也添加日志記錄,將其從Agentlist中刪除,而且圖標(biāo)換為灰色.
當(dāng)用戶要采集數(shù)據(jù),程序先將實(shí)時(shí)數(shù)據(jù)庫中的PVDeviceRunning、WTDeviceRunning、FCDeviceRunning、BBDeviceRunning、MTDeviceRunning、LoadDeviceRunning的記錄全部清空,然后根據(jù)Agentlist中的設(shè)備名獲取設(shè)備類型,從而在實(shí)時(shí)數(shù)據(jù)庫中定義相應(yīng)的類的對象,對象名稱就是設(shè)備名;接著由隨機(jī)數(shù)產(chǎn)生模塊生成相應(yīng)的功率數(shù)據(jù)等(如果在實(shí)際中,可以由協(xié)議3接收采集到的數(shù)據(jù));最后在圖標(biāo)下方創(chuàng)建Label控件顯示這些數(shù)據(jù).其中涉及的主要函數(shù)有TFormMain::agent-login(),TFormMain::TimerRefreshTimer(), TFormMain::btnSimStaClick()等.具體效果如圖7所示.
2.3.3 開關(guān)操作和實(shí)時(shí)信息顯示
對于開關(guān)元件,在實(shí)時(shí)運(yùn)行中可以閉合和斷開,同時(shí)對所有設(shè)備可以查看它的實(shí)時(shí)信息和歷史信息.對于不同設(shè)備,實(shí)時(shí)數(shù)據(jù)也不相同,例如風(fēng)力發(fā)電機(jī),實(shí)時(shí)信息包括風(fēng)速、輸出功率、輸出電流、輸出電壓等.當(dāng)下一批設(shè)備采集數(shù)據(jù)傳來或用戶停止采集,則把FastDB實(shí)時(shí)數(shù)據(jù)庫中所有的數(shù)據(jù)逐條加入歷史數(shù)據(jù)庫中的設(shè)備Running表中,所以不僅可以查詢實(shí)時(shí)信息,還可以查詢歷史信息.
開關(guān)操作主要基于右鍵彈出菜單,所以在FormMain中新建一個(gè)Menu為mainPopupMenu,TrackButton為tbRightButton,在對象樹形查看器中設(shè)計(jì)菜單選項(xiàng),并為每個(gè)選項(xiàng)定義一個(gè)指針,從而方便實(shí)現(xiàn)在不同設(shè)備圖標(biāo)右擊彈出菜單選項(xiàng)的不同,如圖8所示.對于開關(guān)元件彈出菜單中“閉合開關(guān)”和“斷開開關(guān)”的顯示就是通過判斷設(shè)備類型,根據(jù)開關(guān)的閉合斷開情況設(shè)置相應(yīng)菜單選項(xiàng)的指針是否可用來實(shí)現(xiàn)的.對于開關(guān)的某個(gè)操作,都要查詢SQL Server數(shù)據(jù)庫中的“開關(guān)關(guān)聯(lián)設(shè)備表”獲取開關(guān)控制的設(shè)備,已作相應(yīng)變化.例如,當(dāng)開關(guān)斷開時(shí),其控制的設(shè)備中,如果有已登錄設(shè)備,則顯示為斷開狀態(tài).
對于實(shí)時(shí)信息顯示則是根據(jù)設(shè)備名查詢到實(shí)時(shí)數(shù)據(jù)庫中的記錄,從而獲取設(shè)備的溫度、太陽輻射、電壓、輸出功率等信息,最后給予顯示.當(dāng)用戶停止采集數(shù)據(jù)時(shí),根據(jù)FastDB實(shí)時(shí)數(shù)據(jù)庫中各個(gè)類的對象名,判斷設(shè)備類型,保存到相應(yīng)的設(shè)備Running表中.
圖7 連接Agent和采集數(shù)據(jù)的實(shí)時(shí)變化 圖8 開關(guān)的操作和實(shí)時(shí)信息顯示
2.3.4 調(diào)度信息顯示
當(dāng)點(diǎn)擊主界面的第二個(gè)選項(xiàng)卡“Agent調(diào)度信息”時(shí),系統(tǒng)會(huì)顯示近期的第100條調(diào)度結(jié)果記錄.實(shí)現(xiàn)方法是:在FormMain中新建一個(gè)RichEdit變量RichEdit1,當(dāng)選擇TabSet的第二個(gè)選項(xiàng)卡時(shí),調(diào)用控件的Visible函數(shù)設(shè)置RichEdit1可見,然后從SQL Server數(shù)據(jù)庫中的Agent調(diào)度表中查詢前100條記錄,然后逐行顯示這些信息:智能體+設(shè)備名+“在”+時(shí)間+發(fā)電/用電量+優(yōu)先級別+調(diào)度結(jié)果,例如:
智能體Agent1在2013-6-29 15:08:03 發(fā)電:6948.64892578125KW/時(shí) 優(yōu)先級:普通 調(diào)度結(jié)果:調(diào)度成功!
智能體Agent2在2013-6-30 21:49:50 發(fā)電:0KW/時(shí) 優(yōu)先級:普通 調(diào)度結(jié)果:調(diào)度不能執(zhí)行,Agent2發(fā)電總能力不足!
2.4 Agent管理模塊
2.4.1 屬性和結(jié)構(gòu)模塊
1) Agent屬性
Agent屬性是對Agent的特征要素進(jìn)行描述.屬性的構(gòu)成要素:標(biāo)識(shí)(名稱),角色(從執(zhí)能上劃分),所管理的發(fā)電單元種類和基本特性,負(fù)荷的種類和基本特性,通信數(shù)據(jù)的類型和格式,位置信息(IP地址,所處理網(wǎng)段等),狀態(tài)(正常,異常),決策規(guī)則.
2) Agent的結(jié)構(gòu)模塊
Agent的結(jié)構(gòu)分為4層:物理層,數(shù)據(jù)管理層,信息處理層,應(yīng)用層[8].物理層:Agent是一種抽象實(shí)體,在物理上是由與Agent直接相連的發(fā)電單元、負(fù)載和一個(gè)開關(guān)(電閘),Agent的作用就是對它們進(jìn)行管理.?dāng)?shù)據(jù)管理層:主要任務(wù)是數(shù)據(jù)的采集,數(shù)據(jù)的存儲(chǔ),數(shù)據(jù)的維護(hù)(知識(shí)的維護(hù),歷史數(shù)據(jù)的維護(hù)),數(shù)據(jù)的通信.信息處理層:主要任務(wù)是對采集的數(shù)據(jù)進(jìn)行初步的加工,如數(shù)據(jù)格式的轉(zhuǎn)換.應(yīng)用層:主要任務(wù)是顯示運(yùn)行的狀態(tài),提供可控和可編程的接口.
3) Agent客戶端結(jié)構(gòu)
每一個(gè)Agent客戶端都是一個(gè)獨(dú)立的程序,只負(fù)責(zé)一個(gè)AgentID所管理的設(shè)備.
①登陸Agent客戶端,填寫服務(wù)器地址和端口號,連接服務(wù)器.輸入AgentID號和密碼,正確后,給予登陸.如果有一項(xiàng)不正確,Agent客戶端提示不正確.登陸成功后,讀取Server保存在數(shù)據(jù)庫里的此AgentID的所管理的設(shè)備列表,然后再更新Agent客戶端所在數(shù)據(jù)庫中的設(shè)備列表.某個(gè)Agent登陸后,可以與主控平臺(tái)進(jìn)行通信,與其它Agent一起參與調(diào)度.
②Agent查詢是在主菜單Agent管理中,在FormAgentQuery窗體中實(shí)現(xiàn)的.在這個(gè)窗口中使用了一個(gè)TTreeView控件和用于顯示的RichEdit控件,前者用來顯示登錄的Agent和沒有登錄的Agent,后者顯示的是查詢到的信息.目前Agent有下面幾種狀態(tài),如表1所示.
表1 Agent狀態(tài)表
注: Agent只有在狀態(tài)1的情況下才可以與其他Agent進(jìn)行協(xié)作調(diào)度.
2.4.2 Agent的注冊和刪除
Agent的注冊是通過菜單項(xiàng)上的Agent添加來實(shí)現(xiàn)的,Agent的刪除也是類似.在此的主要操作就是數(shù)據(jù)庫的讀寫,在該平臺(tái)上數(shù)據(jù)庫的讀寫主要是通過C++Builder本身的控件TDataBase,配置ODBC來連接數(shù)據(jù)庫.在此數(shù)據(jù)庫中主要使用動(dòng)態(tài)創(chuàng)建pQuery來進(jìn)行讀寫數(shù)據(jù)庫,也用到了TTable、TDataSource.其實(shí)現(xiàn)基本語句如下:
TQuery*pQuery=new TQuery(NULL);
pQuery->DatabaseName="myDB";
AnsiString mysql;
mysql=”SQL語句”
pQuery->SQL->Add(mysql);//Agent的注冊
pQuery->ExecSQL();
pQuery->Close();
delete pQuery;//Agent的刪除
2.5 通信管理模塊
2.5.1 通信方式和通信結(jié)構(gòu)
在平臺(tái)上實(shí)現(xiàn)客戶端和服務(wù)端通信,由于在C++Builder上我們主要使用TServerSocket和TClientSocket控件進(jìn)行通信,即在服務(wù)端上使用一個(gè)TServerSocket和客戶端上使用一個(gè)TClientSocket.同時(shí)由于客戶端與客戶端之間也要通信,為了連接和通信的可靠性,同樣在客戶端上再放置一個(gè)TServerSocket和TClientSocket2來滿足客戶端和客戶端之間的通信.
目前在客戶端和服務(wù)端的通信類型中,主要有使用TProtocol類封裝了Agent通訊中需要的協(xié)議,現(xiàn)階段里面用結(jié)構(gòu)體的方法規(guī)定了“Agent登錄,仿真開始,仿真電流、電壓數(shù)據(jù)傳遞,日調(diào)度計(jì)劃,AGC調(diào)度計(jì)劃,故障信息,變更信息”這些信息的格式.在服務(wù)端和客戶端的通信中采用TCP三次握手協(xié)議的可靠傳輸.
2.5.2 通信策略和數(shù)據(jù)格式
1) 通信策略
通信策略包括通信優(yōu)先級的生成策略和通信方式選擇的策略.
2) 通信格式
通信內(nèi)容的設(shè)置:通信內(nèi)容的設(shè)置如數(shù)據(jù)、請求、指令和任務(wù);通信內(nèi)容包括:控制命令,廣播命令,采集命令,測量命令.
通信格式的設(shè)置:通信格式分為發(fā)送幀,應(yīng)答幀,數(shù)據(jù)幀.發(fā)送幀組成:命令字,地址數(shù),地址.命令字為期望的動(dòng)作行為,如采集命令,測量命令;地址數(shù)為期望同時(shí)操作的目標(biāo)數(shù)目;地址為操作的目標(biāo)的地址.應(yīng)答幀組成:(a)測量應(yīng)答幀.組成為命令字,地址數(shù),地址狀態(tài);(b)采集應(yīng)答幀.組成為命令字,地址數(shù),數(shù)據(jù);(c)其它命令應(yīng)答幀.組成為命令字,地址數(shù).?dāng)?shù)據(jù)幀組成:具體的數(shù)據(jù).算法函數(shù)如下:
ResolveDiaoduMessage(AnsiString recv,TCustomWinSocket *Socket1);
//對服務(wù)器接受到的信息進(jìn)行處理.對登錄、預(yù)警、反饋信息的處理
ResolveMessage(AnsiString recv,TCustomWinSocket *Socket1);
//服務(wù)器收到的信息進(jìn)行處理
兩個(gè)函數(shù)是在TServerSocket封裝好的事件ServerSocketClientRead(TObject *Sender,TCustomWinSocket *Socket),S是接受到的字符串.
2.5.3 協(xié)作控制模塊
1) 通信協(xié)議的設(shè)置
通信協(xié)議建立在TCP/IP協(xié)議之上,采用應(yīng)答式.對于任意命令設(shè)置定時(shí)器,超時(shí)認(rèn)為是通信故障.服務(wù)端通信協(xié)議的格式如表2所示.
表2 服務(wù)端通信協(xié)議的格式
客戶端通信協(xié)議的制定如表3所示.
表3 服務(wù)端通信協(xié)議的格式
2) 協(xié)作調(diào)度與控制
微電網(wǎng)協(xié)作調(diào)度與控制分為實(shí)時(shí)安全穩(wěn)定控制、故障自愈控制與能量優(yōu)化調(diào)度3大功能模塊.實(shí)時(shí)安全穩(wěn)定控制與故障自愈控制目標(biāo)是維持微電網(wǎng)的安全穩(wěn)定運(yùn)行,為秒級實(shí)時(shí)分析決策模塊,通過實(shí)時(shí)數(shù)據(jù)庫快速從SCADA獲取全網(wǎng)實(shí)時(shí)運(yùn)行數(shù)據(jù),并通過SCADA模塊下發(fā)決策控制指令;能量優(yōu)化調(diào)度模塊目標(biāo)是維持微電網(wǎng)經(jīng)濟(jì)運(yùn)行,除了通過實(shí)時(shí)數(shù)據(jù)庫獲取全網(wǎng)當(dāng)前運(yùn)行數(shù)據(jù)外,還需要對通過歷史數(shù)據(jù)庫獲取的微電網(wǎng)歷史運(yùn)行數(shù)據(jù)、用戶互動(dòng)信息和氣象等數(shù)據(jù)進(jìn)行預(yù)測、分析,完成多時(shí)間尺度的最優(yōu)發(fā)電計(jì)劃的制定,并通過數(shù)據(jù)庫、網(wǎng)絡(luò)通信或SCADA系統(tǒng)下發(fā)調(diào)度計(jì)劃.部分實(shí)現(xiàn)算法函數(shù)如下:
vector
vector
void-fastcall QueryDiaoduAgent(vector
void-fastcall QueryAgentInfo(AnsiString agentID,float &agentacquired,AnsiString &agenttype);//用來查詢某個(gè)agent的發(fā)電類型和發(fā)電量或者需要的電量
void-fastcall TFormMain::QueryMytopInfo(float &resumepower,float &generatepower);//查詢當(dāng)前微網(wǎng)的產(chǎn)生和消耗的電量
void-fastcall TFormMain::OneNewDiaodu()//OneNewDiaodu()封裝的算法
{//查詢可參與調(diào)度的Agent有哪些,保存在agentDiaoduList這個(gè)動(dòng)態(tài)數(shù)組里面
QueryDiaoduAgent(agentDiaoduList);
QueryMytopInfo(f-totalpower,f-totalacquired);//查詢每個(gè)Agent的發(fā)點(diǎn)信息和用電信息
ClientToClient("Agent1","Agent2",150);//Agent1提供給Agent2 150W的電量
}
MyWarningThread *pWarningThread;//定義一個(gè)預(yù)警線程
pWarningThread=new MyWarningThread(true);
pWarningThread->Resume();//預(yù)警線程的使用,一般先傳入一個(gè)預(yù)警Agent的ID,將其放入AgentIDWarningThread中,線程的處理在UnitWarningThread.cpp文件中.
2.6 數(shù)據(jù)庫管理模塊
基于多Agent的智能微網(wǎng)EMS數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)如下圖9所示.
圖9 基于多Agent的智能微網(wǎng)EMS數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(jì)
3.1 FastDB模塊
FastDB是高效的內(nèi)存數(shù)據(jù)庫系統(tǒng),具備實(shí)時(shí)能力及便利的C++接口.FastDB沒有數(shù)據(jù)庫緩沖管理開銷,不需要在數(shù)據(jù)庫文件和緩沖池之間傳輸數(shù)據(jù).這就是FastDB運(yùn)行速度明顯快于把數(shù)據(jù)放在緩沖池中的傳統(tǒng)數(shù)據(jù)庫的原因.此外,FastDB支持事務(wù)、在線備份以及系統(tǒng)崩潰后的自動(dòng)恢復(fù).本項(xiàng)目FastDB中的數(shù)據(jù)存儲(chǔ)在表中,表結(jié)構(gòu)用C++中的類來定義,表記錄相當(dāng)于類的實(shí)例.下面是一個(gè)用C++定義的表結(jié)構(gòu). 光伏電池Running如表4所示.
class GFDC-Running{
public:
int4 id;
char const* gfid; //光伏ID
char const* gfname;//光伏名稱
char const* sblx; //設(shè)備類型
char const* wwAgent-id;//AgentID
char const* wlwz; //物理位置
float wd; //溫度
float tyfs; //太陽輻射
float dy; //電壓
float scgl; //輸出功率
dbDateTime time;//時(shí)間
TYPE-DESCRIPTOR((//類型描述
KEY(id,INDEXED|AUTOINCREMENT),//
定義主鍵 FIELD(gfid),//定義字段
FIELD(gfname),
FIELD(sblx),
FIELD(wwAgent-id),
FIELD(wlwz),
FIELD(wd),
FIELD(tyfs),
FIELD(dy),
FIELD(scgl),
FIELD(time)
));};
REGISTER(GFDC-Running);//注冊表結(jié)構(gòu)
FastDB中記錄的插入、刪除和查詢操作如下:
GFDC-Running gfdc;
gfdc.gfname="光伏電池";
insert(gfdc);//插入
char* cstr="gfname='光伏電池'";
dbCursor
if(cursor.select(cstr)>0){
do {
cout? cursor->gfname?NL;
}while(cursor.next());
}//查詢
cursor->gfname="光伏電池2";
curson.remove();//刪除
表4 光伏電池Running
3.2 遠(yuǎn)程訪問模塊
該模塊使用Apache作為Web服務(wù)器;服務(wù)器端利用PHP訪問Sql Server數(shù)據(jù)庫并將結(jié)果封裝成為XML格式的字符串,然后將其傳輸給客戶端;Flash把客戶端獲取的數(shù)據(jù)進(jìn)行XML解析,并根據(jù)解析后的數(shù)據(jù)生成相應(yīng)的電路圖.該模塊實(shí)現(xiàn)一共分為6個(gè)文件,分別是:
index.php:首頁,主要作用是嵌入flash播放器以顯示電路圖.
dianlutu.swf: flash文件,將服務(wù)器端傳來的數(shù)據(jù)加以解析,并生成和顯示電路圖.
config.php: 配置文件,填寫需要訪問的數(shù)據(jù)庫服務(wù)器名稱、用戶名、密碼和數(shù)據(jù)庫名.
dbClass.php: 數(shù)據(jù)庫操作類,封裝了一些常用的數(shù)據(jù)庫操作方法,如連接、執(zhí)行Sql語句、返回記錄數(shù)、斷開連接等操作.
button.php: 獲取所用微網(wǎng)的名稱,并封裝成XML字符串傳給客戶端.
data.php: 對于用戶選取的微網(wǎng),獲取該微網(wǎng)中各組件的坐標(biāo)信息,并封裝成XML字符串傳給客服端.
info.php: 在鼠標(biāo)移至特定組件時(shí),獲取該組件的詳細(xì)信息,并封裝成XML字符串傳給客服端.
本文簡要介紹了基于多Agent智能微電網(wǎng)EMS的系統(tǒng)架構(gòu)與功能模塊設(shè)計(jì)、主控管理平臺(tái)的幾大主要模塊(微網(wǎng)運(yùn)行實(shí)時(shí)監(jiān)控、微網(wǎng)編輯、Agent管理、通信管理、數(shù)據(jù)管理、FastDB模塊和遠(yuǎn)程訪問模塊)的設(shè)計(jì)與實(shí)現(xiàn)方法.設(shè)計(jì)開發(fā)的基于多Agent的智能微電網(wǎng)EMS可充分地利用各地豐富的清潔可再生能源,實(shí)施多Agent對能量變化的實(shí)時(shí)監(jiān)控和預(yù)警,通過Agent C/S間的協(xié)作調(diào)度與控制維持電平的平穩(wěn),實(shí)現(xiàn)能源的充分、可靠地利用.
[1] 劉慶華.可再生能源資源與開發(fā)利用[J].攀枝花科技與信息,2009(1):43-49.
[2] 劉生春,張杰,李春來.智能電網(wǎng)發(fā)展趨勢分析[J].科技信息,2011(16):352-359.
[3] Chatzivasiliadis S J, Hatziargyriou N D, Dimeas A L. Development of an agent based intelligent control system for micro-grids[R]. In Proceedings of the IEEE Power and Energy Society 2008 General Meeting,2008.
[4] 王成山,李鵬.分布式發(fā)電、微網(wǎng)與智能配電網(wǎng)的發(fā)展與挑戰(zhàn)[J].電力系統(tǒng)自動(dòng)化,2010,34(2):10-14.
[5] 尹項(xiàng)根,張哲.高滲透率分布式電源接入下電網(wǎng)面臨的問題及保護(hù)技術(shù)[J].華中科技大學(xué)學(xué)報(bào),2010(8):1-10.
[6] Dimeas A L, Hatziargyriou N D. Agent based control for micro-grids[R]. In Proceedings of the IEEE Power Energy Society General Meeting,2007.
[7] 黃秀瓊.用于主網(wǎng)削峰填谷調(diào)度的風(fēng)/光/儲(chǔ)微電網(wǎng)控制策略[J],中國電力,2013(2):87-89.
[8] 徐潼.多Agent系統(tǒng)的體系結(jié)構(gòu)和協(xié)作研究[D].南京:南京理工大學(xué),2003.
[責(zé)任編輯:蔣海龍]
Design and Implementation of Energy Management System Based on Multi-Agent Smart Micro-grid
FANG Yue-sheng1, YAO Hong-liang2
(1.Anhui Water Conservancy Technical College, Hefei Anhui 231603, China) (2.School of Computer and Information, Hefei University of Technology, Hefei Anhui 230009, China)
With the gradual arrival of the era of intelligent, smart micro-grid power system technology has became the development of cutting-edge technology. Smart Micro-Grid will be a mainstream direction of the development of the grid in future, EMS (energy management system) is coral of the whole system. An improved architecture system and some functional modules of the smart micro-grid EMS is proposed in this paper, function and interaction of the component modules are introduced simply. Energy management system based on multi-agent smart micro-grid can take advantage of the rich over the clean and renewable energy, using multi-agent system for real-time monitoring of energy change and early warning, by Client/Server collaboration scheduling and control maintenance levels steady, full of energy to achieve reliable use.
multi-agent; smart micro-grid; EMS (energy management system); scheduling and control; renewable energy
2013-12-22
國家自然科學(xué)基金資助項(xiàng)目(60705015); 安徽省自然科學(xué)基金資助項(xiàng)目(KJ2013B095)
方躍勝(1975-), 男, 安徽舒城人, 安徽水利水電職業(yè)技術(shù)學(xué)院講師, 合肥工業(yè)大學(xué)碩士研究生, 研究方向?yàn)槿斯ぶ悄芎蛨D形學(xué). E-mail: ahhffys@163.com
TP311
A
1671-6876(2014)02-0139-12