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