馬國強,楊紅培,韓建定,慕宗君,方 偉
(1.許繼電氣股份有限公司 河南 許昌 461000;2.許昌電氣職業學院 河南 許昌461000;3.空軍工程大學航空航天工程學院,陜西 西安710038)
Zlib庫在基于Nucleus系統的新型智能遠動裝置中的應用
馬國強1,3,楊紅培2,韓建定3,慕宗君1,方 偉1
(1.許繼電氣股份有限公司 河南 許昌 461000;2.許昌電氣職業學院 河南 許昌461000;3.空軍工程大學航空航天工程學院,陜西 西安710038)
針對基于PowerPC架構和嵌入式Nucleus系統的智能遠動裝置特點和要求,通過對Zlib函式庫的移植和改進,實現了對多文件、多目錄的無損壓縮和解壓縮軟件。以變電站智能遠動裝置的配置文件為數據樣本進行驗證,實驗結果表明,該軟件能夠很好地完成對數據的無損壓縮和解壓縮,為嵌入式系統應用節省了寶貴的硬件和網絡資源。
Zlib;嵌入式Nucleus系統;PowerPC架構;智能遠動裝置;DEFLATE算法
智能遠動裝置作為智能變電站與調控中心交互數據的中樞,要求集常規遠動、保信、計量、狀態監測和PMU五大功能于一體,這就對處理器和操作系統提出了很高的要求。PowerPC處理器具有優異的性能、較低的能量損耗以及較低的散熱量,且嵌入式表現非常突出。Nucleus是為實時嵌入式應用設計的一個搶先式多任務操作系統,能夠支持包括PowerPC處理器在內的大多數類型的處理器。選擇PowerPC+Nucleus作為智能遠動裝置的平臺架構能夠很好的滿足應用需求[1-4]。
對于嵌入式應用來說,各種軟硬件資源都非常緊張,智能變電站龐大的數據量對于存儲設備容量和網絡傳輸速度都有很高要求,為了節省存儲空間和減少網絡傳輸時間,應用中需要對大數據進行壓縮后再進行存儲和傳輸。況且,在智能遠動裝置中實現的部分高級功能,如源端維護、遠程瀏覽等,主站端明確要求要以壓縮文件的格式傳輸SCD、CIM以及SVG等文件,這就要求智能遠動裝置必須能夠以一種通用的格式對文件進行壓縮和解壓縮。為了滿足PowerPC+Nucleus平臺上文件壓縮和解壓縮的需要,選擇通用的ZIP格式作為壓縮文件格式,基于移植并改進的Zlib函式庫,開發了適合于智能遠動裝置的文件壓縮和解壓縮軟件[5-8]。
ZIP格式文件由壓縮文件信息、壓縮目錄信息和目錄結束標記信息三部分組成[9-11]。
1.1 壓縮文件
壓縮文件信息包含壓縮的所有文件的內容,其每個文件的數據組織結構由文件頭、文件數據區和數據描述三部分組成。文件頭信息包括文件頭標識符(固定為0x504b0304)、解壓文件所需版本、通用位標記、壓縮方法、文件最后修改時間、文件最后修改日期、CRC-32位校驗、壓縮后大小、壓縮前大小、文件名長度、擴展區長度、文件名和擴展區。文件數據區存儲壓縮文件數據。數據描述信息包括本地文件頭標識符(固定為0x504b0708)、CRC-32位校驗、壓縮后大小、壓縮前大小,用于標識文件壓縮結束,緊跟在壓縮文件數據后。只有當文件頭的通用位標記字段的第3位為1時,壓縮文件中才存在有數據描述信息,數據描述信息只用在不能對生成的ZIP文件進行檢索時使用,如存儲在磁帶機上的ZIP文件。
1.2 壓縮目錄
壓縮目錄是壓縮源文件數據區中的一條數據在目錄區的一條記錄。對于待壓縮的目錄而言,每一個子目錄對應一個壓縮目錄,記錄該目錄的描述信息。壓縮包中所有目錄連續存儲在整個歸檔包的最后,這樣便于向包中追加新的文件。壓縮目錄信息包括目錄頭標識符 (固定為0x504b0102)、壓縮所用版本、解壓文件所需版本、通用位標記、壓縮方法、文件最后修改時間、文件最后修改日期、CRC-32位校驗、壓縮后大小、壓縮前大小、文件名長度、擴展區長度、文件注釋長度、文件開始位置的磁盤編號、內部文件屬性、外部文件屬性、本地文件頭相對位移、目錄文件名、擴展區和文件注釋。
1.3 目錄結束標志
目錄結束標記用于標識壓縮的目錄數據的結束,位于整個ZIP文件的結尾。它包括目錄結束標記標識符(固定為0x504b0506)、當前磁盤號、目錄開始位置磁盤號、本磁盤目錄總數、目錄總數、目錄大小、目錄對1號磁盤的偏移量、ZIP文件注釋長度和注釋。
Zlib函式庫是一款自由軟件,使用Zlib授權。它使用了一個LZ77的變種算法即DEFLATE算法,實現了用于數據無損壓縮的函式庫。目前,Zlib是一種事實上的業界標準,常用的大部分解壓縮軟件都用到了它。 Zlib 函式庫支持 Windows、Linux、Solaris、MAC OS等多種操作系統版本,可以直接獲取相應操作系統的Zlib源代碼或動態庫。由于Nucleus操作系統不在Zlib函式庫官方支持范圍之內,因此要想在Nucleus操作系統上使用Zlib函式庫就必須對它進行移植。由于Zlib函式庫是用純c語言實現的,非常便于移植,而NucleusPLUS操作系統內核是一組c函數庫,其95%的代碼是用ANSIC寫成的,所以兩者具有良好的兼容性[12-13]。
為了更好地支持嵌入式Nucleus操作系統在PowerPC架構上對文件解壓縮的要求,在對Zlib函式庫的移植改進過程中做了以下3方面的工作:
1)標準Zlib函式庫通過文件描述符fd實現了對文件的操作,這種文件操作方法使用傳統的低級IO方式直接對磁盤進行訪問操作,造成文件讀寫速度慢、訪問效率低。電力系統智能遠動裝置對實時性的要求很高,特別是PMU功能更是要達到ms級別,如果解壓縮功能影響到了整個系統性能,則是系統所不能接受的。針對此問題,對標準Zlib函式庫進行改進,采用文件指針fp代替文件描述符fd對文件進行訪問操作,文件指針結構中包含了IO緩沖,使用高級IO方式而非低級IO方式操作文件,能夠大大提高文件數據的讀寫效率,進而提高Zlib函式庫的解壓縮性能。
2)在數據壓縮/解壓過程中,首先把待壓縮/解壓的文件、目錄的原始數據通過動態開辟內存空間放入無類型指針鏈表中,這樣能夠加快壓縮/解壓速度,提高壓縮/解壓性能。
3)由于不同的CPU架構存在著字節序大小端的區別,目前市場上大部分CPU為小端字節序,而PowerPC為大端字節序。在PowerPC架構下數據壓縮過程中,凡是牽涉到整型、浮點型等多字節類型數據在寫入歸檔時,為了使歸檔能夠被所有的解壓縮工具解壓,必須把這些多字節數據的大端字節序轉換為小端字節序存入歸檔;在PowerPC架構下數據解壓過程中,在讀取歸檔數據時,凡是牽涉到整型、浮點型等多字節類型數據,必須把這些多字節數據的小端字節序轉換為大端字節序,以便能夠正確解壓歸檔。
利用改進的Zlib函式庫實現基于PowerPC架構的嵌入式Nucleus系統上文件的壓縮,首先需要創建歸檔并初始化其在壓縮過程中所用到的參數,然后向歸檔中添加需要壓縮的文件、目錄或者從歸檔中刪除不需要壓縮進歸檔的文件、目錄,最后關閉歸檔完成壓縮[14-15]。
3.1 ZIP歸檔初始化
歸檔初始化主要涉及打開已存在歸檔或創建新歸檔時,對歸檔參數、文件臨時存儲區、中心目錄、回調指針的初始化以及對字節大小端的處理。歸檔初始化的基本流程如圖1所示。

