龍海軍 姚光霖
摘 要:本文通過對(duì)有損壓縮和無損壓縮的分析,給出一種二次數(shù)據(jù)壓縮方法,統(tǒng)一有損壓縮和無損壓縮的應(yīng)用,對(duì)歷史庫(kù)的數(shù)據(jù)進(jìn)行壓縮。試驗(yàn)表明,此方法到達(dá)了數(shù)據(jù)壓縮的目的,又完整地保留了邏輯壓縮后的數(shù)據(jù)信息。
關(guān)鍵詞:核電站DCS Historian數(shù)據(jù)壓縮 模擬量數(shù)據(jù)壓縮 改進(jìn)旋轉(zhuǎn)門數(shù)據(jù)壓縮
中圖分類號(hào):TM862 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2013)03(b)-0029-02
1 研究背景
核電DCS控制系統(tǒng)中的歷史數(shù)據(jù)庫(kù)需要具備較高實(shí)時(shí)性、海量數(shù)據(jù)吞吐量的特點(diǎn),因此在長(zhǎng)時(shí)間系統(tǒng)運(yùn)行的前提下,會(huì)產(chǎn)生巨大的歷史數(shù)據(jù)量,如果將這些數(shù)據(jù)直接存儲(chǔ),不僅會(huì)浪費(fèi)很多的存儲(chǔ)空間,而且還會(huì)使得數(shù)據(jù)查詢、傳輸變得復(fù)雜而困難。因此,將數(shù)據(jù)壓縮技術(shù)引入到DCS系統(tǒng)的歷史數(shù)據(jù)處理中,可以達(dá)到節(jié)省存儲(chǔ)空間、增加庫(kù)容量和提升系統(tǒng)運(yùn)行效率等優(yōu)勢(shì)。
2 數(shù)據(jù)壓縮技術(shù)簡(jiǎn)介
歷史數(shù)據(jù)庫(kù)的數(shù)據(jù)壓縮是傳統(tǒng)數(shù)據(jù)壓縮技術(shù)在DCS工控領(lǐng)域的特殊應(yīng)用,一般數(shù)據(jù)壓縮算法可以分為無損壓縮和有損壓縮兩種技術(shù)。
有損壓縮技術(shù)是根據(jù)特定的應(yīng)用領(lǐng)域而發(fā)展起來的,它的基本原理是在數(shù)據(jù)壓縮過程中損失一定的信息以獲得較高的壓縮比,并且壓縮過程不可逆,壓縮后的數(shù)據(jù)不能完全地恢復(fù)到原始狀態(tài),因此需要保證損失的數(shù)據(jù)對(duì)于理解原始數(shù)據(jù)信息特點(diǎn)的影響不大。具體到工控行業(yè)使用較多的壓縮算法包括:Hale和Sellars共同提出的矩形波串法(Box Car)和后向斜率發(fā)(Back ward Slope),以及在工控領(lǐng)域應(yīng)用最為廣泛的OSIsoft公司提出的“旋轉(zhuǎn)門數(shù)據(jù)壓縮算法(Swing Door)”[1,2]。
無損壓縮技術(shù)是利用數(shù)據(jù)的統(tǒng)計(jì)冗余進(jìn)行壓縮,可完全回復(fù)原始數(shù)據(jù)而不引起任何失真,但壓縮率是受到數(shù)據(jù)統(tǒng)計(jì)冗余度的理論限制,一般為2∶1~5∶1。這類方法廣泛用于文本數(shù)據(jù),程序和特殊應(yīng)用場(chǎng)合的圖像數(shù)據(jù)(如指紋圖像,醫(yī)學(xué)圖像等)的壓縮。無論是無損壓縮還是有損壓縮,都在工控領(lǐng)域的歷史數(shù)據(jù)處理中得到了應(yīng)用,例如美國(guó)的Instep公司開發(fā)的實(shí)時(shí)歷史數(shù)據(jù)庫(kù)系統(tǒng)eDNA就實(shí)現(xiàn)了以Huffman為基本的無損數(shù)據(jù)壓縮程序,它首先對(duì)數(shù)據(jù)集合進(jìn)行統(tǒng)計(jì)分析,將數(shù)據(jù)添加到Huffman樹中進(jìn)行編碼,最后保存生成編碼,完成對(duì)數(shù)據(jù)群的壓縮;而OSIsoft公司的PI實(shí)時(shí)歷史數(shù)據(jù)庫(kù)產(chǎn)品采用了“旋轉(zhuǎn)門數(shù)據(jù)壓縮算法”以及獨(dú)到的二次過濾技術(shù)。
本論文所闡述的歷史數(shù)據(jù)(Historian)壓縮模塊,我們綜合了兩種壓縮算法的優(yōu)劣,設(shè)計(jì)了一套“二次數(shù)據(jù)壓縮”機(jī)制,統(tǒng)一無損壓縮和有損壓縮算法應(yīng)用,對(duì)歷史庫(kù)模擬量數(shù)據(jù)的壓縮。下面我們就具體來看些歷史數(shù)據(jù)(Historian)壓縮算法的設(shè)計(jì)。
3 歷史數(shù)據(jù)(Historian)壓縮模塊的設(shè)計(jì)
歷史數(shù)據(jù)(Historian)支持的數(shù)據(jù)類型包括開關(guān)量數(shù)據(jù)和模擬量數(shù)據(jù)。由于不同的數(shù)據(jù)類型所表現(xiàn)的數(shù)據(jù)特點(diǎn)的不同,需要設(shè)計(jì)針對(duì)性的壓縮策略來滿足各種數(shù)據(jù)的壓縮要求。
3.1 開關(guān)量數(shù)據(jù)壓縮
開關(guān)量數(shù)據(jù)采用“變化壓縮算法”,算法基本的設(shè)計(jì)思路是:當(dāng)測(cè)點(diǎn)的數(shù)值發(fā)生變化時(shí)才會(huì)保存,否則丟棄當(dāng)前數(shù)據(jù)。這是因?yàn)殚_關(guān)量測(cè)點(diǎn)的狀態(tài)一般由特定的0或1來表示,在DCS生產(chǎn)現(xiàn)場(chǎng),有很多開關(guān)量測(cè)點(diǎn)的狀態(tài)在特定甚至是很長(zhǎng)的時(shí)間內(nèi)是不會(huì)發(fā)生變化的,所以“變化壓縮算法”非常適合對(duì)歷史庫(kù)開關(guān)量數(shù)據(jù)的壓縮處理。
如圖1所示,設(shè)置某開關(guān)量測(cè)點(diǎn)每1秒進(jìn)行一個(gè)數(shù)據(jù)值采集,以時(shí)刻點(diǎn)t為基準(zhǔn)的后8s里,其測(cè)點(diǎn)值分別為0、0、0、1、1、0、0、1。根據(jù)“變化壓縮算法”的計(jì)算,剔除其在2 s、3 s、5 s和7 s的數(shù)據(jù),只保存1 s、4 s、6 s和8 s的數(shù)據(jù)值。而當(dāng)進(jìn)行數(shù)據(jù)還原時(shí),空缺時(shí)刻的數(shù)據(jù)值取前一保存時(shí)刻的數(shù)據(jù),例如,2 s和3 s的數(shù)值均等于1 s數(shù)值0。這樣即完整的保存了測(cè)點(diǎn)在時(shí)間軸上的數(shù)據(jù)特征,又起到了節(jié)省存儲(chǔ)空間的目的。
3.2 模擬量數(shù)據(jù)壓縮
在DCS系統(tǒng)中的模擬量測(cè)點(diǎn)數(shù)據(jù)一般都會(huì)遵循一定的漸變規(guī)律,例如有的時(shí)間段會(huì)呈現(xiàn)較為一致的線性變化,有的時(shí)間段的數(shù)據(jù)特征為一條拋物線等。這些數(shù)據(jù)特征就給定了我們做歷史數(shù)據(jù)邏輯壓縮的前提。
在歷史數(shù)據(jù)(Historian)系統(tǒng)中,我們采用雙重的歷史數(shù)據(jù)壓縮機(jī)制,即“二次數(shù)據(jù)壓縮”,實(shí)現(xiàn)流行的“旋轉(zhuǎn)門”壓縮算法為第一層邏輯壓縮,實(shí)現(xiàn)無損的Huffman壓縮算法為第二層物理壓縮。首先來討論下傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法的內(nèi)容。
3.2.1 傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法
如圖2所示,基本的“旋轉(zhuǎn)門壓縮算法”是這樣描述的:在進(jìn)行數(shù)據(jù)壓縮時(shí),算法將新的實(shí)時(shí)數(shù)據(jù)點(diǎn)和前一個(gè)被保留的數(shù)據(jù)點(diǎn)之間做一個(gè)平行四邊形的偏移覆蓋區(qū),如果這一平行四邊形可以覆蓋保留數(shù)據(jù)點(diǎn)之后出現(xiàn)的所有數(shù)據(jù)點(diǎn)時(shí),那么將不會(huì)保存新的實(shí)時(shí)數(shù)據(jù)點(diǎn)。反之如果有任何一個(gè)數(shù)據(jù)點(diǎn)落在壓縮偏移覆蓋區(qū)外,則新數(shù)據(jù)點(diǎn)的前一個(gè)點(diǎn)將被保留,同時(shí)整個(gè)壓縮偏移覆蓋區(qū)將被重置,以新的被保留點(diǎn)作為新的起點(diǎn),進(jìn)入下一輪的旋轉(zhuǎn)門判斷[3]。
傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法雖然可以較好的完成對(duì)實(shí)時(shí)歷史數(shù)據(jù)的壓縮,但是在算法的實(shí)現(xiàn)和執(zhí)行過程中會(huì)出現(xiàn)一些問題,主要體現(xiàn)在以下兩點(diǎn)。
(1)算法實(shí)現(xiàn)時(shí)需要一個(gè)臨時(shí)緩沖區(qū)來存儲(chǔ)待判定點(diǎn)集,但是在代碼實(shí)現(xiàn)時(shí),這一緩沖區(qū)的大小缺失無法事先確定的。
(2)如果待判定點(diǎn)過多,緩沖區(qū)里的數(shù)據(jù)點(diǎn)數(shù)過大,那么在進(jìn)行覆蓋區(qū)判定時(shí)會(huì)耗去系統(tǒng)過多的業(yè)務(wù)執(zhí)行時(shí)間,造成系統(tǒng)運(yùn)行的瓶頸。
因此,在以上算法的基礎(chǔ)上,我們采用了改進(jìn)的“旋轉(zhuǎn)門”壓縮算法,即“斜率比較旋轉(zhuǎn)門”算法[4,5]。
3.2.2 改進(jìn)的“斜率比較旋轉(zhuǎn)門”壓縮算法
如圖3所示,當(dāng)新點(diǎn)a到來時(shí),系統(tǒng)會(huì)比較a與原點(diǎn)o(即上已存儲(chǔ)的點(diǎn))的時(shí)間差t_time,如果t_time不小于壓縮間隔上限nic_compinterval或者a點(diǎn)質(zhì)量戳與o點(diǎn)不同,則直接保存lastpoint點(diǎn),進(jìn)入下一輪旋轉(zhuǎn)門算法運(yùn)算;否則以點(diǎn)a和o以及設(shè)定好的nic_comprate構(gòu)建平行四邊形Ω,計(jì)算最大斜率點(diǎn)maxkpoint和最小斜率點(diǎn)minkpoint是否均在Ω內(nèi),計(jì)算結(jié)果有兩種。
(1)都落在了Ω內(nèi)部,則說明a點(diǎn)通過了旋轉(zhuǎn)門,成為最新的lastpoint,最后再分別比較a點(diǎn)斜率與最大、最小斜率的關(guān)系,大于最大斜率值或者小于最小斜率值則替換掉相應(yīng)的斜率點(diǎn)和斜率值,進(jìn)入下一輪旋轉(zhuǎn)門算法運(yùn)算。
(2)如果有一個(gè)斜率點(diǎn)落在了Ω外部,則說明a點(diǎn)沒有通過旋轉(zhuǎn)門,那么就保存此時(shí)的lastpoint,并將lastpoint點(diǎn)設(shè)定為下一輪旋轉(zhuǎn)門算法的o點(diǎn),a點(diǎn)設(shè)定為最大和最小斜率點(diǎn),進(jìn)入下一輪旋轉(zhuǎn)門算法運(yùn)算。
改進(jìn)的“旋轉(zhuǎn)門”算法的具體流程圖如圖4所示。
以上介紹的“旋轉(zhuǎn)門”壓縮算法是系統(tǒng)第一次對(duì)歷史數(shù)據(jù)的邏輯壓縮,當(dāng)經(jīng)過邏輯壓縮后的保留數(shù)據(jù)積累到一定的數(shù)量時(shí),例如1k,再對(duì)其進(jìn)行第二次的物理壓縮。物理壓縮采用的是Huffman無損壓縮算法,它的基本原理是,構(gòu)建一個(gè)用于字符編碼的Huffman二叉樹,根據(jù)待壓縮數(shù)據(jù)二進(jìn)制子串出現(xiàn)的頻率對(duì)其進(jìn)行排列,出現(xiàn)頻率大的串使用較少的位表示,較小的串使用較多的編碼來表示,這樣既到達(dá)了數(shù)據(jù)壓縮的目的,又完整地保留了邏輯壓縮后的數(shù)據(jù)信息。
4 結(jié)語
通過對(duì)無損壓縮算法和有損壓縮算法的對(duì)比分析研究,我們充分利用了兩種算法的優(yōu)點(diǎn),設(shè)計(jì)了“二層壓縮”算法,同時(shí)將“二次壓縮”算法應(yīng)用于歷史數(shù)據(jù)(Historian)壓縮模塊的設(shè)計(jì)和實(shí)現(xiàn)中,形成了一種較為先進(jìn)的技術(shù)實(shí)現(xiàn)手段,在工程應(yīng)用中取得了良好的效果。
參考文獻(xiàn)
[1] 高寧波,金宏,王宏安.歷史數(shù)據(jù)實(shí)時(shí)壓縮方法研究[J].計(jì)算機(jī)功能與應(yīng)用,2004,28:167-171.
[2] Bristol,E.H.Swing Door Trending: Adaptive Trend Recording,ISA National Conference Proceedings,1990:749-753.
[3] 蔣鵬,黃清波,王智,等.一種新的化工過程歷史數(shù)據(jù)壓縮方法研究[J].浙江大學(xué)學(xué)報(bào),2005,39(6):814-818.
[4] 徐慧.實(shí)時(shí)數(shù)據(jù)庫(kù)中數(shù)據(jù)壓縮算法的研究[D].杭州:浙江大學(xué),2006.
[5] 馮磊,李俊,夏雨人.計(jì)算機(jī)控制系統(tǒng)中歷史數(shù)據(jù)存儲(chǔ)與查詢的一種方法[J].計(jì)算機(jī)工程,2003,29(3):108-110.
[6] 黃靜.LZW壓縮算法VC實(shí)現(xiàn)、改進(jìn)及其應(yīng)用研究[D].長(zhǎng)沙:中南大學(xué),2007.李湘.分布式實(shí)時(shí)數(shù)據(jù)庫(kù)及數(shù)據(jù)壓縮算法研究[D].北京:北京科技大.