周濤,李璐
(中航工業西安飛機工業(集團)有限責任公司 陜 西 西 安 7 10089)
飛行儀表是飛機性能參數和導航參數顯示的窗口,可為飛行員提供駕駛飛機所需的飛行參數、導航數據及飛機系統狀態等信息[1]。隨著航空電子綜合化的發展,現代民用飛機的座艙儀表系統已經逐漸向電子飛行儀表系統(EFIS)過渡,以先進的智能液晶顯示器取代原有的分離機電式儀表,提供給飛行員全新的人機界面,因此,對飛行員操作程序(POP)的評估也成為民用飛機頂層設計的重要環節,以達到最佳的人機功效。為此,提供必要的仿真手段以驗證電子飛行儀表系統顯示和操作的合理性顯得尤為重要,以實現需求驗證和設計修改的快速、高效迭代,達到優化設計過程、方便需求分析、降低開發成本的目的[1]。本文就某型民用飛機電子飛行儀表仿真系統提出設計思路和實現方法。
鑒于此仿真系統要經歷多次的修改和迭代,以確定最終的顯示構型方案,所以為保證系統具備足夠的靈活性和可擴展性,采用模塊化設計,各個前臺顯示模塊和控制板仿真程序作為獨立應用程序以WIN32平臺下的OpenGL進行開發,顯示構型采用后臺文件進行配置,以便于軟件調試和系統重構。動態仿真利用飛行模擬軟件X-Plane進行二次開發,利用其中的飛機動態數據模型對座艙儀表和視景進行驅動。靜態仿真采用Visual C++進行開發,用于設置靜態參數,改變各應用程序的工作狀態和顯示內容,同時對動態參數進行監視,實現故障模擬、模式轉換、航路點設置、CAS告警仿真等特殊功能。數據網絡通訊采用TCP/IP協議的C/S架構,保證數據可靠有效的傳輸,其中服務器端作為數據中樞進行系統數據的整體調度,各個客戶端應用通過接口函數與其進行通訊,實現數據的收發與控制,形成人在環路的閉環仿真系統。

圖1 系統軟件架構Fig.1 System software infrastructure
系統軟件主要由以下幾個部分組成:
1)主飛行顯示器(PFD)模塊
分為全屏模式、半屏模式和壓縮模式,同時提供左右兩側主駕駛PFD和副駕駛PFD,完成姿態航向指示器(ADI)和水平位置指示器(HIS)等各項功能。
2)多功能顯示器(MFD)模塊
實現地圖、系統簡圖頁、調諧、電子檢查單、飛行管理系統、數據鏈路等多項功能。
3)發動機指示(EI)模塊
分為正常模式和應急壓縮模式,完成發動機參數的顯示功能。
4)機組告警系統(CAS)模塊
分為正常模式和應急壓縮模式,實現機組告警系統的各項功能。
5)飛行管理系統(FMS)模塊
實現飛行管理系統的初始化、飛行計劃設置、飛機性能管理等界面顯示功能。
6)系統簡圖頁模塊
實現電源系統、液壓系統、環控系統、飛控系統等系統參數信息的顯示功能。
7)中央操縱臺模塊
實現油門臺、多功能鍵盤(MKB)、光標控制裝置(CCD)、襟翼控制、剎車控制等各項功能。
8)頂部控制板模塊
實現非航電系統與航電系統的交聯控制和顯示的各項功能。
9)其他儀表與控制板
實現航空時鐘和電子備用儀表以及與航電系統相關的顯示控制板(DCP)、自動飛行控制板(AFCP)等控制板。
10)動態仿真模塊
用于響應外部控制面板、菜單等的輸入信號,產生動態飛行數據激勵其它的仿真模塊,同時產生動態的視景效果。動態仿真模塊為一個獨立應用程序,基于X-Plane進行開發。
11)靜態仿真模塊
靜態仿真軟件用于設置靜態參數,改變各應用程序的工作狀態和顯示內容,同時對動態參數進行監視,實現故障模擬、模式轉換、航路點設置、CAS告警仿真等特殊功能。
12)網絡通信與管理模塊
網絡通信與管理模塊作為整個仿真系統的數據中樞,采用TCP/IP協議的C/S網絡構架,實現各應用程序之間的數據傳輸與維護,網絡通信架構如圖2所示。

