导引头通用数据解析记录软件模块设计

2017-06-26 12:50谢晓方刘青松袁琨曹建
计算机与数字工程 2017年6期
关键词:主程序导引头解析

谢晓方刘青松袁琨曹建

(1.海军航空工程学院兵器科学与技术系烟台264001)(2.91395部队北京100000)

导引头通用数据解析记录软件模块设计

谢晓方1刘青松1袁琨2曹建1

(1.海军航空工程学院兵器科学与技术系烟台264001)(2.91395部队北京100000)

在通过仿真测试床对导引头进行性能评估的过程中,需要对导引头的输出结果进行记录和解析,由于不同导引头的输出方式多样,没有统一的通讯协议,导致数据解析需要不断修改解析程序。部分导引头研制方因为保密问题不愿提供技术细节,也会给数据解析带来麻烦。针对这一问题,论文设计了通用的数据解析记录软件。定义了数据解析接口类,具体由导引头研制方实现并提供dll,解析结果通过回调函数返回主程序。该方法能够解决各类导引头的数据解析问题,并且评估方不需要知道协议细节,解决了技术保密问题。

通用数据解析;回调函数;导引头

Class NumberTP311

1 引言

在进行导引头的性能评估过程中,需要对导引头的输出结果进行记录和解析。由于不同导引头的输出方式多样,没有统一的通讯协议,且部分导引头研制方不愿提供详细的技术细节。这些问题都会给导引头性能评估中的数据解析带来麻烦。为了解决上述问题,需要合理设计数据解析记录软件。

文献[1~5]提出,可以通过XML文件作为通讯协议配置文件,从而实现数据的通用解析,但是部分研究方并不愿意透露通讯协议等技术细节,因此不能使用XML配置文件进行配置。文献[6~10]提出可以设计通用的协议,并设计协议转换模块来进行协议转换,利用这种方式可以完成数据的映射和解析。这种方法是在已知某几类协议的基础上,总结协议特点,设计通用协议。这种通用协议的通用性较为有限。为了解决导引头数据解析和记录问题,应该降低数据解析部分和数据存储处理部分的耦合程度。本文采用方法是,定义数据解析基类,研究方人员给出具体的子类实现,并提供dll文件。在数据解析过程中,解析出的数据结果通过回调函数传送给主程序。

2 总体设计

2.1 记录解析总体流程

导引头测试结果的记录和解析通常分为两种方法,一种是实时解析并记录,一种是先存储,后解析。第一种方法需要保证每帧数据的解析时间和存储时间要小于数据传递中两帧的时间间隔。为了防止数据解析和数据存储时间影响仿真速度,出现丢帧现象,本文采用先存储,后解析的方式进行数据的记录与解析。先记录原始帧数据,并存储到数据库当中。数据流图如图1所示。

图1 原始数据存储数据流图

在仿真试验结束之后,将数据库中存储的数据进行解析,并将结果存储到数据库中。具体的数据流图如图2所示。

图2 数据解析数据流图

2.2 数据解析流程

为了降低数据解析模块和数据存储模块之间的耦合性,屏蔽数据解析的细节,在实际应用中,定义好数据解析的虚基类,给出一系列方法,并规定需要解析返回的数据类型,导引头研制方给出该虚基类的具体实现,并通过dll的形式给出代码文件。在实际的数据解析过程中,一旦解析出数据结果,则通过回调函数传送给数据存储主程序,并在回调函数中进行相关的处理。具体的数据存储主程序的流程图如图3所示。

dll中的解析类由研制方提供,其中的解析函数的数据解析流程图如图4所示。

在数据解析的过程中,不同导引头解析的数据不同,返回的数据类型也不一样,为了能够让解析程序给出一致的数据解析结果,需要对数据解析的返回结果进行定义,并通过回调函数来传递数据记录结果,具体的返回类型通过回调函数的参数来确定。并把相应的结果记录在数据库中。

图3 数据解析主程序流程图

图4 数据解析流程图

3 数据解析类设计

为了使主程序能够直接调用dll中的解析函数,需要进行数据解析类的基类设计。这里给出解析类的虚基类代码如下:

其中,GetOriginData(unsigned char str)用于获取原始帧数据。SetCallBack(PFCALLBACK gCall-Back)函数用于设置回调函数,其中PFCALLBACK为回调函数的函数指针。DataAnalyse()用于进行数据解析,这是数据解析类的核心函数,其中在函数中,如果解析出了数据结果,就调用回调函数,向数据解析主程序传递解析数据。在编写数据解析dll的时候,首先继承CAnalyserBase基类,并实现其子类CAnalyser。具体的类图如图5所示。

图5 数据解析类

在编写dll时,需要导出函数,供主程序调用,这里通过导出CreateObject()函数,用于主程序创建实例对象。具体的函数声明为

extern“C”DLL_API bool CreateObject(void**pObj);

