姚文姣,黃 艷
(1.中國科學院沈陽計算技術(shù)研究所,沈陽 110000;2.中國科學院大學,北京 100049;3.沈陽中科數(shù)控技術(shù)股份有限公司 GJ事業(yè)部,沈陽 110000)
在當今信息時代的影響下,智能化、信息化技術(shù)被應用于各個方面。工業(yè)制造領(lǐng)域?qū)?shù)控技術(shù)的需求不再局限于過去的設(shè)計生產(chǎn)水平,開放性與可重構(gòu)性是數(shù)控系統(tǒng)發(fā)展的重要趨勢[1-2]。人機界面是用戶與數(shù)控系統(tǒng)之間聯(lián)系的媒介。具有開放性的數(shù)控系統(tǒng)人機界面,在提高用戶使用感的同時為開發(fā)者對系統(tǒng)進行后期維護提供便利[3]。
本文基于UML技術(shù)和面向?qū)ο笤O(shè)計方法,構(gòu)建結(jié)構(gòu)模型和動態(tài)模型完成對界面框架及對象行為的描述,創(chuàng)建一種具有開放性的數(shù)控系統(tǒng)人機界面的框架模型。在界面的設(shè)計實現(xiàn)階段,由于高頻率的界面刷新重建會出現(xiàn)界面閃爍甚至卡死的問題,影響使用體驗。李寬等[4]在實驗中使用雙緩沖技術(shù)解決了界面刷新時產(chǎn)生的閃爍、抖動問題。針對該問題,本文在雙緩沖的基礎(chǔ)上,在界面開發(fā)階段應用三緩沖技術(shù),降低界面負載和刷新延遲,取得了良好的效果。
以用戶的需求和所期望達到的預期目標為依據(jù),對數(shù)控系統(tǒng)人機界面進行需求分析。界面結(jié)構(gòu)如圖1所示,概括了系統(tǒng)所包含界面的大致種類及相應子界面,構(gòu)造一個條理清晰的界面框架結(jié)構(gòu)。
圖1 界面結(jié)構(gòu)組成
針對每個界面 進行需求分析,獲取該界面的功能需求。位置界面中用戶可選擇零件的加工方式,實現(xiàn)對機床坐標、主軸速率及運動信息等的調(diào)整控制;參數(shù)界面實現(xiàn)對系統(tǒng)參數(shù)的讀取顯示、修改、刪除等操作;程序界面中包括對NC程序的管理及校驗;設(shè)置界面包括對操作權(quán)限的設(shè)置,可對系統(tǒng)數(shù)據(jù)進行分類別的備份還原,以達到對系統(tǒng)的維護;報警界面需將系統(tǒng)運行時出現(xiàn)的錯誤和報警信息及時反饋給用戶,記錄并存儲系統(tǒng)的運行狀態(tài)信息;補償界面完成對刀具補償和螺距補償信息的錄入和修改等。
將需求分析階段獲取的功能需求抽象成功能用例,并確定功能用例之間的交互關(guān)系,反映系統(tǒng)的實際使用情況。使用UML中的用例圖對框架模型和功能用例進行整體描述,如圖2所示。
圖2 系統(tǒng)用例圖
用例圖是UML靜態(tài)模型中的一種,它描述了系統(tǒng)角色與功能用例之間、各功能用例之間的交互關(guān)系[5],反映了系統(tǒng)的開發(fā)目的。UML模型能夠?qū)ο到y(tǒng)結(jié)構(gòu)、系統(tǒng)對象的靜態(tài)特性及動態(tài)特性實現(xiàn)視圖化的描述,深化了開發(fā)者對系統(tǒng)行為、結(jié)構(gòu)及其獨立元素的認識,有助于更好地確定設(shè)計流程,開發(fā)出易于維護的系統(tǒng)[6-7]。
以參數(shù)界面為例,通過對實現(xiàn)該界面所涉及的設(shè)計類、方法進行結(jié)構(gòu)化的描述,得到界面設(shè)計類圖,為實現(xiàn)階段提供框架基礎(chǔ),如圖3所示。
圖3 參數(shù)類圖
Display_Task類實現(xiàn)界面信息顯示及響應界面事件的功能。ViewParData類根據(jù)Key類傳遞的鍵值和獲取的當前光標位置,對選定數(shù)據(jù)實現(xiàn)相應的操作。FrameWin類實現(xiàn)對界面控件的布局管理。
順序圖將功能用例進一步細化,關(guān)注系統(tǒng)對象之間的交互,強調(diào)在通信流程中的先后順序。通過對象間交互流程的描述,可提高界面開發(fā)的可操作性。以用戶對參數(shù)設(shè)置的功能用例建立順序圖,如圖4所示。Key類對用戶按下的按鍵獲取鍵值后進行識別判斷,F(xiàn)rameWin類做出刷新界面響應,并向DataParaCursor類發(fā)送讀取數(shù)據(jù)信息請求,顯示信息以實現(xiàn)當前界面的刷新。
圖4 參數(shù)操作順序圖
上文中以參數(shù)界面為例,展示了基于面向?qū)ο笤O(shè)計方法的UML模型構(gòu)建。通過類圖與順序圖的描述,開發(fā)者可以明確設(shè)計類之間的調(diào)用繼承關(guān)系及通信流程,為后期界面實現(xiàn)提供了明確的整體開發(fā)框架[8-9]。
在硬件方面,使用基于ARM9處理器和已經(jīng)移植有μC/OS-II實時操作系統(tǒng)的開發(fā)板作為目標機,且該開發(fā)板使用LCD液晶的顯示方式。PC機作為宿主機,選擇IAR Systems作為開發(fā)環(huán)境,結(jié)合JLink硬件仿真器進行實時調(diào)試,完成用戶界面的實現(xiàn)。
根據(jù)所創(chuàng)建的系統(tǒng)框架模型和UML分析得到的設(shè)計類,由于C語言對嵌入式軟件的編碼效率更好,所以需要將建模工具Rational Rose 生成的界面框架C++代碼進行相應的修改,并將處于靜態(tài)的對象所包含的方法修改成獨立的函數(shù)。
主界面如圖5所示,系統(tǒng)初始狀態(tài)設(shè)置為程序回零。
圖5 主界面
由于界面給用戶最直觀的視覺感受,因而在外觀設(shè)計方面,需考慮到界面布局方式、色彩搭配、字體等因素,以一致性為基準,各個界面須風格統(tǒng)一[10-11]。本系統(tǒng)界面采用冷色調(diào)中的藍色作為基調(diào),給人以低調(diào)鎮(zhèn)靜之感。使用以文字為主的信息反饋方式,直觀且易于理解,因此,創(chuàng)建了14×14、16×16、18×18三種不同大小的字體,在清晰顯示的前提下提供盡可能多的信息,若當前界面無法包含所有的信息內(nèi)容,可使用上下鍵和翻頁鍵進行查看。對于涉及參數(shù)顯示的界面采用LISTVIEW控件進行列表化的展示,達到整齊劃一的效果。界面菜單采用二級樹狀菜單的形式,每個界面都包含了主功能按鈕和子功能按鈕兩種類型,分別在界面的下方和側(cè)面。每個主功能按鈕都關(guān)聯(lián)相應的子功能操作。
在此主界面中,加工信息、位置參數(shù)和NC程序狀態(tài)等信息都進行了分類別分區(qū)域的顯示,使用戶不需進行其他操作就可了解當前機床的狀態(tài)信息。
在本系統(tǒng)中,界面需實時反饋機床的相關(guān)信息,即界面動態(tài)信息需實時刷新顯示。涉及到信息更新和界面切換時需刷新界面,而刷新時會伴隨界面閃爍的現(xiàn)象。
針對此現(xiàn)象,應用三緩沖技術(shù)進行處理,該技術(shù)可以保證界面在復雜情況下的連續(xù)性,提高界面刷新的流暢度。其基本原理如圖6所示。
圖6 三緩沖實現(xiàn)原理
該技術(shù)需要構(gòu)建一個前置緩沖區(qū)和兩個后置緩沖區(qū)。前置緩沖區(qū)用來暫存后置緩沖區(qū)繪制完成的內(nèi)容,待全部完成后復制到顯示緩沖區(qū)。相比而言,雙緩沖技術(shù)僅包含一個后置緩沖區(qū),在面臨大量繪圖計算時,會出現(xiàn)影響性能和輸入延遲的情況,而三緩沖的額外緩沖區(qū)使系統(tǒng)有足夠的空間計算大量的圖形數(shù)據(jù),且復制速度極快,可有效解決界面閃爍問題,同時也可避免數(shù)據(jù)丟失。實現(xiàn)流程如下:
(1)在LCDConf_Lin_Template.c文件中開啟三緩沖,定義緩沖區(qū)個數(shù);在主函數(shù)中調(diào)用WM_MULTIBUF_Enable(1)進行使能。
(2)配置三緩沖功能:
GUI_MULTIBUF_ConfigEx(i,NUM_BUFFERS); //設(shè)置三緩沖區(qū)
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION,0,0);//創(chuàng)建顯示驅(qū)動器件
LCD_SetDevFunc(i,LCD_DEVFUNC_COPY-BUFFER,(void(*)(void))_LCD_CopyBuffer); //定義Copy函數(shù)
(3)函數(shù)GUI_MULTIBUF_BeginEx( )和GUI_MULTIBUF_EndEX( )分別實現(xiàn)繪制工作的開始和結(jié)束,且僅在后置緩沖區(qū)繪制;完成后,函數(shù)LCD_CopyBuffer( int LayerIndex, int IndexSrc, int IndexDst)將前置緩沖區(qū)暫存的內(nèi)容復制到顯示緩沖區(qū),同時向LCD_X_DisplayDriver( )函數(shù)傳遞 LCD_X_SHOWBUFFER信息,讀取數(shù)據(jù)實現(xiàn)界面顯示,工作流程如圖7所示。
圖7 三緩沖工作流程
(4)當調(diào)用GUI_MULTIBUF_EndEX( )結(jié)束緩沖繪制時,數(shù)據(jù)內(nèi)容被復制到顯示緩沖區(qū)完成讀取顯示,為了防止出現(xiàn)撕裂效果,需在中斷處理程序中做相應處理,核心代碼如下:
intStatus = ELCDIF_GetInterruptStatus(LCDIF);
//獲得中斷狀態(tài),響應中斷
ELCDIF_ClearInterruptStatus(LCDIF,intStatus);//清中斷
if (intStatus & kELCDIF_CurFrameDone){
if (s_LCDpendingBuffer >= 0){
ELCDIF_SetNextBufferAddr(LCDIF, addr);//將顯示內(nèi)存中的數(shù)據(jù)顯示出來
GUI_MULTIBUF_Confirm(s_LCDpendingBuffer);//確認前置緩沖區(qū)可見并立即調(diào)用
s_LCDpendingBuffer = -1;
}
}
采用該方法后,在使用過程中界面切換、刷新流暢,沒有出現(xiàn)屏幕閃爍的情況。
此外,與重繪整個界面相比,局部重繪可以降低界面負載和刷新延遲。函數(shù)WM_InvalidateRect(hWin, &Rect)對指定矩形區(qū)域Rect進行無效處理,然后調(diào)用 WM_Paint( )對該區(qū)域進行重繪。
本文對數(shù)控系統(tǒng)人機界面采用面向?qū)ο笈cUML建模技術(shù)相結(jié)合的方法,分析了該人機界面的功能需求、組織結(jié)構(gòu)之間的邏輯關(guān)系和控制流程,構(gòu)建了基于動靜態(tài)模型的系統(tǒng)框架,為開放式數(shù)控系統(tǒng)的開發(fā)提供了建模方法和功能框架。
采用三緩沖技術(shù)解決了開發(fā)過程中出現(xiàn)的界面閃爍問題,有效提高了界面切換的流暢度,取得了良好的效果,為涉及大量圖像數(shù)據(jù)的界面開發(fā)工作提供一個有效的解決方式,具有重要的實際意義。