李曦,付強(qiáng),諶鉞,汪嗣堯
(中國航空工業(yè)集團(tuán)公司西安飛機(jī)設(shè)計(jì)研究所,陜西 西安 710089)
航電顯示控制系統(tǒng)是飛行員獲取飛機(jī)狀態(tài)、控制飛行的核心系統(tǒng),顯控系統(tǒng)顯示是否正確會(huì)直接影響飛行安全[1],所以需要對航電顯控系統(tǒng)進(jìn)行全面測試。但是受飛行安全與測試成本的限制,顯控軟件的測試驗(yàn)證基本都通過仿真模擬技術(shù)進(jìn)行[2]。模擬仿真過程中,控制顯控軟件畫面顯示的傳感器參數(shù)無法直接通過傳感器獲取,要利用信號仿真系統(tǒng)進(jìn)行信號模擬。
目前航電顯控系統(tǒng)的測試驗(yàn)證主要有模型測試、軟硬件結(jié)合仿真等方式[3-4]。其中模型測試一般依賴模型設(shè)計(jì)工具[5],工具不同模型測試方法差異較大,會(huì)導(dǎo)致實(shí)驗(yàn)人員調(diào)試測試工作量成倍增加。
而軟硬件仿真需要利用物理設(shè)備模擬信號,通過總線傳輸[6],設(shè)備復(fù)雜、數(shù)量少、成本高。且軟硬件仿真測試平臺往往不同于軟件開發(fā)平臺,需要在開發(fā)基本完成后才能在測試平臺上進(jìn)行完整測試,開發(fā)測試效率不夠高。
航電顯控軟件調(diào)用底層OpenGL SC/ES命令的高層級圖形庫完成顯控界面的繪制。因?yàn)镺penGL支持跨平臺使用,開發(fā)的航電顯示控制系統(tǒng)可運(yùn)行在Windows系統(tǒng)下,實(shí)現(xiàn)顯控界面跨平臺顯示,但是無法實(shí)現(xiàn)信號激勵(lì)。
本文介紹的信號激勵(lì)系統(tǒng)可在Windows系統(tǒng)開發(fā)和運(yùn)行,實(shí)現(xiàn)顯控系統(tǒng)的開發(fā)和驗(yàn)證同平臺。仿真系統(tǒng)顯示畫面通過建模生成,調(diào)用OGLX庫繪制畫面,可以對各種傳感器信號值進(jìn)行模擬修改。此外,仿真系統(tǒng)通過管道傳輸,將激勵(lì)數(shù)據(jù)發(fā)送給顯控系統(tǒng),顯控系統(tǒng)刷新信號值,根據(jù)最新數(shù)據(jù)更新畫面。利用信號激勵(lì)系統(tǒng)即可對顯控系統(tǒng)界面進(jìn)行快速驗(yàn)證,如圖1。
信號激勵(lì)系統(tǒng)中不同控件均通過SCADE Display進(jìn)行建模,包含開關(guān)控制、旋鈕控制、拖動(dòng)條控制、加減控制等多種控件。根據(jù)不同的需求給控件添加控制變量,即通過點(diǎn)擊、拖動(dòng)等操作實(shí)現(xiàn)對控制變量數(shù)值的修改。軟件可根據(jù)建模生成代碼調(diào)用OGLX庫函數(shù),實(shí)現(xiàn)圖形的渲染繪制。
信號激勵(lì)系統(tǒng)擁有一個(gè)信號控制面板,通過鼠標(biāo)、鍵盤控制修改控件數(shù)值,涉及大量的鼠標(biāo)、鍵盤事件處理。本系統(tǒng)使用freeglut(OpenGL跨平臺使用工具庫)對鼠標(biāo)、鍵盤事件進(jìn)行處理[7]。
利用鼠標(biāo)移動(dòng)回調(diào)和鼠標(biāo)點(diǎn)擊回調(diào)函數(shù)可以獲取到鼠標(biāo)位置和鼠標(biāo)長按狀態(tài)。識別到鼠標(biāo)位置在旋鈕內(nèi)部且長按時(shí),會(huì)觸發(fā)鼠標(biāo)位置在旋鈕中角度計(jì)算,更新旋鈕對應(yīng)控制變量數(shù)值。
2.2.1 windows進(jìn)程間通信
信號激勵(lì)系統(tǒng)與顯控系統(tǒng)為兩個(gè)進(jìn)程,涉及到進(jìn)程間通信。Microsoft Win32 API提供多種進(jìn)程間通信的方法,如文件映射、匿名管道、命名管道等[8]。文件映射可以實(shí)現(xiàn)多個(gè)進(jìn)程間共享數(shù)據(jù),但需要控制進(jìn)程間同步。匿名管道可以實(shí)現(xiàn)父進(jìn)程與子進(jìn)程之間的數(shù)據(jù)傳輸,但不能讓兩個(gè)不相關(guān)的進(jìn)程進(jìn)行通信。
而命名管道可以實(shí)現(xiàn)服務(wù)器進(jìn)程和多個(gè)客戶進(jìn)程之間通信,服務(wù)器進(jìn)程創(chuàng)建命名通道后,其他客戶進(jìn)程可以通過管道名稱打開管道進(jìn)行通信。仿真系統(tǒng)為了將信號激勵(lì)發(fā)送給顯控系統(tǒng),涉及到兩個(gè)不相關(guān)進(jìn)程,因此選擇使用命名管道[9]進(jìn)行數(shù)據(jù)傳輸。
2.2.2 連接與數(shù)據(jù)傳輸
(1)服務(wù)端創(chuàng)建命名管道
顯示控制軟件是管道服務(wù)端,圖2為顯示控制界面初始化流程。在初始化過程中除了要初始化顯示控制所需的資源,還需要?jiǎng)?chuàng)建命名管道。服務(wù)端通過CreateNamedPipe()創(chuàng)建一個(gè)命名管道的實(shí)例并返回管道的句柄。調(diào)用ConnectNamedPipe()函數(shù),服務(wù)端會(huì)一直等待,偵聽來自客戶端的連接請求。當(dāng)有客戶端進(jìn)程連接到命名管道,顯示控制系統(tǒng)開始從命名管道中接收激勵(lì)信號。
(2)客戶端連接命名管道
信號激勵(lì)系統(tǒng)式管道客戶端,圖3為仿真系統(tǒng)初始化流程??蛻舳苏{(diào)用WaitNamedPipe()函數(shù),服務(wù)端等待來自客戶端的實(shí)例連接,如果有可用管道則進(jìn)行連接。調(diào)用CreateFile()實(shí)現(xiàn)客戶端與服務(wù)端的連接,如果此時(shí)服務(wù)端接受與客戶端的連接,客戶端會(huì)獲得指向命名管道實(shí)例的句柄??蛻舳双@得句柄后可以通過句柄向命名管道中發(fā)送數(shù)據(jù)。
(3)仿真系統(tǒng)與顯控界面間數(shù)據(jù)傳輸
仿真系統(tǒng)與顯控界面建立連接后,服務(wù)端與客戶端利用管道文件句柄讀寫文件,進(jìn)行信息交互。具體傳輸緩存內(nèi)的信號包含哪些,根據(jù)信號激勵(lì)需求來定義,緩存中是一個(gè)結(jié)構(gòu)體變量。
該管道傳輸消息結(jié)構(gòu)體中定義了信號激勵(lì)所涉及的所有信號,顯控系統(tǒng)涉及飛行指示、導(dǎo)航、水平狀態(tài)、飛控等大量顯示畫面,管道傳輸消息結(jié)構(gòu)體可根據(jù)需求定義不同的信號。在顯示控制系統(tǒng)模型不變的前提下,根據(jù)測試需要更新結(jié)構(gòu)體成員變量。仿真系統(tǒng)將用于激勵(lì)的緩存數(shù)據(jù)發(fā)送給顯控系統(tǒng),更新顯控畫面。
信號激勵(lì)系統(tǒng)作為客戶端,通過界面上各種旋鈕操作修改顯控信號數(shù)值,將修改數(shù)據(jù)賦值給消息傳輸結(jié)構(gòu)體變量,以字符流形式將大量數(shù)據(jù)送入管道。顯控界面作為服務(wù)端,從管道中接收數(shù)據(jù),在每次繪制顯控界面前,更新顯控信號數(shù)值,再進(jìn)行畫面渲染繪制。從而實(shí)現(xiàn)了仿真系統(tǒng)對顯控界面的信號激勵(lì),實(shí)現(xiàn)顯控系統(tǒng)快速驗(yàn)證,控制流程如圖4。
顯控軟件與信號激勵(lì)系統(tǒng)連接順序?yàn)閱?dòng)顯示控制軟件,服務(wù)端創(chuàng)建命名管道等待連接;客戶端(信號激勵(lì)系統(tǒng))向服務(wù)端請求連接;服務(wù)端收到客戶端連接請求,客戶端獲取管道實(shí)例句柄,連接成功。兩個(gè)進(jìn)程完成初始化,開始繪制渲染圖像。
在信號激勵(lì)系統(tǒng)與顯控軟件連接成功后,信號激勵(lì)系統(tǒng)開始向顯控發(fā)送激勵(lì)數(shù)據(jù)。根據(jù)驗(yàn)證畫面的不同,需要激勵(lì)的信號不同。如在顯控飛行指示畫面驗(yàn)證中,需要?dú)鈮焊叨?、預(yù)置氣壓高度、速度、預(yù)置速度、俯仰、橫滾、告警等信號變量,管道傳輸所用的緩存結(jié)構(gòu)體如圖5。
通過仿真系統(tǒng)的控制面板可對圖5中定義的結(jié)構(gòu)體變量就行修改,這些信號會(huì)實(shí)時(shí)發(fā)送給顯控系統(tǒng),顯控界面畫面會(huì)馬上更新數(shù)據(jù)進(jìn)行顯示。數(shù)據(jù)傳遞過程如圖6。
圖7中為飛行指示畫面信號激勵(lì)過程演示。圖中左側(cè)為飛行指示畫面,畫面從左到右依次為速度帶、姿態(tài)區(qū)、高度帶、垂直速度帶。右側(cè)為信號激勵(lì)控制面板,面板上可以控制空速、垂直速度、側(cè)滑角、氣壓高度、橫滾角、俯仰角、自動(dòng)飛行指引的橫滾與俯仰、告警等信號,這些信號會(huì)驅(qū)動(dòng)畫面每幀繪制前更新飛行參數(shù)。從圖中可以看到,右側(cè)激勵(lì)信號值與左側(cè)飛行參數(shù)畫面顯示一致。比如,為驗(yàn)證飛行指示畫面中左側(cè)速度帶空速值顯示正確,調(diào)整右側(cè)控制面板中空速旋鈕,將空速值調(diào)整到355.5,此時(shí)控制面板畫面繪制完成后會(huì)將最新的激勵(lì)信號值通過命名管道發(fā)送給顯控系統(tǒng)。顯控系統(tǒng)更新畫面參數(shù)進(jìn)行繪制,從速度窗口中可見速度值為355.5,且速度窗口箭頭指向的刻度值也為355.5,驗(yàn)證得到飛行指示畫面中顯示的空速與要求 一致。
該信號激勵(lì)系統(tǒng)保證了信號傳輸?shù)恼_性與畫面更新的實(shí)時(shí)性,實(shí)現(xiàn)對顯控軟件的快速驗(yàn)證。且該信號激勵(lì)系統(tǒng)可以通過控制面板修改信號,實(shí)現(xiàn)對激勵(lì)信號修改的可視化,支持模擬飛行過程中參數(shù)各種變化情況,操作簡單直觀。
本文中介紹的信號激勵(lì)系統(tǒng)可以完成顯控系統(tǒng)軟件驗(yàn)證工作,開發(fā)與測試環(huán)境統(tǒng)一,不需要龐大的硬件設(shè)備與復(fù)雜的總線傳輸,從開發(fā)源頭進(jìn)行顯控軟件測試。并且該系統(tǒng)有獨(dú)立的控制面板,信號數(shù)據(jù)激勵(lì)直觀且操作簡單。仿真系統(tǒng)與顯控界面通過命名管道進(jìn)行數(shù)據(jù)流傳輸,數(shù)據(jù)流可根據(jù)驗(yàn)證畫面信號的不同靈活修改,使得仿真系統(tǒng)不會(huì)限制于某一模型設(shè)計(jì)工具或某一種型號飛機(jī),仿真系統(tǒng)可移植性好、復(fù)用性強(qiáng)。
但是,當(dāng)前為實(shí)現(xiàn)仿真系統(tǒng)與顯控系統(tǒng)的連接,需要修改顯控軟件代碼,后續(xù)可以將通信部分改為動(dòng)態(tài)鏈接庫,避免測試驗(yàn)證對顯控軟件的直接影響。并且該仿真系統(tǒng)受操作界面操作限制,多個(gè)信號數(shù)據(jù)不能同時(shí)修改,后續(xù)為更充分測試,計(jì)劃增加多場景測試,模擬真實(shí)飛行環(huán)境多信號變化,進(jìn)一步提高顯控系統(tǒng)模型驗(yàn)證準(zhǔn)確性。