李 博
(北京鐵路信號(hào)有限公司,北京 102613)
ZPW-2000A無(wú)絕緣移頻自動(dòng)閉塞軌道電路的每個(gè)軌道區(qū)段都包含發(fā)送器、接收器、衰耗器、防雷模擬網(wǎng)絡(luò)等設(shè)備。要完成一個(gè)區(qū)段的設(shè)備調(diào)整需要查詢“接收電平調(diào)整表”等4種設(shè)備調(diào)整表,通常需要手動(dòng)查詢數(shù)百行的表格才能確定配線方法,工作量很大。
設(shè)計(jì)一種移動(dòng)應(yīng)用軟件來(lái)輔助軌道電路設(shè)備的調(diào)整工作,是一個(gè)很好提高工作效率的選擇。只要在該軟件中輸入所需調(diào)整的電平等級(jí),軟件就可以自動(dòng)完成對(duì)調(diào)整表的檢索,將對(duì)應(yīng)設(shè)備調(diào)整配線方法快速、直觀、精準(zhǔn)的顯示在手機(jī)上。
本文就如何在Android系統(tǒng)下實(shí)現(xiàn)ZPW-2000A系列軌道電路設(shè)備調(diào)整輔助移動(dòng)應(yīng)用軟件(以下簡(jiǎn)稱設(shè)備調(diào)整輔助應(yīng)用)的設(shè)計(jì)進(jìn)行介紹。
設(shè)備調(diào)整輔助應(yīng)用的開(kāi)發(fā)是在Windows PC機(jī)上完成的,需要下載安裝下列工具。
1)Android SDK(Software Development Kit),包含Android開(kāi)發(fā)庫(kù)、調(diào)試器、模擬器、開(kāi)發(fā)者文檔等。
2)集成開(kāi)發(fā)環(huán)境:Eclipse,也可以選擇Google 官方提供的Android Studio。
3)SQLite數(shù)據(jù)庫(kù)編輯器:SQLite Database Browser。
4)開(kāi)發(fā)語(yǔ)言:Java。
設(shè)備調(diào)整輔助應(yīng)用采用3層架構(gòu)設(shè)計(jì)模式,包括模型層、視圖層和控制器層(Model-View-Controller,MVC)3個(gè)部分,如圖1所示。
圖1 MVC設(shè)計(jì)模式Fig.1 MVC design mode
1)模型對(duì)象用于存儲(chǔ)和管理應(yīng)用數(shù)據(jù)和業(yè)務(wù)邏輯。
2)視圖對(duì)象負(fù)責(zé)響應(yīng)用戶輸入,調(diào)用控制器進(jìn)行處理,并將處理結(jié)果顯示給用戶。
3)控制對(duì)象是視圖和模型對(duì)象聯(lián)系的紐帶,它響應(yīng)視圖對(duì)象觸發(fā)的事件,進(jìn)行相應(yīng)處理,并將結(jié)果交由模型對(duì)象存儲(chǔ),或視圖對(duì)象來(lái)顯示。
MVC設(shè)計(jì)模式可以降低系統(tǒng)的復(fù)雜度,隔離各層間的變化,提高了代碼的復(fù)用性和可維護(hù)性,為系統(tǒng)的升級(jí)和業(yè)務(wù)擴(kuò)展留下空間。
視圖對(duì)象是建立用戶界面的基石,它們的屬性決定了用戶界面如何在屏幕上顯示并響應(yīng)用戶的輸入。根據(jù)視圖對(duì)象的用途和包含關(guān)系,將用戶界面設(shè)計(jì)為3層構(gòu)架,即首頁(yè)(第一層)、查詢頁(yè)面容器(第二層)和查詢頁(yè)面(第三層),它們之間的關(guān)系如圖2所示。
在設(shè)備調(diào)整輔助應(yīng)用的首頁(yè)包含若干個(gè)按鈕,例如ZPW-2000A-T型和ZPW-2000A-J型,用戶點(diǎn)擊按鈕可以選擇不同型號(hào)ZPW-2000A軌道電路設(shè)備的調(diào)整輔助功能。
圖2 用戶界面的視圖對(duì)象關(guān)系分解Fig.2 A Breakdown of the relationship between view objects on the user interface
點(diǎn)擊首頁(yè)的按鈕進(jìn)入第二層,這里有“主軌出”、“小軌出”、“模擬網(wǎng)絡(luò)”和“發(fā)送”4個(gè)選項(xiàng)卡,它們是查詢頁(yè)面的容器,分別對(duì)應(yīng)接收電平調(diào)整、小軌接收電平調(diào)整、模擬網(wǎng)絡(luò)長(zhǎng)度調(diào)整和發(fā)送電平調(diào)整的4個(gè)查詢頁(yè)面。
第三層是查詢頁(yè)面,由文本框和自定義鍵盤構(gòu)成。文本框用來(lái)接收用戶輸入和顯示有用數(shù)據(jù)。自定義鍵盤包含功能鍵區(qū)和普通鍵區(qū),更加適合本應(yīng)用的操作。
針對(duì)不同應(yīng)用場(chǎng)景的需求,設(shè)計(jì)了風(fēng)格相似、功能各異的查詢頁(yè)面。
為使頁(yè)面簡(jiǎn)潔直觀,要求完成一項(xiàng)調(diào)整工作的全部用戶操作和數(shù)據(jù)顯示在同一個(gè)查詢頁(yè)面內(nèi)完成;為使交互方式易于理解,查詢頁(yè)面模擬了計(jì)算器結(jié)構(gòu),設(shè)置仿真“液晶屏”的顯示屏、輸入?yún)^(qū)域和鍵盤區(qū);為了更好的適應(yīng)不同應(yīng)用場(chǎng)景,將最常用的應(yīng)用場(chǎng)景轉(zhuǎn)化為獨(dú)立的查詢功能,并設(shè)置功能切換鍵;在配色方面,對(duì)顯示區(qū)域和輸入?yún)^(qū)域進(jìn)行了區(qū)分。查詢頁(yè)面的結(jié)構(gòu)和配色風(fēng)格如圖3所示。
圖3 接收電平調(diào)整的查詢頁(yè)面設(shè)計(jì)Fig.3 Design of the query page of the adjustments in the receiving level
下面以“主軌出”選項(xiàng)卡中的查詢頁(yè)面為例進(jìn)行說(shuō)明。
1)“主軌出”選項(xiàng)卡:包含了接收電平調(diào)整查詢頁(yè)面(簡(jiǎn)稱“主軌出查詢頁(yè)面”)。
2)主顯示屏:用于顯示接收電平調(diào)整配線次序。
3)輔助顯示屏:用于顯示輔助內(nèi)容,顯示的內(nèi)容會(huì)隨著查詢功能不同而變化。
4)輸入?yún)^(qū):顯示用戶輸入框,也會(huì)隨著選擇的查詢功能不同而變化。
5)鍵盤區(qū):包含功能鍵區(qū)和普通鍵盤區(qū)。功能鍵用于選擇切換“主軌入優(yōu)先”、“接收電平優(yōu)先”和“逆向查詢”功能。
接收電平調(diào)整通常會(huì)遇到3種應(yīng)用場(chǎng)景,對(duì)應(yīng)的“主軌出查詢頁(yè)面”中也有3個(gè)查詢功能與之相適應(yīng),使用方法如表1所示。
表1 不同的應(yīng)用場(chǎng)景與查詢功能的使用Tab.1 Diあerent application scenarios and the steps to perform query functions
在設(shè)備調(diào)整輔助應(yīng)用中,控制器需要響應(yīng)用戶操作、處理數(shù)據(jù)、查詢數(shù)據(jù)庫(kù),最終將數(shù)據(jù)交給視圖對(duì)象來(lái)顯示。以主軌出查詢頁(yè)面的“接收電平優(yōu)先”功能為例,控制器、視圖對(duì)象與模型對(duì)象的載體是對(duì)應(yīng)的文件、類型和變量等。
視圖層:新建fragment_palmlist_zgc.xml文件,增加EditText1用于顯示數(shù)據(jù),EditText2用于用戶輸入。
控制層:新建JSDPFragment.java文件,建立控制器JSDPFragment類。
模型層:新建JSDPParam.java文件,建立模型JSDPParam類,定義變量mJSDP用來(lái)存儲(chǔ)接收電平,定義變量mEditText1存儲(chǔ)將要在EditText1中顯示的配線數(shù)據(jù)。
在操作運(yùn)行過(guò)程中,該應(yīng)用程序的各層對(duì)象之間關(guān)系如圖4所示。用戶在EditText2中輸入需要的電平級(jí),控制器從視圖層中獲取用戶輸入,進(jìn)行必要的判斷和計(jì)算,然后調(diào)用setJSDP()方法將電平級(jí)記錄在模型層的mJSDP變量中;用戶點(diǎn)擊“GO”鍵后,控制器調(diào)用數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序查詢數(shù)據(jù)庫(kù),獲得的所需配線數(shù)據(jù)并存入模型層的mEditText1變量中;最后控制器從模型層獲取配線數(shù)據(jù),并送到視圖層EditText1中顯示。SQLite Database用來(lái)存儲(chǔ)固定數(shù)據(jù),即各種設(shè)備的調(diào)整表。KeyBoardDriver是自定義鍵盤驅(qū)動(dòng)類,實(shí)現(xiàn)鍵盤的按壓監(jiān)測(cè)和鍵碼傳遞。
圖4 設(shè)備調(diào)整輔助應(yīng)用的對(duì)象圖解Fig.4 Diagram of the objects of the application to assist in equipment adjustment
如果在“主軌入優(yōu)先”功能下,控制器獲取用戶輸入主軌入電壓和主軌出電壓的值,可以按照公式(1)計(jì)算出相應(yīng)的接收電平,然后再進(jìn)行查詢。
模型層JSDPParam類擁有私有變量,且只能通過(guò)私有方法setter/getter進(jìn)行數(shù)據(jù)存取,從視圖獲取數(shù)據(jù)后,或控制器進(jìn)行運(yùn)算后都要先將數(shù)據(jù)存入模型中,控制器遵循“先存后取,無(wú)效清空”的原則存取數(shù)據(jù),防止數(shù)據(jù)的存取出現(xiàn)競(jìng)爭(zhēng)關(guān)系,以保證數(shù)據(jù)時(shí)效性和唯一性。
數(shù)據(jù)庫(kù)中存儲(chǔ)各種設(shè)備調(diào)整表,作為本地化的數(shù)據(jù)以供控制器查詢,應(yīng)用軟件不提供用戶直接操作數(shù)據(jù)庫(kù)的方法,保證數(shù)據(jù)的安全。
有關(guān)數(shù)據(jù)處理和更新視圖先后順序的代碼如圖5所示。
逆向查詢,就是在已知實(shí)際配線的情況下反向查找對(duì)應(yīng)的電平級(jí)或者模擬網(wǎng)絡(luò)長(zhǎng)度。通過(guò)應(yīng)用軟件的逆向查詢功能,工程師只需要在提示框中輸入配線連接關(guān)系就可以輕松的查詢到對(duì)應(yīng)的調(diào)整等級(jí),且輸入時(shí)無(wú)需考慮配線和端子的順序,例如輸入J2-8~J2-14或者J2-14~J2-8都可以準(zhǔn)確識(shí)別。此外,通過(guò)模糊匹配還可以搜索到可能的其他等級(jí)。如果輸入的配線方法在調(diào)整表中查詢不到,軟件會(huì)給出警告。
即使實(shí)際配線很簡(jiǎn)單,手動(dòng)逆向查找也不是件容易的事情。軟件自動(dòng)逆向查詢可以很輕松的解決這個(gè)問(wèn)題,在進(jìn)行現(xiàn)場(chǎng)配線的正確性檢測(cè)中能夠起到事半功倍的效果,對(duì)設(shè)備調(diào)試和故障排查。
基于Android系統(tǒng)的ZPW-2000A無(wú)絕緣軌道電路設(shè)備調(diào)整輔助應(yīng)用采用MVC應(yīng)用架構(gòu)、分層樹(shù)形用戶界面設(shè)計(jì),便于程序的升級(jí)和擴(kuò)展。應(yīng)用的功能針對(duì)用戶的需要,面向多種應(yīng)用場(chǎng)景,能夠有效的輔助用戶的工作,提高工作效率,能夠給ZPW-2000A系列軌道電路產(chǎn)品的用戶帶來(lái)更好的使用體驗(yàn)。據(jù)對(duì)比測(cè)試,1個(gè)區(qū)段的調(diào)試過(guò)程大約節(jié)省2~5 min時(shí)間。如果完成上千個(gè)區(qū)段的設(shè)備調(diào)整將會(huì)積少成多,可以節(jié)約大量時(shí)間,也能減少紙張使用,創(chuàng)造出很大價(jià)值。
圖5 數(shù)據(jù)處理和更新視圖先后順序的代碼節(jié)選Fig.5 Part of the codes for data processing and updating the sequence of view objects