白軼榮
摘要闡述了一種實(shí)現(xiàn)儀器菜單動態(tài)配置的方法王應(yīng)用程序調(diào)用相應(yīng)的儀器菜單解析程序,解析程序解析菜單數(shù)據(jù)配置叉件,并向王應(yīng)用程序返回顯示代碼,顯示代碼經(jīng)編譯、鏈接,形成可執(zhí)行的二進(jìn)制文件,二進(jìn)制叉件連行后顯示相應(yīng)的儀器菜單。運(yùn)用該方法可以方便靈活地修改儀器菜單顯示界面。
關(guān)鍵詞菜單,儀器,XML;MVC
中圖分類號TP315文獻(xiàn)標(biāo)志碼A文章編號:1006-8228(2012)01-66-02
O引言
在編寫儀器菜單的應(yīng)用程序時,一般的做法是將菜單的名稱、功能函數(shù)的地址(用c語言編寫儀器程序是用函數(shù)的地址,用c++或JAvA則是某個類的某個方法)等直接寫入應(yīng)用程序里。但是,如果用戶的需求不斷變化,例如菜單名稱的改動、菜單之間相對位置的變化、菜單在LCD上所顯示的圖形圖像的變換等,這些都會導(dǎo)致程序員花費(fèi)大量的時間去修改代碼。而目.從MVC(Model-Vlew-Control數(shù)據(jù)模型一視圖一控制,其中數(shù)據(jù)模型是內(nèi)容,視圖是顯示效果,控制是如何管理數(shù)據(jù)、顯示數(shù)據(jù)的方法)m的角度來分析,上述做法把Model(處理數(shù)據(jù)和完成某種特定功能)的代碼和View(顯示給用戶看)的代碼混淆在一起,維護(hù)起來很容易出錯,往往是修改了一處,其他地方又出現(xiàn)bug,或者是修改過之后應(yīng)用程序隱藏了某個當(dāng)下難以發(fā)現(xiàn)的bug,或者未來就很難修改。這些都是因?yàn)閏ontrol(控制)沒有做好。以下我們將介紹一種實(shí)現(xiàn)儀器菜單動態(tài)配置的方法。
1實(shí)現(xiàn)儀器菜單動態(tài)配置的原理
實(shí)現(xiàn)儀器菜單動態(tài)配置的原理,如圖1所示。
(1)主應(yīng)用程序按照用戶對儀器菜單的顯示要求在解析程序庫中調(diào)用相應(yīng)的儀器菜單解析程序,
(2)解析程序解析菜單數(shù)據(jù)配置文件,解析完成后向主應(yīng)用程序返回顯示代碼,
(3)對返回的顯示代碼進(jìn)行編譯、鏈接,形成可執(zhí)行的二進(jìn)制文件,
(4)儀器讀取可執(zhí)行的二進(jìn)制文件并運(yùn)行后顯示相應(yīng)的儀器菜單。
菜單數(shù)據(jù)配置文件為.XML(可擴(kuò)展標(biāo)識語言)格式的文件,解析程序?qū)ξ募馕鐾瓿珊笙蛑鲬?yīng)用程序返回c語言代碼,c語言代碼經(jīng)編譯、鏈接形成二進(jìn)制文件,然后被導(dǎo)入儀器并運(yùn)行。
本方法將儀器菜單的顯示參數(shù)全部放在菜單數(shù)據(jù)配置文件中,應(yīng)用程序中Model View的代碼分離,程序結(jié)構(gòu)簡明清晰。在編寫或修改Model(處理數(shù)據(jù)和完成某種特定功能)時與View(顯示給用戶看)無關(guān)。當(dāng)用尸的需求發(fā)生改變時,程序員只需要靈活地修改菜單數(shù)據(jù)配置文件,不必改動主應(yīng)用程序,大大地方便了程序維護(hù)工作。
2實(shí)現(xiàn)儀器菜單動態(tài)配置的流程
儀器菜單動態(tài)配置的具體實(shí)現(xiàn)過程如下。
(1)將儀器菜單的數(shù)據(jù)按照樹形結(jié)構(gòu)寫入XML格式的菜單數(shù)據(jù)配置文件,并存儲于PC機(jī)中。
以如下菜單為例
開機(jī)后用戶界面一模式、窗口、軌跡、頻標(biāo)、光標(biāo)、橫軸設(shè)置、縱軸設(shè)置、系統(tǒng)。
模式一相噪模式、頻譜模式、頻率功率模式、瞬態(tài)模式,
窗口一相噪窗口、頻譜窗口、頻率功率窗口、瞬態(tài)窗口;
軌跡—軌跡開關(guān)、軌跡偏置、保持方式、持續(xù)模式,
頻櫪—順標(biāo)開關(guān)、頻標(biāo)類型、頻標(biāo)功能;
光標(biāo)一光標(biāo)開關(guān)、起始、終止、中心、跨度,
橫軸設(shè)置—起始、終止、中心、跨度;
縱軸設(shè)置—起始、終止、中心、跨度.
系統(tǒng)—復(fù)位、文件、安全保密、網(wǎng)絡(luò)設(shè)置、幫助。
經(jīng)分析,上述儀器菜單的數(shù)據(jù)結(jié)構(gòu)明顯的成“樹”形,而XML文件內(nèi)部,數(shù)據(jù)之間的結(jié)構(gòu)恰恰是樹形的(XML是SGML的子集,符合標(biāo)記語言的規(guī)范),所以采用XML文件來記錄儀器的所有菜單就能從全局上把握整個“菜單樹”,并且只要看到了這個XML格式的菜單數(shù)據(jù)配置文件的內(nèi)容,就知道儀器上所有的菜單及菜單之間的層次結(jié)構(gòu)。
(2)編寫與各種菜單顯示風(fēng)格一一對應(yīng)的儀器菜單解析程序,形成解析程序庫,存儲于計(jì)算機(jī)中。解析程序具備通用性,即當(dāng)XML格式的菜單數(shù)據(jù)配置文件中的菜單內(nèi)容、菜單位置等發(fā)生變化時解析程序仍然能夠解析。菜單解析程序可以通過各種計(jì)算機(jī)語言編程實(shí)現(xiàn)。
用戶可能會有多種菜單顯示要求,如全屏顯示菜單、滾動式顯示菜單、折疊+滾動式顯示菜單等,為了滿足用戶的不同需求,需要編寫多個解析程序,一個解析程序?qū)?yīng)一種顯示風(fēng)格,并形成解析程序庫,聽候調(diào)用。
(3)計(jì)算機(jī)的主應(yīng)用程序按照用戶對儀器菜單的顯示要求在解析程序庫中調(diào)用相應(yīng)的儀器菜單解析程序。
(4)解析程序解析XML格式的菜單數(shù)據(jù)配置文件,解析完成后向主應(yīng)用程序返回一個臨時的c文件或者一段c代碼。這些代碼在主應(yīng)用程序中起著顯示代碼的作用。
(5)在主應(yīng)用程序中將返回的顯示代碼和其他程序一起編譯、鏈接,形成可執(zhí)行的二進(jìn)制文件。
(6)將可執(zhí)行的二進(jìn)制文件導(dǎo)入儀器,執(zhí)行該二進(jìn)制文件。儀器菜單的名稱、圖形圖像按照菜單數(shù)據(jù)配置文件中菜單的相對位置將顯示到儀器屏幕上,然后再為每個菜單附加上其相對應(yīng)的點(diǎn)擊功能。
綜上所述,由于解析程序具備通用性,因此當(dāng)XML格式的菜單數(shù)據(jù)配置文件的菜單內(nèi)容發(fā)生變化時,解析程序仍然能夠解析變化后的格式的菜單數(shù)據(jù)配置文件。這樣一來,當(dāng)用戶的需求發(fā)生改變時程序員只需要修改菜單數(shù)據(jù)配置文件就可以了,不必改動主應(yīng)用程序。同時當(dāng)用戶對菜單的顯示風(fēng)格有了不同的要求的時候,程序員僅需要在主應(yīng)用程序中把原來所調(diào)用的解析程序換成新的解析程序就可以。例如如果要將全屏顯示菜單改為滾動式菜單,則程序員只需要把應(yīng)用程序里原來調(diào)用“全屏顯示菜單解析程序”改成調(diào)用“滾動式菜單的解析程序”,然后將重新編譯鏈接得到的新的可執(zhí)行文件再次導(dǎo)入到儀器上即可。
3結(jié)束語
儀器菜單動態(tài)配置方法的優(yōu)點(diǎn)是將儀器菜單的顯示參數(shù)寫入菜單數(shù)據(jù)配置文件中,使得程序員僅通過修改菜單數(shù)據(jù)配置文件,不需要修改其他任何程序就可以方便地對菜單的內(nèi)容進(jìn)行調(diào)整,以向用尸顯示不同的菜單名稱及菜單結(jié)構(gòu),同時應(yīng)用程序能夠根據(jù)用戶的菜單顯示要求調(diào)用不同的解析程序解析同—個菜單數(shù)據(jù)配置文件,以顯示出不同的風(fēng)格的儀器菜單。