王钦钊 WANG Qin-zhao;黄钊 HUANG Zhao;李小龙 LI Xiao-long;吴伟胜 WU Wei-sheng
(装甲兵工程学院,北京 100072)
摘要: 为了加强仿真系统的通用性和可管理性,提出了基于共享内存的装备仿真系统结构。介绍了基于共享内存的模型结构;利用信号量的方法来解决各模块对共享内存的访问控制;详细介绍了炮长节点装备模型视镜模型、数学模型、炮长终端模型对共享内存写入的结构体内容。
教育期刊网 http://www.jyqkw.com
关键词 : 仿真系统;体系结构;共享内存;进程间通信
中图分类号:TP391.9 文献标识码:A 文章编号:1006-4311(2015)03-0206-03
作者简介:王钦钊(1973-),男,山东文登人,教授,硕士生导师,主要研究方向为火控系统、系统仿真;黄钊(1991-),男,陕西山阳人,硕士研究生,主要研究方向为系统仿真;李小龙(1976-),男,山西代县人,硕士,讲师,主要研究方向为系统仿真。
0 引言
随着分布交互式仿真技术的不断发展,利用VC等软件平台,结合成熟的仿真引擎开发武器装备仿真系统逐渐成为军事训练、试验领域研究的热点。但是鉴于军事仿真中武器装备结构复杂、功能繁多等特点,基于目前通行体系结构的仿真系统在实际的使用中逐渐暴露出了系统开发、维护困难,可拓展性差等问题。
本文在结合武器系统的特点,分析现有仿真系统的缺点的基础上,提出基于共享内存的武器装备仿真系统的体系结构。为了更直观地阐述系统的结构和开发过程,本文将以坦克分队模拟训练中的炮长节点为例进行说明。
1 现有仿真系统的缺点
军事仿真具有视景逼真、交互性强、仿真节点多的特点,现有的仿真系统通常是利用VC等开发平台实现网络通信、人机交互和三维图形显示等功能。
此种结构的仿真系统主要几个方面的问题:①对系统开发人员要求过高;②系统的可读性和可维护性差;③通用性较差。为了解决上述问题,本文提出基于共享内存机制的装备仿真系统结构。将仿真系统的三维视景显示和数学解算模型、网络通信等相互分离形成独立的进程,利用共享内存完成数据的交换和同步,组成仿真系统。
2 基于共享内存的仿真系统体系结构
2.1 共享内存的介绍 共享内存指在计算机中将同一块物理内存映射到两个或者多个进程各自的进程地址空间,各进程可以及时获取其他进程对共享内存中数据的更新[1]。
在分布交互式仿真中,使用共享内存技术,具有如下优点[2]:
①系统的开发不再仅仅局限于仿真引擎中,系统模块化程度更高,方便管理和改进,增强通用性和开发效率;
②可以选择性地获取仿真过程中的各种数据,方便其他进程使用和分析仿真结果;
③系统开销小,有利于硬件资源的高效应用;
④通信效率较高,可以满足仿真中数据交换高频率、实时性要求。
2.2 仿真系统的结构 为了解决现有仿真系统所存在的问题,我们对仿真系统的结构进行了重新定义,将仿真系统按照功能进行模块化划分:在分布式仿真HLA/RTI结构的基础上,使用RV引擎进行三维视景的模拟,利用Simulink等数学分析工具对仿真系统的各项数学模型进行建模,炮长终端等装备部件采用C++独立建模,各个模块相互独立运行,在基于共享内存的通信协议下实现仿真的同步和数据的交换。网络通信模块从共享内存中将本机各项仿真数据整合为联邦盟员与网络其他节点进行通信。如图1所示。
在炮长节点的仿真计算机中,各个模块的任务和功能大致如表1所示。
3 基于共享内存的进程间通信机制
基于共享内存的仿真系统体系结构中,共享内存作为数据存储和交换的公共逻辑内存,是连接各个模块组成仿真系统的纽带,所以各模块仿真进程间基于共享内存的通信协议是系统实现的关键。
3.1 共享内存的建立 两个仿真进程之间共享虚拟内存大致步骤为[3]:①在一个应用程序中利用CreateFileMapping()函数创建一段有名称标示的内存空间,并设置其大小和访问权限;②调用MapViewOfFile()函数将该内存映射到本程序的地址空间中;③另一个应用程序可以直接或者通过通讯管理程序利用OpenFileMapping()函数访问该内存对象,一旦访问成功获得其句柄,则该应用程序也将把该空间映射到自身地址空间中,这个内存空间就可以被当作共享内存来使用。
本文将共享内存进行分块,根据数据写入方的不同创建不同的结构体,并将共享内存自动返回的空类型LPVOID句柄转化为变量结构体指针,利用该指针加上偏移量就可以访问到具体变量对应的空间完成读写。
3.2 共享内存的访问控制 由于多个进程共享一段内存,为了实现其访问逻辑,本文采取信号量的方式来协调进程对共享内存中数据的读写操作。
如图3所示,为实现装甲车辆火控系统解算射击提前量和方位角,需要三维视景仿真程序和火控系统数学模型进行通信。在RV引擎中获取激光测距、火炮运动角速度、坦克倾斜角等数据,写入共享内存而后发出信号量1;数学模型检测到信号量1后利用这些数据解算得出射击提前量和方位角并发送信号量2;视景引擎又根据解算的提前量和方位角驱动火炮运动。通过此访问控制机制,保证了数据传输的逻辑顺序。
4 应用实例
装甲装备模拟训练中炮长节点的装甲装备模型结构在1.2中已经予以讨论,下面就各部分的具体的建模方法和其对共享内存的读写内容及读写方法分别做以介绍。
4.1 三维视景模型 本文采用RV引擎建立视景模型。结合1.2中视景模型的任务,可以分析出在坦克射击训练过程中,视景模型的输出数据主要有:坦克坐标、坦克运动速度和方向等。这些数据都可以通过简单的编程获取。RV引擎获取的数据经过转换,转变为标准的C++数据类型写入到共享内存中结构体的相应位置。如下是射击时,结构体中用于解算射击诸元所需的部分变量,数学模型获取这些数据进行瞄准角和提前量的解算。
4.2 数学模型 火控计算机最主要的功能之一就是利用其EPROM中由各种弹药的射表所逼近的弹道函数完成瞄准叫和方位修正量的计算。在实装中通常需要求出瞄准角、飞行时间、横风、药温、气温和初速减退量等与距离的函数关系。为了简便起见,我们只对对射击影响最大的瞄准角和飞行时间进行模拟。
一般情况下,弹道函数中瞄准角的计算公式为:
4.3 炮长终端仿真进程 在射击训练中炮长终端主要是负责部分信号量的发送和当前火炮武器系统状态的显示。
炮长终端对共享内存的写入数据,大多是工况选择、弹种选择等信号量,提供给其他模块。如下是其写入共享内存的结构体内容。
4.4 网络通信进程 就整个模拟训练系统而言,目前多采用HLA/RTI的结构。HLA提供通用的技术框架和开发规范,而运行支撑平台RTI是HLA接口规范的具体实现,目的在于将仿真应用、运行管理和底层通信等基本功能的分离,实现盟员间数据的有序和按需传送。文献[4]详细介绍了基于分布式共享内存的RTI通信机制[4],在此不再赘述。
5 结束语
图3为炮长节点使用破甲弹对1180m外目标进行射击的效果,各项数据采集、传输正常,弹道显示正确,能够较为准确地模拟坦克射击的过程。
测试运行结果表明,基于共享内存的装备模型建模可以满足分布式交互仿真的实时性要求,提高了模型的开发效率和可维护性。此种仿真系统结构在军事模拟训练、试验领域有较好的应用前景。
教育期刊网 http://www.jyqkw.com
参考文献:
[1]刘畅.分部交互仿真若干问题的研究[D].北京:北京邮电大学,2008.
[2]梁强,鲁鹤松,杜君,等.仿真软件多进程间数据交互实现研究[J].系统仿真学报,2013,25(S):137-141.
[3]赵晓冬,康凤举,陈法扬.舰艇编队作战视景仿真系统研究[J].火力与指挥控制,2011,36(2):93-96.
[4]梁洪波,朱卫国,姚益平,等.基于分布式共享内存的RTI通信机制研究[J].系统仿真学报,2013,25(7):1484-1488.