劉 群,楊建旭,童 旸
(南瑞集團(tuán)公司 安徽南瑞繼遠(yuǎn)電網(wǎng)技術(shù)有限公司,安徽 合肥 230088)
?
面向變電站智能輔助系統(tǒng)的實(shí)時數(shù)據(jù)庫設(shè)計
劉 群,楊建旭,童 旸
(南瑞集團(tuán)公司 安徽南瑞繼遠(yuǎn)電網(wǎng)技術(shù)有限公司,安徽 合肥 230088)
基于關(guān)系型數(shù)據(jù)庫系統(tǒng)在實(shí)時應(yīng)用中的缺陷, 開發(fā)了一種面向變電站智能輔助系統(tǒng)的輕量級實(shí)時數(shù)據(jù)庫。介紹了基于C語言開發(fā)的實(shí)時數(shù)據(jù)庫設(shè)計方案和設(shè)計架構(gòu),分析了變電站智能輔助系統(tǒng)中實(shí)時數(shù)據(jù)的特征, 利用面向?qū)ο蠹夹g(shù)建立了變電站智能輔助系統(tǒng)實(shí)時數(shù)據(jù)庫的結(jié)構(gòu)模型。采用基于共享內(nèi)存的數(shù)據(jù)存儲技術(shù), 提出了數(shù)據(jù)下裝流程、搜索算法、商用庫數(shù)據(jù)處理以及接口實(shí)現(xiàn)方法。實(shí)現(xiàn)了集成系統(tǒng)實(shí)時數(shù)據(jù)的存儲和管理。
變電站智能輔助系統(tǒng);實(shí)時數(shù)據(jù)庫;共享內(nèi)存;接口設(shè)計
實(shí)時數(shù)據(jù)庫(Real Time Database,RTDB)是數(shù)據(jù)庫與實(shí)時系統(tǒng)相結(jié)合的一種新型數(shù)據(jù)庫,對軟件核心進(jìn)行實(shí)時監(jiān)控,通常是在動態(tài)環(huán)境下使用, 用于監(jiān)控現(xiàn)實(shí)世界對象的狀態(tài)和所關(guān)注事件的發(fā)生[1-3]。實(shí)時數(shù)據(jù)庫管理維護(hù)實(shí)時數(shù)據(jù)以及與實(shí)時數(shù)據(jù)有關(guān)的信息,與傳統(tǒng)的數(shù)據(jù)庫相比,主要在調(diào)度機(jī)制和事務(wù)管理方面有較大的區(qū)別[4-8]。實(shí)時數(shù)據(jù)庫的數(shù)據(jù)和事務(wù)均有顯式的時間限制,系統(tǒng)的正確性不僅依賴于事務(wù)的邏輯結(jié)果,而且依賴于該邏輯結(jié)果所產(chǎn)生的時間[9-10]。
變電站智能輔助系統(tǒng)是通過對變電站內(nèi)安全警衛(wèi)、火災(zāi)報警、環(huán)境監(jiān)控、照明、視頻監(jiān)控等設(shè)備的信息共享、應(yīng)用功能集成、操作及告警聯(lián)動,為變電站運(yùn)維及集中監(jiān)控提供支撐的系統(tǒng)[11-12]。由于變電站自動化系統(tǒng)的實(shí)時性要求較高,應(yīng)用活動的完成具有嚴(yán)格的時限,要求在某時刻或某有限時間內(nèi)把從遠(yuǎn)程測控終端采集來的遙測、遙信和電量數(shù)據(jù),按彼此間的關(guān)聯(lián)存取和處理,這些數(shù)據(jù)的有效時間是短暫的,過時則失效。例如, 一個具有5 000個變量的變電站,數(shù)據(jù)平均每2 s刷新一次,每秒鐘便會產(chǎn)生2 500個數(shù)據(jù)。于是,每秒鐘有2 500 行數(shù)據(jù)需要插入到數(shù)據(jù)庫中以實(shí)現(xiàn)完整的數(shù)據(jù)存儲,常規(guī)的關(guān)系型數(shù)據(jù)庫如Oracle、SQL Server的事務(wù)處理率有限,在管理實(shí)時數(shù)據(jù)方面存在著嚴(yán)重的不足[13]。而實(shí)時數(shù)據(jù)庫基于共享內(nèi)存的數(shù)據(jù)管理方式,節(jié)約了存儲空間,同時可以大幅縮短數(shù)據(jù)采集時間,為面向智能化的實(shí)時數(shù)據(jù)應(yīng)用系統(tǒng)和管理分析系統(tǒng)提供保障[14-15]。
為滿足變電站智能輔助系統(tǒng)的高速數(shù)據(jù)訪問要求,設(shè)計實(shí)現(xiàn)了一個基于共享內(nèi)存的實(shí)時數(shù)據(jù)庫,具備良好的數(shù)據(jù)模型、訪問調(diào)度和并發(fā)控制機(jī)制,以支持不同類型的事務(wù),大幅縮短了變電站智能系統(tǒng)的數(shù)據(jù)采集時間,同時提供了基于優(yōu)先級的數(shù)據(jù)訪問和較強(qiáng)的數(shù)據(jù)處理能力。
變電站智能輔助系統(tǒng)中要測控的數(shù)據(jù)很多,只有對這些數(shù)據(jù)進(jìn)行分類,并定義它們的數(shù)據(jù)結(jié)構(gòu),才能在軟件中實(shí)現(xiàn)數(shù)據(jù)的管理。變電站智能輔助系統(tǒng)主要任務(wù)是完成遙測、遙信、遙調(diào)、遙控, 根據(jù)這4個主要功能和變電站的實(shí)際應(yīng)用情況,可以將變電站監(jiān)控系統(tǒng)中的數(shù)據(jù)分為:遙信量、遙測量、遙控量、遙調(diào)量,除此之外, 系統(tǒng)還要記錄一些SOE 事件和多狀態(tài)量。但是實(shí)時數(shù)據(jù)庫系統(tǒng)比較關(guān)心的是隨時間變化的數(shù)據(jù),即遙測量和遙信量。實(shí)時數(shù)據(jù)庫負(fù)責(zé)這些數(shù)據(jù)的管理存放,在與外部系統(tǒng)的典型交互的過程中,如圖1所示,監(jiān)控客戶端通過數(shù)據(jù)輸出接口取得實(shí)時的數(shù)據(jù),不同的外部數(shù)據(jù)源通過數(shù)據(jù)輸入接口輸入實(shí)時數(shù)據(jù),數(shù)據(jù)管理模塊則負(fù)責(zé)管理實(shí)時數(shù)據(jù),為監(jiān)控客戶端提供統(tǒng)一的數(shù)據(jù)源視圖,實(shí)現(xiàn)實(shí)時數(shù)據(jù)的高速訪問及數(shù)據(jù)存儲策略,以提高系統(tǒng)的響應(yīng)速度和處理能力。
圖1 實(shí)時數(shù)據(jù)庫與外部系統(tǒng)交互模型
1.1 數(shù)據(jù)下裝
原始的數(shù)據(jù)模型都儲存于商用庫,實(shí)時庫中的數(shù)據(jù)模型從商用庫中下裝,下裝后即可為其他進(jìn)程提供數(shù)據(jù)訪問服務(wù),實(shí)時數(shù)據(jù)庫實(shí)體僅在服務(wù)端分布。商用庫的表名表和字段表包含下裝類型,決定表和字段是否下裝到實(shí)時庫。獨(dú)立的下裝程序根據(jù)下裝類型篩選,從商用數(shù)據(jù)庫獲取數(shù)據(jù),生成共享內(nèi)存中的實(shí)時數(shù)據(jù)表。下裝過程如圖2所示:①調(diào)用商用庫的接口,獲得需要下裝到實(shí)時庫的表號(表號按照不同應(yīng)用服務(wù)分配表號區(qū)間,預(yù)留一定的表號區(qū)間可以用于擴(kuò)展業(yè)務(wù)需求,規(guī)則如下:系統(tǒng)信息表區(qū)間為10 000~10 999,其中表名表為10 000,字段表為10 001;告警表區(qū)間為11 000~11 999;日志表區(qū)間為12 000~12 999;視頻應(yīng)用表區(qū)間為13 000~13 999;環(huán)境應(yīng)用表區(qū)間為14 000~14 999;消防應(yīng)用表區(qū)間為15 000~15 999;安防應(yīng)用表區(qū)為16 000~16 999);②查詢返回結(jié)果;③根據(jù)查詢返回結(jié)果,建立表信息的列表;④調(diào)用商用庫接口獲得各表的最大記錄數(shù);⑤通過遍歷表信息,獲得表的字段信息,其中字段信息包括字段序號,字段類型,字段長度,字段名稱,字段的偏移量和字段描述等;⑥建立信息頭結(jié)構(gòu)體和字段信息數(shù)組,根據(jù)表的最大記錄個數(shù)、信息頭長度,計算出共享內(nèi)存的空間大??;⑦創(chuàng)建共享內(nèi)存段。根據(jù)表號,查詢對應(yīng)的表,獲取所有記錄數(shù)據(jù),按記錄號遞增排序;⑧解析Json串,將記錄數(shù)據(jù)存入二維數(shù)組,再將記錄數(shù)據(jù)寫入共享內(nèi)存數(shù)據(jù)區(qū)。遍歷表信息列表,重復(fù)之前步驟,建立所有實(shí)時庫表的共享內(nèi)存;⑨下裝程序結(jié)束。
圖2 數(shù)據(jù)下裝流程圖
1.2 數(shù)據(jù)存儲管理
傳統(tǒng)的磁盤數(shù)據(jù)庫的操作基于磁盤存取,而磁盤存儲時間延時及其不確定性對實(shí)時任務(wù)有很大的影響。數(shù)據(jù)存儲管理模塊主要為解決上述問題主要負(fù)責(zé)變量對象的生成、刪除、訪問以及數(shù)據(jù)內(nèi)容的更新。實(shí)時數(shù)據(jù)庫的數(shù)據(jù)存儲管理是以共享內(nèi)存為存儲介質(zhì),每張表對應(yīng)一個共享內(nèi)存段。按照每張表建立一個共享內(nèi)存,共享內(nèi)存標(biāo)識由表號(Linux系統(tǒng)下,以表號作為標(biāo)識;Windows系統(tǒng)下,以前綴加上表號作為共享內(nèi)存名稱)決定。
實(shí)時數(shù)據(jù)在共享內(nèi)存中的存儲形式如下:表中所有記錄的長度一致,數(shù)據(jù)在共享內(nèi)存中的存儲是以記錄單位。檢索時首先根據(jù)記錄號搜索記錄的起始地址,再根據(jù)字段號來計算偏移量,最終獲取數(shù)據(jù)。記錄的長度由該表的所有字段長度總和決定。表中各個字段的類型和長度通過建表管理工具設(shè)置。共享內(nèi)存文件如表1所示,每張表的共享內(nèi)存文件分為信息頭、字段信息和數(shù)據(jù)區(qū)3個部分。信息頭內(nèi)容見ShareHeadInfo結(jié)構(gòu)體。字段信息區(qū)為FieldInfo_st結(jié)構(gòu)體數(shù)組。數(shù)據(jù)區(qū)則是把記錄內(nèi)容按照順序連續(xù)存儲在共享內(nèi)存中,每條記錄的長度相同。記錄號為4 Byte整數(shù),按大小遞增排序。
表1 共享內(nèi)存文件
1.3 搜索算法
實(shí)時數(shù)據(jù)庫實(shí)現(xiàn)對數(shù)據(jù)的存取操作和其他處理, 保證數(shù)據(jù)庫狀態(tài)最新, 數(shù)據(jù)值時間一致;事務(wù)管理模塊管理實(shí)施事務(wù)的產(chǎn)生, 執(zhí)行和結(jié)束, 首先要解決實(shí)時調(diào)度問題, 實(shí)時調(diào)度最主要的目標(biāo)是滿足事務(wù)的截止時間, 搜索算法需要在最大程度上滿足事務(wù)的時間限制, 同時保證數(shù)據(jù)的邏輯一致性和時序一致性。
1.3.1 表搜索
每張表對應(yīng)一個共享內(nèi)存,內(nèi)存號就是表號。因此,通過表號可以直接訪問相應(yīng)共享內(nèi)存。
1.3.2 記錄搜索
根據(jù)記錄號可以采用二分查找算法在數(shù)據(jù)區(qū)搜索,獲得對應(yīng)記錄的偏移量。代碼如下
/*
* 記錄搜索
*param[in] sharePos共享內(nèi)存起始地址
*param[in] recNo查找的記錄號
*param[in] headInfo共享內(nèi)存信息頭
* eturnint 偏移量
*/
int RecSearch(char *sharePos/*共享內(nèi)存起始地址*/,int RecNo/*查找的記錄號*/,ShareHeadInfo *headInfo/*共享內(nèi)存信息頭*/)
{
int recCnt = headInfo->iRecCnt;
int RecHeadAddr=headInfo->iRecHeadAddr;
int RecordLength=headInfo->iRecordLength;
int recNoLength = sizeof(int);
int low = 0;
int high = recCnt - 1;
int middle = 0;
int pos = 0;
unsigned int flag = 0;
int* value = NULL;
while(low <= high)
{
middle = (high - low)/2 + low;
pos = RecHeadAddr + (RecordLength+recNoLength)*middle;
value = (int*)(sharePos + pos);
if(*value == RecNo)
{
printf(" find middle = %d,pos = %d ",middle,pos);
memcpy(flag,pos+recNoLength,4);
if(flag == 0x5555AAAA)
{
return -2;∥記錄已刪除
}
else
{
return pos+recNoLength;
}
}
else if(*value > RecNo)
high = middle - 1;
else
low = middle + 1;
}
/*沒找到*/
printf(" no find ");
return -1;
}
根據(jù)偏移量,獲取字段數(shù)據(jù),以字符串?dāng)?shù)據(jù)為例:
if(field_info[fieldNo].iType == DATATYPE_STRING)
char *str = sharePos + recPos /*RecSearch()函數(shù)返回的記錄偏移量*/
+(field_info[fieldNo]).iPos/*字段偏移量*/;
1.3.3 關(guān)心數(shù)據(jù)索引
接口程序中可各自建立關(guān)心數(shù)據(jù)索引,將常用的數(shù)據(jù)地址記錄下來。如果可以在共享內(nèi)存的地址直接獲得數(shù)據(jù),每次檢索數(shù)據(jù)時,先搜索該索引。
1.4 商用庫數(shù)據(jù)處理
商用數(shù)據(jù)庫中的記錄發(fā)生增刪或修改操作時,可同時調(diào)用實(shí)時庫接口,對對應(yīng)的記錄進(jìn)行操作。商用數(shù)據(jù)庫修改記錄是根據(jù)所修改記錄的表號和記錄號,搜索記錄位置,再根據(jù)字段號獲得對應(yīng)字段的共享內(nèi)存地址,然后清除現(xiàn)有字段內(nèi)容,最后重新寫入修改后的字段內(nèi)容。商用庫刪除記錄實(shí)例如表2所示,是根據(jù)所修改記錄的表號和記錄號,搜索記錄位置,再清除現(xiàn)有記錄內(nèi)容,最后將記錄內(nèi)容數(shù)據(jù)置為0x5555AAAA,表示該記錄內(nèi)容已失效。
表2 商用庫刪除記錄實(shí)例
商用數(shù)據(jù)庫增加記錄是在添加記錄時,記錄號在最大記錄號原有的基礎(chǔ)上加1。只要記錄個數(shù)未超過最大記錄個數(shù),實(shí)時庫則已經(jīng)預(yù)留了數(shù)據(jù)空間。判斷當(dāng)前記錄數(shù)添加新紀(jì)錄后是否超出最大記錄數(shù),若超出則返回錯誤提示,建議實(shí)時數(shù)據(jù)庫重新下裝(商用庫進(jìn)行大量刪除操作時,實(shí)時庫保留了原記錄的空間,且當(dāng)前未更改記錄數(shù)。因此,商用數(shù)據(jù)庫認(rèn)為總記錄個數(shù)未超過上限,但實(shí)時數(shù)據(jù)庫有可能認(rèn)為超過上限。此時,實(shí)時數(shù)據(jù)庫應(yīng)該重新下裝);根據(jù)當(dāng)前記錄數(shù),計算新記錄寫入的首地址;寫入4 Byte記錄號;按照字段長度,依次寫入字段數(shù)據(jù)。若商用庫的表結(jié)構(gòu)發(fā)生修改,則實(shí)時數(shù)據(jù)庫需要重新下裝。
1.5 接口設(shè)計
實(shí)時數(shù)據(jù)庫的接口程序設(shè)計為動態(tài)鏈接庫,由需要操作實(shí)時數(shù)據(jù)庫的程序加載調(diào)用。進(jìn)程間相互獨(dú)立,通過接口直接訪問共享內(nèi)存,操作實(shí)時庫。主要的讀寫接口由實(shí)時庫實(shí)例初始化,獲得所有表的表號,獲得指定表的記錄數(shù),獲取指定表的表結(jié)構(gòu),讀實(shí)時數(shù)據(jù)庫,寫實(shí)時數(shù)據(jù)庫,刪除表記錄,追加記錄,獲取指定記錄和獲取字段類型。
為滿足系統(tǒng)內(nèi)不同計算機(jī)間的實(shí)時庫訪問,設(shè)計了網(wǎng)絡(luò)實(shí)時庫接口,通過Socket通信。其通信過程如圖3所示,接口與本地接口類似, 但是主要通過獨(dú)立的進(jìn)程實(shí)現(xiàn)接口服務(wù)。
圖3 計算機(jī)間通信過程
實(shí)時數(shù)據(jù)庫是變電站智能輔助系統(tǒng)的重要組成部分?;趯?shí)時數(shù)據(jù)庫的理論基礎(chǔ),從數(shù)據(jù)下裝, 數(shù)據(jù)存儲管理,商用庫數(shù)據(jù)處理以及數(shù)據(jù)訪問接口等幾個方面對其進(jìn)行了研究, 設(shè)計了變電站自動化系統(tǒng)的實(shí)時數(shù)據(jù)庫, 實(shí)現(xiàn)了高速數(shù)據(jù)的訪問和存儲, 并且為各功能模塊以及系統(tǒng)的開發(fā)者提供了一個訪問數(shù)據(jù)庫的統(tǒng)一接口, 為系統(tǒng)的開發(fā)者提供了便利。
[1] 李文兢,陳文定,曾明.面向智能建筑集成系統(tǒng)的輕量級實(shí)時數(shù)據(jù)庫設(shè)計[J].智能建筑行業(yè)應(yīng)用,2006(10):124-126.
[2] 陳文定,李文兢,胥布工.面向智能建筑集成管理系統(tǒng)的輕量級實(shí)時數(shù)據(jù)庫設(shè)計[J].樓宇自動化,2007,10(4):12-14.
[3] 劉銘.工業(yè)實(shí)時數(shù)據(jù)庫設(shè)計研究[D].西安:西安交通大學(xué),2003.
[4] Aranha R F M,Ganti V,Narayanan S,et al.Implementation of a real-time database system[J].Information System,1996,21(1):55-74.
[5] 錢笑宇,張彥武.工業(yè)實(shí)時數(shù)據(jù)庫的研究和設(shè)計[J].計算機(jī)工程,2015,41(2):98-100.
[6] Zhou L,Rundensteiner E A,Shin K G.Schema evolution of an object -oriented realtime database system for manufacturing automation[J].IEEE Transactions on Data and Knowledge Engineering,1997,79(6):956-977.
[7] 嚴(yán)哲南,趙風(fēng)光.一種適合硬件實(shí)現(xiàn)的高效算術(shù)編碼[J].通信學(xué)報,2000(21):86-90.
[8] 聶書志.實(shí)時數(shù)據(jù)庫的設(shè)計思想與實(shí)現(xiàn)技術(shù)[J].經(jīng)濟(jì)與社會發(fā)展,2006,4(11):153-155.
[9] 拓廣忠,慕群.實(shí)時數(shù)據(jù)庫原理及其壓縮分析技術(shù)[J].華北電力技術(shù),2004,6(6):17-20.
[10] 劉云生.實(shí)時數(shù)據(jù)庫系統(tǒng)(RTDBS)及其特征[J].華中理工大學(xué)學(xué)報,1994(6):66-70.
[11] 蘇和.智能變電站輔助系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D].北京:華北電力大學(xué),2012.
[12] 孔詳雯.500 kV無人值守智能變電站輔助控制系統(tǒng)研究[D].鄭州:鄭州大學(xué),2014.
[13] 賴明江,耿英三,張國鋼,等.變電站自動化系統(tǒng)中實(shí)時數(shù)據(jù)庫的研究[J].繼電器,2016,34(2):66-69.
[14] 吳文傳,張伯明,許春暉.調(diào)度自動化系統(tǒng)實(shí)時數(shù)據(jù)庫模型的研究與實(shí)現(xiàn)[J].電網(wǎng)技術(shù),2001,25(9):28-32.
[15] 白樹忠,南新志.變電站綜合自動化實(shí)時數(shù)據(jù)庫管理系統(tǒng)的研究與開發(fā)[J].電力系統(tǒng)及其自動化學(xué)報,2002,14(3):43-46.
Design of Real Time Database for Substation Intelligent Auxiliary Systems
LIU Qun1,YANG Jianxu2,TONG Yang3
(Anhui Nari Jiyuan Electric Power System Tech Co., Ltd, Nari Group Corporation, Hefei 230088, China)
A lightweight real time database (RTDB) for substation intelligent auxiliary system is put forward. The design project and structure of RTDB based on C language are introduced, and then the characteristics of real-time database in the substation intelligent auxiliary system are analyzed. The structure model of real-time database in the substation intelligent auxiliary system is established with the object oriented technology. The data storage technology based on the shared memory is used. The data downloading process and search algorithm are introduced, while a method for data processing of commercial database and interface is proposed. Storage and management of real time data in integrating system are realized.
substation intelligent auxiliary system; RTDB; shared memory; interface design
2016- 09- 14
劉群(1963-),男,高級工程師。研究方向:自動化。楊建旭 (1983-),男,本科。研究方向:軟件研發(fā)。童旸 (1991-),男,碩士研究生。研究方向:軟件研發(fā)。
10.16180/j.cnki.issn1007-7820.2017.07.034
TP311.1
A
1007-7820(2017)07-124-04