基于GL Studio的航空虚拟仪表设计∗

2017-06-05 15:03李建海何青洋2孙艳丽
计算机与数字工程 2017年5期
关键词:主程序模拟训练模拟器

李建海何青洋2孙艳丽

基于GL Studio的航空虚拟仪表设计∗

李建海1何青洋2孙艳丽1

(1.海军航空工程学院基础实验部烟台264001)(2.海军大连舰艇学院大连116023)

利用VC++与GL Studio软件设计并实现了一款用于某型飞机模拟训练的监视虚拟仪表系统。创建飞行虚拟仪表组件,介绍航空虚拟仪表的实现过程,并将构建的各个虚拟仪表整体整合到一个仪表显示系统中,实现满足某型飞机模拟训练系统航空仪表状态监控需要的软件系统。

虚拟仪表;GL Studio;UDP协议

Class NumberTP273

1 引言

航空虚拟仪表是航空模拟训练系统的一个重要组成部分,既是航空模拟训练程序与操作人员的交互通道,也可以跨平台为教练、监控人员提供与受训人员同步的仪表数据,以便对模拟训练的各个环节进行监视分析并及时进行指导纠正[1~3]。本文采用GL Studio设计的航空虚拟仪表,作为飞行模拟训练系统的一部分,通过UDP通信管道与飞行模拟器主程序交互,对飞行状态参数进行显示。

2 航空虚拟仪表仿真通用框架

航空虚拟仪表作为飞行模拟训练系统的一部分,通过数据通信管道与飞行模拟器主程序进行数据传输。其开发主要分为两个部分:显示和数据驱动。通过GL Studio结合VC++创建仪表显示界面;利用VC++创建一个基于独立进程运行的数据通行管道作为数据驱动。如图1所示。

图1 飞行模拟训练系统仪表仿真通用架构

网络通信模块是虚拟仪表程序和飞行模拟器主程序交互的唯一接口,主要作用是接收来自数据通信管道的数据,并且将数据正确解析为对应飞行参数,本文采用UDP通信协议搭建通行管道。显示模块的核心程序是内部逻辑选择类,主要作用是接收数据解包后的飞行参数并以此为依据驱动仪表程序,控制各个虚拟仪表显示对应的参数。

3 设计方案

GL Studio是目前世界上最先进的虚拟仪表开发工具,可以单独运行,也可作为VC++6.0中Win32平台下的可执行文件或者动态链接库运行。为了编程和调试的方便,本文采用后一种方法。在此种方法下,GL Studio开发虚拟仪表的过程分为虚拟仪表规划、纹理设计、空白工程创建、虚拟仪表设计、代码生成、编译链接及发布虚拟面板等七步[4~6]。按此步骤将虚拟面板设计完成并和谐地整合到同一仪表界面,同时利用测试软件测试其性能。

4 设计过程

飞行模拟训练系统虚拟仪表包括气压高度表、地平仪、座舱高度压差表、空数-M数表等多个仪表。

4.1仪表引入

虚拟仪表设计过程相同,取气压高度表为例,简要介绍虚拟仪表设计具体过程与操作。气压高度表实际上是一种气压计,通过测量航空器所处位置大气压力从而推算出航空器的高度。气压高度表一般以海平面气压为基准气压,也就是说当气压高度表气压值为海平面气压时,高度指示为零。气压高度表外表盘一圈表示1000m,对应内表盘一个小刻度,右侧指标刻度盘指示当前大气压强。

4.2气压高度表底层模块创建

1)第一步创建空白工程。运行VC++程序,点击菜单栏文件,选择新建,在Project菜单中选中GL Studio Standalone AppWizard工程,输入工程名字AtmosAltimeter,选择工程存储位置,完成空白工程创建。

2)编译链接空白工程。在VC++6.0中对刚刚创建的AtmosAltimeter工程进行编译链接,系统会自动在存储该工程的文件夹中生成工程头文件、源文件以及main文件等。

