美章网 资料文库 飞机虚拟仪表建模仿真研究范文

飞机虚拟仪表建模仿真研究范文

本站小编为你精心准备了飞机虚拟仪表建模仿真研究参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

飞机虚拟仪表建模仿真研究

飞机设计杂志》2014年第三期

1软件结构

本课题研发的通用虚拟仪表设计/仿真系统基于如图1所示的结构设计思路。面板界面为用户与虚拟仪表系统的人机接口,提供接受输入、做出响应并显示结果的功能,用户可以通过点击响应的开关、按钮等进行人机交互的输入操作,仪表面板接受用户的输入操作,对输入操作向控制和响应模块进行数据传输,并接受控制和响应模块的响应反馈。在用户界面的显示仪表上做出相应显示,如指针转动、数字数据变化、飞行姿态变化等。该模块对于用户体验有着重要意义,必须做到逼真度高,才能达到系统的沉浸性的要求。数据库模块有两方面功能。一方面,接受来自外部数据源的导入和仪表设计人员对数据库的直接可视化修改。数据源来自文献资料、飞行器制造商手册、航空公司、机场、空管局等的来源。另一方面,接受控制和响应模块的查询,并反馈出响应的数据信息。数据库的完善程度和准确性对于虚拟仪表系统的准确性和功能覆盖率有着重要意义。所以建立完善、准确的数据库是虚拟仪表设计系统必须要做的工作。控制和响应模块是虚拟仪表系统的核心部分,接收来自面板界面的消息响应,根据该消息向数据库模块发出查询命令,接收来自数据的返回数据,再向面板界面发出数据显示命令,控制面板界面的显示状态。控制和响应模块影响到虚拟仪表系统的系统性能,控制和查询算法的准确性和先进性直接影响到虚拟仪表系统的准确性和运行速度。所以建立准确并采用先进算法的控制和响应模块也是虚拟仪表设计系统的关键部分。COM组件封装是虚拟仪表系统通用性和可移植性的保证。采用通用、跨平台的封装方式,使得虚拟仪表系统可以被多语言、多平台的软件调用,而且模块化设计的思路也为后续的升级、修改提供了便利。本通用虚拟仪表设计软件基于VC++MFC单文档,可视化创建仪表面板系统,可视化编辑仪表之间逻辑和函数关系,可视化修改仪表细节,可视化修改数据库,最后进行DLL模块封装,可以跨平台调用。

2设计思路

2.1静态元件制作部分为了保证仪表面板的逼真性,本课题在构建仪表面板上静态元件的时候采用真实照片,然后通过图片处理软件使静态元件的固定部分和拨动部分分离,再重新组合,在仿真控制的时候进行调用加载。采用图层分层的方法[6],结构图如图3所示。图4为一个静态元件——由表盘和旋钮组成,先将表盘和旋转部分分离,再改变旋钮位置,指向不同的指示状态,使用图像处理软件进行处理,将各图保存成BMP格式,以保证在放大和缩小时不影响显示质量。

2.2仪表的状态位设定通过纹理制作之后的表盘图片在虚拟仪表设计软件中加载,然后在表盘选取各个仪表单元进行单独定义,弹出信息录入界面进行各仪表单元的信息录入,包括名称、仪表类型、仪表位置、档位个数、逻辑上层元件、需要载入的该仪表纹理图片路径等。在定义完各个仪表单元之后定义各个仪表单元的状态位,包括状态位名称、对应该状态位的图片等。软件界面如图5所示。

2.3仪表逻辑的可视化编辑仪表元件之间逻辑关系的设定,是创建虚拟仪表系统的重要组成部分。在定义完各个仪表及状态位后,将数据库中的仪表元件及状态位信息整合,在可视化逻辑编辑界面(图6)进行显示,采用所见即所得的方法,仪表元件在逻辑树中可以动态拖曳,元件之间的函数关系可以自由设定,仪表单元之间的逻辑关系随着逻辑树中逻辑的变化自动生成,同时也可以查看各器件的详细信息、器件之间已设定的函数关系等。

