姚文姣,黃 艷
(1.中國科學院沈陽計算技術研究所,沈陽 110000;2.中國科學院大學,北京 100049;3.沈陽中科數控技術股份有限公司 GJ事業部,沈陽 110000)
在當今信息時代的影響下,智能化、信息化技術被應用于各個方面。工業制造領域對數控技術的需求不再局限于過去的設計生產水平,開放性與可重構性是數控系統發展的重要趨勢[1-2]。人機界面是用戶與數控系統之間聯系的媒介。具有開放性的數控系統人機界面,在提高用戶使用感的同時為開發者對系統進行后期維護提供便利[3]。
本文基于UML技術和面向對象設計方法,構建結構模型和動態模型完成對界面框架及對象行為的描述,創建一種具有開放性的數控系統人機界面的框架模型。在界面的設計實現階段,由于高頻率的界面刷新重建會出現界面閃爍甚至卡死的問題,影響使用體驗。李寬等[4]在實驗中使用雙緩沖技術解決了界面刷新時產生的閃爍、抖動問題。針對該問題,本文在雙緩沖的基礎上,在界面開發階段應用三緩沖技術,降低界面負載和刷新延遲,取得了良好的效果。
以用戶的需求和所期望達到的預期目標為依據,對數控系統人機界面進行需求分析。界面結構如圖1所示,概括了系統所包含界面的大致種類及相應子界面,構造一個條理清晰的界面框架結構。

圖1 界面結構組成
針對每個界面 進行需求分析,獲取該界面的功能需求。位置界面中用戶可選擇零件的加工方式,實現對機床坐標、主軸速率及運動信息等的調整控制;參數界面實現對系統參數的讀取顯示、修改、刪除等操作;程序界面中包括對NC程序的管理及校驗;設置界面包括對操作權限的設置,可對系統數據進行分類別的備份還原,以達到對系統的維護;報警界面需將系統運行時出現的錯誤和報警信息及時反饋給用戶,記錄并存儲系統的運行狀態信息;補償界面完成對刀具補償和螺距補償信息的錄入和修改等。
將需求分析階段獲取的功能需求抽象成功能用例,并確定功能用例之間的交互關系,反映系統的實際使用情況。使用UML中的用例圖對框架模型和功能用例進行整體描述,如圖2所示。

圖2 系統用例圖
用例圖是UML靜態模型中的一種,它描述了系統角色與功能用例之間、各功能用例之間的交互關系[5],反映了系統的開發目的。UML模型能夠對系統結構、系統對象的靜態特性及動態特性實現視圖化的描述,深化了開發者對系統行為、結構及其獨立元素的認識,有助于更好地確定設計流程,開發出易于維護的系統[6-7]。
以參數界面為例,通過對實現該界面所涉及的設計類、方法進行結構化的描述,得到界面設計類圖,為實現階段提供框架基礎,如圖3所示。

圖3 參數類圖
Display_Task類實現界面信息顯示及響應界面事件的功能。ViewParData類根據Key類傳遞的鍵值和獲取的當前光標位置,對選定數據實現相應的操作。FrameWin類實現對界面控件的布局管理。
順序圖將功能用例進一步細化,關注系統對象之間的交互,強調在通信流程中的先后順序。通過對象間交互流程的描述,可提高界面開發的可操作性。以用戶對參數設置的功能用例建立順序圖,如圖4所示。Key類對用戶按下的按鍵獲取鍵值后進行識別判斷,FrameWin類做出刷新界面響應,并向DataParaCursor類發送讀取數據信息請求,顯示信息以實現當前界面的刷新。

圖4 參數操作順序圖
上文中以參數界面為例,展示了基于面向對象設計方法的UML模型構建。通過類圖與順序圖的描述,開發者可以明確設計類之間的調用繼承關系及通信流程,為后期界面實現提供了明確的整體開發框架[8-9]。
在硬件方面,使用基于ARM9處理器和已經移植有μC/OS-II實時操作系統的開發板作為目標機,且該開發板使用LCD液晶的顯示方式。PC機作為宿主機,選擇IAR Systems作為開發環境,結合JLink硬件仿真器進行實時調試,完成用戶界面的實現。
根據所創建的系統框架模型和UML分析得到的設計類,由于C語言對嵌入式軟件的編碼效率更好,所以需要將建模工具Rational Rose 生成的界面框架C++代碼進行相應的修改,并將處于靜態的對象所包含的方法修改成獨立的函數。
主界面如圖5所示,系統初始狀態設置為程序回零。