3)绘制虚拟仪表部件。用GL Studio绘制仪表所需部件。在上述工程存储文件夹中打开Atmo⁃sAltimeter.gls文件,根据虚拟仪表外观和功能,利用工具栏提供的基本图形模板绘出外表盘、长指针、短指针、气压显示窗口和旋钮等五个对象的几何外框,并分别命名为OutPanel、InPanel、ThinNee⁃dle、WideNeedle、KnobButton。

4)为绘制好的对象分别添加纹理。以外表盘为例,右键单击OutPanel,弹出对象属性窗口,在Texture Setting中选择Add Texture,从系统存储盘中找到仪表所需的Texture纹理并一一添加到Tex⁃ture Setting中。在Texture Setting中选中外表盘的纹理,单击Apply,外表盘的纹理就添加到了Out⁃Panel对象中。对外表盘纹理,只需要将纹理主要部分显示出来,边缘以及图片其他部分不显示,所以需要将Draw Mode和Mapping Technique这两项分别设置为Points和Replace。

5)完成仪表显示界面。添加Texture纹理后,纹理可能与绘制的几何图形不完全吻合,此时可以单击左键选中需要编辑的对象,接着在工具栏中单击(Texture Manipulation Mode)。然后在绘图界面中调整Texture的大小和角度,使之与绘制的几何图形完全契合。依照此方法给所有对象添加Texture并完成设置后,气压高度表的显示界面就设计完成[7]。

6)设置仪表类型。所有虚拟仪表最终需要整合到同一仪表界面,所以进入Generation界面将每个仪表设置为Component类型,为以后仪表整合做准备。

5 仪表程序编写

根据仪表的显示方式和内部逻辑关系,确定仪表各个部件的功能,并以此为依据为添加相应的函数代码,从而实现虚拟仪表的响应功能[8]。

已知气压高度表是根据航空器所处位置的气压反推航空器高度,用双指针、双刻度的方式显示高度,用指标刻度盘显示大气压强。气压高度表的关键变量是大气压强,通过测量大气压强的变化确定飞机高度。

图2 完成的气压高度表

根据气压高度表的内部运行逻辑关系,可知需要为指针、压强指标刻度盘、旋钮添加响应函数。具体函数及操作过程如下:

1)定义变量。在GL Studio的代码界面,右键单击Class Variables,选择Add,定义六个变量并分别赋初值。这些变量一方面决定气压高度表指针和刻度盘的起始的位置点,另一方面作为气压高度表对外部数据接收的端口,实现对飞行模拟座舱操作平台数据的接收。

2)添加旋钮响应函数。在GL Studio的Appli⁃cation界面右键单击对象KnodButtonSys,接着在In⁃put Device窗口的回调定义域中输入响应函数。

3)添加长指针响应函数。创建工程之后,GL Studio会自动生成两个函数Initialize和Calculate。在GL Studio的Code界面展开Class Methods,左键单击Calculate,添加指针响应函数。

4)添加短指针响应函数。短指针控制函数作用是确定短指针初始位置,指针指示范围,同时控制指针以外表盘中心为圆心做圆周运动。

5)气压标准刻度盘控制函数

气压标准刻度盘控制函数的主要作用是控制刻度盘随着气压变化做圆周转动,角度计算公式为:角度=当前气压与最小气压的差值占整个气压范围的百分比*360。需要注意的是,由于气压越低,高度越高,所以要对角度取相反数。

6)完成设计。全部代码编写完成后,在GL Studio工具栏中点击保存,对所有设计进行保存。接着点击菜单栏Code选项,选择Generate All,将编写的代码自动生成C++函数并存放进AtmosAltime⁃ter.dsw工程文件中。

7)调试运行。在VC++中打开AtmosAltimeter. dsw工程,编译链接调试运行,查看程序是否出错。如果报错,找到错误程序,回到GL Studio界面进行更改,然后保存,生成代码,再回到VC++继续调试运行,直到虚拟仪表正常运行。

