徐海, 吴健, 赵佐, 朱明洁
(1.西北工业大学 计算机学院, 陕西 西安 710072;2.中航工业第一飞机设计研究院, 陕西 西安 710089)
在仿真与建模领域,为了促进各类仿真系统之间以及仿真系统与C4I(command, control, communications, computer/intelligence)系统之间的互操作,加大建模与仿真部件的重用,美国国防部建立了建模与仿真高层系统结构HLA (high level architecture, HLA)[1]。
在靶场试验与训练领域,为了克服各测试和训练靶场系统“烟囱式”设计所带来的弊端,美国国防部结合网络中心战和靶场资源互操作、重用和可组合方面的需求,通过基础计划2010(FI2010)项目,开发了“试验与训练使能体系结构”TENA(the test and training enabling architecture, TENA)[2]。
由于二者在军事仿真、建模、靶场训练、测试领域被广为运用。因此,2种体系结构之间,数据互联的问题急需解决,为了提升TENA体系结构的兼容性,促进其互操作能力,TENA-HLA网关应运而生。
由于TENA还属于新兴的研究领域,在国内外尚处于研究阶段。相对于目前较为成熟、并已广泛应用的HLA体系结构,TENA应用无论在成熟度,还是数量上都远远落后于基于 HLA所开发的系统,文献检索也没有发现对 TENA-HLA 网关的研究。本文对TENA-HLA网关进行了探索,并提出了一种基于用户选择的网关自动生成器。
TENA的TDL语言是面向对象的建模语言,提供了丰富的面向对象特性,使建模人员能够方便用面向对象的思想进行建模。但是,HLA的“对象类”对象和“交互类”对象是纯面向数据流的对象,属性类型由OMT的各个表格规定,所以,它可以是用户所定义的任意类型。这两种思想迥异的语言之间的转换,即为TENA-HLA网关设计的核心所在。本文介绍一种网关设计方案,能够把面向对象数据转换为纯数据流,反之,也能把纯数据流数据转换为面向对象数据。
图1为TENA-HLA网关数据交互图,图的左端为TENA分布式靶场系统,各TENA应用以TENA逻辑靶场对象的形式在TENA中间件上实现发布-订阅。图1的右端为HLA仿真系统,同理,各个仿真节点作为一个联邦成员以RTI对象的形式在HLA-RTI上完成数据传输。当2个体系结构的数据需要交互时,TENA-HLA网关的转换器完成TENA逻辑靶场对象到RTI对象,或RTI对象到TENA逻辑靶场对象的转换。转换器的存在,使得TENA网络的应用与非TENA网络的应用实现无屏障通信。
图1 TENA-HLA网关数据交互图
网关由3个部分组成,即“TENA侧网关代理”,“对象转换器”及“HLA侧网关代理”。
1) TENA侧网关代理能够从TENA中间件上接收来自其它TENA应用程序的数据,或者将已被网关转换器转换好的HLA数据发送到其他的TENA应用程序。
2) 对象转换器能够把从TENA接受到的逻辑靶场对象按照对象转换协议转成RTI对象,同理,也能够把从HLA接受到的RTI对象转成TENA逻辑靶场对象。其次,处理好TENA的时间管理与HLA的时间管理的差异。
3) HLA侧网关代理能够从HLA-RTI接收来自其他联邦成员应用程序的数据,或者将已被转换器转换好的TENA数据发送到HLA的联邦成员。
如图2空心箭头所示,TENA以Attack.tdl作为对象模型构建应用程序,创建应用Servant4,它可以发布其内部定义的若干SDO,message。此时,网关被看成TENA网络中的另一个“应用”。一方面,它创建“模拟应用Client4”,订阅来自Servant4的数据,转换器将接收到的数据转换,提交给网关中的“联邦成员2的Publisher”。另一方面,它再以HLA协议将数据发送给HLA的订阅方联邦成员2的Subscriber。
图2 TENA-HLA网关运作流程图
如图2实心箭头所示,TENA以Missile.tdl作为对象模型构建应用程序,创建应用Client2,它可以订阅tdl文件中定义的若干SDO,message。网关一方面被看成HLA中的“联邦成员1的Subscriber”,接收来自“联邦成员1 Publisher”发出的数据,转换器将接收到的数据转换,提交给网关中的“Servant2应用”创建“模拟应用Servant2”。另一方面,它再以HLA协议将数据发送给TENA的订阅方Client2。
由于一个tdl文件中存在多个SDO,message。而一个fed文件中,又存在多个object class,interaction class,所以,应用程序中选择发布-订阅哪一个SDO和message,以及和HLA中的哪一个object class和interaction class进行映射是很难确定的,单靠名字匹配的映射机制是不充分的,在名字毫不相关的情况下,映射无法完成。此时,图形化的方案能够较好地解决映射的问题。发挥用户自主选择权来完成映射协议的生成。用户最清楚当前tdl文件中哪些元模型需要和fed中的哪些对象类、交互类相匹配,tdl文件中被选中的元模型同时也是TENA端应用程序需要被发布-订阅的对象,同理,fed文件中被选中的“对象类”对象和“交互类”对象也是HLA端应用程序需要被发布-订阅的对象。
图3 OMsampleAnother.tdl与test.fed对象映射图
图3左边为OMsampaleAnother.tdl文件的图形化表示,右边为Test.fed文件的图形化表示,它们显示在同一界面中,OMsampaleAnother.tdl定义了可发布-订阅的SDO Platform,message LocationMessage,SDO Condition,Test.fed定义了object class maybe,object class selfcustom,interaction class LocationMessage,interaction class FireMessage。由于模型种类和数量过多,很难确定哪2个模型之间需要被映射。
本文采用图形化方式支持用户选择映射关系如图3所示,连线的一端是TDL模型,另一端是FED模型。它记录了一个SDO或者Message的属性被映射成的对象类属性或交互类参数。
因为网关所需要实现的TENA与HLA间的数据订阅和映射关系是由用户根据不同的应用需要指定的,不可能有一个固定的网关实现各种映射,因此网关的三部分都必须根据tdl和fed文件自动生成,根据图形连线和协议算法生成转换协议,同时代码以面向对象的组织形式写入若干个C++文件中,写完后,各个头文件、源文件被加载到已创建的工程中,编译该工程,便能生成网关的可执行程序,至此,网关生成完毕,用户可以开启该网关。
当异网传输时,分为TENA向HLA传输和HLA向TENA传输。2种不同传输方向,导致不同的协议算法,分别论述如下。
4.3.1 TENA-HLA转换算法描述
该算法的输入是TDL和FED文件经各自编译器编译后,在内存中组织的IR(intermediate representation)。
该算法的输出是转换协议。算法描述如下:
2) if(Model被标识)
3) then if(Model的类型是class&&Model不是数据成员)then映射为"对象类"对象,其数据成员映射goto 1
4) if(Model的类型是message&&Model不是数据成员)then 映射为"交互类"对象,其数据成员映射goto 1
5) if(Model的类型是message,localclass && Model是数据成员)then映射为struct类型,其数据成员映射goto 1
6) if(Model是基本类型‖枚举类型)then映射为基本类型
7) if(Model是向量类型)then映射为向量
8) else goto 1
现阶段,经济环境发生了比较显著的变化,工资水平也越来越高,交个税的群体也越来越多,不过由于物价水平的持续提升,抛除通货膨胀的影响,整体的购买能力还是比较低,不过还是需要缴纳个人所得税,个人税收负担会增加,随着二胎政策的推广,一些家庭的生活压力越来越大,要想显示出税收的公平性,就需要进行个人所得税扣除项目改革。
上述伪代码描述了TENA-HLA转换协议的主要逻辑流程。首先,扫描FED-IR和TDL-IR(TDL文件编译后的中间表示),当扫描到SDO和Message,且当前它们不作为属性成员,则分别映射成“对象类”对象和“交互类”对象。
当扫描到SDO和Message的属性成员为基本类型或枚举类型时,则映射成HLA的基本数据类型,并在Publisher中生成发布该成员的代码,它的值可通过Client的get函数获取。
当扫描到SDO和Message的属性成员为vector类型时,则映射成HLA的vector类型,并在Publisher中生成发布该成员的代码,它的值通过Client的get函数获取。
当扫描到SDO和Message的属性成员为Message,Localclass时,则都被映射成C++struct类型。但由于它们是复合类型,所以需要继续扫描IR,深入到复合类型内部的成员变量,且对每个成员变量都依次遵循上述的转换方式进行迭代。
4.3.2 HLA-TENA转换算法描述
该算法的输入是FED和TDL文件经各自编译器编译后,在内存中组织的IR(intermediate representation)。
该算法的输出是转换协议。算法描述如下:
1) 扫描FED-IR&&TDL-IR
2) if(Model被标识)
3) then if(Model的类型是class && Model不是数据成员)then 获取"对象类"数据,创建class的ServantPtr,其数据成员映射goto 1
4) if(Model的类型是message && Model不是数据成员)then 获取"交互类"数据,创建message的ServantPt其数据成员映射goto 1
5) if(Model的类型是message,localclass && Model是数据成员)then获取数据,创建message或localclass的Pointer其数据成员映射goto 1
6) if(Model是基本类型或者是枚举类型)then数据流按基本类型转换
7) if(Model是向量类型)then 数据流按基本类型向量转换
8) else goto 1
上述伪代码描述了HLA-TENA转换协议的主要逻辑流程。首先,扫描FED-IR和TDL-IR,当扫描到SDO和Message时,则创建它们的ServantPtr,且初始化配置信息;当网关接收到“对象类”对象或“交互类”对象数据时,该数据为二进制数据流,必须用实际的类型转换才能得到有效的数据,所以,需要在最初编译tdl文件时,另生成一份tdl文件的拷贝,并把它变成C++头文件,即把其内部所有的class,message,local class关键字均换成struct,并且去掉复合类型内部的成员函数,修改不符合C++风格的表示。这样,该文件便成为只由struct构成的头文件。再把该文件加入工程中,其他源文件都可使用这些定义的类型。
将“对象类”数据按照tdl文件中相匹配的class-struct类型转换,这样,struct中的每一项成员都有了值。 Servant发布的值可直接通过struct调用。
“交互类”数据也按照tdl文件中相匹配的message-struct类型转换,Servant发布的值可直接通过struct调用。
当扫描到SDO,message中包含的local class对象时,这里需要创建它的pointer,它的值由SDO,message获取的数据赋予。
基本数据类型和向量类型不需要在创建任何关于发布的对象,直接发布即可。
4.3.3 网关代码结构
图4简要描述了网关的代码框架,当应用场景需要TENA到HLA的网关时,将以类TENA-to-HLA-GateWay为核心,生成与其相关的main函数及所有类。TENA-to-HLA-GateWay类由Publisher类和Client类聚合而成,同时,Publisher类又具有聚合对象Client。Client类主要完成订阅来自TENA的数据,Publisher类主要完成HLA代理功能,它接收聚合对象Client的数据,经转化后,调用自己的私有方法将数据发送给HLA端。同理,当应用场景需要HAL到TENA的网关时,将以类HLA-to-TENA-GateWay为核心,生成与其相关的main函数及所有类,功能与TENA-to-HLA-GateWay的辅助类相同且对称,在此,不再赘述。
图4 网关程序代码框架
当扫描到TDL-IR的interface时,可不予考虑,因为interface中只有远程方法,而HLA中并不支持远方法的调用,故不必考虑。
当扫描到TDL-IR的class、message的“继承”时,在编译的过程中将其内部的属性全部转移到其子类中,然后再进行映射。
HLA提供了“管理时间”的服务,即可以将操作过程加速推进到“超实时”或放慢到实时乃至“欠实时”,TENA没有提供时间管理服务,所有靶场事件总是实时运行的。由于网关需要生成至少两个应用来接收和发送数据,并且需要经过对象转换,很难保证TENA的实时性。
OMsampaleAnother.tdl在图3左端,Test.fed在图3右端,它们的映射关系如图中的连线所示,SDO Platform与对象类selfcustom交换数据,message LocationMessage与交互类LocationMessage交换数据。
如图5所示,TENA应用以OMsampaleAnother.tdl作为建模文件发布数据,如图6所示,HLA应用以Test.fed为建模文件接收数据。经试验,发布和接收的数据一致无误。
图5 TENA发送数据图
图6 HLA接收数据图
本系统架构能够较好地完成TENA系统与HLA系统的互联。采用该系统架构,开发人员能够容易地改变模型转换规则,在应用生成部分可以利用模板机制产生通用代码,可大幅缩短开发人员的工作量,有效提升了系统开发的效率,提高了可扩展性、可维护性和可移植性。
整个网关程序经编译后就变成可执行程序,它封装了一个tdl文件定义的对象模型与另一个分布式网络建模语言定义的对象映射协议,当开启TENA IDE时,需要“打开”一个网关应用。
模型映射时,尚未考虑SDO聚合的映射方式。这种面向对象机制具有复杂的实现方式,而RTI所支持的OMT对象过少,找到一种合适的匹配机制较难。
参考文献:
[1] 周彦,戴剑伟,蒋晓原. HLA仿真程序设计[M]. 北京:电子工业出版社,2002
Zhou Yan, Dai Jianwei, Jiang Xiaoyuan. HLA Simulation Programming[M]. Beijing: Publishing House of Electronics Industry, 2002 (in Chinese)
[2] 毕博,朱元昌,邸彦强,等. TENA网关及其应用研究[J]. 计算机测量与控制,2012,20(8):2254-2256,2260
Bi Bo, Zhu Yuanchang, Di Yanqiang, et al. TENA Gateway and Application Research[J]. Computer Measurement & Control, 2012, 20(8): 2255-2256,2260 (in Chinese)
[3] 冯润明,王国玉,黄柯棣,等. TENA及其与HLA的比较[J]. 系统工程与电子技术,2005,27(2):288-291
Feng Runming, Wang Guoyu, Huang Kedi, et al. TENA and Its Comparison with HLA[J]. Systems Engineering and Electronics, 2005, 27(2): 288-291 (in Chinese)
[4] 王胜涛,杨志飞,杜红兵,等. 逻辑靶场网关设计方法研究[J]. 舰船电子工程,2012,32(2):84-86
Wang Shengtao, Yang Zhifei, Du Hongbing, et al. Research on the Design of Gateway in the Logical Range[J]. Ship Electronic Engineering, 2012, 32(2): 84-86 (in Chinese)
[5] 关萍萍,翟正军. 虚拟靶场运行支撑体系结构研究[J]. 计算机测量与控制,2009,17(12):2475-2478
Guan Pingping, Zhai Zhengjun. Research on the Architecture of Runtime Infrastructure Middleware for Virtual Range[J]. Computer Measurement & Control, 2009, 17(12): 2475-2478 (in Chinese)
[6] 马越,刘丹,金一丞,等. 分布航海仿真中HLA网关的设计与实现[J]. 哈尔滨工程大学报,2004,25(3): 283-27
Ma Yue, Liu Dan, Jin Yicheng, et al. The Design and Implementation of HLA Gateway in Distribution Shipping Simulation[J]. Journal of Harbin Engineering University, 2004, 25(3): 283-27 (in Chinese)
[7] 林新,宋焱,王行仁,等. 战斗机飞行仿真系统HLA互联系统[J]. 系统仿真学报,2004,16(12):2751-2753
Lin Xin, Song Yan, Wang Xingren, et al. A Distributed Flight Simulation System Based on HLA[J]. Journal of System Simulation, 2004, 16(12): 2751-2753 (in Chinese)