圖1 歸檔初始化工作流程
3.2 向ZIP歸檔添加文件
向歸檔添加文件是把待壓縮的磁盤文件的屬性信息及數據載入臨時文件緩沖區,其主要涉及對要添加的文件頭的初始化、不同的操作系統文件路徑表示方法不一樣對其進行統一格式化、把待添加的文件載入臨時文件緩沖區、把文件屬性信息寫入文件頭結構中。向歸檔添加文件的基本流程如圖2所示。

圖2 向歸檔添加文件工作流程
3.3 向ZIP歸檔添加目錄
向歸檔添加文件目錄主要涉及初始化文件目錄列表、獲取指定目錄下的文件列表、判斷文件列表元素類型進行相應處理。如果文件列表元素為文件類型,那么就以向歸檔中添加文件的操作步驟處理,否則就把文件列表元素添加到文件目錄列表中,再以向歸檔中添加目錄的操作步驟進行處理,直到所有的文件和目錄都添加到歸檔中為止。向歸檔添加文件目錄的基本流程如圖3所示。

圖3 向歸檔添加目錄工作流程
3.4 從ZIP歸檔中刪除文件
歸檔中包含的文件和目錄都以獨立的方式存在,每個文件或目錄都有唯一的索引,在歸檔中進行文件或目錄的檢索就是通過索引進行的。從歸檔中刪除文件主要涉及判斷要刪除的文件的索引是否有效、初始化臨時信息結構、從磁盤上即歸檔中刪除指定索引的文件、刪除臨時內存信息并釋放內存。從歸檔中刪除文件的基本流程如圖4所示。