完整的气压高度表创建完成,如图2所示。同时气压表自动预留通信端口,可以通过UDP通信管道接收外部数据,根据接受数据控制高度指针的旋转角度,达到虚拟仪表与飞行模拟器主程序交互的效果。

6 整体界面组合

所有虚拟仪表创建完成之后,相互之间是相对独立的个体,接下来需要将所有的仪表整合到一起,形成完整的虚拟仪表界面,完成整个航空虚拟仪表系统的设计。

运行VC++6.0,新建工程,将其命名为system,完成创建。将每个仪表的纹理文件夹复制到sys⁃tem文件夹目录下,修改每个仪表Texture纹理的添加路径为system文件夹。运行system.gls文件,点击工具栏中的Add a new component reference按钮,弹出添加文件对话框,选择设计完成的虚拟仪表。gls文件,逐一添加,相应的仪表就会自动添加在system工程界面。然后按照需求改变仪表的大小及位置,组合成完整的仪表界面。最后保存并生成代码,完整的航空虚拟仪表工程就创建完成。

7 网络通信模块

虚拟仪表和飞行模拟器主程序通过网络进行数据传输,网络通信模块是两者交互的重要端口,其作用主要有两个:一是完整接收并正确解析飞行模拟器主程序发送的飞行状态参数;二是将接收到的参数传递给对应的虚拟仪表进行显示。虚拟仪表对数据传输的实时性要求较高,采用UDP协议开发网络通信模块[9~11]。网络通信模块直接在虚拟仪表的主程序中编写,主要包括创建套接字、创建接收线程和内部数据赋值几个方面,具体步骤如下。

1)加载、创建并绑定套接字库。程序基于UDP编写,创建套接字时,套接字库要创建数据报类型。虚拟仪表和测试程序在一台计算机运行,绑定套接字时,将IP地址绑定到本地回路“127.0.0.1”上。

2)创建接收线程。创建线程前先判断套接字初始化是否成功,成功才创建线程。

3)定义结构体函数UDPData,用于将接收到的字符串转换为结构体,得到飞行模拟器主程序发送的各项参数。需要注意的是,油量表具有三个显示状态:总油量、主油箱油量、副油箱油量。所以除了定义油量这个变量外,还要定义一个用于判断油量表显示状态的变量。

4)接收数据并正确解析,将接收到的参数赋给对应仪表的核心变量,实现参数显示。

经过以上步骤,完成网络通信模块的编写,虚拟仪表具有了数据接收与显示能力。

8 结语

以气压高度表为例,介绍了虚拟仪表设计的整个流程,以及每个仪表的主要功能参数以及主要函数,并把独立的虚拟仪表整合到同一虚拟仪表界面的方法,最终完成了某型航空虚拟仪表的设计。同时给出了一个运用MFC和UDP创建虚拟仪表网络通信模块和编写测试程序的方法,用于模拟虚拟仪表与飞行器主程序的交互。

[1]于辉,赵经成,付战平,等.GL Studio虚拟仪表技术应用与系统开发[M].北京:国防工业出版社,2010.

YU Hui,ZHAO Jingcheng,FU Zhanping,et al.Applica⁃tion and System Development of GL Studio Virtual Instru⁃ment Technology[M].Beijing:National Defense Industry Press,2010.

[2]罗天成,李滚,何晓波,等.虚拟仪表在无人机飞控测试系统中的应用[J].兵工自动化,2012,31(5):75-77.

LUO Tiancheng,LI Gun,HE Xiaobo,et al.Application of Virtual Instrument in UAV Flight Control Test System[J]. Ordnance Industry Automation,2012,31(5):75-77.

[3]刘国庆,李哲煜.某型飞机模拟训练器虚拟仪表系统的研究[J].微计算机信息,2010,28(6):110-112.

LIU Guoqing,LI Zheyu.Research of Virtual Instrument System for a Flying Simulation Trainer[J].Microcomputer Information,2010,28(6):110-112.

