APP下载

航天测试系统大容量数据处理方法研究*

2014-06-15马志刚刘文怡张文栋

火力与指挥控制 2014年10期
关键词:数据文件大容量数据处理

马志刚,刘文怡,张文栋

(1.山西农业大学信息科学与工程学院,山西 太谷 030801;

2.中北大学仪器科学与动态测试教育部重点实验室,电子测试技术重点实验室,太原 030051)

航天测试系统大容量数据处理方法研究*

马志刚1,2,刘文怡2,张文栋2

(1.山西农业大学信息科学与工程学院,山西 太谷 030801;

2.中北大学仪器科学与动态测试教育部重点实验室,电子测试技术重点实验室,太原 030051)

在航天测试系统中,经常需要处理大容量数据。讨论了C语言、C++语言、MFC中文件的操作方法。结合Win32 API相关函数,分析了大容量数据文件的读取、解包、分析等处理方法。在Visual C++6.0编程环境下,根据实际需求编写了数据分析处理软件。经过实验验证和实际数据测试,提出的方法可以有效地对大容量数据文件进行分析、处理,且已成功应用于多个航天测试项目,取得了较为理想的分析结果,为相关测试、试验提供了依据。

航天测试,大容量数据,数据处理,Visual C++6.0,应用程序接口

引言

随着信息技术的迅速发展,各测试领域均需要处理大量数据。在航天测试中经常需要采集并存储各类缓变、振动、冲击、高速图像等数据,有些数据通常要求很高的采样率和较长的采集时间。因此,需要分析计算机处理的数据量非常大,通常可以达到几个GB到十几个GB,甚至高达几十GB[1-2]。面对如此巨大的数据量,在编写数据处理软件时,必须采用高效的程序设计语言,并设计合理的算法。本文讨论的大容量数据处理算法是基于C++的,开发环境是Visual C++6.0。

1 数据文件的操作

“文件”是存储在计算机外部介质上数据信息的集合,一般分为文本文件和二进制文件。本文讨论的数据文件属于二进制文件[2]。通常,程序中的数据在程序运行结束之后,就会从内存中清除,如果不及时保存,这些数据将永久消失。而在实际应用中,不可避免地会遇到需要将某些数据永久保存的问题,例如:希望当程序运行结束后,依然可以使用这些数据,这时就需要进行文件操作。C语言、C++语言、MFC和Win32 API均对文件操作提供了大量支持。

1.1 C语言和C++语言中的文件操作

在C语言中,文件操作可利用FILE结构体进行。使用时,可先用fopen()函数返回一个指向FILE结构体的指针,文件的读写则采用fread()和fwrite()函数[3]。在C++中,可利用ofstream(文件流)类来完成文件的读、写操作,相关函数有read()、write()等[4]。

1.2 MFC中的文件操作

MFC中提供了与文件操作有关的基类:CFile,它提供了很多函数,写入数据可以调用Write()函数,读取数据则调用Read()函数[5]。

另外,如果要获得数据文件的大小(字节数),可通过调用GetLength()函数完成,其返回值为DWORD型(32位无符号整型)。显然,使用GetLength()函数只能获得不超过4 GB文件的大小。如果文件大小超过4 GB,GetLength()函数就无能为力了。虽然在数据处理时,文件大小并不是必须要知道的,但获得该参数可以在数据处理时估算出处理进度或其它必要信息,因此也是有意义的。

1.3 利用Win32 API函数操作文件

Win32 API提供的与文件操作相关的函数主要包括:CreateFile()、ReadFile()、WriteFile()和Find-FirstFile()等[5]。CreateFile()函数用于打开或创建一个文件,WriteFile()和ReadFile()函数可以向指定文件中写入或从文件中读出数据。为获得文件的详细信息,可调用FindFirstFile()函数。其语法格式为:

该函数执行后,变量lpFindFileData将返回一个WIN32_FIND_DATA类型结构体,该结构体包含大量文件信息,本文比较关心的是参数nFileSizeHigh和nFileSizeLow,二者分别表示文件大小的高32位和低32位。因此,使用该函数可以获得不超过16EB(16MTB)文件的大小,现阶段可以满足实际需要。