4 回调函数设计

回调函数用于接收dll中函数中解析出来的结果,并在函数体中进行相关的数据处理和存储操作。由于不同类型导引头的输出结果并不一样,为了能够进行统一的性能评估,需要对解析后返回结果的类型和数据结构进行定义。即通过规定解析类返回内容来达到数据记录标准化的作用,进而用于后续的导引头和目标检测跟踪算法的性能评估。

4.1 返回数据设计

在具体的工程应用中,可以根据性能评估需求来确定需要解析记录的数据结果。因为性能评估问题涉及到相关专业领域[11],这里仅给出部分的数据定义举例,结果如表1所示。

表1 需要解析的返回结果

在具体的解析过程中,解析数据出现顺序和次数未知。可能某类数据多次出现,例如检测出目标的位置坐标,也有可能只出现一次,例如目标检测标志等。所以在进行数据记录的时候,解析出一个数据结果,就调用一次回调函数。

在具体的数据解析过程中,不同导引头的输出结果中可能没有表1中所示的部分数据,相应也不会解析出对应数据结果。这里,表1中定义的数据数量很多,可以覆盖各类导引头的各类返回参数,针对某一型号的数据解析dll并不需要完成所有数据的解析,只要完成自身能够解析出的数据即可。

4.2 回调函数具体定义

具体的回调函数定义如下:

typedef int(WINAPI*PFCALLBACK)

(Datatype type,void*pdata,int data_num)

其中Datatype为枚举类型变量,其具体的定义如下:

enum datatype{detect_symbol,target_x,target_y,angle_x,angle_y,status_index,frame_num,…}

Datatype的作用在于标记解析出数据的类型。pdata为空指针,指向解析出的数据,在回调函数中需要根据Datatype的类型进行指针的强制转换,从而实现通过pdata传递各种类型的数据。data_num变量的作用在于记录解析出数据的序号,通过序号可以表示出相关数据出现的先后顺序,便于之后的处理和评估。

5 数据库设计

在存储数据的过程中,需要将数据按照类型分开进行存储。首先是原始数据的记录,其次是解析后结果的记录。对于原始数据,只需要记录数据帧的内容即可,并通过编号标识数据帧的先后顺序。对于解析之后的数据,需要存储到对应的数据表中,一张数据表对应着一类解析数据,具体的E-R图如图6所示。

图6 数据库结构E-R图

其中data_num为dll中数据解析类解析出数据结果的顺序编号,是数据结果的顺序标识,在后续的性能评估过程中,可以利用data_num来进行数据的顺序判断,从而判断解析数据之间逻辑关系。

6 解析流程

在利用仿真试验床进行完导引头的仿真试验后,就需要对记录的原始帧数据进行解析。在具体的编程实现过程中,首先显示加载dll,并获取函数CreateObject的地址,并创建Analyser对象实例。具体代码如下

typedef bool(*CreateObject)(void*pObj);//定义dll导出函数的函数指针类型

CreateObject CreateObj=NULL;

HINSTANCE handle;

CAnalyseBase*pObj=NULL;

//创建CAnalyseBase对象指针。

handle=::LoadLibrary(_T(“data_analyse.dll”));

if(handle==NULL)

FreeLibrary(handle);

CreateObj=(CreateObject)GetProcAddress(m_handle,”CreateObject”);

//创建解析类对象

(*CreateObj)((void**)&pObj);

在进行具体的解析时,首先设置回调函数,从数据库中读取数据,然后逐帧进行解析,当解析出数据结果后,就通过回调函数把数据类型,结果和结果序号传递给主程序。其中关键代码如下所示:

pObj->SetCallBack(DataCollector);

for(int i=1;i<=num;i++)//遍历原始数据数据库中的数据字段

