程 立 李少卿 朱中華 王文龍 繆楠林
(南京南瑞繼保電氣有限公司,南京 211100)
隨著國網(wǎng)公司對智能電網(wǎng)的建設(shè)與推廣,配網(wǎng)作為智能電網(wǎng)的重要組成部分,越來越受到重視[1]。配電終端作為信息的采集、控制單元,扮演著越來越重要的作用。同時也集成了越來越多的功能:①集成測量、控制、保護功能;②集成通信管理裝置的功能: 能夠?qū)崿F(xiàn)配網(wǎng)電能表、電壓無功控制器、監(jiān)測儀等智能設(shè)備的接入與信息的轉(zhuǎn)發(fā);③集成光纖以太環(huán)網(wǎng)功能:可以支持以太環(huán)網(wǎng)(100M),可以直接接入光纖構(gòu)成以太環(huán)網(wǎng)[2];④集成電壓無功控制(VQC)功能:可以實現(xiàn)電容器的自動投切,提高電壓質(zhì)量;⑤集成歷史數(shù)據(jù)、統(tǒng)計數(shù)據(jù)管理功能:提供多種數(shù)據(jù)歷史量和統(tǒng)計分析值的分類存儲、查詢、召喚。
在配電終端中,對于歷史數(shù)據(jù),往往需要大容量的數(shù)據(jù)存儲,而且要做到數(shù)據(jù)的快速存儲、查詢和刪除等操作。傳統(tǒng)的配電終端往往采用簡單文件的存儲方式,直接將歷史數(shù)據(jù)寫入文件中。由于沒有對歷史數(shù)據(jù)進行排序和建立索引表,查詢、刪除等操作采用遍歷文件的方式,檢索效率極其低下,難以做到在大容量數(shù)據(jù)條件下的快速操作。本文給出了基于Berkeley DB嵌入式數(shù)據(jù)庫的配電終端的設(shè)計方案,實現(xiàn)了大容量數(shù)據(jù)的可靠存儲和快速操作。
隨著國網(wǎng)公司兩批試點城市配網(wǎng)建設(shè)的開展,配電終端的功能需求越來越趨于多樣化。尤其對終端的變位數(shù)據(jù)、操作記錄、統(tǒng)計數(shù)據(jù)的存儲需要越來越強烈。配電終端對變位數(shù)據(jù)和操作記錄的存儲時間要求不小于3個月,而對統(tǒng)計數(shù)據(jù),如日/月電壓、電壓(電流)極大(?。┲?、整點值、合格率、不平衡率等,存儲時間不小于6個月,部分數(shù)據(jù)(如月電壓合格率)等甚至需要存儲不小于9個月。這些存儲數(shù)據(jù)要求實現(xiàn)如下功能:
1)可靠存儲:大量的數(shù)據(jù)能夠快速存儲到數(shù)據(jù)庫中,做到不丟失、不差錯。
2)快速查詢:能夠支持不同方向上數(shù)據(jù)的快速查詢,不同方向包括遠方配電主站、當(dāng)?shù)卣{(diào)試終端等。
3)快速刪除:根據(jù)存儲的時間、條目等要素,進行數(shù)據(jù)庫的定期刪除。
Berkeley DB是Sleepycat軟件公司開發(fā)的一款健壯的,高速的工業(yè)級開源式嵌入式數(shù)據(jù)庫系統(tǒng),支持C、C++、Java等編程語言。Berkeley DB本身不到300K,卻能管理多達256TB的數(shù)據(jù)。不支持復(fù)雜的SQL語言,避免了大量解析和處理開銷,適用于實時系統(tǒng)、嵌入式應(yīng)用等。Berkeley DB函數(shù)庫和應(yīng)用程序運行在同一地址空間,不存在服務(wù)器概念,具有零管理性,通過API訪問數(shù)據(jù)。同時支持日志管理、數(shù)據(jù)壓縮、備份和恢復(fù)等功能。此外,Berkeley DB支持開源,使用者可以免費下載到源代碼,根據(jù)自己的需求對其進行裁減[3]。
軟件的系統(tǒng)結(jié)構(gòu)分為保護測控模塊、實時庫模塊、歷史庫模塊、組態(tài)配置模塊、VQC模塊等,如圖1所示。其中保護測控等對實時性有著極為嚴(yán)格要求的模塊運行在中斷中,而實時庫、歷史庫、VQC模塊、組態(tài)配置等組件運行在任務(wù)中。各個模塊之間松散耦合,通過注冊機制建立聯(lián)系,同時各個模塊之間通過消息或者管道進行數(shù)據(jù)交換。
圖1 系統(tǒng)結(jié)構(gòu)
1)保護測控模塊
保護測控模塊分為兩部分:中斷執(zhí)行部分和任務(wù)執(zhí)行部分。中斷每0.833ms運行一次,測量采用24點采樣、并進行開入和開出的計算。保護采用傅立葉算法,設(shè)置三段式保護和零序保護。任務(wù)執(zhí)行部分進行PT斷線、線路失壓、過負荷、電池管理、遙測等計算。
2)實時數(shù)據(jù)庫模塊
實時數(shù)據(jù)庫模塊:該模塊包括實時數(shù)據(jù)庫、調(diào)度端數(shù)據(jù)引用表的創(chuàng)建,運行時提供快速入庫、快速提取數(shù)據(jù)操作。實時數(shù)據(jù)庫還提供了對SOE、遙信變位、步位置變化等異步事件的支持。
3)歷史數(shù)據(jù)庫模塊
歷史庫訂閱實時庫的變位信息,操作記錄和統(tǒng)計數(shù)據(jù)。歷史庫就采用Berkeley DB的數(shù)據(jù)庫來實現(xiàn)。BDB支持不同類型的存儲,如線性表、哈希表、B樹等。在本文的系統(tǒng)中,采用了B樹的設(shè)計方法。歷史數(shù)據(jù)庫采用多個任務(wù)來實現(xiàn),支持同步和異步兩種方式,每種方式下實現(xiàn)數(shù)據(jù)的存儲、檢索、刪除等操作[4]。
4)組態(tài)管理模塊
組態(tài)管理模塊:①生成和維護所連裝置信息名表;②配置和維護一次間隔信息;③配置和維護板卡和規(guī)約信息;④配置和維護對時源;⑤生成和維護送往調(diào)度的轉(zhuǎn)發(fā)信息表、并對規(guī)約需要的參數(shù)進行設(shè)置;⑥進行信息合成(遙測、遙信、步位置信息計算轉(zhuǎn)換);⑦程序文件的下裝、配置文件上裝和下裝[5]。
5)對上、對下規(guī)約模塊
對上規(guī)約模塊負責(zé)配電終端同遠方主站進行數(shù)據(jù)通信,常用的有IEC101[6]、IEC104[7]、CDT[8]等規(guī)約。對下規(guī)約模塊負責(zé)同電能表、電壓無功控制器、監(jiān)測儀等智能設(shè)備通信,常用的有CDT[8]、IEC103[9]、MODBUS等規(guī)約。
6)VQC模塊
VQC根據(jù)測控裝置采集的開關(guān)刀閘遙信進行主接線拓撲分析, VQC在每個運行周期的開始對接線關(guān)系進行一次拓撲分析,能實時的反映拓撲關(guān)系的變化,從而保證VQC調(diào)節(jié)建立在實時的系統(tǒng)拓撲基礎(chǔ)之上,從而改善電壓質(zhì)量[10]。
7)顯示模塊
負責(zé)與實時庫通信,將實時數(shù)據(jù)顯示在液晶屏,并且將用戶操作(修改定值、遙控開關(guān))傳遞給實時庫,負責(zé)完成人機交互。同時查看歷史信息,包括操作記錄、歷史事件等。
如圖2所示,歷史庫由三個模塊組成:變位事件歷史庫、操作記錄歷史庫、統(tǒng)計數(shù)據(jù)歷史庫。實時庫發(fā)布訂閱的信息給歷史庫,通過一個歷史信息過濾器,丟棄掉無效數(shù)據(jù),過濾出所需信息,分別發(fā)布給變位事件歷史庫、操作記錄歷史庫和統(tǒng)計數(shù)據(jù)歷史庫,最終由這三個數(shù)據(jù)庫來完成數(shù)據(jù)的存儲。對上規(guī)約模塊和組態(tài)模塊通過歷史信息操作器對數(shù)據(jù)進行操作,歷史信息操作器提供操作接口,用以實現(xiàn)數(shù)據(jù)的快速檢索和刪除[11]。
圖2 歷史庫模塊圖
實時庫發(fā)布數(shù)據(jù)信息,歷史庫對這些數(shù)據(jù)信息進行處理。當(dāng)實際系統(tǒng)觸發(fā)一個變位事件(如開關(guān)變位、保護動作等),實時庫會向歷史庫發(fā)布這個事件。事件參考IEC103規(guī)約中通用分類服務(wù)的格式,其中信息的關(guān)鍵字包括:裝置地址、組號、條目號、時標(biāo)、分合位置[9]。類似地,當(dāng)遠方調(diào)度或者當(dāng)?shù)兀ㄈ缫壕?、調(diào)試終端)發(fā)出控制開關(guān)分合指令,實時庫也會觸發(fā)一個操作信息,通知歷史庫,信息的關(guān)鍵字包括:命令來源、裝置地址、組號、條目號、時標(biāo)、分合類型等。統(tǒng)計數(shù)據(jù)也是類似,但不同的是統(tǒng)計數(shù)據(jù)通過實時庫內(nèi)部的一個專門任務(wù)來實現(xiàn),定時對數(shù)據(jù)進行掃描,其信息關(guān)鍵字包括:裝置地址、組號、條目號、起始時間、終止時間、統(tǒng)計數(shù)值(通常是浮點數(shù))。
當(dāng)這些數(shù)據(jù)真正進入數(shù)據(jù)庫存儲之前,先要經(jīng)過歷史信息過濾器,過濾器的目的在于信息的刪減和分類。過濾器按照內(nèi)部約定好的格式,對數(shù)據(jù)進行下列檢測:①對數(shù)據(jù)類型進行檢驗,如果發(fā)布的數(shù)據(jù)不屬于變位事件、操作記錄、統(tǒng)計數(shù)據(jù),過濾器會做丟棄處理;②根據(jù)所屬數(shù)據(jù)類型,進行長度驗證,如果不符合,也做丟棄處理。當(dāng)數(shù)據(jù)檢測過后,符合完整性要求,過濾器負責(zé)對數(shù)據(jù)進行分發(fā),根據(jù)不同的類型分別交給變位事件歷史庫、操作記錄歷史庫、統(tǒng)計數(shù)據(jù)歷史庫來處理。至此,過濾器將外部的數(shù)據(jù)經(jīng)過“凈化處理”交給歷史庫。
在嵌入式裝置中,必須考慮裝置意外掉電或者系統(tǒng)崩潰的情況。在意外掉電或系統(tǒng)崩潰的情況下,數(shù)據(jù)往往還沒有來的及寫入或者剛剛部分數(shù)據(jù)寫入了flash,此時數(shù)據(jù)庫往往記錄數(shù)據(jù)發(fā)生錯誤,嚴(yán)重時可能破環(huán)數(shù)據(jù)庫的完整性,造成數(shù)據(jù)庫損壞。對于用戶而言,丟失大量存儲信息,造成不必要的損失。因此,在設(shè)計歷史數(shù)據(jù)存儲模塊時,必須充分考慮這些情況。Berkeley DB提供了一種Transaction事務(wù)機制,當(dāng)意外掉電或者系統(tǒng)崩潰的情況下,保證數(shù)據(jù)庫信息的完整性。
為了應(yīng)用Transaction機制,我們必須先建立一個environment環(huán)境,并且設(shè)置為線程安全,其次在這個environment下,指定數(shù)據(jù)庫的創(chuàng)建方法,在這里我們采用BTree機制,并且指定數(shù)據(jù)的排序方法。在這里,我們先創(chuàng)建一級庫(primary db),對于變位事件歷史庫、操作記錄歷史庫、統(tǒng)計數(shù)據(jù)歷史庫均按照裝置地址、時間、組號、條目號的優(yōu)先級創(chuàng)建排序方法,其次創(chuàng)建二級庫(secondary db)(在4.3節(jié)中詳細介紹)。當(dāng)過濾器完成信息處理后,歷史數(shù)據(jù)庫就來進行數(shù)據(jù)的存儲了。數(shù)據(jù)庫要調(diào)用txn_begin函數(shù)啟動事務(wù)機制,將數(shù)據(jù)put進主庫,接著commit提交數(shù)據(jù),最后再調(diào)用sync同步二級庫(secondary db)。
Berkeley DB中,二級庫(secondary db)提供了對數(shù)據(jù)庫的多種檢索方式。比如說,在DB1中,我們存儲了key為員工ID,data為員工籍貫、工資等信息,而DB中存儲了key為員工名字,data為員工ID,我們?nèi)绻胍獙讖埍斫Y(jié)合起來操作,就要用到二級庫。
歷史數(shù)據(jù)庫創(chuàng)建后,應(yīng)用模塊需要對數(shù)據(jù)庫進行操作,歷史信息操作器就提供了相應(yīng)的接口。對于三個歷史庫需要實現(xiàn)不同的檢索/刪除方式,具體來說:①變位歷史數(shù)據(jù)庫:按照時間跨度檢索/刪除、按照事件類型+時間檢索/刪除、按照FIFO順序進行檢索/刪除;②操作記錄歷史數(shù)據(jù)庫:按照時間跨度檢索/刪除、按照事件類型+時間檢索/刪除、按照FIFO順序進行檢索/刪除;③統(tǒng)計數(shù)據(jù)歷史庫:按照時間跨度檢索/刪除、按照統(tǒng)計類型+時間檢索/刪除。要實現(xiàn)以上需求,必須用到Berkeley DB的二級庫(secondary db)。
為了實現(xiàn)以上功能,單獨創(chuàng)建一個任務(wù)來完成。首先,將檢索條件生成關(guān)鍵字 key,然后通過創(chuàng)建游標(biāo)cursor使用DB_SET_RANGE方法定位查詢點,依次通過DB_NEXT的方法獲得數(shù)據(jù),直到檢索區(qū)間越限。將檢索到的數(shù)據(jù)采用同步或者異步的方式返回給應(yīng)用模塊。刪除的方法也是類似,在此不再贅述。
基于Berkeley DB的配電終端研制過程中做了各種測試對其性能進行驗證。與傳統(tǒng)的用簡單文件結(jié)構(gòu)方式進行存儲的方式比較,具有明顯的優(yōu)勢。筆者選擇了10000條數(shù)據(jù)進行測試,其中檢索、刪除選擇其中的100條。硬件平臺:CPU為PowerPC,主頻400M;內(nèi)存64M;Flash為128M,操作系統(tǒng)為VxWorks。試驗數(shù)據(jù)摘錄見表1所示。
表1 數(shù)據(jù)庫試驗結(jié)果摘錄
由此可以看出,在檢索時間、刪除時間、CPU需求方面,Berkeley DB遠遠超出簡單的數(shù)據(jù)結(jié)構(gòu)的存儲方式。雖然在內(nèi)存需求方面,由于Berkeley DB采用了復(fù)雜的數(shù)據(jù)結(jié)構(gòu),內(nèi)存占用稍多一些,但對于64M的內(nèi)存配置來說,完全可以忽略。
本文設(shè)計的配電終端成功應(yīng)用北京的開閉站中,典型的北京開閉站應(yīng)用如圖3所示:保護管理機對下接入10kV保護裝置,采集遙信、遙測,實現(xiàn)遠方遙控,對上接入配電終端,規(guī)約采用平衡式IEC101。低壓表、網(wǎng)絡(luò)表計及一些低壓信號也接入配電終端,規(guī)約采用 MODBUS。配電終端通過通信設(shè)備,同配電主站進行連接,將信號遠傳,同時接受配電主站的控制命令,規(guī)約采用IEC104或者平衡式IEC101。
該終端自2008年在北京地區(qū)投運以來,為運行單位提供了大量歷史數(shù)據(jù):如保護動作信號、開關(guān)位置信號、電壓合格率、不平衡率。積極促進了配電網(wǎng)故障隔離、故障恢復(fù)、電壓質(zhì)量的改進,保證了配電網(wǎng)安全穩(wěn)定可靠的運行,提高了電網(wǎng)公司的生產(chǎn)效率,為建設(shè)智能電網(wǎng)起到了良好的示范作用。
圖3 開閉站結(jié)構(gòu)圖
本文提出了Berkeley DB在配電終端的設(shè)計思路,并且成功實現(xiàn)在配電終端的研發(fā)上。和傳統(tǒng)的配電終端相比,采用嵌入式數(shù)據(jù)庫不僅占用CPU資源很少、系統(tǒng)開銷較低、和應(yīng)用緊密結(jié)合、系統(tǒng)健壯、伸縮性良好等特點,而且能夠滿足用戶日益多樣化的需求。本文提出基于Berkeley DB設(shè)計的配電終端,已經(jīng)成功在北京、山東、青海等地使用,為用戶提供了大量歷史數(shù)據(jù),減少了用戶工作量,提高用戶工作效率。
[1]陳樹勇,宋書芳,李蘭欣,沈杰. 智能電網(wǎng)技術(shù)綜述[J].電網(wǎng)技術(shù),2009,33(8):1-7.
[2]焦磊,葉繼明.一種適用于配電自動化系統(tǒng)的新型以太網(wǎng)通信方式[J].繼電器,2006,34(22):84-86.
[3]劉巍巍,徐成,李仁發(fā).嵌入式數(shù)據(jù)庫 Berkeley DB 的原理與應(yīng)用[J].科學(xué)技術(shù)與工程,2005,5(2):86-90.
[4]劉鐘情,余平. 基于 Berkeley DB的電力直流監(jiān)控系統(tǒng)的設(shè)計[J].電力科學(xué)與工程,2008,24(4):53-55.
[5]王劍. 基于組件對象模型技術(shù)的變電站監(jiān)控組態(tài)軟件設(shè)計[D]. 西安:西安交通大學(xué),2004.
[6]中華人民共和國國家經(jīng)濟貿(mào)易委員會.DL/T 634.5101—2002(idt IEC60870—5—101:2002)遠動設(shè)備及系統(tǒng)第 5—101部分:傳輸規(guī)約基本遠動任務(wù)配套標(biāo)準(zhǔn)[S].北京:中國電力出版社,2003.
[7]中華人民共和國國家經(jīng)濟貿(mào)易委員會.DL/T 634.5104—2002(idt IEC60870—5—104:2000)遠動設(shè)備及系統(tǒng)第5—104部分:傳輸規(guī)約采用標(biāo)準(zhǔn)傳輸協(xié)議子集的IEC60870—5—101網(wǎng)絡(luò)訪問[S].北京:中國電力出版社,2002.
[8]電力部.CDT循環(huán)式遠動規(guī)約(電力部行業(yè)標(biāo)準(zhǔn) DL451—91)[S]. 北京:水利電力出版社,1991.
[9]中華人民共和國國家經(jīng)濟貿(mào)易委員會.DL/T 667—1999(idt IEC60870—5—103:1997)遠動設(shè)備及系統(tǒng)第5部分傳輸規(guī)約第103篇繼電保護設(shè)備信息接口配套標(biāo)準(zhǔn)[S].北京:中國電力出版社,1999.
[10]王順江.關(guān)于軟件VQC的研究和應(yīng)用[D]. 大連:大連理工大學(xué),2009.
[11]崔志強,翟永杰,陳昕,施建中. Berkeley DB在實時歷史數(shù)據(jù)庫中的應(yīng)用[J]. 華北電力大學(xué)學(xué)報,2008,35(1):48-51.