2.4动态显示仪表的多线程创建进程是计算机中已运行程序的实体,进程本身不会运行,是线程的容器。每个进程皆可以同步(循序)或不同步(平行)的方式独立运行。由于线程是操作系统能够进行运算调度的最小单位,被包涵在进程之中,是进程中的实际运作单位。本文在动态显示仪表的创建上选择多线程技术,考虑如下两方面:首先,每个进程需要占用很大的系统资源,而且进程之间共享资源、通信等也会增大系统开销,而线程可以共享同进程的内存等资源,通信也更为方便;其次,存在多个动态显示仪表需要同时响应的情况,把它们放在同一个进程里面,用不同线程创建可以采用分时的办法,加快响应速度,增加刷新频率。在飞机仪表面板上,通常会有多个仪表同时变化的情况,为了能够准确模拟这种情况,本文采用多线程技术进行虚拟航空仪表动态模拟。若按以往方法,采用单线程既增加了系统负担,又不能同时响应,不能实时模拟飞机当前状况;采用多线程既减小了系统负担,又能同时对当前状况做出响应。在虚拟航空仪表建模仿真过程中,涉及的显示仪表主要有指针表、数字表和飞行姿态表等,仪表单元模块的结构如图7所示。仿真进程中的主线程为面板响应程序,该程序基于Windows窗体框架,而虚拟显示仪表面板则作为辅线程被调用。该进程中的各线程通过线程间相互通信机制实现交互通信[11],由面板响应程序完成该面板变量在各种状态下的仿真与交互。整个仿真系统的设计包含开发面板响应程序、设计虚拟显示仪表以及配置编译环境、设计和集成多线程等几个主要过程。

2.4.1设计单线程虚拟显示仪表面板依照上一节中提到的设计过程,遵循设计与实际需求分析结果保持一致的原则,进行面板响应程序的设计,这是构造整套仿真系统的重要步骤。具体说来,就是要确保创建的虚拟显示仪表面板与实际设备的外观一致、功能一致,并且对虚拟仪表面板的电表操作、按键操作等功能反复进行试验,直至仿真效果满足实际需求。

2.4.2实现控制函数和启动线程添加仪表响应函数主线程中虚拟面板程序过程如下:(1)添加线程控制函数控制函数定义线程。输入此函数后,线程开始,此函数退出时线程终止。(2)创建辅助线程通过AfxBeginThread创建CWinThread线程,并通过AfxBeginThread的参数传递来进行初始化。示例代码如下:(3)主辅线程间通信与辅线程间同步这里要解决主辅线程间通信与辅线程间同步的问题。由于辅线程中的虚拟显示仪表只是用作显示用,只存在主线程对辅线程消息,辅线程对主线程没有消息[12],因此可以采取全局变量和全局函数的方法,在主线程响应函数中,改变全局变量或全局函数的值即可改变辅线程中虚拟显示仪表的显示状态。由于存在主线程同时调用两个及以上辅线程的情况,线程有可能和其他线程共享一些资源,如内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会引起冲突,所以对临界资源的访问应当采取互斥的机制。(4)在主线程中定义线程消息响应代码添加ON_THREAD_MESSAGE消息响应,具体过程分为两步:①将消息响应函数在CWinApp的头文件里声明VoidOnThreadMsgPitch(WPARAM,LPARAM);②在对应的代码文件里添加对线程消息响应的代码。

3封装与

3.1封装形式虚拟航空仪表系统设计和仿真完成后,使用DLL形式进行封装,主要有以下优点:可以提高重用性,可以在不同的仿真系统中调用同一套座舱仪表系统,只要它们与座舱仪表一致即可;提高移植性,方便以后座舱仪表系统的升级,只要重新加载封装好新座舱仪表系统的DLL,即可完成该仿真系统中仪表系统的更新和升级维护,见图8。

3.2软件接口函数及功能在本文中,为了方便虚拟维修平台加载虚拟仪表系统后,能够很方便地调用该系统,提供多种多样的接口函数,在虚拟维修平台中使用这些接口函数可以对虚拟仪表系统进行访问、控制,可以根据不同的故障状况控制仪表系统显示相对应的仪表状态。本文出于模块化、封装性的考虑,设计了主要接口函数。在波音737飞机虚拟维修平台中的仿真结果如图10所示。

4仿真效果

在该虚拟仪表设计/仿真软件中进行的仿真测试结果如下,图9为空调仪表部分在仿真软件的仿真效果。5结论本文提出了一种低成本飞机虚拟仪表系统的通用建模方法。该方法注重通用性和可移植性,采用面向对象的设计思想,基于MFC完成仪表系统的设计与封装,并以COM组件的形式成功应用于仿真、测试等工程中。本文所提出的方法性能良好、设计周期短、代码重用率高、开发成本低、通用性强,设计者可根据自身情况选用多种集成开发环境,其设计思想亦可沿用至Linux、嵌入式系统等其它操作系统,具有一定实用价值。

作者:邱伟龙陈国兴单位:中国民航大学航空工程学院北京首航直升机通用航空服务有限公司