梁磊,宋曉東,郭佩,鄭家莉
(1. 中國空間技術(shù)研究院 載人航天總體部,北京 100094;2. 北京理工大學 宇航學院,北京 100081)
隨著中國載人航天領(lǐng)域的深入發(fā)展,載人登月及載人深空探測活動逐步開展,航天員的在軌駐留時間與日俱增,需要完成的任務越來越多,人機交互設備的功能日益復雜和多樣化。在上述應用背景下,人機交互顯示系統(tǒng)需要滿足人機工效評價的幾個因素[1]:
1)安全性與可靠性。人機交互顯示系統(tǒng)需要對航天員的操作及時做出響應,保證指令、數(shù)據(jù)收發(fā)的實時性;對關(guān)鍵性功能設計有再次確認的措施,以避免由于航天員誤操作帶來的安全性事故。
2)合理性。在既定液晶顯示器尺寸的背景下,所采用的字體、字符大小、頁面布局形式等因素應該方便航天員辨認,識別較快,出錯較少。顯示出的信息需要按照優(yōu)先程度進行排列,以便航天員在身著航天服的情況下能最容易得到執(zhí)行某些任務的信息,并準確地做出操作。
3)可配置性。為滿足航天員對操作界面的個性化需求,設計多種顯示方案,對界面的顏色、布局、顯示風格等能夠自主配置。
早期的載人航天人機交互顯示系統(tǒng)采用機械化的儀表和物理按鍵,在有限的艙內(nèi)空間中,布局局促,操作不便的缺點暴露無遺。隨著載人航天二期工程的發(fā)展,物理按鍵結(jié)合液晶顯示屏的方案被成功應用,但是設備的物理區(qū)域仍然占用大量空間,圖形化顯示的實現(xiàn)采用繪圖(點、線、面)方式,顯示效果單一,代碼量大,執(zhí)行效率低。當前,民用計算機技術(shù)逐步成熟,結(jié)合航天器質(zhì)量、空間、能源的自身特點,重量輕、體積小功耗低的嵌入式操作系統(tǒng)被廣泛應用到載人航天器中,在嵌入式操作系統(tǒng)上通過觸摸式液晶顯示實現(xiàn)一個圖形用戶界面系統(tǒng)成為構(gòu)建日益復雜的人機交互界面的有效解決方案[2]。
MiniGUI是一款輕量級的面向嵌入式系統(tǒng)的高級窗口系統(tǒng)(Windowing System)和圖形用戶、界面(Graphical User Interface,GUI)支持系統(tǒng)[3]??丶–ontrol)則是GUI系統(tǒng)中提供給應用開發(fā)人員的現(xiàn)有設計元素,例如按鈕(Button)、編輯框(Edit)、列表框(Listbox)、靜態(tài)框(Static)等等[4],控件的設計風格決定了圖形用戶界面的顯示效果。通過控件的應用,開發(fā)人員可以快速開發(fā)出GUI應用程序。但是航天員需要GUI具備識別度高、實時性好、可配置的特點,系統(tǒng)默認提供的控件經(jīng)常無法滿足航天員在身著航天服情況下進行操作或遠距離識別的特殊要求。這就需要軟件設計人員自行開發(fā)控件,以滿足航天員的使用需求。
文獻[5]提出的控件的實現(xiàn)方式主要有以下幾種:①直接使用系統(tǒng)定義的控件;②對已經(jīng)建立的控件實例進行子類化;③對某個控件類進行子類化。第1種方式是對系統(tǒng)定義好的控件的直接使用,用戶受限于其已定義好的功能和樣式,不能擴展。第2種方式只會影響到一個控件實例,可改動的控件信息少,應用范圍受該控件的固有屬性所限制,而且在需要大量控件的界面中,軟件開發(fā)者需要不斷地對控件進行子類化,增加了代碼重復性,降低了軟件設計效率。第3種方式類似于C++里的“繼承”,繼承已有的控件類,并在其基礎上做擴展。該方法限定了控件的基礎功能而不能進行顛覆性的設計。例如MiniGUI里的CTRL_ BUTTON類,可以設定“classic”、“fashion”、“skin”風格,但僅限于在這幾種風格之間切換,用戶不能隨意修改按鍵的配色、外形、立體效果等設計元素。
本文提出的自定義控件設計方式為新注冊一個控件類,不會影響原有其他控件類。該方法按照需求完全自己重新設計控件類,相當于在MFC里繼承自CObject類。目前,對自己重新設計控件類的工程應用還沒有報道。本文以按鍵控件為例闡述自定義控件的設計方法,從實際應用的需求出發(fā),根據(jù)MiniGUI的內(nèi)部結(jié)構(gòu),對自定義按鍵進行了信息流和切換邏輯等設計。另外,除了文獻[5]描述的按鍵的4種狀態(tài)(正常、按下、焦點、無效)外,按鍵的每一種狀態(tài)都能夠保持(自鎖)也是一項非常重要的狀態(tài),此時航天員可以通過視覺感知按鍵的狀態(tài)來了解設備的工作情況,避免產(chǎn)生錯誤的判斷。下面介紹新注冊按鍵類的方法。
MiniGUI是消息驅(qū)動的系統(tǒng),一切運作都圍繞著消息進行,MiniGUI應用程序通過接收消息來實現(xiàn)不同線程的數(shù)據(jù)傳輸和控制。系統(tǒng)對輸入事件或應用程序的響應產(chǎn)生消息,應用程序可以通過產(chǎn)生消息來完成,頁面重繪、數(shù)據(jù)更新以及與其他應用程序的窗口進行通訊。
消息結(jié)構(gòu)的成員包括該消息所屬的窗口(Hwnd)、消息標識、消息的WPARAM型參數(shù)(WParam)、消息的LPARAM型參數(shù)(LParam)以及消息發(fā)生的時間。MiniGUI中預定義的消息有:系統(tǒng)消息、對話框消息、窗口繪制消息、窗口創(chuàng)建和銷毀消息、鼠標和鍵盤消息、鼠標/鍵盤后處理消息等[4]。自定義按鍵控件類的實現(xiàn)離不開對上述消息的綜合利用,每一個按鍵即是一個窗口,同時產(chǎn)生一個窗口創(chuàng)建消息。在鼠標或鍵盤對按鍵進行操作時,產(chǎn)生相應的鼠標或鍵盤消息,啟動按鍵控件的窗口繪制消息,以改變按鍵的形態(tài)、顏色等屬性。通過窗口銷毀消息可以對不需要的按鍵進行銷毀處理,釋放系統(tǒng)資源。
在應用程序設計過程中,以MiniGUIMain()函數(shù)為程序入口點,創(chuàng)建自定義按鍵的數(shù)據(jù)結(jié)構(gòu)和初始化函數(shù),系統(tǒng)在主窗口創(chuàng)建后自動建立消息循環(huán),等待新消息的到來。產(chǎn)生鼠標消息時,系統(tǒng)調(diào)用窗口過程函數(shù)進行處理并輸出到屏幕[6]。由系統(tǒng)調(diào)度分配執(zhí)行時間,實現(xiàn)多任務的執(zhí)行,提高軟件的運行效率。自定義按鍵控件消息的信息流程及消息機制如圖1所示。
圖1 信息流程及消息機制Fig. 1 Information flow and message mechanism
按鍵控件的數(shù)據(jù)結(jié)構(gòu)定義了按鍵的功能和配置參數(shù),是對體現(xiàn)按鍵控件顯示效果的各元素的提煉。配置參數(shù)的多少決定了按鍵在使用過程中可配置性的強弱。軟件開發(fā)人員在使用該類按鍵控件生成實例時,可以按需求對參數(shù)進行賦值。航天員可以在功能界面中自行配置參數(shù)的起始位置、大小、顏色等信息,實現(xiàn)個性化配置??膳渲玫膮?shù)包括:位置、尺寸、字體、字體顏色、前景色(包括抬起、按下、焦點、無效、自鎖5種狀態(tài))、投影色、自鎖屬性及顯示模式等,其數(shù)據(jù)結(jié)構(gòu)定義如圖2所示。
通過對日常生活中各類按鍵特點的分析,主要設計了按鍵的5種顯示狀態(tài)(正常、按下、高亮、無效、自鎖)的外觀效果,符合日常操作習慣,易于航天員理解和接受。
圖2 按鍵的數(shù)據(jù)結(jié)構(gòu)Fig. 2 Data structure of button
針對文中提到的投影風格和凹凸風格,分別實現(xiàn)了兩套代碼。通過MiniGUI自帶的繪圖函數(shù)繪制直線(Lineto())、繪制圓(Circle())、繪制矩形(Rectangle())、寫文字(Drawtext())、填充繪圖區(qū)域(FillBox())等函數(shù)進行設計,設計完成后進行模塊化打包處理。按鍵控件外觀效果實現(xiàn)函數(shù)的結(jié)構(gòu)如圖3所示,其中:
圖3 按鍵設計函數(shù)Fig. 3 Button design function
按鍵共設計有5種狀態(tài):正常(Normal),鼠標或人手(使用觸摸屏時)不在按鍵所在區(qū)域,且按鍵處于使能的狀態(tài);焦點(Focus),按鍵處于輸入焦點的狀態(tài),此時鼠標或人手(使用觸摸屏時)懸浮于按鍵所在區(qū)域,且按鍵處于使能的狀態(tài);按下(Click),按鍵在焦點狀態(tài)下被按下;無效(Disable),控件被EnableWindow()設置成無效時的狀態(tài);自鎖(Lock),自鎖參數(shù)Lock有效,按鍵進入鎖定的狀態(tài)且在鼠標或人手(使用觸摸屏時)離開按鍵所在區(qū)域后,能夠保持。自定義按鍵控件的狀態(tài)及其轉(zhuǎn)換邏輯關(guān)系如圖4所示。
圖4 按鍵狀態(tài)切換邏輯Fig. 4 Button state switching logic
自定義按鍵是基于MiniGUI體系設計的,因此也具備MiniGUI中定義的按鍵基本功能。這里圖片風格的設計采用在自定義按鍵上加載位圖的方式實現(xiàn)外觀的動態(tài)效果。位圖通常是使用第三方畫圖工具完成的,其優(yōu)勢是可以實現(xiàn)現(xiàn)實世界中的各種復雜圖像,最真切的反應按鍵控件的功能特點。
位圖缺點也是顯著的,主要有兩個。第一,位圖容易受設備依賴性的影響,例如顏色,位圖經(jīng)常暗示了特定的顯示分辨率和圖像縱橫比。盡管位圖能被拉伸和壓縮,但是此過程通常包括復制或刪除像素的某些行和列,這樣會導致圖像的失真。位圖的第二個主要缺點是需要的存儲空間很大。位圖的存儲空間由位圖的大小及其顏色數(shù)決定,例如,表示一個320 ×240像素,16位色的屏幕的位圖需要至少320 × 240 ×2=150 KB的存儲空間;而存儲一個1 024 × 768像素,24位色的位圖則需要大于2 MB的空間。在軌運行的飛行器的存儲空間通常有限,大規(guī)模軟件在前期策劃時要慎重權(quán)衡采用的設計方案。
在圖片風格按鍵控件的設計過程中,首先在程序初始化時通過調(diào)用MiniGUI的LoadBitMap函數(shù)將某種位圖文件裝載為MiniGUI設備相關(guān)的位圖對象(即BITMAP對象)到設備內(nèi)存。然后,調(diào)用位塊填充函數(shù)FillBoxWithBitmap將位圖填充到按鍵控件所在區(qū)域。產(chǎn)生鼠標動作時,調(diào)用BitBlt()函數(shù)用新的位圖替換掉原來控件上的位圖,實現(xiàn)按鍵狀態(tài)切換的顯示效果更新。
5種狀態(tài)的表現(xiàn)方式全部通過代碼編程的方式繪制。設計按鍵時,將按鍵的前景和背景的位置形成偏差,背景設計出黑色影子的效果,如圖5~8的左側(cè)處于正常狀態(tài)的按鍵顯示效果。當按下按鍵,前景移動位置將背景覆蓋,前景上的文本同步移動即可看到動態(tài)效果。圖5右側(cè)按鍵為按下時的狀態(tài),按鍵顏色切換為綠色,且前景移位覆蓋背景。圖6右側(cè)為進入焦點狀態(tài)的按鍵效果,顏色已切換為亮藍色。圖7右側(cè)按鍵處在自鎖狀態(tài),從圖中可以看到,鼠標不在按鍵區(qū)域,但是按鍵的狀態(tài)仍然可以保持。圖8右側(cè)按鍵為無效的顯示效果,按鍵顏色定義為灰色。
圖5 正常狀態(tài)和按下狀態(tài)對比Fig. 5 Comparison between normal state and pressed state
圖6 正常狀態(tài)和高亮狀態(tài)對比Fig. 6 Comparison between normal state and highlight state
圖7 正常狀態(tài)和鎖定狀態(tài)對比Fig. 7 Comparison between normal state and locked state
圖8 正常狀態(tài)和無效狀態(tài)對比Fig. 8 Comparison between normal state and disabled state
該風格是通過代碼編程的方式繪制,在顯示效果上,根據(jù)光照的明暗紋理給人視覺上的不同表現(xiàn)而設計。如圖9所示,這里給出了按鍵的正常狀態(tài)和自鎖狀態(tài)的對比圖。按鍵的彈起和按下給人一種視覺上的凸起和凹下的物理按鍵的顯示效果。
將5個圖標繪制成一張圖片來表示按鍵的5種狀態(tài),圖片支持bmp、png、gif、jpeg等格式,如圖10所示,它由長200寬120的5個按鍵狀態(tài)組成,從上到下一次為正常、高亮、按下、無效、鎖定5種狀態(tài)。按鍵的外觀效果完全由圖片展現(xiàn)。實際應用時,通過判斷鼠標對按鍵區(qū)域的操作對圖10中對應按鍵區(qū)域進行截取。應用到軟件實現(xiàn)中的效果如圖11所示。圖11左側(cè)是正常狀態(tài),右側(cè)鼠標已經(jīng)放在按鍵區(qū)域中,按鍵處于高亮狀態(tài),且圖標中的箭頭相比于正常狀態(tài)有所縮小,即圖10中第2個按鍵的顯示效果。
圖9 凹凸風格的正常狀態(tài)和鎖定狀態(tài)對比Fig. 9 Comparison between normal state and locked state of the concave and convex style
圖10 按鍵位圖的五種狀態(tài)Fig. 10 The five bitmap of the button bitmap
圖11 貼圖風格的按鍵正常狀態(tài)和高亮狀態(tài)Fig. 11 Comparison between normal state and highlight state of the bitmap style
投影風格和凹凸風格的設計思路相同,表現(xiàn)方式不同。投影風格的按鍵通過假想按鍵左上角的光照在右下角產(chǎn)生投影,設計出按鍵的立體效果,凹凸風格則是通過按鍵邊緣對光照的不同表現(xiàn)效果營造出按鍵的立體感。軟件開發(fā)者可以根據(jù)上述兩種風格的思路,設計出其他的風格,在軟件的實際應用中,凹凸風格和投影風格可以作為顯示風格的兩種配置方案。這兩種風格均是應用MiniGUI系統(tǒng)的函數(shù)通過繪圖實現(xiàn)的,沒有資源的加載和釋放過程,代碼執(zhí)行效率高,響應快,但是顯示的效果只能通過點、線、面的顏色搭配來實現(xiàn),無法實現(xiàn)顏色漸變、渲染、發(fā)光等高級效果。
圖片風格是通過專用的圖片操作函數(shù)加載內(nèi)存中的圖片資源實現(xiàn)的,可以減少軟件代碼的設計工作。圖片一般由第三方軟件繪制,可以為用戶提供豐富的視覺信息,但是對于控件需求量比較大的軟件,則需要配置數(shù)目可觀的圖片,而且在圖片切換的過程中需要耗費較大的計算機資源,對存儲空間和處理速度的額外需求將給航天器嵌入式系統(tǒng)帶來巨大的負擔。在實際應用過程中,用戶可以根據(jù)系統(tǒng)硬件的配置情況和對外觀效果需求的高低對上述控件的風格進行設計和選擇。
MiniGUI是一個面向嵌入式操作系統(tǒng)的圖形用戶界面支持系統(tǒng),能夠快捷地完成圖形用戶信息交互界面的開發(fā)。在航天器資源有限的情況下,通過文中的設計和應用,成功將MiniGUI的自定義控件應用到載人航天器的圖形用戶界面中,通過模塊化設計方法提高了軟件運行效率,實現(xiàn)了按鍵屬性可配置,并通過多種方案和大量的繪圖驗證了自定義控件方法的可行性和顯示效果的美觀性、實用性。該方法還可以應用到編輯框、列表框等其他控件的設計中,目前,人機交互界面中的3種顯示風格均通過了載人航天系統(tǒng)的人機工效學評價,投影風格和凹凸風格的設計已在載人航天三期工程的某型號中得到應用。
[1]SZ-Q/W(0)96.7-2011,載人航天器標準[S]. 2011.
[2]李國光,王文海. 基于嵌入式Linux系統(tǒng)的MiniGUI的移植研究[J]. 組合機床與自動化加工技術(shù),2011,2(2):53-59.Li G G,Wang W H. The study on MiniGUI transplantation based on embedded linux [J]. Modular Machine Tool & Automatic Manufactruing Technique,2011,2(2):53-59.
[3]張磊,王亞剛. 基于MiniGUI的嵌入式圖形界面的研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2015,25(2):194-198.Zhang L,Wang Y G. Research and implementation of embedded GUI based on MiniGUI [J]. Computer Technology and Development,2015,25(2):194-198.
[4]魏永明. MiniGUI編程指南[M]. 北京:北京飛漫軟件技術(shù)有限公司,2010.
[5]胡明明. 深入分析MiniGUI控件的自定義性[C]//2011年中國國際廣播電視信息網(wǎng)絡展覽會(CCBN2011). 北京:CCBN,2011.Hu M M. Deeply analysis of the customization of MiniGUI control[C]//China Content Broadcasting Network (CCBN2011).Beijing:CCBN,2011.
[6]保云,王銳. MiniGUI消息機制探討[J]. 計算機科學,2006,33(9):188-189.Bao Y,Wang R. Discussion on MiniGUI message mechanism [J].Computer Science. 2006,33(9):188-189.
[7]夏寶亮. 嵌入式圖形用戶界面的應用開發(fā)[D].南京:南京郵電大學,2008.Xia B L. Application and development of embedded graphical user interface [D]. Nan Jing: Nanjing University of Poses and Telecommunications,2008.
[8]黃健,宋巧紅. 嵌入式Linux下MiniGUI皮膚引擎設計[J].計算機應用與軟件,2011,28(10):114-116.Huang J,Song Q H. A design of skin engine of MiniGUI in embedded linux [J]. Computer Applications and Software,2011,28(10):114-116.
[9]金剛. 基于嵌入式Linux的圖形用戶界面的研究與設計[D]. 太原: 太原理工大學,2009.Jin G. Study of graphical user interface based on embedded linux and MiniGUI [D]. Taiyuan: Taiyuan University of Technology,2009.
[10]吳帆. 基于嵌入式Linux的圖形用戶界面的研究與設計[D]. 武漢: 武漢理工大學,2009.Wu F. Research and design of graphical user interface based on embedded linux [D]. Wuhan: Wuhan University of Technology,2009.
[11]靳曉園,馬穎勁. 一種基于MiniGUI的多任務嵌入式軟件設計 [J]. 航天控制,2012,30(3):65-68.Jin X Y,Ma Y J. The design of embedded software based on MiniGUI and multitask [J]. Aerospace Control,2012,30(3):65-68.
[12]于秀霞. 嵌入式監(jiān)控系統(tǒng)中MiniGUI的編程與實現(xiàn) [J]. 長春大學學報,2009,19(6):58-60.Yu X X. Programme and realization of MiniGUI on embedded monitor system [J]. Changchun University Transaction,2009,19(6):58-60.