圖2 網絡通信架構Fig.2 Network communication infrastructure
系統整體硬件包括:綜合顯示仿真計算機兩臺、頂部控制板仿真計算機一臺、中央操縱臺仿真計算機一臺、主控服務器一臺、27寸觸摸顯示器五臺、32寸觸摸顯示器一臺、網絡交換機一臺、投影儀一臺。
各仿真計算機與服務器間采用以太網連接,采用C/S(客戶端/服務器)的星形連接方式。為了提高整個顯示系統的穩定性和實時性,按照如下方式對顯示硬件進行分配:顯示器#1和顯示器#2采用同一臺計算機進行驅動,用于顯示主駕駛PFD、MFD、主警告燈,顯示控制面板、飛行指引控制面板、電子備用儀表以及起落架收放開關等;顯示器#3采用一臺計算機進行驅動,用于顯示副駕駛PFD、MFD;顯示器#4采用一臺計算機進行驅動,用于加載中央操作臺控制面板;顯示器#5和顯示器#6采用一臺計算機進行驅動,用于加載頂部板控制面板。主控計算機采用一臺計算機,用于協調實驗臺中各顯示系統之間的關系,管理儀表系統的邏輯數據庫,用戶可以通過主控計算機對仿真實驗臺進行控制。主控計算機用于加載動態仿真數據源,輸出飛行視景。系統硬件架構如圖3所示。

圖3 系統硬件架構Fig.3 System hardware infrastructure
電子飛行儀表仿真系統按照自頂向下、模塊化思想開發,以保證系統的靈活性和可擴展性,以下為系統主要功能模塊的工程實現方法,其中系統開發流程如圖4所示。

圖4 系統開發流程圖Fig.4 System develop flow chart
各個儀表和控制板仿真模塊作為客戶端應用,采用基于WIN32的OpenGL進行開發,通過服務器程序進行數據交互,數據發送方式為數據包發送,數據包中的數據按照統一的結構體格式進行數據規范。數據包結構為:
typedef struct
{
int id; //ID為數據標號
int SDI; //SDI為數據源標識
int SSM; //SSM為數據狀態指示
double data; //data為數據值
char str[NAME_LEN]; //str為字符串
}LABEL_Def;
所有數據發送和接收都以此結構進行解析。軟件流程如圖5所示。
動態仿真系統基于X-Plane10軟件進行二次開發,采用動態鏈接庫方式封裝成X-Plane的插件,利用X-Plane10中的通用飛機模型產生動態數據,建立動態仿真與其他應用程序之間的數據接口,通過服務器網絡通信模塊進行數據傳輸。動態仿真應用程序通過加載X-Plane可識別數據接口文件,使X-Plane輸出需要的數據,同時可向X-Plane10寫入數據。
動態仿真所要加載的數據在數據文檔DataRef.txt中,其中包括了X-Plane動態數據編號、可識別的數據路徑地址、數據類型、數據讀寫類型、動態仿真輸出接口以及動態仿真輸入接口信息。動態仿真通過加載DataRef.txt數據文檔,加載所需產生的數據接口。用戶通過修改DataRef.txt中的內容以增加和減少所需軟件接口,DataRef.txt接口文件格式如表1。

圖5 軟件流程圖Fig.5 Software flow chart