圖4 從歸檔中刪除文件工作流程
3.5 ZIP歸檔關閉
關閉歸檔是文件壓縮的關鍵步驟,前述歸檔創建、文件或目錄添加等只是為壓縮文件做準備,真正的文件壓縮操作是在關閉歸檔時才完成的。歸檔關閉操作主要涉及判斷歸檔是否關閉、是否拋出異常、文件是否為壓縮模式、調用Zlib函式庫的數據壓縮接口壓縮數據并把壓縮后的數據寫入歸檔文件、向中心目錄寫入目錄數據以及釋放臨時內存資源。歸檔關閉操作的基本流程如圖5所示。

圖5 關閉歸檔工作流程
歸檔的解壓縮主要涉及解壓縮環境的初始化包括各種參數、文件存儲、目錄中心以及回調等,獲取待解壓縮的歸檔中包含的文件條目數,對歸檔中的文件進行逐個解壓以及解壓后對環境進行反初始化。歸檔解壓縮的基本流程如圖6所示。

圖6 文件解壓工作流程
在智能遠動裝置中,配置文件CFG、模型文件SCD、模型文件CIM、圖形文件SVG及動態數據文件DYN等幾類文件需要壓縮后進行存儲或傳輸,下面就以這幾類文件為例來驗證本文提出的壓縮方法的實現情況,并給出驗證結果如表1所示。