{//从数据库中获取数据

。。。

//向dll中传送数据

pObj->GetOriginData(origindata);

//进行数据解析

PObj->DataAnalyse();

7 结语

该方法能够针对各类导引头进行数据的记录和解析,并且通过解析接口类的设计使得主程序能够保持不变,通过更换dll即可实现解析方式的转变。通过dll文件的使用有效地保护了研制方的技术细节,使得该方法具有工程可行性。通过解析数据返回类型和回调函数的定义,使得数据存储能够做到标准化,方便了后续的性能评估。目前,该数据记录解析方法已经成功应用于制导炸弹导引头性能评估实验室的建设中,并取得较好的效果。

[1]刘喆,郇极,刘艳强.基于XML的EtherCAT工业以太网协议解析技术[J].北京航空航天大学学报,2011,37(9):1086-1090.

LIU Zhe,HUAN Ji,LIU Yanqiang.Parser of industrial Ethernet EtherCAT based on XML[J].Journal of Beijing University of Aeronautics and Astronautics,2011,37(9):1086-1090.

[2]曾根,吕建国,胡建军,等.基于XML配置解析的车辆电子FlexRay总线通信技术的研究[J].车辆与动力技术,2015,11(1):47-54.

ZENG Gen,LV Jianguo,HU Jianjun,et al.Research on FlexRay Communication Technology in Vehicle Electronic System Based on XML File Parsing[J].Vehicle&Power Technology,2015,11(1):47-54.

[3]王凤连.一种可配置的协议解析器分析[J].无线互联科技,2016,7(14):78-80.

WANG Fenglian.Analysis of a configurable Protocol parser[J].Wireless Internet Technology,2016,7(14):78-80.

[4]张娜,焦东来,吴子杰,等.基于XML远程数据传输协议的研究与应用[J].计算机技术与发展,2016,26(5):12-16.

ZHANG Na,JIAO Donglai,WU Zijie,et al.Research and Implementation of Remote Data Transmission Based on XML Protocol[J].Comuputer Technology and Development,2016,26(5):12-16.

[5]桑静,王宜怀.基于XML文件组织的嵌入式监控组态软件设计[J].计算机系统应用,2013,22(1):134-137,156.

SANG Jing,WANG Yihuai.Design of Embedded Control Configuration Software Based on XML File Organization[J].Application of computer system,2013,22(1):134-137,156.

[6]贾欢欢,王纯.一种业务无关的通用协议[J].计算机系统应用,2011,20(2):173-177.

JIA Huanhuan,WANG Chun.Service-Unrelated Communication Protocol[J].Application of computer system,2011,20(2):173-177.

[7]项菲,林山.一种新型通用串口通讯协议分析器的设计[J].科学技术与工程,2013,13(7):1992-1995.

XIANG Fei,LIN Shan.Design of a new type of universal serial communication protocol analyzer[J].Science Technology and Engineering,2013,13(7):1992-1995.

[8]叶水生,赵亮.基于通用协议字典的数据封装与发送研究[J].信息通讯,2014,12(4):9-11.

YE Shuisheng,ZHAO Liang.Research on data encapsulation and send Based on general protocol dictionary[J].Information&Communications,2014,12(4):9-11.

[9]高国辉.基于通用协议转换接口的企业服务总线技术[J].信息技术,2013,4(12):154-157.

GAO Guohui.Enterprise Service Bus Technology Based on Common Protocol Transform Interface[J].Information Technology,2013,4(12):154-157.

[10]梅勤勇,朱行,陈巍.基于VC++的通用串口控制软件平台的设计[J].信息与电脑,2012,10(1):61-62.

MEI Qinyong,ZHU Xing,CHEN Wei.Design of Universal Serial Port Control Software Platform Based on VC++[J].China Computer&Communication,2012,10(1):61-62.

[11]张晓哲,李云霞,马丽华,等.红外成像导引头性能评估系统的分析与设计[J].红外技术,2008,30(3):136-138,149.

ZHANG Xiaozhe,LI Yunxia,MA Lihua,et al.Analysis and Design of IR Seeker Capability Evaluation System[J].Infrared Technology,2008,30(3):136-138,149.

Design of General Software Module of Data Parsing and Recording for Seeker

XIE Xiaofang1LIU Qingsong1YUAN Kun2CAO Jian1
(1.Department of Ordnance Science and Technology,Naval Aeronautical and Astronautical University,Yantai264001)(2.No.91395 Troops of PLA,Beijing100000)

In the process of performance evaluation of the seeker through simulation test bed,it is necessary to record and analyze the output result of the seeker.Due to the different output models and communication protocols of the seeker,the analytical procedures need to be constantly modified.Because of confidentiality issues,some of the seeker developers don't want to provide technical details,which will also bring trouble to the data analysis.Aiming at this problem,this paper designs a general data record analysis software.Defines the data analysis interface class,which is realized by the seeker developer and provided by the DLL,and the result is returned to the main program through the callback function.This method can solve the data analysis problem of many kinds of seeker,and the evaluator does not need to know the details of the protocol,which solves the problem of technical secrecy.

data analysis,callback function,seeker

TP311

10.3969/j.issn.1672-9722.2017.06.043

2016年12月7日,

2017年1月25日

谢晓方,男,教授,博士生导师,研究方向:武器系统与运用。刘青松,男,硕士研究生,研究方向:软件工程。袁琨,女,研究方向:软件工程,无线电。曹建,男,讲师,研究方向:虚拟现实、计算机视觉。

猜你喜欢
主程序导引头解析
自动升级程序在船舶监测系统中的应用
三角函数解析式中ω的几种求法
浅谈数控铣削技术代码程序的嵌套方式研究
电控冰箱软件模块化设计
睡梦解析仪
电竞初解析
时光倒流 换回PotPlayer老图标
对称巧用解析妙解
全极化雷达导引头抗干扰技术
半捷联雷达导引头视线角速度提取