基于HLA的电子对抗区域传输和显示方法研究
发布时间:2015-07-13 09:45
摘 要 本文介绍了在开发基于HLA的分布式电子对抗模拟仿真系统时实现电子对抗区域的传输和显示的原理和具体方法,为构建新的电子对抗仿真系统提供了一种稳定、快速而易于实现的途径。
0 引言
关键字 HLA;分布式;电子对抗模拟仿真系统;电子对抗区域
0 引言
科学技术的飞速发展,极大地改变了现代战场的面貌,引起了军事科学深刻的变革。电子对抗作为现代信息战的基本支柱,已成为高技术条件下现代战争的一个最重要特征。然而,以电磁波为武器的电子对抗不同于常规武器,其战斗往往进行于无形之间,为了表现其战场态势,就必须采用各种手段对电磁信号及各种电子设备的作战效能进行可视化显示,这样便形成了多种类型的电子对抗区域,其主要包括受干扰前后的地面警戒雷达探测区、受干扰前后的地面通信畅通区、受干扰前后的GPS畅通区、电子侦察区、受干扰前后的火控雷达威力区等,这些区域又通过和、差、交、并、异或等计算形成复杂的合成区域。基于HLA的分布式电子对抗模拟仿真系统通过RTI传输并显示上述这些电子对抗区域。
1 基于HLA/RTI的分布式电子对抗模拟仿真系统简介
HLA(High Level Architecture)是美国国防部发布的仿真系统结构标准,在2000年全面推行。HLA是为了支持仿真之间的互操作性和可重用性而制订的,它主要包括规则、对象模型模板(OMT)以及接口规范。而HLA的核心——运行支撑系统(Runtime Infrastructure,RTI)是HLA研究的重点。RTI实际上是一个中间件(Middleware),是HLA仿真应用的支撑平台,它提供了HLA接口规范中定义的标准接口调用。图1给出了一种基于HLA/RTI的分布交互式仿真系统的逻辑拓扑结构。
图1 基于HLA/RTI的分布交互式仿真系统的逻辑拓扑结构
联邦由联邦成员构成,联邦的目标由联邦成员协同完成,各联邦成员既要完成自己的绘制子任务,又要根据需要通过RTI与其它联邦成员发生交互,获得自身需要的信息或向其他联邦成员提供信息。这种体系结构和工作体制能够较好的满足采用合成兵种作战模拟的需要,其根据各自的作战想定要求,把各个兵种划分成相对独立的子系统,参照实际运行的具体模式,在HLA联邦中形成多个联邦成员,通过联邦成员内部的仿真运行逻辑完成相应的子任务,子系统模块间电子对抗态势的传送定义为联邦成员间的资料交换,主要体现为对象类和交互类的发布与订购。同时,战场态势显示软件也定义为一个联邦成员,通过向RTI订购来获得各个其它联邦成员发布的电子对抗区域信息,通过计算得到合成电子对抗区域供显示所用。实际信息传输过程和时间同步可以利用改进过的HLA/RTI强大的时间管理功能实现。利用HLA技术框架实现电子战战场态势的计算和显示具有高效率、高逼真度、灵活、低配置要求等优点。
2 电子对抗区域的表示方法
2.1 CRgn类简介
目前,复杂区域的表示方法可以采用多边形链表方式和CRgn类表示方式。对于二者优缺点的比较,参考文献3已经进行了较为详细的分析,这里研究的电子对抗区域传输和显示方法使用的是CRgn类表示方式。
对于区域数据Windows提供的HRGN结构,在MFC中用CRgn类对该结构进行了封装,CRgn类支持圆形(椭圆形)、矩形以及多边形区域的创建和显示,同时支持区域之间的各种操作,如和、差、交、并、异或等。因此通过解析CRgn类的数据组织形式,便可以实现各种电子对抗区域的表示和传输。
在Window中,对区域的数据是通过如下结构表示的:
typedef struct _RGNDATA
{
RGNDATAHEADER rdh; //区域数据的头信息
Char Buffer[1]; //区域数据指针,指向矩形结构(RECT)
} RGNDATA;
typedef struct _RGNDATAHEADER
{
DWORD dwSize; //区域结构头的大小
DWORD iType; //区域的类型,为RDH_RECTANGLES
DWORD nCount; //构成区域的矩形数目
DWORD nRgnSize; //区域数据大小
RECT rcBound; //区域的外接矩形
}RGNDATAHEADER;
从上述的数据结构可以看出,Windows对区域的表示,无论是基本的图形,如圆、矩形、多边形等,还是各种复杂的合成区域,都是通过用有限个相互毗邻的矩形坐标点来完成的。
图 2
如图2所示,这些矩形的坐标点(左上和右下)代表了区域的包络。同时需要注意的是尽管矩形的坐标点代表了区域的包络信息,但这些包络信息的排列顺序是按照对区域由上至下进行扫描时得到的,因此在由这些矩形坐标点反求区域时,不能简单地用多边形函数进行连接得到。
2.2 区域的产生方法
通过联邦成员的模型计算,可以得到不同电磁辐射单位作用区域以及相互之间的叠加、削减关系。以通信畅通区域为例,多个通信站同时工作时,联邦成员软件使用Windows GDI API函数CreateEllipticRgn()产生每个通信站的通信畅通区域,该函数的结构定义
HRGN CreateEllipticRgn
(
int nLeftRect, // 椭圆外接矩形左上角x轴坐标
int nTopRect, // 椭圆外接矩形左上角y轴坐标
int nRightRect, // 椭圆外接矩形右下角x轴坐标
int nBottomRect // 椭圆外接矩形右下角y轴坐标
);
当多个通信畅通区域相互叠加时,使用Windows GDI API函数CombineRgn()产生合成通信畅通区域,该函数的结构定义
int CombineRgn(
HRGN hrgnDest, // 合成目标区域句柄
HRGN hrgnSrc1, // 源区域1句柄
HRGN hrgnSrc2, // 源区域2句柄
int fnCombineMode // 合成方法
);
此时,第四个参数fnCombineMode为 RGN_OR,从而形成合成通信畅通区域,如图3中的浅蓝色区域所示。
图3干扰前的合成通信畅通区域
当通信站受到通信干扰压制后,其合成通信畅通区域大幅度缩小,同样,使用Windows GDI API函数CombineRgn()产生合成通信畅通区域,第四个参数fnCombineMode为 RGN_OR和RGN_DIFF,从而形成干扰后的合成通信畅通区域,如图4中的深蓝色区域所示,深蓝色区域中的空洞表示通信站受到抵近
式干扰时形成的内部通信盲区。
图4干扰前后合成通信畅通区域的比较效果图
3 电子对抗区域的传输方法
3.1 形成传输结构体
各个联邦成员从RTI上接收订购数据后,通过模型计算得到各自的电子对抗区域之后,通过调用将CRgn类区域的RGNDATA结构体进行打包。
首先,通过调用MakeRgnFloat()函数将缓冲区dataBuf中的屏幕坐标转换成经纬度坐标,以保证同一个点在各个联邦成员中表示的实际位置是一致的。
BOOL MakeRgnFloat()
{
if (nRegionDataFrm==1) //已经是经纬度坐标,直接返回
return FALSE;
}
nRegionDataFrm=1;
RGNDATA* rgnData;
nRgnSize=GetRegionData(NULL,0); //参数为NULL时,返回需要的缓冲区大小
dataBuf=new char[nRgnSize];
rgnData=(RGNDATA*)dataBuf;
nRgnSize=GetRegionData(rgnData,nRgnSize);
POINT* dcpoint;
Gpoint *wrectpoint;
dcpoint=(POINT*)rgnData-Buffer;
wrectpoint=(Gpoint*)rgnData-Buffer;
CCoordinate myCC;
for (int i=0;i(int)(*2);i++){
CMyPoint mPt=toNE(dcpoint[i]);
wrectpoint[i].x=(float)mPt.x;
wrectpoint[i].y=(float)mPt.y;
}
return TRUE;
}
然后,再形成可供传送的结构体CEWRegion,其定义
typedef struct CEWRegion
{
int nCode; //传输编码
int nTotalLen; //区域数据大小
int nflag; //区域识别码
COLORREF clrRegion; //区域颜色
te bFilltype; //区域填充方式
char chRegionData[2048]; //一般不超过2K
CEWRegion ()
{
nCode = 1000;
memset(chRegionData,0,2048);
}
} CEWRegion;
3.2 传送电子对抗区域
各个联邦成员通过RTI将各自产生的区域发布出去后,由态势显示联邦成员从RTI上接收,通过解析结构体,调用GetRgn()函数将结构体中的地理坐标点转换成为可以被Windows API函数识别的屏幕坐标。
CRgn* GetRgn()
{
char* buf = new char[nRgnSize]; //区域信息数据缓冲区,大小为nRgnSize
memcpy(buf, dataBuf, nRgnSize); //从公共缓冲区dataBuf获取数据
RGNDATA* rgnData;
rgnData = (RGNDATA*)buf;
POINT* dcpoint;
Gpoint *wrectpoint;
dcpoint = (POINT*)(buf + sizeof(RGNDATAHEADER));
wrectpoint = (Gpoint *)dcpoint;
CCoordinate myCC;
for (int i=0;i(int)(*2);i++){
CMyPoint mPt; //将各个扫描矩形的顶点地理坐标值
mPt.x = wrectpoint[i].x; //转换成为屏幕坐标值
mPt.y = wrectpoint[i].y;
CPoint pt = reen(mPt);
dcpoint[i].x = pt.x;
dcpoint[i].y = pt.y;
}
if (m_hObject) {
DeleteObject();
}
BOOL bRe = CreateFromData(NULL,nRgnSize,rgnData);
delete buf;
return this;
}
图5 多种电子对抗合成区域的最终显示效果示意图
然后,调用Windows GDI API函数CreateFromData()还原各类区域,形成复杂的、表示多个类型区域的、可以带有空洞的任意二维图形,并将最终结果提交显示终端显示出来,从而完成分布式系统中多种电子对抗合成区域的显示。
4 结束语
合成电子对抗区域的显示是电子对抗作战模拟系统需要实现的重要内容,其将无形的电子战效能以直观、形象的方法表现出来,本文介绍的方法也将在实现基于HLA的分布式电子对抗模拟仿真系统的过程中得到不断发展和完善。
参考文献
1 Frederick Kuhl,Richard Weatherly,Judith Dahmann. An Introduction to the High Level Architecture. Pearson Education,Inc.2003
2 邵国培等.电子对抗作战效能分析.解放军出版社,1998,2
3 刘耀周,董光波,张锡恩,牟建国.分布交互式仿真.计算机仿真,2003,12
4 曹志耀.计算机作战模拟系统设计原理.解放军出版社,1999,5
上一篇:Apache+Php+Mysql在Linux下的安装与配置
下一篇:车辆导航及监控系统设计研究