Zlib库在基于Nucleus系统的新型智能远动装置中的应用
2017-08-08马国强杨红培韩建定慕宗君
马国强,杨红培,韩建定,慕宗君,方 伟
(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]。
1 ZIP文件格式解析
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文件注释长度和注释。
2 移植改进Zlib函式库
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架构下数据解压过程中,在读取归档数据时,凡是牵涉到整型、浮点型等多字节类型数据,必须把这些多字节数据的小端字节序转换为大端字节序,以便能够正确解压归档。
3 压缩应用实现
利用改进的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 关闭归档工作流程
4 解压缩应用实现
归档的解压缩主要涉及解压缩环境的初始化包括各种参数、文件存储、目录中心以及回调等,获取待解压缩的归档中包含的文件条目数,对归档中的文件进行逐个解压以及解压后对环境进行反初始化。归档解压缩的基本流程如图6所示。
图6 文件解压工作流程
5 应用验证
在智能远动装置中,配置文件CFG、模型文件SCD、模型文件CIM、图形文件SVG及动态数据文件DYN等几类文件需要压缩后进行存储或传输,下面就以这几类文件为例来验证本文提出的压缩方法的实现情况,并给出验证结果如表1所示。
表1 验证结果
验证结果表明,本压缩方法对不同类型的数据样本压缩率和压缩速率存在着一定的差别,主要由于不同样本文件的数量和单个文件长度存在较大的差异。在单个文件长度越大的情况下压缩效果就会越好,反之,在文件数量多且文件长度小的情况下压缩效果就会差一些。
6 结束语
文中针对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报表系统平台研发。