童艳;朱丹
【摘 要】测控数据实时监测软件是测控系统中的关键分系统之一,承担着大量测控信息的实时监视任务,由于其监测的数据具有信息量大、发送频率高、种类多样等特点,如何提升软件的性能和效率,成为了测控软件领域的一项重要课题;为实现该软件信息监测功能实时、全面、可靠,从软硬件平台、软件架构和算法设计等方面开展研究;采用多线程设计实现大量并行数据的接收,利用面向对象程序设计方法使数据处理层和展现层分离,对有曲线显示需求的数据存储方法进行了算法优化,从而实现软件的全面效能提升设计;设计的软件经实际环境测试,设计方法能够有效提升软件的效能,保证了测控数据监测功能的实时性和可靠性,增强了测控数据实时监测软件的数据承载能力;同时该方法设计的软件具有较好的可扩展性和可维护性. 【期刊名称】《计算机测量与控制》 【年(卷),期】2017(025)001 【总页数】4页(P101-104)
【关键词】高效能;测控;实时监测;面向对象;算法优化 【作 者】童艳;朱丹
【作者单位】中国人民解放军91550部队,辽宁大连 116023;中国人民解放军91550部队,辽宁大连 116023 【正文语种】中 文 【中图分类】TP311
测控数据实时监测软件是测控任务中用于实时监视测控数据信息必不可少的应用软件之一,在测控数据实时处理系统中,是为测控任务指挥人员提供目标实时飞行信息以及测控系统运行情况的窗口[1],是测控指挥员的眼睛。由于测控目标通常具有飞行速度快、测控信息量大、安全控制标准极高等特点[2],对其测控数据实时监测软件的实时性和可靠性要求会随之提高。因此,在测控数据监测软件的研制过程中,需要考虑测控数据信息量大、频率高、种类复杂等特点,采取必要的手段最大限度的提高软件效能。
软件效能是指软件在一定条件下实现特定功能的能力和运行效率。影响软件效能的因素有很多,有确定的和不确定的。本文立足于分析影响软件效能的确定性因素,分析其对软件效能的影响,力求在软件设计研究中,实现软件的高效能。 1.1 软件运行的软硬件平台 1.1.1 硬件平台
现如今计算机硬件设备发展迅猛,作为计算机硬件核心的CPU,已经从单核发展为双核,甚至多核,使得计算机的并行处理速度显著提升,内存配置也普遍达到4-16GB。因此,无论是计算机内存容量还是处理器速度都不能成为软件发展的瓶颈。
1.1.2 软件平台
桌面操作系统主要分为两大类,分别为类Unix操作系统和Windows操作系统。 其中,Windows操作系统以其在桌面操作方式和界面程序开发上占有绝对优势,成为目前最流行的系统,具有丰富的开发平台供选择。 1.2 软件结构
在收集到软件需求之后,软件架构工作就开始了。如果把软件开发比喻成盖房子,那么软件的架构就是打地基和搭建框架,由此可以看出软件结构设计的重要性。一个好的软件架构师在软件开始研发时,能够为日后软件的效能提升奠定坚实的基础。
软件架构需要把系统作横向和纵向的板块划分。板块划分的好处是任意板块的变化可以局限在这一板块,不会影响到其它板块的设计。另外,板块划分可以使复杂的软件功能和数据处理流程变得清晰而具有条理性。
值得一提的是,软件架构的目标是:可靠性、安全性、可扩展性、可定制化、可维护性等。因此,这也是软件架构时需要把握的原则。 1.3 软件所采用的算法效率
作为软件开发人员,我们都知道,同样的功能可以通过不同种算法来实现。而不同的算法其运行效率是不一样的。不得不承认有时一个优秀的算法能够比普通算法提高软件运行效率数十倍甚至上百倍。
然而,好的算法固然重要,但一味的从理论角度去研究提高算法效率,而不考虑实际应用环境是不科学的,事实上,算法适用才是最重要的。换言之,软件所采用的算法与其应用的环境匹配度越高,软件的运行效能才能达到最优。因此,采用什么算法,是要通过对软件应用环境的透彻分析来决定的。例如,有时时间效率和空间效率在算法实现上会有对立,这时候就要根据实际需求做出合理的折中。 1.4 程序代码的优化及其它
众所周知,通过优化程序代码可以节省更多存储空间和运行时间。好的编程习惯也可以提升软件运行效率。随着测控任务执行密度和并发度的不断加深,测控软件准备实施的高效率能力也面临考验[3]。因此,对测控软件功能的模块化设计和组件提取技术近年来得到发展[4-5],不但提升了软件的开发效率,其模块化封装也有利于软件的可靠性和稳定性。
结合测控数据实时监测软件的应用需求,通过对以上影响软件运行效率四大因素的分析,主要从以下几个方面提升测控数据实时监测软件的效能。 2.1 软硬件平台的选择
为满足实时处理能力,硬件平台选择酷睿3.6 GHz双核CPU,4 GB内存。
为满足测控信息多样化显示需求,软件平台选择Windows 2007操作系统,编程环境基于VC++集成MapInfo地理信息管理系统,有利于实现包括电子地图背景下测控目标轨迹的测控信息监测界面,全方位多角度展现测控目标轨迹、参数以及测控设备的测量信息,供测控技术人员和指挥人员了解测控系统运行情况和作出重要决策。 2.2 软件架构
2.2.1 按照信息源设计多线程处理程序
测控信息监测软件的信息源通常包括光测、雷测、GPS/BD等外测设备测量数据、遥测设备测量数据、发射舰轨迹信息、实时数据处理节点的中间结果信息以及配合测控的其它指挥控制中心的交换信息。这些信息同时以1 Hz-20 Hz的不同频率通过组播方式被转发到数据处理中心的主干网上,它们属于不同的组播地址,测控数据监测软件从主干网上接收这些信息,通过信息校验及解析,最终需要把所有信息以地图、表格、曲线、示意图等形式直观的显示出来。作为测控指挥决策依据,显示的数据必须全面,不能有漏点。因此,对其可靠性和实时性要求较高。 由于信息源发送信息的并行性,设计多线程处理程序,提升软件的运行效率[6]。设计每个线程对应一个信息源接收,从而保证数据接收的实时性。多线程数据接收模型如图1所示。
2.2.2 采用面向对象的数据处理方法
由于数据种类繁多,对接收的数据需要分类存储和显示。为保证实时性,采用数据处理层和展现层分离的方式,设计数据接收类和数据显示类,如图2所示,它们之间用消息和共享内存达到同步通信的目的[7]。为了防止内存使用冲突,采用同步读写锁的方式共享内存数据。
其中,数据接收类按照不同数据帧格式解析数据并存储,供数据接收线程调用。数据显示类是基于多文档应用程序创建的多个窗口显示类,属于主线程类。由于数据
接收类和数据显示类属于不同线程,如此可以充分发挥计算机并行处理能力,大大提高软件数据处理与显示的效率。 2.2.3 实时测控数据监测算法优化设计
由于接收数据的频率为1~20 Hz,而显示频率需求为4 Hz,因此,在主线程设置定时器以控制窗口刷新频率为4 Hz。同时根据组播组数由主线程创建多个数据接收线程。每个数据接收线程在完成网络初始化工作后开始等待网上数据信息。当收到网上数据时,调用数据接收类,对信息进行分类解析。对需要以表格、示意图等方式显示的信息直接存储到相应的共享内存数据结构中。而对于需要以曲线显示的数据,由于接收频率(20 Hz)大于显示刷新频率(4 Hz),需要将其以20 Hz的频率积累存储,以4 Hz频率刷新显示。考虑到数据量大,存储频率高,将其交由较为空闲的数据显示类处理,通过消息驱动数据显示类存储曲线数据。数据显示类的消息响应函数调用其对应的文档结构类,采用MFC类库提供的CObArray类动态存储数据,供数据显示类在收到定时器发送的窗口刷新消息时作为曲线数据源使用。其算法流程如图3所示。
主要实现过程如下:在VC++ 环境下创建工程Project,建立多文档应用程序。在CProjectApp::InitInstance()函数中创建线程如图1,并用如下语句设置定时器: SetTimer(hSJWnd,1,250,NULL);
其中hSJWnd为定时器响应窗口句柄。该窗口中的定时器响应函数为void CSJView::OnTimer(UINT nIDEvent),在该函数中向各窗口发送窗口刷新消息如下:
SendMessageTimeout(hXXXWnd,WM_XXX,0,0,SMTO_ABORTIFHUNG,100,NULL);
hXXXWnd为各窗口句柄,WM_XXX为消息。 线程响应函数设计如下:
UINT ReceiveXSD ata_JDXX(LPVOID lpParam) {
// 声明局部变量 // 初始化客户端 // 初始化服务器端 // ……
//加入组地址//
WSAJoinLeaf(m_socks,(SOCKADDR*)&m_sevaddr,sizeof(m_sevaddr),NULL,NULL,NULL,NULL,JL_RECEIVER_ONLY) // 初始化网络事件 // ……
// 接收网络数据信息 // while(1)
{// 等待网上信息 // Index =
WSAWaitForMultipleEvents(2,EventArray,FALSE,WSA_INFINITE,FALSE); WSAEnumNetworkEvents(m_socks,EventArray[Index - WSA_WAIT_EVENT_0],&NetworkEvents); ……
if(NetworkEvents.lNetworkEvents & FD_READ) { ……
re=recvfrom(m_socks,pBuff,MAXBUFFSIZE_JD,0,(LPSOCKADDR)&m_from,&clilen);
pBuffer=&pBuff[0];
PackOK=bufferpool.DispartPack(pBuffer);//调用解包类函数
…… } } }
各窗口中的曲线类数据存储过程如下(以脉冲雷达测量数据为例): void CMCView::OnMC(WPARAM wParam)//积累存储消息响应函数 { CXXXDoc* pDoc =(CXXXDoc*)GetDocument(); pDoc->AddXXXLine(j,m_t[j],cl.mc[j].R*0.001,cl.mc[j].A,cl.mc[j].E,cl.mc[j].VR,zt); …… }
其中,AddXXXLine为CXXXDoc类中设计的数据存储函数,除此函数之外还设计了GetXXXLine、GetTotalXXXLine等函数对CObArray对象进行读写操作,便于完成数据存储和显示。 2.2.4 软件基类模型设计
虽然测控软件接收的数据种类繁多,但按照其数据种类可以划分为:测量设备数据、轨迹坐标数据、遥测参数、中心交换数据等。按照这些数据的不同显示需求,利用C++语言提供的继承机制,设计不同的显示基类,包括:曲线显示基类、表格显示基类、曲线表格显示基类、电子地图显示基类,这样做有利于提高软件开发效率,保证系统稳定性[8]。同时采用配置文件管理方式,灵活配置设备数量、目标数量、遥测参数等。这样做不但能提高软件维护效率,还有利于提高软件复用能力,为不同型号目标的测控数据实时监测软件开发提供技术支持。
在实际测控系统中搭建测试环境,测试数据配置情况如表1所示。以25路原始测量数据、7路节点数据、2路中心交换信息进行测试,基于UDP/IP以组播方式发
送,数据发送频率为1~20 Hz。软件测试结果表明,软件能够正确接收测控信息并显示,对各种数据窗口和分页面进行切换测试,反应时间均小于1秒。软件运行前后计算机性能比较见表2。在软件运行时CPU占用率最大为15%,内存占用最大为1.06 GB,远小于软件性能需求中对资源占用率<70%的要求。
图4为实际测试时截取的曲线类数据显示画面之一的发射系目标轨迹图,通过画线和画点两种方式结合显示轨迹数据,画线方式的好处是当数据出现跳点时能够清晰显示数据变化情况。以画点方式显示接收数据点,可以清晰记录数据有无漏点情况。如图可见显示数据为20点/秒,与目标轨迹数据的发送频率20 Hz相符,漏点率为0。
本文从软件架构和算法优化入手,力争最大限度的发挥软硬件性能,旨在提高测控数据实时监测软件的效能。实际测试结果表明,采用的软件效能提升设计方法,能够保证软件很好的完成在多种信息源、高频大数据环境下的接收与显示功能,有效提升了软件效能,保证测控数据监测软件的实时性和可靠性。同时,其独立的模块化设计算法,使软件具有很好的可扩展性和可维护性。
【相关文献】
[1] 蒋充剑,夏绍志,等. 靶场试验指挥控制中心系统及其应用[J]. 舰船电子工程,2009, 29(2): 43-46.
[2] 沈佩珺,赵祯俊,安敬蕊,等. 无人机地面测控软件[J]. 兵工自动化,2014, 33(1): 91-94. [3] 骆 芳,刘旺开,付兴旺,等. 组件技术在计算机测控系统中的应用[J]. 测控技术,2006, 25(4): 84-86.
[4] 李晓伟,徐冰霖,郭 巍,等. 设计模式探析及其在测控软件中的应用[J]. 飞行器测控学报,2012, 3: 21-26.
[5] 朱 伟,许春雷,孔 军,等. 基于功能部件的指挥控制系统软件设计[J]. 指挥控制与仿真,2010, 32(6): 98-100.
[6] 杨 坤. 多线程软件执行效率与改进方法研究[J]. 计算机与网络,2011, 11: 38-40.
[7] 吴成富,欧 峰,陈怀民,等. 基于组播技术的共享内存网络设计与实现[J]. 测控技术,2009,
28(10): 55-58.
[8] 陈 骁,孙 军,刘志芳,等. 测控应用软件系统资源复用研究[J]. 计算机科学,2013(6):392-394.
因篇幅问题不能全部显示,请点此查看更多更全内容