王柯云 張青峰 魏石峰
(中國直升機(jī)設(shè)計研究所 江西省景德鎮(zhèn)市 333001)
近年來,我國航空電子領(lǐng)域飛速發(fā)展,航空電子系統(tǒng)綜合化已經(jīng)成為當(dāng)下的趨勢。座艙顯示系統(tǒng)(Cockpit Display System, CDS)是航空電子系統(tǒng)人機(jī)交互的接口,將航電等各機(jī)載系統(tǒng)綜合成一個整體,從而實現(xiàn)飛行信息的綜合顯示與控制。座艙顯示軟件的開發(fā)是綜合航電系統(tǒng)開發(fā)的重要環(huán)節(jié)。
早期的飛機(jī)駕駛艙由大量機(jī)械儀表盤構(gòu)成,所提供的數(shù)據(jù)十分冗雜,無法完成多個儀表盤之間的信息共享與融合,飛行員需要對儀表盤上顯示的數(shù)據(jù)進(jìn)行人工計算與綜合判斷,才能準(zhǔn)確了解飛機(jī)的飛行狀態(tài),除此之外,飛行員還必須不斷在機(jī)外環(huán)境與儀表盤之間切換視角,容易導(dǎo)致飛行員無法及時判斷當(dāng)前飛行狀態(tài),亦容易導(dǎo)致飛行員視覺疲勞與誤操作,危及飛行安全。20世紀(jì)70年代,國外開始進(jìn)行對數(shù)字化駕駛艙系統(tǒng)的研究,波音公司在此研究基礎(chǔ)上首次開發(fā)并裝備了具有多個顯示器屏幕的綜合駕駛艙顯示系統(tǒng),實現(xiàn)了各類信息的融合顯示,標(biāo)志著駕駛艙顯示系統(tǒng)進(jìn)入綜合數(shù)字顯示系統(tǒng)的時代。此后,越來越多的飛行數(shù)據(jù)與飛行相關(guān)信息被集成到駕駛艙顯示系統(tǒng)內(nèi),“座艙顯示系統(tǒng)”這一概念也逐步成型。
現(xiàn)在的座艙人機(jī)界面主要由多功能顯示器(Multi-Function Display, MFD)組成,多功能顯示器一般處于飛行員的視線下方,屏幕周邊有多個按鍵,飛行員通過按鍵進(jìn)行切換頁面、查看航線等功能。多功能顯示器能夠綜合顯示直升機(jī)的各種信息,如飛行、機(jī)電等,實時反映航電系統(tǒng)中各類機(jī)載設(shè)備的狀態(tài)。飛行員通過多功能顯示器獲取飛行所需的信息,實現(xiàn)對直升機(jī)的操控。座艙顯示軟件中包含導(dǎo)航、地圖、姿態(tài)等各種畫面,每個畫面中又包含各種圖符,以飛行畫面為例,該畫面中包含地平儀、指示空速、羅盤等圖符。因此,如何安全高效地開發(fā)圖符成為了座艙顯示軟件開發(fā)過程中需要重點(diǎn)關(guān)注的問題。
眾多科研工作者都對該問題進(jìn)行了深入研究。張杰表明軟件的開發(fā)模式對軟件的安全性有著極大影響,隨后介紹了基于模型的開發(fā)方法,并將該方法應(yīng)用于型號軟件建模中,試驗結(jié)果證明,使用基于模型的開發(fā)方法開發(fā)的軟件安全性和可靠性都得到了較大提高。姚旭寅基于對ARINC661規(guī)范的研究和SCADE開發(fā)工具,提出了一種通用的ARINC661顯示軟件開發(fā)框架,為基于ARINC661架構(gòu)的駕駛艙顯示系統(tǒng)數(shù)字化仿真、顯示軟件開發(fā)提供了研究基礎(chǔ)。楊衛(wèi)風(fēng)引入VAPS工具進(jìn)行多功能顯示器的仿真,首先使用VAPS對多功能顯示器的顯示畫面進(jìn)行設(shè)計,生成ActiveX控件,然后建立仿真軟件和控制源間的數(shù)據(jù)通信,最后通過解析處理通信消息實現(xiàn)多功能顯示器的畫面驅(qū)動,完成了航電系統(tǒng)的綜合仿真試驗。
目前,國內(nèi)座艙顯示軟件主要采用C/C++等高級語言提供繪圖函數(shù)、OpenGL接口提供圖形API的傳統(tǒng)開發(fā)方法,這種開發(fā)方法需要開發(fā)人員手工編寫用于控制邏輯的C語言代碼和用于繪制畫面的OpenGL代碼,用戶只能在編譯代碼并執(zhí)行程序后才能觀察到畫出的圖形是否符合預(yù)期,極大地影響了開發(fā)效率。隨著航電系統(tǒng)的高速發(fā)展,其復(fù)雜程度不斷增加,邏輯控制需求不斷變更,因此開發(fā)的工作量和代碼難度都日益增大,后期維護(hù)成本也十分高昂。
從目前的現(xiàn)狀來看,座艙顯示系統(tǒng)通常根據(jù)型號的應(yīng)用需求來開發(fā),這些需求各不相同,導(dǎo)致座艙顯示軟件存在著難移植、難重用的問題。并且,傳統(tǒng)開發(fā)方式遵循“基于代碼”的開發(fā)方法,整個軟件生命周期中的核心是軟件編碼,設(shè)計過程中所做的軟件需求、概要設(shè)計、詳細(xì)設(shè)計都是為了軟件編碼;而單元測試、集成測試、系統(tǒng)測試都是為了驗證代碼的正確性?;诖a的開發(fā)方法依賴于手工編碼,對軟件開發(fā)人員與軟件測試人員而言,都存在工作量大、開發(fā)效率低的問題。若測試時發(fā)現(xiàn)某些問題產(chǎn)生的原因是概要設(shè)計或詳細(xì)設(shè)計錯誤,那么需要重新進(jìn)行設(shè)計,開發(fā)人員再根據(jù)設(shè)計對代碼進(jìn)行修改,造成開發(fā)周期延長、開發(fā)成本增加;并且,由于軟件編碼階段處于整個項目開發(fā)工作的后期,若出現(xiàn)該種問題,對型號項目而言,也會導(dǎo)致整個項目周期延長、維護(hù)成本變高。因此,基于代碼的傳統(tǒng)開發(fā)方法已經(jīng)越來越無法適應(yīng)高速發(fā)展的航電系統(tǒng)了。
21世紀(jì)以來,伴隨著航空電子技術(shù)不斷進(jìn)步、設(shè)備硬件水平不斷提高,座艙顯示系統(tǒng)的功能越來越強(qiáng)大,其布局和信息顯示方式都在飛快更迭?,F(xiàn)如今觸控顯示屏已經(jīng)廣泛應(yīng)用于各類電子設(shè)備的控制終端,座艙顯示系統(tǒng)同樣正在朝著大屏幕化、綜合化、信息化和智能化的方向發(fā)展,觸控顯示技術(shù)已然成為未來座艙顯示軟件的研究方向,相應(yīng)地,軟件的復(fù)雜程度也會有顯著提升。
與基于代碼的傳統(tǒng)開發(fā)方法相比,基于模型的開發(fā)方法更加聚焦于需求,這種開發(fā)方法可以將開發(fā)人員從繁瑣的代碼編寫中解放出來,減少代碼冗余的同時將開發(fā)的焦點(diǎn)從代碼轉(zhuǎn)移到模型,使開發(fā)人員可以避免機(jī)械性的重復(fù)編碼工作,專注于圖形界面的設(shè)計。基于模型的開發(fā)方法逐漸取代傳統(tǒng)開發(fā)方法成為座艙顯示軟件開發(fā)的主流方法,基于模型的開發(fā)工具也隨之迅速發(fā)展,現(xiàn)在應(yīng)用得比較廣泛的工具有Simulink、Rhapsody、SCADE等。
SCADE Display是一種基于模型的圖形化開發(fā)工具,提供了一個高安全性的應(yīng)用開發(fā)環(huán)境,由于其強(qiáng)大的建模功能被廣泛應(yīng)用于高安全性系統(tǒng)和嵌入式軟件的開發(fā)。圖形化的開發(fā)方式相較于傳統(tǒng)代碼而言更加容易理解,并且,SCADE Display對于圖符的繪制有著先天的優(yōu)勢,遠(yuǎn)比使用人工編碼進(jìn)行畫面開發(fā)直觀,同時也更加有利于后期的維護(hù)、擴(kuò)展和重用。并且,SCADE Display支持中文顯示,能夠更好地滿足我國飛行員的需求。SCADE Display的KCG代碼生成器經(jīng)過了DO-178B/DO-178C工具鑒定,能夠自動生成符合標(biāo)準(zhǔn)的C語言代碼,可用于開發(fā)A級航空國防軟件,提高了軟件的可靠性,對于開發(fā)人員而言,后期集成工作也更加容易。機(jī)載軟件往往會受到硬件環(huán)境的限制,基于模型的開發(fā)方法能夠?qū)Ⅱ炞C工作提前到模型級,即詳細(xì)設(shè)計階段,在這一開發(fā)階段中進(jìn)行驗證,能夠?qū)⒂布浖挠绊懪c限制降到最低,從而縮短整體項目周期。基于SCADE Display的具體開發(fā)與集成流程如圖1所示。
圖1:SCADE Display的開發(fā)與集成流程圖
“基于模型”的軟件開發(fā)方法為座艙顯示軟件提供了一條新的解決途徑,使用可視化的圖形開發(fā)工具SCADE Display進(jìn)行座艙顯示設(shè)計,能夠縮短型號軟件開發(fā)周期,降低開發(fā)成本。但是由于綜顯軟件中有許多不同系統(tǒng)交聯(lián),往往需要不停進(jìn)行數(shù)據(jù)的收發(fā),例如,當(dāng)座艙顯示系統(tǒng)需要與其他系統(tǒng)進(jìn)行通訊時,使用SCADE Display就會受到限制,同等條件下,使用C語言類編程語言,在數(shù)據(jù)收發(fā)、程序移植方面具有明顯優(yōu)勢。
所以,在座艙顯示軟件開發(fā)過程中,將基于模型的開發(fā)方法與傳統(tǒng)編碼相結(jié)合,利用Visual Studio 2010的程序設(shè)計靈活性和SCADE Display便捷的繪圖能力混合編程,取兩者優(yōu)點(diǎn)進(jìn)行座艙顯示軟件的開發(fā),即可以充分發(fā)揮SCADE Display在圖符繪制上的強(qiáng)大處理能力,又可以利用C語言進(jìn)行數(shù)據(jù)收發(fā),實現(xiàn)開發(fā)的靈活性與可擴(kuò)展性,有效提高開發(fā)效率。如圖2所示。
圖2:SCADE Display工程與VS工程的數(shù)據(jù)傳遞方式
3.1.1 繪制圖符
SCADE Display主要用于顯示畫面的開發(fā),通過其GUI編輯器對圖符進(jìn)行繪制建模,GUI編輯器提供圖元、容器、工具欄等功能窗口,繪制完成后,再對圖形對象添加相應(yīng)的邏輯,從而驅(qū)動圖符。
從SCADE Display的面板中可選擇基本圖元、遮罩、容器等進(jìn)行圖符的繪制。以地平儀為例,新建一個.ogfx格式的控件,使用線、圓、文本等基本圖元和Panel容器在畫布中繪制出地平儀,控件文件命名為:AOL_SKYLINE.ogfx。如圖3所示。
圖3:地平儀圖符與樹形結(jié)構(gòu)
3.1.2 設(shè)計圖符邏輯
圖形對象在每個描畫周期都會被擦除和重畫,在這些圖形對象中,需要移動和變化的部分是通過變量來控制的,在SCADE Display里面,這些變量被稱為Plugs。與C語言相同,SCADE Display中的變量也是大小寫敏感的。一個變量可以關(guān)聯(lián)多個屬性參數(shù),當(dāng)變量的值發(fā)生變化時,屬性參數(shù)也會相應(yīng)更新。例如橫滾角,就可以通過“Angle”參數(shù)來設(shè)置。
SCADE Display也支持輸入表達(dá)式和一些簡單的運(yùn)算符來控制屬性,例如+、-、*、/、And、Or、Not、int類型強(qiáng)制轉(zhuǎn)換、三元操作符等。以地平儀的橫滾角屬性為例,在地平儀圖符上顯示的橫滾角需要控制上下限,使其超限時停留在限制范圍邊緣處。例子中的橫滾角邊緣為正負(fù)60度,這時,就需要用到三元操作符,具體如圖4所示。
圖4:橫滾角停留在邊緣的邏輯屬性
SCADE Display工程中的變量相當(dāng)于一個接口,將圖符屬性和SCADE外部文件中的變量進(jìn)行關(guān)聯(lián),這樣可以通過VS工程中的代碼傳值給SCADE Display的接口變量來驅(qū)動圖符。這些SCADE Display變量可以在編輯器下方的數(shù)據(jù)字典里查看。變量數(shù)據(jù)字典如圖5所示。
圖5:變量數(shù)據(jù)字典
3.1.3 SCADE動畫/仿真
圖符邏輯設(shè)置好后,可以通過SCADE Display自帶的動畫/仿真功能進(jìn)行測試。這一步與傳統(tǒng)代碼開發(fā)有著較大的區(qū)別,傳統(tǒng)代碼開發(fā)方式以手寫代碼為核心,而SCADE建模則用圖形化建模取代了手寫代碼,可以將單元測試提前到模型階段,縮短了開發(fā)周期中用于軟件測試的時間。
依然以地平儀為例,將控制俯仰值的變量與控制橫滾角的變量分別設(shè)置為10和-45,地平儀變化如圖6所示。
圖6:地平儀仿真
3.1.4 生成C代碼并進(jìn)行集成
SCADE Display設(shè)計檢查器能夠根據(jù)指定規(guī)則對圖形模型進(jìn)行檢查。包括是否滿足建模方法要求、命名規(guī)則、圖形設(shè)計模式、是否滿足性能要求(避免產(chǎn)生冗余的調(diào)用),同時設(shè)計檢查器還能提供修正和變更建議。
通過檢查后,使用Display KCG自動生成C語言代碼,生成的代碼文件與控件文件名相同,為AOL_SKYLINE.c和AOL_SKYLINE.h。再打開VS2010已建立好的工程框架,將生成的代碼添加進(jìn)工程進(jìn)行集成。
表1:代碼行數(shù)對比
需要在工程中將SCADE Display生成的地平儀函數(shù)初始化并進(jìn)行相關(guān)的聲明,初始化地平儀圖符顯示的代碼如下所示:
scade_draw_start();
aol_SKYLINE_draw(pContext, 0);
scade_draw_end();
在VS工程中調(diào)用SCADE Display生成的地平儀圖符函數(shù)時,需要把從其他系統(tǒng)收到的數(shù)據(jù)傳給在SCADE Display中定義好的接口變量,如俯仰值、橫滾值等,相關(guān)代碼如下所示:
使用傳統(tǒng)代碼繪制地平儀圖符,主要使用到的是OpenGL圖形庫。
手工編碼的缺點(diǎn)在于,就算只是一根簡單的直線,也需要一行單獨(dú)的代碼來進(jìn)行編寫。在地平儀圖符中,圖符的顏色、線條的粗細(xì)、文本的大小都需要開發(fā)人員反復(fù)設(shè)置與編寫,代碼如下所示:
glLineWidth(4.0f); //設(shè)置直線的寬度
ggmSetColor(GREEN); //設(shè)置線條的顏色
ggmLine(-radius + 40, 0, -28.3, 0); //繪制所需的直線
在繪制三角形時,還需要用到三角函數(shù)來進(jìn)行復(fù)雜的計算,代碼如下所示:
textX1=radius*sin(ARC(15));
textY1=radius*cos(ARC(15));
并且,如果需求變更,地平儀圖符的尺寸需要更改,那么開發(fā)人員需要重新編寫代碼進(jìn)行繪制,開發(fā)內(nèi)容重復(fù)而繁瑣。使用SCADE Display的話,其自帶的比例屬性就可以對圖符尺寸進(jìn)行調(diào)節(jié),而不必重新繪制,極大地提高了可復(fù)用性,同時也降低了開發(fā)成本。
最終統(tǒng)計得到開發(fā)地平儀圖符所需的代碼行數(shù)如表1所示。
從表1中可以看出,使用基于SCADE Display模型的開發(fā)方式生成的代碼行數(shù)大于基于傳統(tǒng)代碼的開發(fā)方式,相應(yīng)地,這種方式繪制的圖符也更為精細(xì)。此外,模型自動生成代碼減少了手工編碼的時間,避免了因重復(fù)編寫代碼而造成的紕漏,提高了開發(fā)效率。
本文提出一種結(jié)合SCADE Display與Visual Studio 2010的座艙顯示軟件開發(fā)方法,對“基于模型”和“基于代碼”的軟件開發(fā)方式進(jìn)行了結(jié)合,結(jié)果證明,使用該方法開發(fā)座艙顯示軟件,軟件的顯示效果可以滿足座艙系統(tǒng)顯示頁面開發(fā)的需求,同時縮短了開發(fā)時間;通過模型仿真的方式進(jìn)行需求驗證,使驗證工作更加充分,亦降低了驗證成本。應(yīng)用SCADE Display進(jìn)行座艙顯示開發(fā),使軟件開發(fā)的設(shè)計工作主要集中在繪制圖符、構(gòu)建畫面與定義數(shù)據(jù)接口上,節(jié)省了大量的圖形手工代碼編程與調(diào)試工作,將軟件開發(fā)重點(diǎn)由編碼階段提前到設(shè)計階段,顯著提高軟件的安全性和可靠性。SCADE Display自動生成的符合DO-178C標(biāo)準(zhǔn)的代碼也可以便捷地移植到不同環(huán)境中,能夠很好地滿足機(jī)載軟件高安全性軟件開發(fā)要求。結(jié)合SCADE Display和Visual Studio 2010的座艙顯示軟件開發(fā)方法已經(jīng)成功在樣機(jī)上實現(xiàn),該方法對于后續(xù)的直升機(jī)型號研發(fā)也有著一定的參考意義。