[4]陈怀民,吴锦雯,黄晓波.基于GL Studio的飞行仿真虚拟仪表软件设计与实现[J].测控技术,2013,32(5):89-91.

CHEN Huaimin,WU Jinwen,HUANG Xiaobo.Design and Realization of Flight Simulation Virtual Instrument Based on GL Studio[J].Measurement&Control Technolo⁃gy,2013,32(5):89-91.

[5]刘鲁峰.基于GL Studio的虚拟仪表的仿真研究[J].甘肃科学学报,2015,27(2):15-18.

LIU Lufeng.Research on Simulation of Virtual Instrument Based on GL Studio[J].Journal of Gansu Sciences,2015,27(2):15-18.

[6]陆志斌,郭广利,魏靖彪,等.GL Studio在飞行模拟器虚拟仪表仿真中的应用[J].电脑编程技巧与维护,2012(12):114-116.

LU Zhibin,GUO Guangli,WEI Jingbiao,et al.The Appli⁃cation of GL Studio in Virtual Instrument Simulation of Flight Simulator[J].Computer Programming Skills and Maintenance,2012(12):114-116.

[7]王述运,林亚军,魏青.飞行模拟器虚拟仪表设计[J].现代计算机,2011(12):74-77.

WANG Shuyun,LIN Yajun,WEI Qing.Design of Virtual Instrument for Flight Simulator[J].Modern Computer,2011(12):74-77.

[8]吴虹.虚拟仪表设计中建模方法的研究[D].哈尔滨:黑龙江大学,2007.

WU Hong.Research on Modeling Method of Virtual Instru⁃ment Design[D].Harbin:Heilongjiang University,2007.

[9]张凯.基于UDP的可靠文件传输协议的设计与实现[D].西安:西安电子科技大学,2014.

ZHANG Kai.Design and Realization of Reliable File Transfer Protocol Based on UDP[D].Xi'an:Xi'an Elec⁃tronic and Science University,2014.

[10]张永峰.基于UDP协议的航空发动机振动实时监视系统设计[J].测控技术,2015,34(3):55-58.

ZHANG Yongfeng.Design of On-line Aero-Engine Vi⁃bration Monitoring System Based on UDP Network Proto⁃col.Measurement&Control Technology,2015,34(3):55-58.

[11]彭云辉,王跃钢,刘冬,等.VXI总线与虚拟仪器技术[J].电子技术应用,2003(1):6-9.

PENG Yunhui,WANG Yuegang,LIU Dong,et al.VXI Bus and Virtual Instrument Technology[J].Application of Electronic Technique,2003(1):6-9.

Design of Aeronautical Virtual Instrument Based on GL Studio

LI Jianhai1HE Qingyang2SUN Yanli1
(1.Department of Basic Experiment,Naval Aeronautical and Astronautical University,Yantai264001)(2.Dalian Naval Vessel Academy,Dalian116023)

A monitoring virtual instrument system which is used in training simulator for a certain type of aircraft is designed and realized by using VC++and GL Studio.Virtual instruments component are created,and the realization process of virtual instru⁃ment is discussed.By integrating all virtual instruments into an instrument display system,a virtual instrument system of teaching monitoring console which satisfies the needs of this aviation training simulator is realized.

virtual instrument,GL studio,UDP

TP273

10.3969/j.issn.1672-9722.2017.05.044

2016年11月7日,

2016年12月30日

李建海,男,硕士,副教授,研究方向:电气控制。孙艳丽,女,硕士,工程师,研究方向:信号处理。

猜你喜欢
主程序模拟训练模拟器
驾驶模拟器转向系统的设计与研究
自动升级程序在船舶监测系统中的应用
了不起的安检模拟器
盲盒模拟器
划船模拟器
浅谈数控铣削技术代码程序的嵌套方式研究
电控冰箱软件模块化设计
模拟训练(二)
时光倒流 换回PotPlayer老图标
模拟训练(十一)