圖5 主界面
由于界面給用戶最直觀的視覺感受,因而在外觀設計方面,需考慮到界面布局方式、色彩搭配、字體等因素,以一致性為基準,各個界面須風格統一[10-11]。本系統界面采用冷色調中的藍色作為基調,給人以低調鎮靜之感。使用以文字為主的信息反饋方式,直觀且易于理解,因此,創建了14×14、16×16、18×18三種不同大小的字體,在清晰顯示的前提下提供盡可能多的信息,若當前界面無法包含所有的信息內容,可使用上下鍵和翻頁鍵進行查看。對于涉及參數顯示的界面采用LISTVIEW控件進行列表化的展示,達到整齊劃一的效果。界面菜單采用二級樹狀菜單的形式,每個界面都包含了主功能按鈕和子功能按鈕兩種類型,分別在界面的下方和側面。每個主功能按鈕都關聯相應的子功能操作。
在此主界面中,加工信息、位置參數和NC程序狀態等信息都進行了分類別分區域的顯示,使用戶不需進行其他操作就可了解當前機床的狀態信息。
在本系統中,界面需實時反饋機床的相關信息,即界面動態信息需實時刷新顯示。涉及到信息更新和界面切換時需刷新界面,而刷新時會伴隨界面閃爍的現象。
針對此現象,應用三緩沖技術進行處理,該技術可以保證界面在復雜情況下的連續性,提高界面刷新的流暢度。其基本原理如圖6所示。

圖6 三緩沖實現原理
該技術需要構建一個前置緩沖區和兩個后置緩沖區。前置緩沖區用來暫存后置緩沖區繪制完成的內容,待全部完成后復制到顯示緩沖區。相比而言,雙緩沖技術僅包含一個后置緩沖區,在面臨大量繪圖計算時,會出現影響性能和輸入延遲的情況,而三緩沖的額外緩沖區使系統有足夠的空間計算大量的圖形數據,且復制速度極快,可有效解決界面閃爍問題,同時也可避免數據丟失。實現流程如下:
(1)在LCDConf_Lin_Template.c文件中開啟三緩沖,定義緩沖區個數;在主函數中調用WM_MULTIBUF_Enable(1)進行使能。
(2)配置三緩沖功能:
GUI_MULTIBUF_ConfigEx(i,NUM_BUFFERS); //設置三緩沖區
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION,0,0);//創建顯示驅動器件
LCD_SetDevFunc(i,LCD_DEVFUNC_COPY-BUFFER,(void(*)(void))_LCD_CopyBuffer); //定義Copy函數
(3)函數GUI_MULTIBUF_BeginEx( )和GUI_MULTIBUF_EndEX( )分別實現繪制工作的開始和結束,且僅在后置緩沖區繪制;完成后,函數LCD_CopyBuffer( int LayerIndex, int IndexSrc, int IndexDst)將前置緩沖區暫存的內容復制到顯示緩沖區,同時向LCD_X_DisplayDriver( )函數傳遞 LCD_X_SHOWBUFFER信息,讀取數據實現界面顯示,工作流程如圖7所示。

圖7 三緩沖工作流程
(4)當調用GUI_MULTIBUF_EndEX( )結束緩沖繪制時,數據內容被復制到顯示緩沖區完成讀取顯示,為了防止出現撕裂效果,需在中斷處理程序中做相應處理,核心代碼如下:
intStatus = ELCDIF_GetInterruptStatus(LCDIF);
//獲得中斷狀態,響應中斷
ELCDIF_ClearInterruptStatus(LCDIF,intStatus);//清中斷
if (intStatus & kELCDIF_CurFrameDone){
if (s_LCDpendingBuffer >= 0){
ELCDIF_SetNextBufferAddr(LCDIF, addr);//將顯示內存中的數據顯示出來
GUI_MULTIBUF_Confirm(s_LCDpendingBuffer);//確認前置緩沖區可見并立即調用
s_LCDpendingBuffer = -1;
}
}
采用該方法后,在使用過程中界面切換、刷新流暢,沒有出現屏幕閃爍的情況。
此外,與重繪整個界面相比,局部重繪可以降低界面負載和刷新延遲。函數WM_InvalidateRect(hWin, &Rect)對指定矩形區域Rect進行無效處理,然后調用 WM_Paint( )對該區域進行重繪。
本文對數控系統人機界面采用面向對象與UML建模技術相結合的方法,分析了該人機界面的功能需求、組織結構之間的邏輯關系和控制流程,構建了基于動靜態模型的系統框架,為開放式數控系統的開發提供了建模方法和功能框架。
采用三緩沖技術解決了開發過程中出現的界面閃爍問題,有效提高了界面切換的流暢度,取得了良好的效果,為涉及大量圖像數據的界面開發工作提供一個有效的解決方式,具有重要的實際意義。