雷金勇,李 鵬,于學(xué)軍,張君泉,王成山
(1.南方電網(wǎng)科學(xué)研究院,廣州 510080;2.天津大學(xué)智能電網(wǎng)教育部重點(diǎn)實(shí)驗(yàn)室,天津 300072;3.積成電子股份有限公司,濟(jì)南 250100)
電力系統(tǒng)數(shù)字仿真發(fā)展至今,已有多種廣泛應(yīng)用于分布式發(fā)電系統(tǒng)及微網(wǎng)相關(guān)領(lǐng)域研究的數(shù)字仿真程序,包括Matlab/SimPowerSystems、DIgSILENT及PSCAD/EMTDC等[1,2],但這些國外的商業(yè)仿真計(jì)算工具的核心模型與算法等內(nèi)容基本上不對(duì)用戶開放,借助其實(shí)現(xiàn)相關(guān)的仿真計(jì)算可能并不困難,但如果需要進(jìn)一步研究開發(fā)準(zhǔn)確、高效的仿真算法則不大可能。因此,國內(nèi)天津大學(xué)開發(fā)了具有自主知識(shí)產(chǎn)權(quán)的分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序TSDG(transient simulator of distributed generation systems and micro-grid),它不僅能夠?yàn)榉植际桨l(fā)電及微網(wǎng)系統(tǒng)的規(guī)劃、設(shè)計(jì)、運(yùn)行、實(shí)驗(yàn)及科學(xué)研究提供堅(jiān)實(shí)的理論基礎(chǔ)與依據(jù),同時(shí)也能夠提高我國在電力系統(tǒng)仿真軟件開發(fā)、設(shè)計(jì)與應(yīng)用領(lǐng)域的核心技術(shù)競(jìng)爭力[3,4]。
分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序的設(shè)計(jì)開發(fā)是一項(xiàng)復(fù)雜的系統(tǒng)工程,其中最重要的是需要應(yīng)對(duì)多種功能需求的變化,具體包括:①元件模型方面,與傳統(tǒng)電力系統(tǒng)成熟可靠的元件模型相比,分布式發(fā)電系統(tǒng)元件不但種類繁多,而且很多分布式電源的模型尚在不斷完善與發(fā)展之中,這就要求TSDG能夠應(yīng)對(duì)分布式發(fā)電微網(wǎng)系統(tǒng)模型增加和變化的要求;②系統(tǒng)算法方面,分布式發(fā)電微網(wǎng)系統(tǒng)各動(dòng)態(tài)過程的時(shí)間常數(shù)差異較大,整個(gè)系統(tǒng)是一個(gè)典型的強(qiáng)剛性系統(tǒng),電力電子開關(guān)器件動(dòng)作時(shí)序的不確定性以及分布式電源和控制系統(tǒng)引入的大量非線性環(huán)節(jié)對(duì)程序的計(jì)算精度和數(shù)值穩(wěn)定性提出了較高要求,需要采用高效準(zhǔn)確靈活的解算方法,但仿真算法總是在不斷改進(jìn)中,而且隨著分布式發(fā)電微網(wǎng)系統(tǒng)的發(fā)展,對(duì)TSDG的功能需求也會(huì)發(fā)生變化,這就要求TSDG能夠應(yīng)對(duì)暫態(tài)仿真算法和功能需求變化的要求;③用戶接口方面,輸入和輸出數(shù)據(jù)形式的多樣化,多種仿真程序的交互混合仿真等已經(jīng)成為一種趨勢(shì),這就要求TSDG能夠應(yīng)對(duì)未來用戶接口變化的要求。
傳統(tǒng)的面向過程程序設(shè)計(jì)是面向功能的,通常使用函數(shù)或過程來實(shí)現(xiàn)所需要的功能,這種方式不利于大中型軟件的開發(fā)與維護(hù)。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法通過創(chuàng)建對(duì)象來簡化程序設(shè)計(jì)過程,允許抽象化、模塊化的分層結(jié)構(gòu),具有多態(tài)性、繼承性和封裝性的特點(diǎn)。面向?qū)ο笤O(shè)計(jì)原則在基于面向?qū)ο蠓椒ǖ能浖到y(tǒng)的開發(fā)過程中起著重要的指導(dǎo)作用,它是各種設(shè)計(jì)模式背后的基本思想原則,遵守設(shè)計(jì)原則能夠提高軟件的可維護(hù)性和可復(fù)用性。
面向?qū)ο笤O(shè)計(jì)OOD(object oriented design)的核心思想主要包括:①針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程,極大地減少了子系統(tǒng)之間的相互依賴關(guān)系;②優(yōu)先使用對(duì)象組合,而不是類繼承,使得設(shè)計(jì)更加靈活;③封裝變化點(diǎn),降低了對(duì)系統(tǒng)的整體影響。在此基礎(chǔ)上可以得出幾條具體的設(shè)計(jì)原則[5~7]:開放封閉原則、里氏代換原則、依賴倒置原則、接口隔離原則等,采用這些設(shè)計(jì)原則可提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性。
作為面向?qū)ο笤O(shè)計(jì)的實(shí)現(xiàn)手段,設(shè)計(jì)模式是指軟件開發(fā)過程中對(duì)重復(fù)出現(xiàn)問題的可重用性解決方案[8]。設(shè)計(jì)模式總結(jié)了面向?qū)ο筌浖_發(fā)中的設(shè)計(jì)經(jīng)驗(yàn),描述了軟件開發(fā)過程中不斷重復(fù)出現(xiàn)的問題及該問題的解決方案,目的就是使軟件開發(fā)者可以更加簡單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu)。
設(shè)計(jì)模式依據(jù)其目的可分為創(chuàng)建型、結(jié)構(gòu)型、行為型三種[9]。創(chuàng)建型模式抽象了實(shí)例化過程,使一個(gè)系統(tǒng)獨(dú)立于創(chuàng)建、組合和表示構(gòu)成這個(gè)系統(tǒng)的對(duì)象,包括抽象工廠模式等;結(jié)構(gòu)型模式處理類與對(duì)象的組合,從而獲得更大的結(jié)構(gòu),包括組合模式等;行為型模式描述類與對(duì)象之間的交互以及職責(zé)分配,涉及算法和對(duì)象之間責(zé)任的劃分,它不僅描述了對(duì)象或類的模式,還描述了它們之間的通信模式,包括觀察者模式等。雖然不同設(shè)計(jì)模式的設(shè)計(jì)思想有所不同,但它們并非是孤立的,而是常常組合在一起,共同完成系統(tǒng)的設(shè)計(jì)。
設(shè)計(jì)模式展示了面向?qū)ο笏枷胫蟹庋b、繼承和多態(tài)等特性的使用,正確地理解與使用設(shè)計(jì)模式,有助于快速開發(fā)出可維護(hù)和可復(fù)用的系統(tǒng)。雖然設(shè)計(jì)模式有許多優(yōu)點(diǎn),但是仍然需要程序設(shè)計(jì)者深入理解設(shè)計(jì)模式背后的面向?qū)ο笏枷耄拍軌蚋玫厝ナ褂盟鼈?,真正地發(fā)揮它們的優(yōu)勢(shì),同時(shí)設(shè)計(jì)者應(yīng)該避免濫用所帶來的軟件結(jié)構(gòu)的復(fù)雜和冗余,不能為了使用設(shè)計(jì)模式而使用。
分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序框架如圖1所示,主要由4部分組成。
(1)系統(tǒng)數(shù)據(jù),包括系統(tǒng)參數(shù)和仿真結(jié)果兩部分,前者應(yīng)提供仿真步長、仿真時(shí)間、輸出采樣間隔等參數(shù),以及元件的基本信息、拓?fù)溥B接關(guān)系、元件基本參數(shù)、數(shù)據(jù)輸出控制參數(shù)四部分,后者包括系統(tǒng)要求輸出的仿真結(jié)果,如電壓、電流及控制系統(tǒng)輸出等信息。
(2)元件模型,它主要包括分布式電源、網(wǎng)絡(luò)元件、電力電子變流裝置、控制器等模型。
(3)系統(tǒng)解算,它主要是對(duì)分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真算法的實(shí)現(xiàn),從系統(tǒng)層面看,它包括電氣系統(tǒng)與控制系統(tǒng)的交替求解,電氣系統(tǒng)解算側(cè)重于含電力電子設(shè)備的以伏安關(guān)系描述電氣網(wǎng)絡(luò)的求解,控制系統(tǒng)解算則側(cè)重于強(qiáng)非線性的以輸入輸出關(guān)系描述的控制器及分布式電源模型的精確求解。
(4)用戶接口,可以根據(jù)不同的數(shù)據(jù)格式提供靈活和可擴(kuò)展的數(shù)據(jù)處理和輸出顯示功能。
圖1 分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序框架Fig.1 Framework of TSDG
在TSDG的開發(fā)實(shí)現(xiàn)過程中,建立元件模型方面,一般采用創(chuàng)建型模式來管理種類繁多的分布式發(fā)電微網(wǎng)系統(tǒng)元件模型;在系統(tǒng)算法實(shí)現(xiàn)方面,行為型模式提供了多種靈活的算法選擇;在用戶接口設(shè)計(jì)方面,結(jié)構(gòu)型模式對(duì)多樣的接口進(jìn)行了抽象統(tǒng)一,避免了接口的不一致性。
TSDG基于面向?qū)ο笤O(shè)計(jì)思想,廣泛采用了設(shè)計(jì)模式理論,限于篇幅,文中僅以其中四種設(shè)計(jì)模式的應(yīng)用舉例進(jìn)行說明,分別是工廠方法模式、適配器模式、策略模式和單例模式。在TSDG的構(gòu)建過程中,利用工廠方法模式提高元件建模的靈活性,利用適配器模式實(shí)現(xiàn)稀疏算法庫的復(fù)用,利用策略模式減少程序模塊間的耦合,利用單例模式優(yōu)化和共享資源訪問。
工廠方法模式的意圖是定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,使一個(gè)類的實(shí)例化延遲到其子類。在工廠方法模式中,核心的抽象工廠類不會(huì)負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口,具體產(chǎn)品的創(chuàng)建由具體工廠類去實(shí)現(xiàn)。因此,系統(tǒng)在加入新的產(chǎn)品時(shí)就不需要修改抽象工廠類和具體工廠類,只需要增加與新產(chǎn)品相應(yīng)的具體工廠類即可。工廠類與產(chǎn)品類往往具有平行的對(duì)等結(jié)構(gòu),它們之間一一對(duì)應(yīng)。
與傳統(tǒng)電力系統(tǒng)成熟穩(wěn)定的元件模型相比,分布式發(fā)電微網(wǎng)系統(tǒng)不但元件模型種類繁多,而且很多分布式電源的模型尚在不斷完善與發(fā)展之中。隨著分布式發(fā)電微網(wǎng)系統(tǒng)研究的深入,需要不斷地對(duì)元件模型庫進(jìn)行增加或者修改。傳統(tǒng)的軟件開發(fā)方法需要修改原有的創(chuàng)建具體元件類的實(shí)現(xiàn)部分,使得實(shí)例的創(chuàng)建不靈活,而且由于其在開放擴(kuò)展的同時(shí)也開放了其他無關(guān)元件模型的修改,違背了開放-封閉原則。工廠方法模式則是定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定需要實(shí)例化的類,所以工廠方法模式可較好地解決這個(gè)問題。
圖2給出了基于工廠方法模式的元件對(duì)象創(chuàng)建實(shí)現(xiàn)方法,主要包括四個(gè)部分,分別為抽象工廠,具體工廠,抽象產(chǎn)品和具體產(chǎn)品。抽象工廠類AbstractFactory定義了創(chuàng)建各種元件對(duì)象行為的接口,通過該接口可以實(shí)現(xiàn)具體產(chǎn)品;Transformer Factory類、BranchRLCFactory類和DiodeFactory類等為具體工廠,在具體工廠中,工廠方法CreateElement對(duì)具體元件的創(chuàng)建進(jìn)行了定義與實(shí)現(xiàn),返回一個(gè)ElectricalSystem類型的對(duì)象實(shí)例。ElectricalElement類是工廠模式所創(chuàng)建產(chǎn)品的基類。由于具體工廠返回的是抽象產(chǎn)品的實(shí)例,從而屏蔽了接口的不同實(shí)現(xiàn)所造成的用戶邏輯對(duì)具體類訪問所造成的差異。在具體的應(yīng)用中,增加或者修改元件庫模型時(shí),軟件開發(fā)人員只需要而且只允許增加或修改相應(yīng)元件模型的具體工廠和具體產(chǎn)品,無法修改其他元件模型,不但遵守了開放-封閉原則,又保持了封裝元件對(duì)象創(chuàng)建過程的優(yōu)點(diǎn)。
圖2 基于工廠方法模式的元件對(duì)象創(chuàng)建實(shí)現(xiàn)Fig.2 Implementation of element object creation based on factory method pattern
在TSDG中,除了元件對(duì)象模型的創(chuàng)建之外,算例參數(shù)輸入和仿真結(jié)果輸出也采用了工廠方法模式。TSDG兼容兩種算例參數(shù)和輸出結(jié)果的存儲(chǔ)形式:Mysql數(shù)據(jù)庫和自定義數(shù)據(jù)文件。這兩種形式的數(shù)據(jù)具有相同的行為,包括數(shù)據(jù)的存儲(chǔ)、查詢、修改等,但是兩者的結(jié)構(gòu)和訪問方式完全不同,前者需使用數(shù)據(jù)庫接口,后者需使用文件流接口,在接口實(shí)現(xiàn)上存在較大差異。TSDG采用工廠方法模式定義了統(tǒng)一的抽象接口集,包括數(shù)據(jù)庫連接(文件打開)、數(shù)據(jù)存儲(chǔ)、查詢、修改等一系列行為,并在該抽象接口集的基礎(chǔ)上實(shí)現(xiàn)了用于Mysql數(shù)據(jù)庫和自定義數(shù)據(jù)文件格式的具體實(shí)現(xiàn)。在具體的應(yīng)用中,無需指定數(shù)據(jù)形式的子類,只需創(chuàng)建父類即可得到一系列該父類所管理的數(shù)據(jù)形式實(shí)現(xiàn),使上層應(yīng)用獨(dú)立于數(shù)據(jù)形式的變化。
工廠方法模式通??梢钥醋魇莿?chuàng)建對(duì)象(實(shí)例化)的替代品,任何需要生成對(duì)象的場(chǎng)景都可以使用,但是要在復(fù)雜度與便捷之間權(quán)衡,另外在需要靈活的、可擴(kuò)展的框架時(shí),也可以考慮采用該模式。
工廠方法模式具有如下優(yōu)點(diǎn):1)良好的封裝性,代碼結(jié)構(gòu)清晰;2)很強(qiáng)的可擴(kuò)展性;3)降低了程序的耦合性。
適配器模式的意圖是將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得接口不兼容的多個(gè)類可以一起工作。
軟件開發(fā)過程中總是希望復(fù)用一些現(xiàn)成的類,已存在類的功能可能符合系統(tǒng)的設(shè)計(jì)要求,但是它們的接口卻和當(dāng)前的系統(tǒng)不匹配造成不能復(fù)用。一般的做法是逐個(gè)修改這些類的接口,這也是一件很繁瑣的工作。適配器模式能夠從軟件結(jié)構(gòu)的設(shè)計(jì)上解決這個(gè)問題。適配器模式可以提供一個(gè)接口,直接將現(xiàn)有的模塊加入到新的仿真軟件中去,加快軟件開發(fā)進(jìn)度。
TSDG需要高效可靠的稀疏算法庫,從軟件工程的角度來看,自主重新開發(fā)一套稀疏算法庫是不現(xiàn)實(shí)的,降低了軟件代碼重用和開發(fā)效率,通常的做法是盡可能利用現(xiàn)有成熟的稀疏算法庫。開源免費(fèi)的Sparse庫[10]能夠?qū)崿F(xiàn)對(duì)線性稀疏方程組的求解,具有較強(qiáng)的實(shí)用性,但其接口卻和TSDG不一致。因此在TSDG的實(shí)現(xiàn)過程中采用適配器模式將Sparse庫的接口轉(zhuǎn)換為適合TSDG的接口,實(shí)現(xiàn)了Sparse庫的復(fù)用,這不但大大加快了程序的開發(fā)進(jìn)度,增加了仿真軟件的通用性和可維護(hù)性,也為以后采用其他更為高效的第三方稀疏算法庫[11~14]替換Sparse庫提供了便捷,提高了程序的可維護(hù)性。
圖3給出了基于適配器模式的稀疏算法庫實(shí)現(xiàn),Target類定義了TSDG所用的接口,Sparse Lib類是已經(jīng)存在的稀疏算法庫,可以是Sparse庫,也可以是其他第三方稀疏算法庫,該庫實(shí)現(xiàn)了稀疏算法的相關(guān)功能,但是其接口與TSDG不匹配,利用Sparse類將Sparse Lib和Target接口進(jìn)行匹配。通過使用適配器模式,在基本不改變?cè)写a的基礎(chǔ)上,通過Sparse類調(diào)用Sparse Lib中的相應(yīng)接口來實(shí)現(xiàn)稀疏算法的功能,實(shí)現(xiàn)了原先并不兼容的Sparse Lib類的復(fù)用。
圖3 基于適配器模式的稀疏算法實(shí)現(xiàn)Fig.3 Implementation of sparse algorithm based on adapter pattern
適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況,優(yōu)點(diǎn)是提高了類的可復(fù)用性。但是適配器模式的主要場(chǎng)景是擴(kuò)展應(yīng)用,所以在開發(fā)階段不要考慮適配器模式,在該階段通常采用外觀模式。
策略模式是一種對(duì)象行為型模式,它定義了一系列的算法,并將它們分別封裝成類,讓它們之間可以相互替換,使得算法可以獨(dú)立于客戶而變化,非常適用于具有算法分支選擇情況的實(shí)例。
針對(duì)不同的應(yīng)用場(chǎng)合,分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真的要求也不盡相同,需要在仿真精度和速度上有所側(cè)重,使得暫態(tài)仿真程序通常含有多種算法。如果將多種算法以行為方式和數(shù)據(jù)狀態(tài)靜態(tài)地封裝在一起,不僅使解算類變得龐大復(fù)雜,也不利于算法類的修改和替換。考慮到這些具體的算法類具有同樣的接口,僅是在方法的具體實(shí)現(xiàn)上存在差異,因此TSDG采用策略模式將電氣系統(tǒng)數(shù)據(jù)和算法分離,并將各個(gè)算法逐個(gè)封裝,使各個(gè)算法之間可以相互切換,實(shí)現(xiàn)算法與算法之間、算法和數(shù)據(jù)之間的解耦。
圖4給出了基于策略模式的電氣系統(tǒng)算法實(shí)現(xiàn),Sim Algorithm為抽象類,提供了各種算法的統(tǒng)一接口,所有具體算法都從該接口派生,Context類使用這個(gè)接口來調(diào)用具體的電氣系統(tǒng)解算算法,而Trapezoid、Backward Euler和Mixed類實(shí)現(xiàn)了具體的算法,分別是梯形積分法,后向歐拉法和梯形法和后向歐拉法的混合算法。使用策略模式后,TSDG將大部分算法統(tǒng)一在同一框架下,只需針對(duì)接口Electrical Algorithm進(jìn)行開發(fā),通過算法與數(shù)據(jù)的分離機(jī)制,提高了算法復(fù)用程度,便于算法的移植,可用于其他電力系統(tǒng)仿真程序的開發(fā)。在具體的應(yīng)用中,由于具體的算法類都是從接口Electrical Algorithm派生的,根據(jù)多態(tài)機(jī)制,只要修改變類名就可以完成電氣系統(tǒng)解算算法的更換,無需大量代碼的更改。顯然,通過使用策略模式大大提高了程序的靈活性。
圖4 基于策略模式的電氣系統(tǒng)算法實(shí)現(xiàn)Fig.4 Implementation of electrical system algorithm based on strategy pattern
策略模式通常應(yīng)用于以下場(chǎng)景:①多個(gè)類的區(qū)別僅為表現(xiàn)行為不同,運(yùn)用策略模式在運(yùn)行時(shí)動(dòng)態(tài)地選擇具體行為;②需要在不同情況下使用不同的算法;③對(duì)客戶隱藏具體算法的實(shí)現(xiàn)細(xì)節(jié),彼此完全獨(dú)立對(duì)于策略模式來說,主要有如下優(yōu)點(diǎn):①避免程序中使用多重條件轉(zhuǎn)移語句,提高了系統(tǒng)靈活性和擴(kuò)展能力;②提供了一種替代繼承的方法,比繼承更靈活;③增加對(duì)象內(nèi)聚性、降低程序耦合性。
但是需要強(qiáng)調(diào)的是,雖然策略模式非常有效,但不應(yīng)該濫用,因?yàn)閿?shù)據(jù)和算法的分離引發(fā)的相互調(diào)用會(huì)影響程序的執(zhí)行性能。
單例模式的意圖是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。對(duì)一些類來說,只有一個(gè)實(shí)例是很重要的。單例模式讓類自身負(fù)責(zé)保存它的唯一實(shí)例。這個(gè)類可以保證沒有其他實(shí)例可以被創(chuàng)建,并且它可以提供一個(gè)訪問該實(shí)例的方法。單例模式比較簡單,經(jīng)常用于對(duì)系統(tǒng)資源的控制,有時(shí)也會(huì)作為一種通信媒介,在不建立直接關(guān)聯(lián)的條件下讓不相關(guān)的兩個(gè)程序進(jìn)行通信,尤其是多線程。
仿真程序通常需要具備同時(shí)仿真多個(gè)系統(tǒng)的能力,系統(tǒng)解算器是獨(dú)立于系統(tǒng)存在的,對(duì)于多個(gè)系統(tǒng)來說,如果每個(gè)系統(tǒng)都實(shí)例化一個(gè)解算器,這就造成資源的浪費(fèi),所以TSDG中系統(tǒng)解算器采用了單例模式,由解算器類自己負(fù)責(zé)實(shí)例化,并且保證實(shí)例唯一,單個(gè)的解算器可以同時(shí)對(duì)多個(gè)系統(tǒng)進(jìn)行解算。
在分布式發(fā)電系統(tǒng)暫態(tài)仿真軟件中,將整個(gè)暫態(tài)仿真系統(tǒng)定義為一個(gè)SimSystem類,該類是分布式發(fā)電系統(tǒng)暫態(tài)仿真中的主類,負(fù)責(zé)軟件中各個(gè)類的協(xié)調(diào),因此,其實(shí)例應(yīng)該是唯一的,為了保證只有一個(gè)SimSystem的實(shí)例存在,TSDG使用了單例模式。
圖5 基于單例模式的系統(tǒng)解算器實(shí)現(xiàn)Fig.5 Implementation of system solver based on singleton pattern
圖5給出了基于單例模式的系統(tǒng)解算器實(shí)現(xiàn),SimSystem類是TSDG中的主類,實(shí)現(xiàn)系統(tǒng)仿真功能,在具體的應(yīng)用中,SimSystem類定義一個(gè)GetInstance靜態(tài)方法,以及一個(gè)靜態(tài)屬性,類型為SimSystem類的實(shí)例。GetInstance方法創(chuàng)建了SimSystem的唯一實(shí)例,可以嚴(yán)格地控制客戶對(duì)其的訪問。
單例模式使得整個(gè)軟件運(yùn)行過程中都只有一個(gè)實(shí)例,減少了內(nèi)存和系統(tǒng)的開銷,并且可以在系統(tǒng)設(shè)置一個(gè)全局的訪問點(diǎn),優(yōu)化和共享資源訪問,但是單例模式?jīng)]有接口,很難擴(kuò)展,違背了開放原則。
分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)過程的研究需要相應(yīng)仿真計(jì)算工具的支持。分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序TSDG的開發(fā)不僅是對(duì)傳統(tǒng)電力系統(tǒng)電磁暫態(tài)仿真程序應(yīng)用范圍的拓展,同時(shí)也引入了很多新技術(shù)實(shí)現(xiàn)復(fù)雜非線性系統(tǒng)的準(zhǔn)確、快速仿真?;诂F(xiàn)代軟件架構(gòu)和標(biāo)準(zhǔn)C++程序設(shè)計(jì)語言開發(fā)的TSDG更好地支持了面向?qū)ο笏枷肱c設(shè)計(jì)模式,這是基于Fortran語言開發(fā)的EMTP等程序所不能比擬的。與傳統(tǒng)電力系統(tǒng)仿真程序的開發(fā)不同,當(dāng)前已具有許多成熟的開源的算法庫,程序開發(fā)人員可以充分利用這些基礎(chǔ)條件,減少軟件開發(fā)的工作量,并更專注于專業(yè)軟件本身的開發(fā),此時(shí)需要清晰明確的程序接口。同時(shí),對(duì)于分布式發(fā)電微網(wǎng)系統(tǒng)穩(wěn)定性仿真與潮流計(jì)算等其他功能的仿真計(jì)算程序,而這些程序從仿真計(jì)算功能到基礎(chǔ)計(jì)算資源的需求與TSDG是非常接近的,在一些情況下,TSDG甚至可能需要與穩(wěn)定性仿真或潮流計(jì)算程序交換數(shù)據(jù)與信息,這都使得暫態(tài)仿真程序的架構(gòu)設(shè)計(jì)尤為重要。此時(shí),面向?qū)ο笤O(shè)計(jì)模式為上述問題的解決提供了有效的方法。
本文以工廠方法模式、適配器模式、策略模式和單例模式為例描述了面向?qū)ο笤O(shè)計(jì)模式在分布式發(fā)電微網(wǎng)系統(tǒng)暫態(tài)仿真程序TSDG中的應(yīng)用。TSDG的開發(fā)實(shí)現(xiàn)基于面向?qū)ο蟮脑O(shè)計(jì)思想,廣泛采用設(shè)計(jì)模式理論,實(shí)現(xiàn)了模塊間的低耦合和模塊內(nèi)部的高內(nèi)聚,提高了程序的可維護(hù)性和可復(fù)用性,能夠應(yīng)對(duì)功能需求的變化。TSDG中多種設(shè)計(jì)模式的應(yīng)用和集成方法具有一定的通用性,可作為其他電力系統(tǒng)仿真軟件開發(fā)的參考。
[1] Brooks N,Baldwin T,Brinson T,et al.Analysis of fuel cell based power systems using EMTDC electrical power simulator[C]∥The 36th Southeastern Symposium on System Theory.Atlanta,USA:2004.
[2] 郭力,王成山(Guo Li,Wang Chengshan).含多種分布式電源的微網(wǎng)動(dòng)態(tài)仿真(Dynamical simulation on microgrid with different types of distributed generations)[J].電力系統(tǒng)自動(dòng)化(Automation of Electric Power Systems),2009,33(2):82-86.
[3] 李鵬(Li Peng).分布式發(fā)電供能微網(wǎng)系統(tǒng)暫態(tài)仿真方法研究(Research on the Transient Simulation Methodology of Micro-grid Powered by Distributed Energy Resources)[D].天津:天津大學(xué)電氣與自動(dòng)化工程學(xué)院(Tianjin:School of Electrical Engineering and Automation,Tianjin University),2010.
[4] 王成山,李鵬,王立偉(Wang Chengshan,Li Peng,Wang Liwei).配電系統(tǒng)電磁暫態(tài)仿真算法分析(A-nalysis of electromagnetic transients simulation algorithm for distribution systems)[J].電力系統(tǒng)及其自動(dòng)化學(xué)報(bào)(Proceedings of the CSU-EPSA),2008,20(6):1-5.
[5] Bob T.Some object-oriented design principles[EB/OL].http://userpages.umbc.edu/~tarr/dp/lectures/OOPrinciples.pdf,2010.
[6] Martin R C.Design principles and design patterns[EB/OL].http://www.objectmentor.com,2000.
[7] Prieto-Diaz R.Status report:Software reusability[J].IEEE Software,1993,10(3):61-66.
[8] Di Felice P.Reusability of mathematical software:A contribution[J].IEEE Trans on Software Engineering,1993,19(8):835-843.
[9] Zhou E Z.Object-oriented programming,C++and power system simulation[J].IEEE Trans on Power Systems,1996,11(1):206-215.
[10]Kundert K S.Sparse 1.3-A sparse linear equation solver[EB/OL].http://www.netlib.org/sparse/,1986.
[11]Demmel J W,Gilbert J R,Li X S.Super LU users'guide[EB/OL].http://crd.lbl.gov/~xiaoye/Super LU/,2009.
[12]Intel Corporation.Intel math kernal library for windows OS users'guide[EB/OL].http://www.intel.com/software/products/,2009.
[13]Tim D.SuiteSparse/UMFPACK[EB/OL].http://www.cise.ufl.edu/research/sparse/umfpack/,2011.
[14]Tim D.SuiteSparse/KLU[EB/OL].http://www.cise.ufl.edu/research/sparse/klu/,2011.