基于GL?Studio的飞机仪表仿真的研究
2020-10-21于丽娜崔佳璐王欣怡王佳逸傅懿婕
于丽娜 崔佳璐 王欣怡 王佳逸 傅懿婕
摘要:为了更好的实现飞机模拟仪表盘的仿真,基于GL Studio软件和VC++6.0进行制作,来进一步学习研究飞机仪表盘的。虚拟仪表通过应用程序将计算机与设备结合起来,用户可以利用计算机软件自主设计仪表的界面和指针来模拟飞机仪表,用程序可以实现指针转动,数字实时显示,图形闪烁,数据传递等,更便捷的实现飞机模拟仪表的仿真。
随着我国通用航空产业的迅速增长,市场对通航模拟训练器材的需求巨大。目前,国内在民用航空和通用航空领域逐渐开始重视飞行仿真技术的研究和仿真产品的研制。飞行模拟器仪表仿真系统作为与飞行员主要的交互窗口,它显示了各种重要的飞行参数和重要的导航参数显示的窗口。GL Studio有内建代码生成器把图形设计创建的文件生成可移植的VC代码。可进行人机互动,实时显示仪表之间的动态关联,效果直观逼真。GL Studio开发流程主要包括创建纹理、图形界面设计、软件设计、系统实现四大方面。
一.任务
依照某直升机座舱主仪表板,制作仿真仪表。虚拟仪表主要应用GL Studio和VC++ 6.0软件进行制作。通过UDP通讯协议通讯,实现数据交互。
二.技术指标
2.1统功能
模拟飞机的真实座舱仪表环境,以满足与飞行有关数据的指示。
2.2仿真系统总体要求
驾驶舱仪表的相对响应密切耦合,可以提供综合的感觉提示。这些仪表应当在规定时间内对驾驶员位置上快速有力的输入做出响应,但不能短于相应飞机在同样条件下做出响应的时间。
实时性:整体系统响应延迟时间:≯120毫秒。
电源:供电电压:380/220V
电源频率:50Hz
电压波动:±10%
三.总体设计
仿真结构如图一所示。
该项目制作的虚拟仪表均显示在LCD上,程序运行于航电/接口控制计算机上。如图二所示。
所有仿真的组件,均采用虚拟仿真的形式,其中包含仪表板、仪表、告警灯,按钮、旋钮不仿真。
四.开发流程
本次项目的开发流程如下图三所示:
4.1 图形设计
图形设计是在仪表开发的第一步,要将大量的飞行信息在有限的仪表面板上显示,特别要注意布局简洁、合理、醒目等。现在应用成熟的飞行仪表界面设计有很多,可以从中借鉴,取其精华。以主仪表板为例,主要向驾驶员提供飞机姿态、飞行航向、飞行高度、飞行速度等信息。
4.2 创建模型
开发仪表和控制面板,根据模拟真实飞行,在仿真面板上完成各种图形、字符及相关飞行参数的显示,因此必须建立标准字符库和圖片库。
(1)制作纹理。首先要采集真是纹理数据,然后用Photoshop处理,获得符合要求的png格式纹理贴图。由于GL Studio对中文汉字输入支持不完善,所以把汉字也制作成纹理图片,这样还能提高渲染效率。
(2)实体模型建立。建立仪表图形、画面显示符号的模型,先要把每个仪表页面的模型的位置和内部层次关系弄清楚,进行初步规划。每个对象都是多边形组成,使用GL Studio提供的基本图形元组合完成,通过旋转、剪切、扭曲等操作,能嫁接合成复杂的实体。对于模型中不可模拟的细节,还可以用图片纹理替代,以达到逼真度的要求。显示模块画面完成,下一步就要给定义逻辑结构、动作程序、执行用户事件、时间或数据事件触发的响应动作,实现实时驱动。这一步一般都是和画面模型创建交叉进行。
4.3 驱动代码编写
对象的行为事件是各个成员函数的集合,受外部数据的控制,但行为事件本身的驱动程序是在仪表内部描述实现,每个仪表都有自己独立的行为。一般旋转可以使用DynamicRotate()函数进行控制。发动机指示和机组告警系统中燃油、油量、液压等的指针旋转可以使用MoveObject()函数来完成。读数可以使用VaString()函数来完成。
下面介绍主要的驱动方式的实现过程。
(1)旋转(以横滚刻度尺为例)。首先在界面的Code区域,用右键选择“Add”选项,然后点击“Property”选项,在出来的空白表格内填入成员函数的名字为Indicator , 类型为float , 然后自动派生的成员变量的名字为_indicator。在该成员函数的“set”方法中添加下面代码:
_clampedValue=CLAMP_VALUE(value,-70.0f,70.0f);
//把输入值限定在-70至70,这是因为横滚刻度尺的旋转区间是-70度到70度
_indicator = _clampedValue;
indicator->DynamicRotate(_indicator,Z_AXIS); //横滚刻度尺实现绕Z轴旋转
(2)数字实时显示(以经度为例)
成员函数的名字为Latitude,类型为float,派生的成员变量的名字为_latitude。在该成员函数的“set”方法中添加下面代码:
_latitude = value;
int degree = (int)_latitude;
int minute =(int)((_latitude - degree)*60);
int second = (int)(((_latitude - degree)*60-minute)*60);
latitude_text1->VaString("%d",degree); //VaString()是数字显示的函数
latitude_text2->VaString("%d",minute);
latitude_text3->VaString("%d",second);
(3)表盘指针的旋转。
needle_path->MoveObject(needle, value);
output->VaString("%d", (int)value);
(4)数据传递(以转速为例)。
由于调用了复用组件.dll动态链接库,所以数据传递要用到Resource()函数。外部数据先传递到启动画面和主画面,然后由它们再传递到转速组件,控制转速的指针和颜色根据外部数据做出相应的响应。
Float clamp_z1=CLAMP_VALUE((float)z1, 0.0f, 100.0f);
rpm1->Resource("Rotate")< rpm1->Resource("ChangeColor")< 4.4完成最后调试。 单机测试实际上是简化了的系统联调,能验证大部分逻辑关系,但不能杜绝人为的疏忽和排除实际运行的中可能遇到的状况。为了验证虚拟座舱仪表系统总体设计方案的可行性、虚拟座舱的功能特性和性能要求,必须要和整个演示系统进行协调测试运行。 五 结论 通过GL Studio软件和VC++6.0可以對于飞机模拟仪表盘的仿真,实现了一个简单虚拟仪表的设计,数据传输和简单控制。用软件和程序对仪表盘实现更便捷的仿真,表现在:飞机仪表盘图案更加灵活多变,具有很高的逼真性,其次仿真速率更快,效率更高。 参考文献 [1]刘鲁峰.基于GL Studio的虚拟仪表的仿真研究[J].甘肃科学学报,2015,27(02):15-18. [2]李秀,宋丽梅,周兴明,刘长钦.GL Studio在直升机仪表面板仿真中的应用[J].计测技术,2009,29(02):42-44. [3] Microsoft Corporation.Microsoft Visual C++语言参考手册[M].前导工作室译.北京:清华大学出版社.1998 [4]陆志斌,郭广利,魏靖彪,赵玉辉.GL Studio在飞行模拟器虚拟仪表仿真中的应用[J].电脑编程技巧与维护,2012(12):114-116. [5]孙艳丽,王玲玲,陈佳琪.基于GL Studio的虚拟仪器仪表设计与仿真[J].系统仿真技术,2015,11(02):151-155. [6]陈怀民,吴锦雯,黄晓波.基于GL Studio的飞行仿真虚拟仪表软件设计与实现[J].测控技术,2013,32(05):89-91+95. [7]李东,吕维涛,雷震,丑力.基于GL Studio的多仪表综合显示面板仿真[J].电脑知识与技术,2010,6(03):674-676. [8]刘丽娇. 基于GL-Studio的飞行模拟机虚拟座舱开发[D].哈尔滨工业大学,2009.