基于HLA技术的新型底层通信组件的设计与实现

描述

1 引 言

仿真技术作为人类第三种认识、改造客观世界的重要手段已经深入应用到各个领域并取得了很多成果,如军事、电力、以及能源等。在各类应用需求的作用下仿真技术已经发展形成综合性的专业技术体系,特别是DIS,HLA等技术的发展给仿真的应用带来了新的机遇。

分布式协同工作网络系统(Distributed CollaborativeWorking Network System)是指分布在不同平台上的多个处理系统,通过TCP/IP网络进行数据交互,完成同一个任务,达到快速解决问题及实现协同工作。作为DIS和HLA仿真系统中底层必备的网络通信模块,在实际开发中各Agent封装自己底层通信模块,分布式各节点只暴露他对外通信接口,因此使各个节点的通信细节不明确、耦合度很差;造成开发资源的极大浪费,以及开发成本的增加。同时也让仿真系统开发人员需要花大部分精力对底层通信进行调试,这种工作非常繁琐,同时也不易进行。本文将重点介绍应用在HLA仿真系统中新型底层通信组件设计方案及实现方法。

2 HLA简介及组件开发模型

2.1 HLA高层体系结构

分布交互仿真(DIS)技术从产生(SIMENT计划)到DIS2.X,IEEE1278.X系列协议和ALSP协议制定,进而发展到今天的HLA,都是力图解决系统建模与系统仿真(Modeling and Simulation,M&S)领域存在的问题:绝大多数仿真器的应用实现较为独立,仿真器之间的互操作性和重用性差;开发、维护和使用费时且成本高;可验证性、有效性和置信度较差。HLA就是从体系结构上建立这样的一个框架,他能尽量涵盖M&S领域中所涉及的各种不同类型仿真系统,并利于他们之间的互操作性和重用性。同时能利用不断发展的新技术,来满足复杂大系统的仿真要求。HLA按照面向对象的思想和方法来构建仿真系统,他的基本思想是不考虑如果有对象构造成员,而是在假设已有成员的情况下考虑如何构建联邦。采用面向对象的方法来设计、开发和实现方针系统的对象模型(OM)以获取联邦的高层次的互操作和重用。虽然HLA本身不能完全实现互操作,但他定义了实现联邦成员互操作的体系结构和集中,提供灵活的仿真框架。由各联邦成员和运行支持环境RTI(Run-Time Infrastrueture,运行时间基础结构或运行支撑环境)一起构成一个分布式仿真系统,用于集成分布的各种联邦成员,在联邦运行时提供各种标准的服务,并具有良好的可扩充性。主要包含联邦管理、声明管理、对象管理、所有权管理、时间管理和数据分发管理。一个典型的机遇HLA的仿真逻辑结构图如图1所示:

通信

2.2 底层网络通信组件模型

基于组件开发(Component-Based Development,CBD)是当前的最新发展阶段,是解决软件复用和重用的突破点,能更好地满足目前软件开发的需求。他是经过封装的、定义完备接口可发布的软件包,提供特定的服务,并期望得到外部特定的接口输入。从某种程度上说他也是一种程序接口,实现系统模块之问的互操作和重用。每个组件包含一组属性、事件和方法,组合若干组件就可以生成设计者所需要的特定程序,并能集成到其他软件产品中。应用程序开发者可以购买现成的组件,他们只要利用现有的组件,再加上自己的业务规则,就可以开发一个应用软件。总之,组件开发技术使软件设计变得更加简单和快捷,并极大地增强软件的重用能力。他相对系统软件体系独立的不关心软件系统业务实现,因此可以独立于系统软件的开发,从而降低软件调试困难。

本网络底层通信组件主要为解决基于HLA分布式仿真应用系统中底层网络通信接口通信,分布各仿真模拟器节点的网络数据交换,以及网络通信服务质量(QOS)的保证。提高系统运行的时效、完整的数据报文交换、及数据报文的丢失解决、冗余数据检测等。下面是为HLA分布式仿真系统设计的网络通信组件的设计的模型结构图,各仿真模拟器节点通过他实现对整个模拟交换和互操作,实现协同完成系统模拟仿真工作。仿真模型结构如图2所示。

3 仿真网络组件设计与实现

3.1 仿真网络通信组件的设计

本网络通信组件采用CORBA设计思想对网络底层通信协议异步套接字(Socket)进行的封装,统一实现对整个系统的通信的支持。CORBA(公共对象请求代理架构) 由OMT提出,用于在不同进程(程序)之间,甚至是不同物理机器上的进程(程序)之间通讯。底层技术依靠RPC(远程过程调用)实现。面向对象的软件,以数据为中心设计,对象类既具有模块的封装性和类属等特性,还具有继承特性,极大地提高了类的可扩充性和可再用能力。对象类较之于传统软件的功能模块而另具有的优点是:易于理解,具有完整的语义特征;易于扩充和修改,具有较高的通用性和适应性;易于构造组装,具有规范的外部接口。

通信