表1 動態仿真數據接口文件Tab.1 Dynamic simulation data interface document
通過XPanle提供的API對DataRef接口文件進行解析,發送飛機模型產生的動態數據,同時接收仿真控制板發送的控制指令參數,其中用到的主要接口函數定義如下:
PLUGIN_API int XPluginStart(char* outName,char*outSig,char*outDesc) //進程入口函數
{
char txtpath[60];
sprintf(txtpath,"%s",FLOAT_PATH);
SeperateTxt(FLOAT_PATH); //文本解析函數
for(int i=0;i { gFloatReadDataRef[i]=XPLMFindDataRef(FloatDataRef.DataRefReadDescriptions[i]); //將接口參數寫入緩沖區 } //注冊飛行循環的回調函數,周期為100 ms XPLMRegisterFlightLoopCallback (InputOutputLoopCB,0.1, NULL); return 1; } float InputOutputLoopCB (float elapsedMe, float elapsedSim, int counter, void*refcon)//回調函數定義 { for(int i=0;i { label.data=XPLMGetDataf(gFloatReadDataRef[i]); //將緩沖區中的數據寫入數據包 if(FloatDataRef.floatdata[i]!=(float)label.data) { FloatDataRef.floatdata[i]=(float)label.data; sprintf (buf, “% s”,FloatDataRef.NameDataReadID[i]); ClientUpdateParameter (hClient,FloatDataRef.NameDataReadID[i],&label); //通過服務器接口函數發送數據包 } } return (float) 0.1; } 數據通訊軟件按照開放式的軟件架構要求,采用C/S通訊架構,使用TCP/IP協議進行開發。數據通訊軟件分為服務器端與客戶端兩部分程序。服務器端程序獨立運行,客戶端程序將自定義的接口函數以靜態鏈接庫的形式進行發布,供各個客服端程序調用以和服務器端程序進行數據通訊,其中主要的接口函數和調用形式示例如下: int_tmain(int argc, _TCHAR*argv[]) { LPVOID hClient; int retval; LABEL_Def label; char server_ip_addr[NAME_LEN]; unsigned short port= (unsigned short) DEFAULT_PORT; strcpy_s (server_ip_addr,sizeof(server_ip_addr),SERVER_IP_ADDR); //將各個應用模塊注冊為客戶端 hClient=ClientInit ( CLIENT_NAME, server_ip_addr,port); //發布待發送的參數 retval=ClientPublishParameter( hClient, “a” ); //申請待接收的參數 retval=ClientSubscribeParameter( hClient, “b”); memset( &label, 0, sizeof( LABEL_Def) ); int count=10000; //測試計數器 while( count) { count++; label.data=count; //更新發布的參數值 retval=ClientUpdateParameter( hClient, “a”, &label); //獲取申請的參數值 retval=ClientGetParameter( hClient, “b”, &label); Sleep( RESPONSE_DELAY ); } //退出 retval=ClientExit( hClient); return retval; } 為實現電子飛行儀表仿真系統各顯示模塊的可重構性,程序通過后臺配置文件進行統一啟動,各個模塊的顯示位置通過配置文件進行設置,如果顯示需求發生變更,只需修改配置文件即可,源代碼無需更改,提高了系統的可維護性。具體實現過程如下: 1)解析配置文件 利用C++標準模板庫的字符串類對配置文件進行解析,獲取應用程序名和位置信息。 2)批處理啟動應用模塊 利用WINDOWS API函數 ShellExecute并通過傳入的參數對配置文件中的應用模塊進行統一啟動。 3)顯示和部署應用模塊 通過應用模塊的入口主函數傳入的命令行參數,進行字符串解析,將獲取的位置參數傳入WINDOWS API函數SetWindowPos進行各應用模塊的顯示和部署。 文中對民用飛機電子飛行儀表仿真系統提出設計思路和實現方法,并成功應用在某型民用飛機的概念設計階段,對飛行員操作程序(POP)的評估取得良好的效果,并對后續電子飛行儀表系統顯示方案的制定提供了有效的驗證手段。 [1]夏煒,孫曉敏,郤文清.基于VAPS的電子飛行儀表系統顯示設計[J].航空電子技術,2009,40(3):15-18.XIA Wei,SUN Xiao-min,XI Wen-qing.Design of electronic flight instrument system display based on VAPS[J].Avionics Technology,2009,40(3):15-18. [2]王行仁.飛行實時仿真系統及技術[M].北京:北京航空航天大學出版社,1998. [3]任泰明.TCP/IP網絡編程[M].北京:人民郵電出版社,2009. [4]施瑞奈爾.OpenGL編程指南[M].7版.李軍,譯.北京:機械工業出版社,2010. [5]李普曼,拉茹瓦,穆.C++Primer中文版[M].4版.李師賢,譯.北京:人民郵電出版社,2006. [6]佩措爾德.Windows程序設計(珍藏版)[M].方敏,張勝,梁路平,趙勇,等譯.北京:清華大學出版社,2010.2.3 數據通訊模塊
2.4 模塊調度策略
3 結束語