基于组件技术的虚拟试验平台研究
2011-06-05周彦菲杜承烈刘利江
周彦菲,杜承烈,刘利江
(1.西北工业大学 计算机学院,陕西 西安 7101291;2.海军试验基地第二实验区 山东 烟台 265700)
虚拟试验技术是基于先进的建模技术、多领域协同仿真技术、信息集成与管理技术、工程设计分析技术、交互式用户界面技术和虚拟现实技术不断发展而来[1],凭借其有效性、经济性、安全性、直观性等特点而受到了广泛的采用。但是随着虚拟试验系统的日益复杂,仿真软件开发的工作量也成倍增加,总是从头开发一个虚拟试验平台的工作效率越来越低。在这样的情况下,采用支持软件复用的组件技术来构建具有开放性、通用性的虚拟试验平台,使得第三方开发的功能组件能够像搭积木一样运行在试验平台上,而实现软件的大粒度复用,对缩短开发周期、降低维护成本和提高试验可靠性具有重要意义。笔者分析了组件技术的特点,借鉴其思想搭建一个接口开放、可扩展的虚拟试验平台,并在该平台基础上实现了子母弹抛撒评估试验。该平台的搭建对今后视景仿真模拟软件的开发打下良好的基础,能够有效的实现软件的重用性,极大的缩短软件的开发周期。
1 组件技术的特点
1.1 组件的基本概念
组件技术是近年发展起来的一种优秀的软件重用技术,已在工程领域广泛使用,但由于其自身特性使得组件到目前还没有统一的定义,组件的含义可以从以下几方面来理解:
1)组件是一个分布对象。这表明组件须按统一接口规范想外界声明服务。
2)组件是完成特定功能的软件模块。这又规定了组件与一般的简单的控件的区别。从概念上讲,简单控件也可以属于组件但组件的粒度比简单空间粗,组件应由简单控件组成[2]。
3)组件是具有特定功能的、能够跨越进程的边界,实现网络、语言、应用程序、开发工具和操作系统“即插即用”的独立的对象[3]。
总结起来,可认为组件包含技术和工程两方面的因素:在技术方面,组件可以进行二进制级别上的继承和重用,它提供对功能的封装,外部通过接口来访问它的服务,使得复用组件不一定需要源代码;在工程方面,组件可被独立的生产、获得和配置,它允许被无缝地集成到第三方所开发的软件系统中,从这个角度看,使用组件最理想的方式是采用拼图的方法将已有的组件构建一个应用。
目前,随着对软件复用理解的深入,组件的概念已不再局限于源代码,而是延伸到需求、系统和软件的需求规约、系统和软件的构架、文档、测试计划、测试案例和数据等所有对开发活动有用的信息,这些信息都可以称为可复用软件的组件,其组件结构如图1所示。
图1 组件结构模型Fig.1 Model of component structure
1.2 组件方法与面向对象的关系
面向对象方法的基础是封装,实现接口与实现分离,核心是多态。通过将信息隐藏,使调用者不需要了解实现细节而且使得对一个对象内部的修改不会影响其他对象,系统的可维护性很好,易于修改;缺点是耦合度依然较高,例如对象间的交互必须了解被交互对象的标志。而且若某一对象标志改变了,显式调用该对象的其他对象都需改变。组件方法是对面向对象的软件开发方法的进一步发展,其更核心的概念是接口,主要目标是粗粒度的复用。通过引入属性和事件作为更高级的支撑,很好的解决了类之间相互依赖/消息传递问题。面向对象方法和组件方法间的关系如表1所示。
表1 面向对象和组件技术的比较Tab.1 Differences between object-oriented and component technology
2 基于组件的虚拟试验平台系统设计
2.1 虚拟试验平台的需求分析
通过深入研究现有验证系统对虚拟试验平台的需求,并结合子母弹抛撒评估试验需求,总结出平台架构需要满足参数录入、2D/3D目标场景建立以及试验模拟引擎几大模块,其中目标场景建立的2D/3D表现部分相对独立。由于目前的虚拟试验软件大多使用结构化的开发方法,系统耦合高,难以复用,导致即使用户需求的发生轻微的变化,都需要对模型进行重新开发。针对这些问题,要求搭建的平台满足以下需求:
1)可扩展性:新添加组件不依赖现有的功能组件,添加的新组件可在平台中得到动态支持,并能协同工作;
2)易用性:包含对硬件设备要求低和软件设计界面的简洁实用;
3)数据重视性:强大的数据管理功能,包括数据的精度、记录、管理及分析功能,方便用户在试验后的分析或场景重现的建立。
2.2 平台框架搭建
虚拟试验平台提供一个集成的可视化的编辑环境,使用MS3D制作模型,通过解析XML文件动态生成所需的配置界面,调用OpenGL提供的API实现可视化功能,利用网络通信组件进行分步节点间的通信,集合这些关键技术搭建一个易于扩展的平台架构,平台架构图如图2所示。
图2 虚拟试验平台结构Fig.2 Model of virture test platform
组件形式化文档采用基于XML的元数据进行描述,主要包括两大类组件信息:一方面是组件内实现环境和细节相关的信息,包括:组件名称,实现语言,可执行代码的位置,初始化参数,API,图标菜单等。另一方面是与组件间相关的信息,如组件间搭载的依赖关系,使用限制条件等。
组件管理器是平台的核心,负责管理其他所有组件的实例化和释放。组件管理器使用工厂模式实现。首先,组件管理器解析XML配置文件,通过工厂模式的统一接口为系统产生组件实例;然后组件管理器使用统一的数据结构记录所有组件的关键信息,便于对所有组件进行统一管理;最后组件管理器解析配置文件,为其他组件建立通信渠道,保证组件间的信息流畅通。
二维显示模块负责配置界面的生成,进行试验参数、模型选择和评估准则的录入。通过解析XML文件获取配置界面信息及所处位置生成界面,并将输入的参数保存在XML文件中;通过搭载三维显示窗口可在配置界面对所选模型进行三维预览。
三维显示模块负责虚拟试验的可视化显示。控制组件通过解析XML文件,在分布式环境下选择不同窗口中显示的可视化组件,同时负责试验的全局时钟推进;显示组件是场景、导弹、目标等功能组件的统称,使用OpenGL技术模拟显示;根据需求将相关的控制信息保存在XML文件中,用于场景重现和试验评估。
评估组件负责试验后对结果数据的详细分析,按照用户需求进行具体组件开发。在子母弹抛撒试验中包括以二维曲线绘制V_T、H_T图、毁伤概率、毁伤半径等。
模型库提供已使用第三方软件绘制完的模型,如飞行器、靶场目标等。使用常用的三维模型软件如3DSMax、MilkShape3D建模,可在程序中避免使用点、线、面等简单图元和一些标准椎体来构建复杂模型带来的繁琐工作,同时提高了模型的逼真度。
网络通信组件提供在分布式试验环境下各节点的数据传输。由于军工领域对实时性要求高,采用虚拟共享内存提供的高速、实时、确定性的网络,可有效地解决试验系统中数据传输的实时性问题。
2.3 接口定义
文中采用VC6.0版本进行平台开发,图3显示了平台基本组件间的关系和一些重要的接口。下面详细介绍各组件及接口的作用。
图3 组件及接口的关系Fig.3 The relationship of components and interfaces
1)DisplayElement:基本绘图组件,提供图形的绘制接口,功能组件调用或重载该Draw接口,完成具体的绘制功能。
2)Component:基本通信组件,提供两个基本接口,用于组件间消息的传递,其中Notify接口用于向上一级组件传递消息,Report接口用于向底层组件回报消息。
3)DisplayPanel:基本窗口组件,用于提供显示窗口的重绘和刷新等基本功能。
4)DisplayComponent:继承自 Component和 DisplayElement,具备消息通信能力以及图形绘制能力,添加DrawComponent接口用于指定为第几号组件提供DC。
5)DisplayPanelComponent:基本窗口组件, 继承自DisplayPanel和Component,具备消息通信能力,同时提供用于界面或图形的显示窗口。
6)EditPanel:基本界面配置组件,继承自Component和DisplayPanel,具备消息通信及界面编辑能力,用于试验参数等信息配置窗口的生成;通过DrawComponent接口获得配置组件的XML信息和工具条生成配置界面,并通过SaveProject接口将录入信息保存在指定的XML中。
7)2DDisplayComponent:基本二维图形绘制组件,继承自DisplayComponent,通过重载Draw接口,具备类似于 WORD中二维图形绘制能力,同时添加Move、Delete等功能接口。
8)3DDisplayComponent:基本三维图形绘制组件,继承自DisplayComponent,重载Draw接口来调用OpenGL提供的函数,实现三维显示功能,其中Rotate就是调用OpenGL函数的一个典型接口,它实现了对指定模型的三维旋转。
绘图组件和界面配置组件都需要加载在窗口组件上。窗口组件通过调用Draw接口,通知挂在在他之上的绘图组件,绘图组件依次调用自己的Draw方法进行绘制,并在窗口上显示,完成可视化;窗口组件通过响应菜单命令,读取相关的XML文件完成配置界面的生成。
3 子母弹抛撒在平台上的应用
使用上述虚拟试验平台接口,通过开发并加载需要的功能组件实现了某型号子母弹抛撒评估试验,完整的实现了从模型选取、参数配置到可视化仿真以及详细的试验结果评估。Q其中,子弹参数、目标形态、评价方案等配置界面可使用统一的组件,通过解析各自的XML文件获取界面信息;二维图形绘制组件完成子母弹攻击目标的生成,并将所绘图形的ID和节点按规定格式保存在目标库内;三维显示组件包括飞行场景、导弹、尾焰、爆炸、抛撒及计算组件,其中计算组件负责导弹飞行和子弹抛撒时模型的飞行引导。图4分别给出了程序运行时子母弹飞行和爆破后子弹抛撒的效果图。
图4 子母弹飞行及子弹抛撒示意图Fig.4 Schematic diagram of shrapnel flight and ejection
4 结束语
通过在将组件技术用于开发虚拟试验平台的实践证明,虽然利用组件技术在设计试验初期,需要在领域内对平台需求进行深入分析,搭建具有许多冗余接口的框架,而且在编写基本的程序组件看不到系统实现的进度,使用的精力、时间要多一些,但很多通用功能组件能在扩展中得到重用,可以大大提高软件开发效率,大幅度降低系统的开发费用;同时当一个系统需求发生变化和扩展系统时,只需修改或开发相应的组件而不改变系统的其他部分,如需要灾难事故模拟时,只需添加新的模型,修改部分控制组件即可,这些工作可以并行进行,提高时效性。结合文献[5][6]等人使用组件技术的经验,今后可以在框架基础上开发更多目标明确的组件接口,以适应更广泛的虚拟试验需求。
[1]支超有,李振水,薛峰.基于模型组件的虚拟试验系统框架研究[J].计算机测量与控制,2011,19(4):890-893.ZHI Chao-you,LI Zhen-shui,XUE Feng.Research for virtual test system framework based on software model component[J].Computer Measurement&Control,2011,19(4):890-893.
[2]邓邵芳.组件技术在软件开发中的应用研究 [D].成都:西南交通大学,2001.
[3]舒振,张耀鸿,罗雪山.基于组件的软件开发方法在C3I系统仿真中的应用研究[J].计算机应用研究,2004(10):182-184.SHU Zhen,ZHANG Yao-hong,LUO Xue-shan.Application and research of C3I system simulation using the method of software development based on component[J].Application Research of Computers,2004(10):182-184.
[4]宁伟,杜承烈.广播内存网在实时半实物仿真系统中的实现[J].测控技术,2006,25(8):76-77.NING Wei,DU Cheng-lie.Realization of real-time HLS based on broadcast memory network[J].Measurement&Control Techniques,2006,25(8):76-77.
[5]张童,刘云生,查亚兵.可组合仿真系统的概念框架研究[J].系统仿真学报,2007,19(8):1710-1712.ZHANG Tong,LIU Yun-sheng,ZHA Ya-bing.Research of concept framework for composable simulation system[J].Journal of System Simulation,2007,19(8):1710-1712.
[6]战德臣,王忠杰.一种基于组件的复杂应用系统开发过程[J].哈尔滨工业大学学报,2002,34(6):748-752.ZHAN De-chen,WANG Zhong-jie.Development process for component-based complex application system[J].Journal of Harbin Institute of Technology,2002,34(6):748-752.