基于实装软件的构造仿真技术研究
2018-10-29段雨昕卿杜政周敏王源源
段雨昕,卿杜政,周敏,王源源
(1.中国航天科工集团有限公司 第二研究院,北京 100854;2.北京仿真中心 航天系统仿真重点实验室,北京 100854; 3.北京电子工程总体研究所,北京 100854)
0 引言
仿真系统根据系统中人员参与和仿真模型的组成关系不同可分为实况仿真(live simulation)、虚拟仿真(virtual simulation)、构造仿真(constructive simulation)[1-2]。构造仿真重点应用于对战争的分析和演练。其在军事领域应用广泛,涵盖了武器装备效能评估、模拟战争过程和基于仿真的试验评估等。构造仿真系统具有人员参与少,系统自身闭环,批量运行,运行过程中计算量大和数据处理要求高的特点[3]。
目前国内构造仿真中构建分布式仿真系统时通常是基于HLA标准,使用运行支撑环境(run time infrastructure,RTI)[4]。在构造仿真中仿真软件存在重新建模带来的仿真可信度问题[5]。而且模型的校核也需要大量的工作,难以与装备的研制同步进行。随着实际装备不断的更新换代,仿真模型开发者为保证与实装同步需要进行大量重复的开发工作。
使用实装软件接入构造仿真系统是提高仿真置信度与仿真效率,减少仿真系统开发建模重复工作的重要途径。但因为实装软件与仿真系统软件的通信机制和时间管理策略都存在差异,所以需要通过适配中间件的形式使实装软件和仿真平台间实现交互信息的正确传递和统一的时间管理。通信组件将实装软件的网络通信数据转换成为HLA标准的交互类消息通过RTI分发。时统组件统一仿真系统中各个实装软件的时间来实现仿真系统的时间一致性。
1 HLA/RTI与实装软件特点
1.1 HLA/RTI特点
HLA并不考虑怎么在对象的基础上构建成员,它重点在于解决构建联邦的问题。它把仿真支撑环境的工作和联邦成员的开发工作作为2部分,将运行管理工作还有通信工作与仿真功能分别进行[6]。HLA以面向对象的思路来构建、研发和应用仿真对象模型,进而能够使这样开发出来的仿真联邦拥有很好的互操作和可重用性[7-8]。RTI按照HLA的接口规范标准进行开发,它具体支持了HLA规范中的服务,使基于HLA标准开发的软件在RTI平台的支撑下组成分布式仿真系统成为可能。基于HLA标准的仿真系统逻辑结构如图 1所示。
图1 HLA标准的仿真系统逻辑结构Fig.1 Logic structure of HLA simulation system
HLA所规定的是一种分布式仿真标准体系,RTI是基于HLA标准结构的软件实现。HLA标准定义的通信是以对象类和交互类的发布/订阅来完成联邦成员之间的信息交互。由对象管理服务统一对联邦执行过程中的信息交互进行管理。HLA/RTI的时间推进方式可以分为3类:基于步长的时间推进,基于事件的时间推进以及乐观的时间推进。最为常用的是采用固定步长和基于下一事件的时间推进方式[9]。
1.2 实装软件特点
实装软件是武器系统实际装备软件的简称,一般具有多个节点,是多个软件组成的一套整体运行的软件集合。部分实装软件具有高实时性要求,是在VxWorks硬实时操作系统上开发运行的。还有部分软件是在Windows系统上直接运行的。本研究中基于VxWorks系统的实装软件经过操作系统移植后,能够正确在Windows+RTX(8.1.2)系统上运行且测试通过。
实装软件之间通信主要通过网络套接字实现,在与HLA集成之前需要采用模拟套接字方式通过共享内存进行通信数据接管[10-11]。实装软件时间来源一般是GPS等硬件授时设备,也可以采用本机时间作为相对时间来执行任务。
2 实装软件构造仿真技术基本原理
根据实装软件仿真适配中间件数据交互方式以及时间管理策略,通过与HLA/RTI的标准进行通信适配并采用统一的时统技术,构建集成运行的仿真系统。
本文提出实装软件接入仿真平台总体架构如图2所示,图中的实装软件都可以运行在Windows系统上,仿真适配中间件承接了实装软件的网络通信,以共享内存的形式提供了通信数据的接口。通信组件和时间统一组件则完成了与仿真平台的信息交互和时间同步。通信组件使实装软件原本基于网络传递的消息以HLA标准的交互类进行交互。通过RTI发送实装软件需要发送的数据,同时从RTI接收其他节点的交互数据。时间统一组件则主要完成仿真系统和实装软件间的运行时间、任务同步等方面的匹配,从而保证实装软件运行时序正确。
图2 仿真集成总体架构Fig.2 General structure of integrated simulation system
3 通信组件
实装软件的通信消息从原本的网络套接字的形式通过共享内存机制,分别以接收共享内存和发送共享内存的形式提供数据对其他进程的共享通道。因此通信组件的功能是制定通用的HLA交互数据协议,通过RTI标准接口将数据正确发送和接收。
3.1 RTI数据交互协议
3.1.1 交互协议模型
为了使通信组件的数据交互协议能够尽可能的通用,本文只定义了交互类并没有定义对象类,也没有对消息的内容进行区分。本文定义的交互类只设计了一个基类BaseMsg。其他的交互类则继承自该基类,因此也继承了基类中的全部参数。在HLA联邦数据传输中有reliable模式和best_effort模式,reliable模式在RTI中使用TCP协议发送,保持消息可靠性,而best_effort模式RTI中采用UDP方式发送[12]。本文考虑到使用的网络环境是局域网基本不存在丢包的现象,因此交互类消息全部采用best_effort方式,而且希望设计的组件尽量具有通用性因此只使用一个交互类基类进行交互。以继承自BaseMsg 类的A_Inter和B_Inter 2个交互类为例,对象数据模型如下:
(interactions)
…
(class BaseMsg best_effort receive
(parameter SendSockAddr)
∥发送方IP地址
(parameter RecvSockAddr)
∥接收方IP地址
(parameter CurrentTime)
∥发送时间
(parameter EventTime)
∥事件发生时间
(parameter MsgType)
∥消息类型
(parameter CommType)
∥通讯类型
(parameter MsgLength)
∥消息长度
(parameter MsgContent)
∥消息内容
(class A_Inter best_effort receive)
∥继承自BaseMsg的交互类A
(class B_Inter best_effort receive)
∥继承自BaseMsg的交互类B
…
(class _Outer best_effort receive)
∥继承自BaseMsg的交互类B
)
)
上面定义的_Inter类对应着一套闭环运行的软件的内部的交互,当需要多套软件之间交互时还需要订购与发布_Outer类。
3.1.2 交互类发布/订购模式
交互类的发布/订购模式如图 3所示,如果所有成员采用统一的BaseMsg交互类进行发布和订购会使A组内的成员间的消息也被B组成员接收,因而降低网络传输效率。本研究采用的是为组成一个火力单元的实装软件定义单独的交互类的模式。以图中结构为例,定义A_Inter,B_Inter 2种交互类。其中A_Inter用于A组内成员的交互,B_Inter用于B组内成员的交互。如果A组成员需要与B组成员交互则通过_Outer类进行。通过这种方式可以有针对性地对交互类进行管理与扩展,避免网络中的通信冗余。
图3 交互类发布/订购关系图Fig.3 Relation structure of interactive publishing & subscription
3.2 RTI交互数据通讯
RTI支持HLA标准的交互类数据的订购与发布功能,在仿真联邦运行过程中通过标准的数据发送和数据接收接口可以实现交互类数据的发送与接收。
当实装软件要通过RTI发送交互数据时,其在仿真适配中间件中设置了一个发送信息的回调函数,该函数回调RTI交互数据发送标准接口。在RTI平台接收到交互数据需要传递给实装软件时,RTI的接收消息处理框架中调用通信组件提供的接收消息处理接口函数。交互数据的发送和接收信息流程如图4所示,图中上半部分是通信组件与实装软件的信息流程本文不再赘述,下半部分SendMsg()与SubmitRecvMsg()是RTI与通信组件的数据发送和接收的函数接口。
图4 交互数据信息流程示意图Fig.4 Schematic flow chart of interaction message
4 时间统一组件
时间统一组件实现实装软件与RTI多个节点软件的同步运行功能和时间管理功能。
4.1 同步控制
在RTI基于步长推进方式的框架中控制仿真周期任务的函数为OnStep( )也称为周期调度函数。它随着每一帧的仿真运行不断的循环执行,每执行完一次都使仿真时间推进一个周期[13]。实装软件运行时同样具有周期定时执行的任务。同步控制需要把RTI周期调度函数与实装软件的周期任务进行同步。在RTI周期调度函数开始时触发实装软件的任务运行信号量,任务结束后设置结束信号量通知RTI。如此采用信号量控制的方式与RTI的周期调度函数进行同步,实现同步控制功能。
本文中同步控制函数有2组共4个。其中一组为部署在实装软件端的WaitingForEnterOnStep( )和ExitOnStep( )函数,另一对为部署在RTI仿真集成框架周期调度函数OnStep()中的EnterOnStep( )和WaitingForExitOnStep( )函数。
其中EnterOnStep( )和ExitOnStep( )函数的实现主要是借助RTX的系统事件触发函数RtSet-Event( )[14]。其功能是使括号内的特定的事件激活。
而与之对应的WaitingForEnterOnStep( )和WaitingForExitOnStep( )函数的实现主要是借助RTX的事件等待函数RtWaitForSingleObject( )。其功能是等待括号内的特定事件处于激活状态直到事件超时。
在此基础上能够实现RTI的周期调度函数对实装软件的运行周期进行同步调度。WaitingForEnterOnStep( )部署在实装软件周期控制函数的周期开始之前, ExitOnStep( )函数部署在周期结束后。同理在RTI生成的仿真框架中的周期调度函数开始位置部署EnterOnStep( )函数,在周期结束位置部署WaitingForExitOnStep( )函数。通过RTX事件控制函数就可以完成同步控制任务,其同步过程如图 5所示。
图5 同步控制过程图Fig.5 Procedure chart of synchronous control
(1) 实装软件中需要同步的任务在初始化之后进入等待信号量状态;
(2) RTI周期调度函数中EnterOnStep激活处于等待状态的任务,实装周期任务开始执行;
(3) 周期任务执行结束后由ExitOnStep通知RTI周期调度函数;
(4) RTI周期调度函数接收到ExitOnStep信号量,向联邦申请时间推进;
(5) RTI时间管理推进仿真时间后继续本同步过程。
4.2 循环等待机制
循环等待机制的功能是实现实装软件的运行线程与仿真运行的主线程之间相互协调。保证实装软件在运行过程中与仿真执行的主线程在运行时间不一致时能够统一调度,防止线程阻塞而影响仿真运行。循环等待机制通过在RTI周期调度中获得本成员节点的实装软件调度结束的标志,但其它成员节点的调度并未结束时循环调用RTI标准接口的等待函数进行等待。当所有节点的实装软件都发出周期调度结束标志后,循环等待任务结束,向RTI发出时间推进请求。
4.3 运行时间管理
基于VxWorks系统的实装软件在没有硬授时设备时系统采用tick数作为任务运行的时间参考标志[15]。软件移植的时候已经采用RTX定时器的方式实现了一个硬实时的时钟tick计数器,并设置有计数器的启动和停止的标志位。
当实装软件与HLA/RTI仿真平台集成之后,软件运行的时间应该以仿真实际执行的时间为标准,通过RTI统一进行时间的推进。而如果实装软件依然在运行时按照本身系统时钟的tick数执行任务,则会出现运行时序与任务逻辑的错误。本文采用的方法是通过控制实装软件时钟tick计数器启停的方法,在接入仿真系统后停止时钟tick计数器的目的。
TicksRunning标志位是控制时钟tick计数器的标志,其值为0时系统内tick数不再随物理时间进行自加,值为1时系统tick数随物理时间继续执行自加。该标志位部署在实装软件同步控制函数前。同步控制函数发出激活实装软件周期任务事件之前将TicksRunning标志位置0,在实装软件周期任务执行结束事件之后将系统tick数加一个周期时间。如此部署后,实装软件内部任务执行时读取的tick数实际上就是仿真任务执行的时间。
5 系统应用
本文中的适配中间件已经成功的应用在一个基于实装软件的分布式仿真系统中。系统组成如图 6所示。
计算机A上的各个雷达软件组成的小闭环系统运行状态正常,雷达主控软件通过RTX输出面板显示软件运行状态信息无异常无报错。计算机C上指控软件和发射车软件工作状态正常,显控显示各软件状态更新正确。雷达系统能稳定跟踪目标,向指控发送目标信息,指控系统判断后发出打击指令,完成拦截任务。系统整体运行状态与实际装备状态一致,证明软件交互正确、时间管理正确、逻辑正常。
采用线程模式对同一仿真场景进行20次重复试验并记录。仿真虚拟时间需要750~800 s的情况下,仿真系统都可以在实际物理时间520~620 s完成仿真执行。仿真加速比记录如表1所示。系统平均加速比为1.37,证明系统具有一定超实时运行能力。
图6 典型应用系统组成Fig.6 Structure of typical application system
次数加速比次数加速比11.26111.4021.23121.3931.36131.4541.48141.2451.53151.3361.35161.3171.38171.4281.42181.4091.38191.32101.45201.37
注:平均加速比:1.37
6 结束语
本文提出了一种以实装软件为基础构建HLA仿真系统的方法。重点分析了带有仿真适配中间件的实装软件通信机制和时间管理机制。通过设计统一交互类协议实现了实装软件通信消息以交互类的形式通过RTI平台进行发送和接收的方法,并以同步控制机制和相应的时间管理策略实现对实装软件与仿真平台运行时间的统一管理。最后由一套实装软件作为仿真节点接入到闭环仿真系统中的实际应用验证了该方法的可行性和优势。未来可探索基于Windows系统的自主可控的集成中间件技术方案,提升本研究应用深度。