2 大容量数据分析

在航天测试系统中,从各个测试通道获得的数据需要先传输至分析计算机形成数据文件,然后进行处理。数据处理包括:通道数据分离,各通道数据的完整性分析,野点剔除、漏点插补、谱分析、统计分析等。必要时,还要对连续变化的模拟信号(温度、液位、压力等)进行曲线再现或导出物理量。同时,通常还需生成日志文件,该文件用于给出数据分析结果,包括:有效帧数、是否有丢帧、丢帧位置、丢帧数据量等信息。如图1所示。

图1 数据处理的一般流程

2.1 通道数据分离

由于各类测试数据较多,其采样率、采样时间等也不尽相同,因此,获得的原始数据通常由各类数据混合编帧形成。所以,在分析数据之前,需先将各类(或各通道)数据进行分离,一般要生成单独文件,每个文件对应一类(或通道)数据。如图2所示。

测试数据是以图2所示的若干包数据组成的。该示例中包含两类数据,分别是“数字量”数据(包尾是0X"ABCD")和“模拟量”数据(包尾是0X "DCBA"),两类数据包的包头均为0X"EB90"。为了便于判断数据包的完整性,包结构中设计了包计数(共4 bit),并且两类数据包分别计数。

图2 某混合编帧数据的包结构

“数据分离”也叫“数据解包”,用于从原始混编数据中分离各通道数据,并生成新的数据文件。在分离过程中,要判断包计数的连续性,如果不连续,应生成一条错误信息并存入日志文件。

数据分离前,需将数据从文件中读出。当数据量较小时(例如不超过50 MB),可直接将所有数据一次性读入内存(数组);当数据量较大时(例如4 GB以上),则必须采用“分块读取”→“衔接数据”→“局部分析”,最后达到“完整分析”的方式。即先读出一块数据(例如128 KB)进行分析,并将该块剩余的未分析部分缓存至临时空间;再读出下一块,将该块数据与上一块剩余部分数据衔接后进行分析;依此类推,直到分析完所有数据[2]。该流程如图3所示,图中的“分析数据”是指判断当前块数据中的所有包结构,以确定该包数据属于“数字量”或“模拟量”数据,并将有效数据存入相应的文件。

图3 数据分离流程图

2.2 通道数据分析

虽然每类通道数据的帧结构不同,但在帧结构设计上有规律可循,因此在设计分析算法时需考虑到程序的灵活性。典型的数据帧结构由4部分组成,分别是:帧头、数据内容、帧计数和帧尾[2],如图4所示。

图4 典型的数据帧结构

为尽可能多地适应不同类型数据的分析,相关分析参数(帧头、帧尾、数据长度和帧计数个数等)应当是可设置的。典型C语言代码如下:

3 数据处理软件设计

数据处理软件可分成“数据解包”、“通道数据分析”、“通道数据导出或曲线显示”等模块。考虑到待分析处理的数据量很大,因此,程序执行效率必须考虑。程序执行的效率与数据的存储结构、程序的控制结构、所处理的数据量等因素有关。在当前流行的编程语言中,C语言被普遍认为执行效率较高[2]。因此,经过综合考虑,数据处理软件采用Visual C++ 6.0设计,软件界面如图5所示。

图5 数据分析软件界面

4 软件功能测试和性能分析

为检验软件功能和性能,本文选择多组数据对软件进行了验证。下页图6给出了数据文件大小和解包时长的关系曲线。可以看到:数据解包所耗时间随文件大小的增大而逐渐变长,整个呈现上升趋势,这是合理的情况;但在曲线上出现了一个拐点(箭头所指处),说明解包时长还与文件本身的特点等其它因素有关。同时,解包8 GB左右的文件需耗时400余秒(6 min~7 min)之多,尽管处理软件在设计时已经进行了算法优化,但耗时仍显较长。如果文件大小达到16 GB,解包时间将超过10 min,而这仅仅是解包花费的时间,后续的通道数据分析还会占用不少时间。显然,这在很多情况下是难以容忍的。因此,在满足功能的情况下,软件的执行效率还有待提高。

图6 数据文件大小与解包时长关系曲线

