李由,付衛(wèi)強,包涵,孟志軍
(1.國家農(nóng)業(yè)信息化工程技術(shù)研究中心,北京 100097;2.北京農(nóng)業(yè)智能裝備技術(shù)研究中心;3.國家農(nóng)業(yè)智能裝備工程技術(shù)研究中心;4.農(nóng)業(yè)部農(nóng)業(yè)信息技術(shù)重點實驗室)
隨著農(nóng)業(yè)現(xiàn)代化步伐的加快,農(nóng)業(yè)生產(chǎn)現(xiàn)場使用到越來越多的電子設(shè)備,這些設(shè)備的顯示方式大致分為聲光信號,點陣式黑白屏幕,高分辨率彩色屏幕。其中以LCD 為主的點陣式單色屏,因具有顯示清晰,成本低廉,接口簡單,強光下可讀等優(yōu)點,在一些以監(jiān)測控制為主的車載設(shè)備上得到廣泛的應(yīng)用。
然而在編寫其界面顯示時,由于程序可移植性差,導(dǎo)致在不同設(shè)備中需要完全重寫界面。在界面修改時牽一發(fā)而動全身,不僅拖延了設(shè)備開發(fā)周期,而且還降低了設(shè)備可靠性。彭良清等提出了基于樹形菜單結(jié)構(gòu)的通用界面的一些模型和方法[1-3],這些方法將菜單數(shù)據(jù)和顯示函數(shù)分離開來,解決了程序可移植性差的問題,但是存在界面修改困難、函數(shù)復(fù)用性差等問題,并且受嵌入式設(shè)備屏幕大小的限制,一些功能缺少實際用途。宋曉輝等對樹形菜單結(jié)構(gòu)做了一些改進[4],將功能型菜單項和數(shù)據(jù)型菜單項分開,一定程度上解決了函數(shù)冗余的問題;但仍采用適應(yīng)于桌面操作系統(tǒng)的菜單操作方式導(dǎo)致其數(shù)據(jù)結(jié)構(gòu)復(fù)雜,并不能很好應(yīng)用于小屏幕的嵌入式系統(tǒng)。
因此,提出了一種新型的界面顯示框架,實現(xiàn)多種農(nóng)業(yè)裝備常見的界面應(yīng)用類型,解決了小屏幕嵌入式系統(tǒng)顯示界面移植性差問題。
農(nóng)業(yè)現(xiàn)場的電子設(shè)備通常以監(jiān)測控制為主,監(jiān)測和控制設(shè)備一般是在農(nóng)機運行前進行參數(shù)設(shè)置,在運行過程中進行數(shù)據(jù)顯示,在很多情況下監(jiān)測和控制是合二為一的,因此要求界面是非阻塞式的,能在各種狀態(tài)下方便的相互切換,并可以通過菜單項選擇實現(xiàn)一定的功能(如:啟動,停止)。農(nóng)業(yè)上常用的計量單位標(biāo)準(zhǔn)尚不統(tǒng)一,通常還需實現(xiàn)計量單位切換功能。
工業(yè)控制常用的界面分為5 種類型:菜單屏、變量屏、選擇屏、設(shè)定屏和顯示屏[5]。與之類似將界面類型分為:菜單選擇屏、靜態(tài)文本屏、動態(tài)文本屏和參數(shù)設(shè)定屏。各個類型界面的功能見表1。
基于以上界面類型,參照一般人機交互的按鍵系統(tǒng)考慮到通用性及便捷性,系統(tǒng)設(shè)計時采用7 鍵制,分別為:上、下、左、右、確定、設(shè)置、返回。
表1 界面功能分類表Table 1 The classification of interface features
以下介紹各界面的元素類型和操作分析:
菜單選擇界面主要用于自頂向下的樹狀界面操作,為界面設(shè)計中常用的類型,用戶通過此類界面進行界面跳轉(zhuǎn),功能設(shè)定。靜態(tài)標(biāo)簽一般為提示性文字,靜態(tài)選項為帶被選擇功能文字。
菜單選擇界面的一般操作為:上下鍵變更選項,左右鍵翻頁,確定鍵進入下一界面,或?qū)崿F(xiàn)某一功能,返回鍵返回上一界面,設(shè)置鍵的功能一般不使用。
靜態(tài)文本界面主要用于顯示固定的內(nèi)容,一般用于信息提示,幫助文檔,版權(quán)信息的顯示,即它只包含靜態(tài)標(biāo)簽。
因為靜態(tài)文本界面本身操作較少,所以其按鍵響應(yīng)也相對簡單,只包含滾屏和返回,操作方法與菜單選擇界面類似。
動態(tài)文本界面主要用于變量數(shù)據(jù),運行狀態(tài)的實時顯示,用戶主要通過這類界面實現(xiàn)對系統(tǒng)實時狀態(tài)的了解,其界面由靜態(tài)標(biāo)簽和動態(tài)標(biāo)簽組成,而動態(tài)標(biāo)簽又由固定文字,變量文字組成。
像靜態(tài)文本界面一樣動態(tài)文本界面本身并不需要太多操作,所以其按鍵響應(yīng)也相對簡單與靜態(tài)文本界面相同。
參數(shù)設(shè)定界面也是用戶界面中常用的界面,主要用于用戶對系統(tǒng)中的變量進行設(shè)置。它包含了幾乎所有的界面常用功能,其組成如圖1 所示。這里的動態(tài)選項指的是既可以被選中,又會因變量和單位的改變而變化顯示內(nèi)容的選項。
圖1 參數(shù)設(shè)定界面組成Fig.1 The interface elements of parameter setting
參數(shù)設(shè)定界面的操作相對復(fù)雜,因其有兩種狀態(tài),即選項切換和變量修改,其操作邏輯如圖2所示。
圖2 參數(shù)設(shè)定界面操作Fig.2 The operating procedures of parameter setting interface
以上分析了界面的組成和操作。在操作上采用了和目前大多數(shù)手持設(shè)備相仿的操作模式,并且在各種類型界面間保持了操作風(fēng)格的統(tǒng)一。
目前常見的界面框架數(shù)據(jù)結(jié)構(gòu)都以菜單為單位,缺少對菜單項的精細(xì)化分,這使得界面顯示和操作函數(shù)對各種類型的菜單很難做到通用,而基于菜單項的菜單組織結(jié)構(gòu)可以很好解決這個問題。將以上分析抽象為實際的數(shù)據(jù)結(jié)構(gòu),則形成菜單和項兩種數(shù)據(jù)結(jié)構(gòu),其中項是菜單的子結(jié)構(gòu),為了適應(yīng)較小的屏幕,并簡化顯示和操作函數(shù),一項即實際屏幕顯示中的一行。
項中含有文本內(nèi)容,即格式化字符串,用于格式化輸出的字符串;含有數(shù)據(jù)變量地址和單位變量地址,用于填入格式化字符串中的變量內(nèi)容;含有項狀態(tài)標(biāo)志,用于區(qū)別項的類型,以便在顯示和操作時加以區(qū)分;含有跳轉(zhuǎn)菜單指針,用于表明該項所應(yīng)該跳轉(zhuǎn)的菜單。特別指出將數(shù)據(jù)變量類型定義為無類型指針,從而使得同一種數(shù)據(jù)結(jié)構(gòu)可以實現(xiàn)多種數(shù)據(jù)變量類型的表示。具體數(shù)據(jù)結(jié)構(gòu)如下:
一個常見的項數(shù)據(jù)如下:
其中第一個元素表示了要顯示的數(shù)據(jù)和變量元素的顯示格式;第二、三個元素分別是數(shù)據(jù)變量地址和單位字符串首地址,在設(shè)置模式時可以利用這些指針修改變量原始值,實現(xiàn)數(shù)據(jù)設(shè)置和單位更改;第四個元素是項狀態(tài)標(biāo)志,表示該項是可選中項,用于區(qū)分標(biāo)題和選項;最后一個元素表示選擇此項后跳轉(zhuǎn)的目標(biāo)菜單。通常定義項數(shù)據(jù)時是定義一個項數(shù)組用來組成一個菜單,以減少存儲空間,并實現(xiàn)隨機存儲。
菜單是用于表達(dá)一個界面內(nèi)容和狀態(tài)的數(shù)據(jù)結(jié)構(gòu)。它應(yīng)該含有項數(shù)組首地址,用于表示界面顯示的內(nèi)容;含有界面狀態(tài)標(biāo)志位,用于表明界面的狀態(tài)和界面的功能;含有被選項,用于表明當(dāng)前界面的被選項;含有頁頂項,用于控制界面視圖位置;含有最大項數(shù),用于防止項數(shù)組越界;含有按鍵響應(yīng)函數(shù),用于相應(yīng)按鍵操作。其中按鍵響應(yīng)函數(shù)采用帶參函數(shù)指針形式,利用界面的狀態(tài)和按鍵共同決定需要執(zhí)行的操作,既實現(xiàn)了統(tǒng)一接口,又增強了可擴展性。菜單間的關(guān)系只由項與菜單的指針決定,而與項的順序無關(guān)。具體代碼如下:
一個常見的菜單數(shù)據(jù)如下:
其中第一個元素表示了該菜單對應(yīng)的項數(shù)據(jù)數(shù)組;第二個元素是菜單狀態(tài)標(biāo)志,表示該菜單是參數(shù)設(shè)置類型,該元素也可以在運行過程中被改為正在設(shè)置狀態(tài);第三、四個元素默認(rèn)填充0,在程序?qū)嶋H運行中可更改,以變更選項或視圖;第五個元素是菜單最大項,與項數(shù)據(jù)數(shù)組長度相當(dāng);第六個元素是操作響應(yīng)函數(shù),對應(yīng)的函數(shù)為參數(shù)設(shè)定界面的操作函數(shù)。
將以上數(shù)據(jù)結(jié)構(gòu)作為基礎(chǔ),菜單的操作實現(xiàn)也呼之欲出。界面顯示函數(shù),每次從PageTopSelect 對應(yīng)項開始顯示,顯示接下來的若干項到屏幕(受屏幕顯示最大行影響),顯示項數(shù)據(jù)時,先分析項字符串中的變量類型和顯示寬度,再將項數(shù)據(jù)中對應(yīng)的變量插入到顯示字符串中。同時可以利用MenuSelect 變量值反顯選中行。如此可以顯示超過屏幕長度本身的菜單,每次只顯示對應(yīng)屏幕大小的一部分內(nèi)容,相當(dāng)于擴展了屏幕。具體流程圖如圖3 所示。
圖3 顯示函數(shù)流程圖Fig.3 The flowchart of display function
實現(xiàn)樹狀菜單結(jié)構(gòu)使用堆棧,即主界面為棧底,每次執(zhí)行菜單跳轉(zhuǎn)時執(zhí)行壓棧操作,菜單返回時執(zhí)行出棧操作,并且堆棧操作都使用指針方式實現(xiàn),這樣既可以較少的代價實現(xiàn)多級菜單跳轉(zhuǎn),又將菜單的操作和菜單數(shù)據(jù)本身分離,使得在修改菜單數(shù)據(jù)時避免了對其他菜單關(guān)系的影響。
每個菜單可以使用不同的按鍵響應(yīng)函數(shù),相同類型菜單之間還可以共用響應(yīng)函數(shù),兼顧了靈活性與復(fù)用性。
將菜單顯示和操作分開,用戶可以將顯示刷新放在定時中斷中,將操作放在外部中斷中,增強了編程的靈活性。
一個典型的界面操作流程如圖4 所示。
圖4 界面操作Fig.4 The interface operation
菜單操作對應(yīng)的軟件實現(xiàn)方式見表2。
表2 菜單操作實現(xiàn)對照表Table 2 The implementation of menu operation function
對于已經(jīng)編寫好的菜單對其修改非常簡單,以下介紹幾種常見的菜單修改方式:
(1)要增加(刪除)菜單中某項,直接增加(刪除)該項數(shù)據(jù),并修改相關(guān)菜單數(shù)據(jù)的最大項參數(shù)即可。
(2)要修改項數(shù)據(jù)顯示格式,直接修改項數(shù)據(jù)中的格式化字符串即可。
(3)要調(diào)節(jié)菜單項順序,直接調(diào)整項數(shù)組的順序而不用修改其他數(shù)據(jù)內(nèi)容。
(4)要修改某項跳轉(zhuǎn)的菜單,直接替換掉該項數(shù)據(jù)后的跳轉(zhuǎn)菜單指針。
(5)要修改某項顯示的變量,直接修改該項數(shù)據(jù)中的變量指針指向即可。
(6)要將菜單中的某項移至同類型其他菜單,直接將相關(guān)項數(shù)據(jù)移至目標(biāo)菜單項數(shù)組,并修改兩個菜單數(shù)據(jù)的最大項參數(shù)即可。
(7)要增加(刪除)某菜單只需將與其相關(guān)的項數(shù)據(jù)同時增加(刪除),并修改相關(guān)菜單數(shù)據(jù)的最大項參數(shù)即可。
這些修改完全不涉及整個菜單的結(jié)構(gòu)調(diào)整,項與項,菜單與菜單之間沒有直接關(guān)系,在修改時也不會相互影響。
文章提出的界面框架適用于農(nóng)業(yè)裝備顯示,解決了小屏幕嵌入式系統(tǒng)顯示界面移植性差問題。采用線性存儲結(jié)構(gòu)減少了數(shù)據(jù)冗余,提高了訪問速度。簡化優(yōu)化了菜單關(guān)系,使得操作函數(shù)可以統(tǒng)一,菜單建立和改寫方便。利用抽象方法使得一種菜單數(shù)據(jù)結(jié)構(gòu)實現(xiàn)多種界面類型以滿足農(nóng)業(yè)設(shè)備的一般交互需求。
[1]彭良清.基于節(jié)點編號的通用樹狀菜單設(shè)計方法與實現(xiàn)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2002(9):36-40.
[2]黃聲野,陳秀華,王東生.一種用C51實現(xiàn)的單片機系統(tǒng)菜單管理方案[J].計算機工程,2004,30(3):191-192.
[3]陸錚,羅嘉.單片機C語言下LCD多級菜單的一種實現(xiàn)方法[J].工礦自動化,2006(1):50-51.
[4]宋曉輝,葉樺,丁昊.基于單片機的多級菜單實現(xiàn)方法改進[J].東南大學(xué)學(xué)報:自然科學(xué)版,2007,37(S1):66-70.
[5]陳冬,徐文立,夏遂華.液晶顯示多層菜單結(jié)構(gòu)的軟件設(shè)計[J].電氣傳動,2001,31(4):56-59.
[6]周雪珍,朱志明,符策健,等.多功能數(shù)字化弧焊逆變電源人機交互系統(tǒng)[J].電焊機,2007,37(1):6-10.
[7]納新,趙東風(fēng).非阻塞模式LCD多級菜單的設(shè)計及其數(shù)據(jù)結(jié)構(gòu)[J].云南民族大學(xué)學(xué)報:自然科學(xué)版,2007,16(4):347-349.
[8]古容江,張珣.基于ARM的圖形用戶界面軟件開發(fā)平臺的搭建[J].液晶與顯示,2009(6):901-906.
[9]賈志成,程敏,宋濤,等.基于狀態(tài)機的LCD多級菜單設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(2):73-75.
[10]陳慧,王宏遠(yuǎn).一種基于AVR單片機的樹狀菜單界面的設(shè)計[J].電子工程師,2005,31(6):68-70.
[11]許秀英,韓靜,石建飛,等.水稻田間環(huán)境參數(shù)無線智能監(jiān)測系統(tǒng)[J].黑龍江八一農(nóng)墾大學(xué)學(xué)報,2013,25(5):70-73.
[12]李敏通,張戰(zhàn)國.一種建立單片機應(yīng)用系統(tǒng)菜單的新方法[J].計算機工程,2006,32(16):259-260.