史 峰
(國營七八五廠,山西 太原 030024)
界面可定制的北斗用戶機監(jiān)控軟件動態(tài)鏈接庫的設(shè)計
史 峰
(國營七八五廠,山西 太原 030024)
在Microsoft Windows XP操作系統(tǒng)下使用Microsoft Visual C++ 6.0作為編譯環(huán)境,運用面向?qū)ο蟮墓S模式設(shè)計支持用戶定制界面的運行于計算機上的北斗用戶機監(jiān)控軟件動態(tài)鏈接庫。
北斗用戶機;定制界面;設(shè)計模式;動態(tài)鏈接庫
隨著我國北斗定位系統(tǒng)的發(fā)展,與北斗相關(guān)的技術(shù)越來越多的應(yīng)用在軍事和民用方面。北斗用戶機是和北斗衛(wèi)星通訊的一種硬件終端,可以通過串口與計算機通訊。為了提高軟件開發(fā)的效率,需要設(shè)計北斗用戶機監(jiān)控軟件的動態(tài)鏈接庫(以下簡稱北斗監(jiān)控動態(tài)鏈接庫),通過在主程序中調(diào)用該動態(tài)鏈接庫,在計算機上顯示北斗用戶機的狀態(tài)和數(shù)據(jù)。
北斗監(jiān)控軟件的界面由一個主對話框和一個標簽控件(CTabCtrl)以及綁定在該標簽控件上的若干子對話框(CDialog)組成,每個子對話框以卡片的形式實現(xiàn)一個功能或顯示一類數(shù)據(jù),有相關(guān)性的幾種功能或數(shù)據(jù)的卡片可以按順序顯示在同一個標簽頁上。
為了能在不同類型的軟件中調(diào)用北斗監(jiān)控動態(tài)鏈接庫,提高軟件的復用性,做到在不修改代碼的前提下,通過修改配置文件即可定制軟件界面,北斗動態(tài)鏈接庫應(yīng)具備一定的通用性,包含比較完整的北斗數(shù)據(jù)解析和顯示能力;同時也要具備一定的靈活性,允許用戶根據(jù)不同的應(yīng)用場合定制和裁剪監(jiān)控軟件的頁面,只顯示某些功能或數(shù)據(jù)所對應(yīng)的子對話框,并根據(jù)其重要程度改變頁面在面板上的排列順序以及子對話框在頁面上的排列順序。
圖1為在某個軟件中調(diào)用北斗監(jiān)控動態(tài)鏈接庫后顯示的北斗監(jiān)控軟件界面,經(jīng)過界面定制后,該界面共包含6個標簽頁13個子對話框,圖中顯示為第5個標簽頁(歷史數(shù)據(jù))中的第一個子對話框(接收到數(shù)據(jù)),北斗監(jiān)控軟件最大可支持10個標簽頁,每個標簽頁可顯示10個子對話框。
圖1 北斗監(jiān)控面板在計算機上的顯示界面
北斗監(jiān)控軟件的功能主要由CTabBoard.dll和CBeiDouMonitor.dll兩個動態(tài)鏈接庫完成,另外還用到了CSerialPortDlg.dll來實現(xiàn)串口通訊功能以及Config.ini文件保存界面布置參數(shù),主程序和各動態(tài)鏈接庫之間的調(diào)用關(guān)系如圖2。
圖2 主程序和北斗監(jiān)控軟件動態(tài)鏈接庫的調(diào)用關(guān)系圖
CTabBoard.dll中主要包含了一個抽象類CTabBoard,提供界面顯示和數(shù)據(jù)交換的運行框架,負責創(chuàng)建和顯示主對話框及其標簽控件、顯示和排列子對話框,而子對話框的創(chuàng)建和具體業(yè)務(wù)有關(guān)的功能由其派生類實現(xiàn)。
CTabBoard類負責與主程序進行數(shù)據(jù)交換;與派生類中的子對話框進行數(shù)據(jù)交換;根據(jù)界面配置文件的參數(shù)自動調(diào)整標簽頁的標題和數(shù)量,調(diào)用其派生類的函數(shù)動態(tài)創(chuàng)建并顯示子對話框并綁定至指定的標簽頁面;自動布置子對話框在標簽頁的順序和位置并根據(jù)每個標簽頁面上子對話框的數(shù)量和大小動態(tài)調(diào)整標簽控件及主對話框的高度和寬度;支持子對話框縱向排列、橫向排列、平鋪、最小化等顯示模式;支持串口通訊。
基類CTabBoard的主要結(jié)構(gòu)如圖3。
圖3 CTabBoard類的主要結(jié)構(gòu)
CBeiDouMonitor.dll中包含了一個CTabBoard類的派生類CBeiDouMonitor類和若干實現(xiàn)北斗用戶機監(jiān)控功能的子對話框類,包括顯示北斗用戶機狀態(tài)、顯示衛(wèi)星信號狀態(tài)、顯示定位信息、發(fā)送本機位置、發(fā)送和接收北斗數(shù)據(jù)、保存和查詢歷史數(shù)據(jù)、保存操作日志、設(shè)置參數(shù)等等,完成北斗數(shù)據(jù)的解析和交換,實現(xiàn)北斗監(jiān)控軟件的具體業(yè)務(wù)功能。
3.1 CBeiDouMonitor類的設(shè)計
作為CTabBoard類的派生類,在CBeiDouMonitor類中實現(xiàn)了基類的虛函數(shù)和與北斗用戶機有關(guān)的具體業(yè)務(wù)功能。增加了保存北斗用戶機狀態(tài)的數(shù)據(jù)結(jié)構(gòu),增加了解析和處理北斗數(shù)據(jù)的函數(shù),添加了串口通訊和串口數(shù)據(jù)編解碼的功能。
CBeiDouMonitor類在創(chuàng)建實現(xiàn)具體業(yè)務(wù)功能的子對話框時,使用了面向?qū)ο蟮暮唵喂S模式,可以根據(jù)配置文件的參數(shù)有選擇地動態(tài)創(chuàng)建和初始化所需類型的子對話框而不是創(chuàng)建和初始化所有的子對話框。
在處理和分析數(shù)據(jù)時,CBeiDouMonitor類作為中間緩沖層,有效地保證了數(shù)據(jù)的統(tǒng)一性和安全性。例如:在收到串口的數(shù)據(jù)時,由該類中的串口數(shù)據(jù)解析函數(shù)過濾掉無效數(shù)據(jù)后,將有效數(shù)據(jù)提取出來后以消息的形式發(fā)送給對應(yīng)的子對話框;當子對話框需要通過串口發(fā)送數(shù)據(jù)時,可以向CBeiDouMonitor類發(fā)送消息,由該類中的串口通訊函數(shù)讀取北斗用戶機數(shù)據(jù)完成編碼后向串口發(fā)送數(shù)據(jù)。
派生類CBeiDouMonitor的主要結(jié)構(gòu)如圖4。
圖4 CBeiDouMonitor類的主要結(jié)構(gòu)
3.2 CBeiDouMonitor類與主程序之間的通訊
這里的主程序指的是調(diào)用北斗動態(tài)鏈接庫的程序,主程序與北斗動態(tài)鏈接庫的數(shù)據(jù)交換通過主對話框的函數(shù)來實現(xiàn)。在收到主程序發(fā)送來的消息時,由該類中的解析函數(shù)處理消息中的數(shù)據(jù)后發(fā)送給對應(yīng)的子對話框。
3.3 CBeiDouMonitor.dll中子對話框類的設(shè)計
為了保證數(shù)據(jù)的獨立性和安全性,提高不同功能內(nèi)部數(shù)據(jù)的聚合度,降低不同功能之間的耦合度,使用面向?qū)ο蟮脑O(shè)計思想將北斗用戶機監(jiān)控軟件的一個功能或一類數(shù)據(jù)設(shè)計為一個子對話框類,在用戶界面上以功能卡片的形式顯示,不同功能的卡片可以按照任意順序排列在一個標簽頁面上,也可以分布在不同的標簽頁面上。
3.4 CBeiDouMonitor.dll中子對話框類與主對話框之間的通訊和數(shù)據(jù)交換
子對話框與主對話框(由CBeidouMonitor類實現(xiàn))之間通過消息傳遞的方式進行數(shù)據(jù)交換。例如:在主對話框收到串口發(fā)送來的消息時,由該類中的消息解析函數(shù)將過濾后的數(shù)據(jù)通過消息發(fā)送給對應(yīng)的子對話框,收到數(shù)據(jù)的子對話框提取和加工其中的有效數(shù)據(jù),更新對話框上的文字、數(shù)字、圖形或符號,顯示北斗用戶機狀態(tài)監(jiān)控、數(shù)據(jù)顯示、操作記錄等功能;當通過點擊子對話框的按鈕發(fā)送本機位置時,子對話框?qū)⑿枰瓿傻墓δ芤韵⒌男问桨l(fā)送給主對話框,由主對話框去調(diào)用串口數(shù)據(jù)編碼和發(fā)送函數(shù)去完成相關(guān)功能。
完成接收數(shù)據(jù)列表功能的子對話框類的主要結(jié)構(gòu)如圖5。
圖5 接收數(shù)據(jù)列表子對話框類的主要結(jié)構(gòu)
3.5 CBeiDouMonitor.dll中子對話框之間的通訊和數(shù)據(jù)交換
為了降低子對話框之間的耦合程度,在定制界面時做到各個子對話框之間無相互依賴關(guān)系,它們之間的通訊和數(shù)據(jù)交換通過CBeiDouMonitor的主對話框作為中介來實現(xiàn),例如:在保存某個子對話框中的操作記錄時,該子對話框?qū)⑾蛑鲗υ捒虬l(fā)送一個包含了有關(guān)操作的信息的消息,主對話框收到該消息后,將該消息加工后發(fā)送給歷史數(shù)據(jù)標簽頁中的操作記錄子對話框,操作記錄子對話框提取數(shù)據(jù)中的操作信息后再調(diào)用其添加操作記錄函數(shù)在操作記錄列表中增加一條操作記錄。
將用戶界面的相關(guān)參數(shù)保存在配置文件中,通過修改配置文件中的參數(shù),就可以在不修改程序源代碼的條件下為不同的主程序定制不同的顯示界面,這樣既保證了代碼和數(shù)據(jù)的安全性,又提高了軟件的復用性和開發(fā)效率,例如:如果我們只關(guān)心定位功能,就可以在配置文件中設(shè)置主對話框只包含一個定位功能標簽頁,在該標簽頁上只顯示具有定位功能的子對話框;或者我們非常關(guān)心北斗用戶機狀態(tài),就可以在配置文件中改變子對話框排列順序的參數(shù),將顯示北斗用戶機狀態(tài)的子對話框排列在第一個標簽頁的第一個位置。
但是如果通過手動修改配置文件來完成以上操作,不僅操作不便而且不夠直觀,還有可能出現(xiàn)寫錯參數(shù)寫錯格式的情況,所以,我們還要設(shè)計一個可視化的界面定制工具,通過它來高效直觀地針對不同應(yīng)用場合的不同需求設(shè)計北斗用戶機監(jiān)控軟件的用戶界面。該軟件可以單獨運行,可以新建、打開、修改和保存配置文件的參數(shù)。
北斗用戶機監(jiān)控軟件界面定制工具如圖6。
圖6 北斗用戶機監(jiān)控軟件界面定制工具
用這樣的思路設(shè)計出的動態(tài)鏈接庫,在兼顧了通用性和靈活性的同時,有效地減小了軟件的體積,降低了其對計算機資源的占用,提高了軟件的運行效率,并且降低了與主程序的耦合程度,能夠方便地進行功能升級和版本更新。
在增強功能的版本中也可以添加使用網(wǎng)口或CAN口到通訊方式,可以通過派生類來實現(xiàn)更多的功能,也可以將子對話框類設(shè)計為單獨的動態(tài)鏈接庫,以便于功能擴展和維護。
[1] Stanley B.Lippman,Josee Lajoie,Barbara E.Moo.C++ Primer中文版[M].北京:人民郵電出版社,2010.
[2] 趙永發(fā),由大偉,楊麗.Visual C++開發(fā)寶典[M].北京:機械工業(yè)出版社,2012.
[3] Erich Gamma,Richard Helm,Ralph Johnson.設(shè)計模式:可復用面向?qū)ο筌浖幕A(chǔ)[M].北京:機械工業(yè)出版社,2007.
[4] Grady Booch.面向?qū)ο蠓治雠c設(shè)計[M].北京:機械工業(yè)出版社,2008.
[5] 程杰.大話設(shè)計模式[M].北京:清華大學出版社,2009.
Designment of Interface Customizable BeiDou Monitoring System’s Dlls
Shi Feng
(Stateowned785Plant,TaiyuanShanxi030024,China)
This paper uses Microsoft Visual C++ 6.0 as the compiler environment in the Microsoft Windows XP operating system and applies the objected oriented factory mode to design the dynamic link library of Beidou user monitoring software which supports the user interface customizable and runs on the computer.
BeiDou; interface customizable; design mode; dynamic link library
2017-03-23
史 峰(1981- ),男,山西潞城人,工程師,本科學歷,研究方向為自動控制。
1674- 4578(2017)03- 0045- 03
TP277;TP311.52
A