基于CCM构件的HLA仿真开发研究
2009-04-12张剑
张剑
中国舰船研究设计中心,湖北武汉430064
基于CCM构件的HLA仿真开发研究
张剑
中国舰船研究设计中心,湖北武汉430064
HLA仿真作为新一代分布仿真体系结构,对仿真界产生了深刻影响。但是由于HLA与其它中间件技术没有建立广泛的联系,使得HLA的可重用性仅仅局限在HLA范围内,同时HLA的开发也具有很大的复杂性。在深入研究HLA仿真框架的基础上,提出了一种基于CORBA构件模型(CCM)构件的HLA仿真开发方法,该方法利用CCM构件技术来实现各联邦成员的具体功能。该方法提高了软件重用率和仿真开发效率,并优化了HLA仿真系统的软件层次结构。验证中该方法成功运用于舰船作战系统联邦的指控系统联邦成员仿真。结果表明该方法确实可行。
HLA;CORBA构件模型;软件复用;构件包
1 引言
HLA作为仿真领域的一种中间件技术,通过提供通用的、相对独立的支撑服务系统,将应用层同底层支撑环境分离,即将具体的仿真功能实现、仿真运行管理、底层通信三者分开,目的是提高仿真组件的可重用性和互操作性。从HLA规范的提出到现在,HLA与其他领域一些类似的中间件技术 (如CORBA,EJB等)一直没有建立广泛的联系,使得现有仿真组件的可重用性仅仅局限于HLA的范围内。而且,HLA是从横向的角度在联邦成员的基础上进行仿真集成,并不考虑仿真成员是如何设计与实现的。因此,其他分布式仿真技术要过渡到HLA,尽管系统的实际仿真行为并没有多大的改变,但为了要将仿真移植到RTI支撑环境上,联邦成员要重新开发,仿真组件代码需要重新编写。这些都严重阻碍了HLA的进一步发展,仿真领域迫切需要一种先进的软件工程技术来解决这些问题。
近几年来,相关人员在构件技术应用于HLA仿真方面进行了大量研究。文献[1]探讨了利用CCM开发符合HLA1516标准的仿真功能的方法。文献[2]研究了CBD方法在HLA开发的应用,提出了基于HLA的仿真构件模型及其实现思路,阐明了实现的关键环节和方法。文献[3]~[5]应用MDA的设计思想,对于HLA的模型设计,提出了一个基于CCM构件的仿真模型(SCM)。文献[6]通过对比CCM和HLA,提出了一种基于构件的HLA开发模式。该模式借用了CCM的大量思想和概念。
本文在深入研究HLA仿真框架的基础上,结合CCM商用技术,提出了一种基于CCM构件的HLA仿真开发方法。该方法利用CCM构件技术来实现联邦成员的具体功能。本文不仅介绍了该方法的主题思想和程序框架,还作为重点详细论述了其运行步骤。通过将该方法成功地运用于舰船作战系统联邦的指控系统联邦成员仿真,表明该方法确实可行。
2 基于HLA规范的仿真
2.1 HLA仿真基本思想
HLA主要考虑在联邦成员的基础上如何进行联邦集成[7,8],即如何设计联邦成员间的交互以达到仿真的目的。其基本思想就是采用面向对象的方法设计、开发和实现仿真系统的对象模型,以获得仿真联邦的高层次的互操作和重用。在HLA中,互操作定义为一个成员能向其他成员提供服务和接收其他成员的服务。HLA定义了实现联邦成员互操作的体系结构和机制。除了方便成员之间的互操作外,HLA还向联邦成员提供灵活的仿真框架。在HLA框架下,一个典型的仿真联邦的逻辑结构如图1所示。
图1 HLA仿真的逻辑结构
2.2 运行支撑环境RTI
RTI是一个按照HLA接口规范开发的软件系统,它为仿真应用提供通用的、相对独立的支撑服务。其主要作用有:
1)具体实现了HLA接口规范。HLA接口规范用文字定义了各种标准服务和接口,而RTI则用程序设计语言将这些标准服务和接口转换成了标准的RTI API函数。
2)为仿真应用提供了仿真运行管理功能,使开发人员只需集中精力实现具体的仿真功能。
3)提供了底层通信传输服务,屏蔽了网络通信程序实现的复杂性,使开发人员可以很容易地实现数据的发送和接收。
4)是仿真功能与仿真运行管理、底层通信传输三者分离的基础。它使仿真系统具有较好的扩充性,各个组成部分的编程实现可以相对独立地进行,很适合于团队开发。
2.3 联邦成员的运行流程
对于每一个联邦成员,其运行流程主要包括以下环节:初始化联邦运行数据、创建并加入联邦、注册RTI对象实例、声明订阅/发布关系、确定时间推进策略、数据处理循环、退出联邦。数据处理循环是联邦成员的核心环节,也是各个联邦成员区别于彼此的主要环节。在该环节中,联邦成员接收自己感兴趣的数据,按照特定的规则或者算法进行处理,处理完毕后向网络发布。
3 基于CCM构件的软件开发
3.1CCM构件简介
CCM鼓励通过组合而不是继承来重用软件[9,10]。CCM构件提供了称为端口的多种外部接口,以便与客户、其他构件、CORBA服务等进行交互。CCM构件支持5种基本的端口:刻面/插座、事件源/事件槽和属性。5种端口的表示方法如图2所示。
图2 CCM构件的端口示意图
1)刻面:刻面的主要功能是用来向其它构件提供接口。另外,它还是CCM构件提供的与客户交互的相互独立的一组接口。刻面的实现被封装在构件中,对客户不透明。
2)插口。插口的主要功能是用来获得其它构件的接口。另外,它还是一些指定的连接点。通过使用插口,构件能够与其他对象进行连接,并调用这些对象的操作。
3)事件源。事件源的主要功能是发布特定的事件。它是指定发送特定类型事件的连接点。事件源分为Emitter和Publisher两类。Emitter规定在某个时间只允许一个接收者与之连接,Publisher允许同时有多个接收者与之连接。
4)事件槽。事件槽的主要目的是接收特定的事件。它是指定接收特定类型事件的连接点。事件槽允许有多个事件源与之相连。
5)属性。属性主要用于构件的配置,配置工具使用属性对构件的配置参数进行预先的设置。
3.2 基于CCM构件的软件开发步骤
基于CCM构件的应用程序,其整个开发过程包括以下5个步骤:
1)构件设计。根据系统需要设计构件,定义构件和其实现信息。
2)构件实现。实现构件中具体的业务逻辑,并编译生成相应的构件二进制文件。
3)构件打包。把构件实现者实现的二进制文件以及构件描述信息打包成为单个构件包。
4)构件组装[11,12]。根据具体的功能需要把多个构件包组装成一个构件集。构件集包含有多个构件包以及XML形式的构件集描述文件。图3为构件组装的效果示意图。
图3 构件组装效果示意图
5)构件部署。部署者根据构件集描述文件把构件集(或构件)安装在指定的网络节点上,激活构件实例并连接构件。
以上5个步骤中,构件打包和构件组装可以使用可视化的工具来完成。
4 基于CCM构件的HLA仿真开发
4.1 基于CCM的HLA仿真开发的主体思想
基于CCM构件的HLA开发的主体思想是,将联邦成员代码的核心部分——数据处理循环中的数据处理规则或者算法利用CCM构件的形式进行实现。其框架如图4所示。
联邦中各个联邦成员的对外表现即对外接口主要是订阅数据和发布数据,其内部主要是进行自身承担的数据处理。具体实现的描述如下:
图4 基于CCM构件的HLA程序框架
1)对于订阅数据和发布数据,联邦成员只需调用RTI接口模块的API函数,具体的数据传输由运行支撑环境RTI完成。
2)对于数据处理,通过CCM构件集完成。联邦成员在其主程序中,利用构建集提供的接口向构件集发送数据处理请求。构件集收到数据处理请求后,进行相应的处理,然后把处理结果返回给主程序。此时,联邦成员的运行模式就是通常的客户机/服务器(C/S)模式。主程序充当客户机,构件集充当服务器。
基于CCM构件的HLA程序框架的主体部分就是各个联邦成员的数据处理构件集。构件集由多个构件,按照如图3所示的方式组装而成。
4.2 基于CCM的HLA仿真开发的运行步骤
实验中采用的相关软件为:CCM:ACE-5.5+TAO-1.5+CIAO-0.5;RTI:RTI-1_3NGv3_2;VC7.1
基于CCM的HLA仿真开发的运行步骤大致分为开启ORB命名服务,开启rtiexec服务,构件部署,运行联邦成员主程序。
4.2.1 开启ORB命名服务
在CCM中,为了便于分布式开发,可以为每个构件定义一个有意义的别名。任何应用程序,即使和构件不在一个主机上,只需要知道这个别名,即可获取相应构件的信息,从而创建构件实例,调用其提供的服务。这是通过CORBA规范提供的命名服务来实现的。命名服务提供从名字到对象引用的映射。CCM中的别名定义在构件配置文件中进行,构件配置文件中可以为构件包中的每个构件定义一个别名,具体是在属性RegisterNaming中进行设置,图5的代码即为某构件定义了一个别名“ADD”。
当开启命名服务后,主程序可以通过这个别名来访问该构件。命名服务的开启主要是调用CORBA规范的Naming_service服务,可以通过命令行方式进行。具体格式如下:
naming_service-ORBEndPoint iiop://<version>@<ipAddr:ipPort>[-m(1=enable multicast responses,0=disable(default)]
其中,version表示IIOP协议的版本;ipAddr和ipPort分别表示监听请求的主机IP地址和端口号。-m表示是否使用多播方式。1表示使用,0表示不使用,默认情况下为0。一般都在开启命名服务的主机上监听请求,因此主机IP选为本机IP。而为了进行分布式开发,必须使用多波方式。因此,开启命名服务的命令行一般写成:
naming_service -ORBEndPointiiop://1.2@localhost:1234-m 1
图5 构件配置文件中的命名服务代码
4.2.2 开启rtiexec服务
HLA运行时,需要首先开启rtiexec服务。rtiexec是一个全局进程,主要功能是管理联邦的创建、结束。每个联邦成员通过与rtiexec的通信进行初始化,加入到相应的联邦中。rtiexec实际上是一个运行程序。如果不引入CCM构件,即不同时运行ORB命名服务,那么直接运行rtiexec服务即可,不需要添加任何参数。如果同时运行ORB命名服务,那么就需要为rtiexec添加相应参数。rtiexec的格式为:
rtiexec-multicastDiscoveryEndpoint<ipAddr:ipPort>
其 中 ,ipAddr的 范 围 为 224.0.0.0~239.255.255.255;ipPort的范围为1024~65535。例如,可以写成:
rtiexec-multicastDiscoveryEndpoint 224.0.0.1:1025
另外,还需要修改RID文件的相应行的ipAddr和ipPort。
(RtiExecutiveMulticastDiscoveryEndpoint 224.0.0.1:1025)
4.2.3 构件部署
在运行联邦成员之前,首先应该完成构件的部署。即根据构件集描述文件,通过一些命令把构件集安装在指定的网络节点上。大致步骤如下:
1)利用Nodemanager命令启动可供构件部署、运行的节点node。每个构件对应一个节点。
2)利用Execution_Manager命令完成逻辑节点与具体nodeApplication之间的关联。
3)利用 Plan_Launcher命令完成构件的部署。该过程需要把构件集描述文件作为Plan_Launcher命令的参数。
以上命令均可以通过命令行方式进行。
4.2.4 运行联邦成员主程序
完成以上全部工作后,就可以运行联邦成员主程序。在联邦成员主程序数据处理循环中,通过解析构件提供的别名,即可创建构件实例,进而调用该构件对应的接口函数,由构件来完成具体的数据处理。
4.3 基于CCM的指控系统联邦成员的仿真应用
为了验证以上方法的可行性,我们构建了一个舰船作战系统的HLA联邦,其中的指控系统采用基于CCM构件的方法实现。整体框架如图6所示。
图6 指控系统采用CCM实现的作战系统联邦框架
在指控系统联邦成员的开发中,主程序和构件集分别由不同的人员承担,表现出了很好的团队开发性。联邦运行正常,说明基于CCM构件实现联邦成员的仿真是完全可行的。
4.4 基于CCM的HLA仿真开发的优点
将CCM构件技术应用到HLA仿真中,在发挥HLA自身优势的基础上,更具有以下优点:
1)提高了开发效率
对于每个联邦成员来说,其中的数据处理是最关键且最难开发的环节。采用CCM构件技术之后,开发人员可以通过多种渠道获取构件。可以自己编写构件,也可以利用已有的商业构件或者其他开发人员编写的构件。这样,大大减少了重复劳动,提高了软件开发效率。
2)应用程序层次清晰
引入CCM技术之后,HLA的主程序框架负责进行联邦成员的日常维护以及数据的显示,具体的数据处理由构件集在后台完成,即实现了数据处理和数据应用的分离,使得程序层次相当清晰。
3)更加有利于团队并行开发
RTI有效分离了仿真功能、仿真运行管理与底层通信传输,使得HLA仿真系统扩充容易,各个联邦成员的实现可以相对独立地进行,也就是说,RTI使得联邦成员之间的团队并行开发成为可能。在联邦成员的内部数据处理中引入CCM技术,分离了数据处理和数据应用,使得开发人员可以相对独立地并行进行数据处理和数据应用的代码开发,即实现了联邦成员内部的团队并行开发。
4)可以很方便地进行混合语言开发
以往的HLA开发,由于数据处理循环的代码没有分离出来,因此每个联邦成员只能使用一种编程语言开发。引入CCM技术之后,由于最终使用的是构件的二进制实现,即构件实现具有语言无关性。开发人员可以根据每个联邦成员的特点、需求以及自己的偏好选择最适合的语言来实现构件。
5 结束语
本文在深入研究HLA仿真框架的基础上,结合当前流行的CCM构件模型,提出了一种基于CCM构件的HLA仿真开发方法。该方法在保持HLA优势不变的基础上,使得软件层次结构更加清晰,同时提高了软件复用率,更适合团队开发。
[1]张春光,万晓东,王云强.基于CCM符合HLA1516标准的战场仿真模型研究[J].计算机仿真,2005(z1):121-123,247.
[2]李立纲,潘力,刘广宇.基于构件的HLA系统开发[J].计算机仿真,2005,22(5):124-128.
[3]柏晓莉,柏晓辉,李恒峰,等.基于模型驱动的HLA建模仿真研究[J].计算机仿真,2007,24(6):102-105.
[4]RADESKI A,PARR S,KEITH-MAGEE R.Componentbased development extensions to HLA[C]//Proceedings of the 2002 Spring Simulation Interoperability Workshop(SISO Spring 2002),March 2002.
[5]RADESKI A,PARR S.Towards a simulation component model for HLA[C]//Proceedings of the 2002 Fall Simula鄄tion Interoperability Workshop(SISO Fall 2002),Novem鄄ber,2002.
[6]RADESKI A,PARR S,KEITH-MAGEE R,et al.Compo鄄nent-based development extensions to HLA[C]//Proceed鄄ings of the 2002 Spring Simulation Interoperability Work鄄shop(SISO Spring 2002),March,2002.
[7]战玉芝,刘怀勋,王丽芹,等.基于HLA的仿真程序设计研究及其应用[J].计算机仿真,2007,24(7):146-148,275.
[8]周彦,戴剑伟.HLA仿真程序设计[M].北京:电子工业出版社,2002.
[9]潘慧芳,周兴社,於志文.CORBA构件模型综述[J].计算机应用研究,2005,22(5):14-15,26.
[10]张剑,董晓明.基于CCM构件的作战系统互操作策略研究[J].舰船电子工程,2008,28(12):35-37,88.
[11]吕行,王志坚,许峰.CORBA构件组装技术研究与应用[J].计算机与现代化,2004(7):1-4.
[12]许峰,陈智强,黄皓,王志坚.基于CCM的软件构件组装技术的研究[J].计算机科学,2006,33(8):232-235.
HLA Simulation Development Research Based on CORBA Component Model
Zhang Jian
China Ship Development and Design Center,Wuhan 430064,China
High Level Architecture(HLA),which is a new-generation distributed simulation architec鄄ture,has greatly influenced today's simulation field.But owing to its little contact with other middleware technology,the reusability of HLA has been restricted within the area of HLA.Its complexity also affects its development.Based on the thorough research of HLA simulation framework,a HLA simulation de鄄veloping method based on CORBA Component Model(CCM)was proposed.It used CCM to implement the real function of every federate.This method can not only advance the software reuse-rate and the de鄄velopment efficiency,but also optimize the software hierarchy of HLA simulation system.The validation shows that it is feasible for the method to be successfully applied to the simulation of command system federate member in the ship combat and control system federation.
High Level Architecture;CORBA Component Model;software reuse;component package
TP391.9
A
1673-3185(2009)06-70-05
2009-02-07
海装“十一五”预研项目(1010108010201)
张 剑(1981-),男,助理工程师。研究方向:软件体系结构、分布式仿真。E鄄mail:zhangjian99@tsinghua.org.cn