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