表1 驗證結果
驗證結果表明,本壓縮方法對不同類型的數據樣本壓縮率和壓縮速率存在著一定的差別,主要由于不同樣本文件的數量和單個文件長度存在較大的差異。在單個文件長度越大的情況下壓縮效果就會越好,反之,在文件數量多且文件長度小的情況下壓縮效果就會差一些。
文中針對PowerPC+Nucleus平臺架構的特點和要求,對Zlib函式庫進行代碼移植和功能改進,提出了基于移植改進后的Zlib函式庫的數據壓縮方法,實現了在新型智能遠動機中對文件和目錄的壓縮、解壓縮以及從ZIP歸檔中刪除文件和析取文件列表等功能。本方法實現了對數據的無損壓縮,并具有良好的壓縮效果和壓縮速率,在新型智能遠動裝置中得到了應用驗證,很好的解決了嵌入式應用中存儲資源緊張和網絡傳輸慢的問題。
由于新型智能遠動裝置為嵌入式應用,不具備人機交互界面,因此只實現了文件壓縮、解壓縮、刪除等功能的函數接口,沒有實現這些功能的界面操作,如果以后有這方面的需要可以加入界面實現。
[1]李瑞生,李燕斌,周逢權.智能變電站功能架構及設計原則[J].電力系統保護與控制,2010,38(21):24-27.
[2]李孟超,王允平,李獻偉,等.智能變電站及技術特點分析[J].電力系統保護與控制,2010,38(18):59-62.
[3]周華鋒,李鵬,吳小辰.二次一體化框架下智能遠動機建設初步方案[J].南方電網技術,2012,6(3):69-72.
[4]汪際峰.一體化電網運行智能系統的概念及特征[J].電力系統自動化,2011,35(24):1-6.
[5]牟璇,王俊峰,王敏,等.TCP自適應壓縮傳輸方安研究[J].計算機應用與軟件,2013,30(11):279-282.
[6]篤竣,祁忠.基于IEC61850的變電站新型遠動網關機[J].電力自動化設備,2011,31(2):116-121.
[7]侯貿軍.變電站智能診斷和維護系統體系結構研究[J].計算機工程與設計,2012,33(10):3964-3969.
[8]李偉,趙建軍,王超,等.基于xc2vp30的嵌入式系統設計和SystemACE分析[J].計算機應用與軟件,2014,31(8):237-240.
[9]蔡長安,鐘銳,王盈瑛.串行通信轉網絡通信數據模塊的設計[J].計算機應用與軟件,2010,27(1):88-91.
[10]陳鈞,劉愛華.基于Zlib的圖像差異壓縮算法研究與實現[J].東華理工大學學報:自然科學版,2010,33(1):92-96.
[11]許彪,王曉東.基于文件格式的J2ME圖片壓縮方法研究[J].計算機應用與軟件,2010,27(4):253-256.
[12]周桂宇,馬憲民,李衛斌.改進的混合壓縮算法在GPS數據壓縮中的應用 [J].計算機應用與軟件,2013,30(12):167-169.
[13]劉麗偉,鄧春健.多文件壓縮傳輸及解壓縮的方法[J].武漢理工大學學報(交通科學與工程版),2009,33(6):1211-1214.
[14]王剛,劉立柱.ZIP文件壓縮編碼分析[J].微計算機信息.2006,22(15):283-285.
[15]謝小勇,吳瑞卿,陳偉,等.基于Zlib和DSP的傳感器數據壓縮方法的研究[J].電子技術應用,2012,38(11):41-43,47.
Zlib library based on the nucleus system the application of new RTU
MA Guo-qiang1,3,YANG Hong-pei2,HAN Jian-ding3,MU Zong-jun1,FANG Wei1
(1.XJ Electric Co.,Ltd.,Xuchang 461000,China; 2.Xuchang Electrical Vocational College,Xuchang 461000,China; 3.Aeronautics and Astronautics Engineering Institue,Air Force Engineering University,Xi'an 710038,China)
Based on the PowerPC architecture and embedded Nucleus system of RTU characteristics and requirements,through to the Zlib library of transplantation and to improve,achieved to file and directory of lossless compression and decompression software.In substation the smart RTU configuration file for the data samples to verify,the experimental results show that the software can be very good to complete the data of lossless compression and decompression,for embedded system application saves valuable hardware and network resources.
Zlib;embedded nucleus system;PowerPC architecture;RTU;DEFLATE algorith
TN919
:A
:1674-6236(2017)14-0047-04
2016-06-20稿件編號:201606142
馬國強(1978—),男,河南長葛人,工程師。研究方向:電力系統自動化產品及JAVA報表系統平臺研發。