5 结 论

数据是考核待测系统性能和设备工作状态的重要指标和依据。本文从航天测试系统大容量数据处理问题出发,结合C++、Win32 API函数等对文件操作的支持,讨论了大容量数据的分析处理方法,提出了“分块读取”→“衔接数据”→“局部分析”,最后达到“完整分析”的思路,并采用Visual C++6.0编写了数据分析软件。通过对自检数据和实际测试数据的分析处理,结果表明该处理方法具有较高的稳定性,能够满足实际需求。此外,如何对大容量甚至海量数据[1]进行分析需要借助更多先进技术,例如:多线程编程[6-7]、内存映射、并行技术[7-8]、多核技术[9]、大数据技术[10]、云计算[11]等。与此同时,必须考虑软件的执行效率,尽量缩短分析时间,这些都是本文后续工作需要继续研究的内容。

[1]王桂强.海量数据分析处理方法的研究[D].上海:上海交通大学,2010.

[2]马志刚,刘文怡.航天测试系统大容量数据曲线绘制方法的研究[J].图学学报,2014,35(4):623-629.

[3]谭浩强.C语言程序设计[M].(第4版).北京:清华大学出版社,2010:331-337.

[4]陈维兴,林小茶.C++面向对象程序设计教程[M].(第3版).北京:清华大学出版社,2009:314-321.

[5]孙 鑫.VC++深入详解(修订版)[M].北京:电子工业出版社,2012:437-466.

[6]唐轶轩,吴俊敏,陈国良,等.面向多线程程序基于效用的Cache优化策略[J].计算机研究与发展,2013,50(1): 170-180.

[7]胡 杏,潘送军,胡 瑜,等.基于存储级并行的同时多线程电压紧急容错技术[J].计算机学报,2013,36(5):1065-1075.

[8]魏海涛,于俊清,余华飞,等.一种面向数据流程序的软件流水并行化方法[J].计算机学报,2011,34(5):889-898.

[9]刘虎球,赵 鹏.一种多核间内存公平调度模型[J].计算机学报,2013,36(11):2191-2199.

[10]孟小峰,慈 祥.大数据管理概念技术与挑战[J].计算机研究与发展,2013,50(1):146-169.

[11]陈 康,郑纬民.云计算:系统实例与研究现状[J].软件学报,2009,20(5):1337-1348.

Research on Processing Method of Massive Data in Space Measurement System

MA Zhi-gang1,2,LIU Wen-yi2,ZHANG Wen-dong2
(1.School of Information Science and Engineering,Shanxi Agricultural University,Taigu 030801,China;
2.Key Laboratory of Instrumentation Science&Dynamic Measurement(North University of China),Ministry of Education,Science and Technology on Electronic Test&Measurement Laboratory,Taiyuan 030051,China)

In space measurement system,massive data is always necessary to be processed.File processing method based on C,C++and MFC is introduced in this paper.Based on functions in Win32 API,data reading,data decomposing and analysis method of massive data file are presented.According to practical requirement,the data processing software is programmed in Visual C++6.0.By experimental verification and practical data testing,the processing method proposed in this paper can analyze and process massive data file effectively.The processing method has been employed in several space measurement projects successfully and obtained satisfactory analysis result,which provided the reliable basis for relational tests and experiments.

space measurement,massive data,data processing,Visual C++6.0,Application Program Interface(API)

TP391

A

1002-0640(2014)10-0074-04

2013-07-05

2013-10-15

国家自然科学基金资助项目(51275491)

马志刚(1982- ),男,山西文水人,在读博士。研究方向:航天智能测量系统数据处理、惯性感知与测控技术等。

猜你喜欢

数据文件大容量数据处理
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
基于低频功率数据处理的负荷分解方法
无人机测绘数据处理关键技术及运用
某大容量电驱系统配套同步电机电磁分析与计算
大容量同步电机低比转速离心风扇的设计与数值分析
航空用大容量锂离子电池研究
基于表空间和数据文件探讨MIS中数据库架构设计
基于MATLAB语言的物理实验数据处理探讨
大容量光伏发电关键技术及对并网的影响
基于网络环境的社区协同办公问题探讨(二)