基于CORBA的对象请求代理ORB为客户机/服务器开发提供了中间件的新格式。把IDL说明编译为面向对象程序设计语言的实代码后,客户可以调用已知对象的操作。在某些应用中,用户并不了解应用接口编译信息,但也要求调用对象的操作,这时就要动态调用接口来调用用户的操作。具体的对象操作的调用实际上是用动态调用接口来完成的。在基于HLA仿真应用系统的各个仿真节点实现互操作,及协同工作完成整个仿真任务都是通过网络数据进行数据交换,及对数据报文进行解析、分发、操作实现的任务协同,因此对于HLA仿真应用对整个TCP报文或者UDP报文采用统一的格式,例如:对整个系统环境网、系统模拟仿真网络中传输的TCP,UDP报文采用统一的报文标识,如系统仿真时统UDP报文标示为0x1,那么在仿真系统中收到标识为0x1的UDP报文。各个分布式仿真节点将对该报文进行时统系统对时,实现整个仿真系统的时间一致行,保证对整个仿真过程中时间与现实的同步,选择异步Socket进行自我封装成能够符合HLA仿真系统的报文传输要求。同时组件的设计安装面向对象设计的一般过程、软件工程的要求。

设计如下的组件的结构如图3所示。

通信

3.2 通讯组件的实现

作为一种通信组件,他不仅需要完成上层HLA仿真主程序给他的发送报文的分发及从其他仿真节点收到的仿真数据报文的解析,还提供对外清晰的交互接口。同时作为仿真工作的一个部件,他需要工作在一个复杂的网络环境中,在不能很多程度上与占有宝贵的分布式处理机的处理时问,作为网络组件经常会在某些时间,等待连接、或者等待数据报文而发生严重的阻塞,以及需要不断的监听端口,从而耗费处理机时间,信号Windows提供了异步SOCKET的API接口使得组件设计能够一直以异步方式工作的应用层,不断向网络层接收和发送数据报文。但是单纯实用原始异步SOCKET的API接口仍然不能满足某些特定的要求,不能很好地融入HLA仿真应用系统中去。因此首先对Windows提供的异步SOCKET套接字CAsyncSocket进行特定封装。

下面给出部分封装代码:

通信

在应用中申请一个组件的主构造类,在该类中去实例化经过封装的异步套接字来进行底层网络数据的收发,组件实例可以接收到初始化该组件的操作句柄,完成配合仿真节点完成仿真主题工作,数据的交互,数据的处理等。

下面是主题组件的实体类。

通信

仿真节点只要向组件发送一启动命令(IniComponent(HWND m_hWnd))组件就将启动并完成组件的初始化,如组件全局SOCKET的版本请求、版本协商、经过封装后的异步套接字实例化、SOCKET通信API的实例初始化等。同时组件完成初始化以后,组件将一直开始监听本机指定端口、并等待接收本仿真节点的消息发送命令等。仿真节点在按照HLA仿真体系中规定的报文协议填写完成数据报文以后,只需要调用组件对外的接口函数:Send-Data(char *bur,char*pDataCode,char*pIDNode)即能完成把报文发送到指定目的仿真接点,协同完成仿真模拟任务。组件在接收到网络消息的时候调用OnReceive(intnErrorCode)进行报文的预处理,确定是否需要仿真节点处理该报文。如首先对接收到的报文进行长度分析如果长度很小为系统发送确认报文,就不需要仿真主程序进行处理,为仿真节点主处理器节省处理时间。如果长度超过一定长度,是仿真节点中协同报文的话,组件将首先对报文得到报文标识头(GetNodeByName(char*IdNode,CString strPeerAddress))然后进行报文解析,并向仿真主程序发送消息函数::PostMessage(…)到主程序中,进行最终的报文处理工作;如界面更新、数据交互处理等,同时组件线程在完成了对解析以后需要对发送方发送解析和成功解析报文,以确认发送方的发送报文别目的节点成功接受并成功解析。

4 结 语

基于HLA高层体系结构的分布式仿真系统中通过分布在不同物理点的分布式仿真节点,借助网络进行数据报文交互、仿真同步、仿真协同完成对真实世界的模拟。作为仿真系统在必备的通信模块,在频繁地设计和不断地重写,在一个特定的仿真领域中需不同的仿真网络通信模块,重复的开发和设计使得各个仿真节点之间的交互需要不断地协调协议接口;不统一的设计方案也同样让仿真开发人员陷入重复工作的泥潭中。本文针对以上的开发弊端,采用现代软件设计思想,组件的开发设计模式,使得代码得以最大程度上的共享,并易于调试。他使得仿真开发人员能够花最小的时间和代价协调网络通信模块,从而集中精力在仿真主题功能的设计和实现上。在实际应用中本仿真组件清晰、而又简单的对外接口,对基于HLA分布式仿真应用系统功能开发者基本上不需要了解他的设计和实现,就能很好地使用本组件完成通信要求,从而将最大程度上为开发者节省项目时间、项目花费。

组件采用异步SOCKET套接字进行自封装,隐藏了组件通信如何进行的过程,从而不必要求对HLA传真系统功能开发者关心底层网络通信是如何进行的。同时组件工作的异步模式下,对系统不会产生过大的资源浪费,同时也能很好地满足HLA分布式仿真节点的实时性要求。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分