劉慶武 付美艷 王黎明
[摘要]圖書館在館人數(shù)檢測與顯示系統(tǒng)為圖書館管理員實時掌握圖書館的在館人數(shù)提供了有力地支持。它主要有信號檢測與信息顯示兩大模塊組成。從系統(tǒng)結(jié)構(gòu)、人機(jī)界面、技術(shù)難點及性能改善四個方面介紹其顯示部分軟件部分的設(shè)計與實現(xiàn)。
[關(guān)鍵詞]PLC通訊 系統(tǒng)服務(wù) 進(jìn)程通訊 LED控件 多線程
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-7597(2009)0720058-01
一、引言
圖書館人數(shù)檢測與顯示系統(tǒng)主要由信號檢測、信息顯示兩大模塊組成。信號檢測模塊主要由光電傳感器檢測信號并傳輸給PLC,PLC完成進(jìn)出人數(shù)的計數(shù),并通過RS232接口傳輸給計算機(jī);顯示模塊主要由計算機(jī)讀取PLC的進(jìn)出人數(shù),并使用7段數(shù)碼管控件在計算機(jī)屏幕上輸出顯示。本文從系統(tǒng)結(jié)構(gòu)、人機(jī)界面的設(shè)計、技術(shù)難點及性能改善四個方面總結(jié)系統(tǒng)顯示部分軟件的設(shè)計與實現(xiàn)。
二、系統(tǒng)結(jié)構(gòu)
顯示部分主要功能包括:保持與PLC的通訊并讀取PLC中的進(jìn)出人數(shù)、計算當(dāng)前在館人數(shù)、顯示在館人數(shù)三部分功能。由于計算當(dāng)前在館人數(shù)操作較為簡單,軟件部分采用兩層體系結(jié)構(gòu):通信層和顯示層。
通訊層采用Windows系統(tǒng)服務(wù)的實現(xiàn)方式,通訊服務(wù)開機(jī)自啟動,無需用戶干預(yù),保持與PLC的實時通訊。通過發(fā)送命令字的方式取得進(jìn)出人數(shù),分別將進(jìn)出人數(shù)寫入共享內(nèi)存,如此往復(fù),直到服務(wù)程序終止運(yùn)行為止。
顯示層采用窗口程序方式,它主要功能是計算在館人數(shù),并使用自主開發(fā)的七段數(shù)碼管控件在屏幕上顯示輸出,同時包含了對通訊服務(wù)程序的啟動和關(guān)閉功能。程序執(zhí)行流程如下如所示:
采用兩層的系統(tǒng)結(jié)構(gòu),一方面可以降低層次之間的耦合便于系統(tǒng)的維護(hù)和升級;另一方面有利于分工合作,從而提高開發(fā)效率。
三、人機(jī)界面及性能改善
應(yīng)用程序能否得到用戶的滿意,操作方便、界面友好的人機(jī)界面是一個不容忽視的重要因素。本系統(tǒng)主要采用系統(tǒng)托盤、右鍵菜單以及自主開發(fā)七段數(shù)碼管的方式,盡可能減少用戶的操作的步驟,方便用戶的日常使用。
1.托盤程序。越來越多的程序都做成托盤程序,這類程序具有不占屏幕,后臺運(yùn)行,便于控制等優(yōu)點。當(dāng)顯示窗口程序關(guān)閉時,程序以圖標(biāo)的方式放到系統(tǒng)托盤中,并未真正關(guān)閉。這樣用戶將不用每次打開程序都要尋找程序的位置,而且也避免不小心將程序關(guān)閉。
2.右鍵菜單。使用.NET提供的ServiceController類,實現(xiàn)對通訊服務(wù)程序的啟動、關(guān)閉等控制功能,并以右鍵菜單的方式集成到顯示程序的窗口中。
3.LED顯示。七段數(shù)碼管在工業(yè)控制中有著十分廣泛的應(yīng)用,具有顯示醒目、直觀等優(yōu)點。使用自主開發(fā)LED控件不僅會解決系統(tǒng)的移植性問題,而且也為系統(tǒng)以后的維護(hù)變更帶來了方便。
4.多線程。為提高系統(tǒng)的實時性,減少系統(tǒng)資源的浪費(fèi),可將SerialPort的類的對象添加到了一個線程中,服務(wù)啟動時開啟這個線程,這樣不影響主線程的運(yùn)轉(zhuǎn)。在顯示程序中,顯示控件的頻繁刷新也有可能影響顯示效果,所以將其也寫到一個線程中,以防止影響顯示窗口出現(xiàn)瞬間刷新速度跟不上而出現(xiàn)拖影的現(xiàn)象。
四、技術(shù)難點
系統(tǒng)的開發(fā)環(huán)境為.NET Framework,使用的開發(fā)語言是C#程序設(shè)計語言,開發(fā)工具為Microsoft Visual Studio2005。在程序?qū)崿F(xiàn)過程中系統(tǒng)主要的技術(shù)難點有:一是在通訊服務(wù)程序中實現(xiàn)上位機(jī)與PLC的通信;二是通訊服務(wù)程序與顯示程序通過共享內(nèi)存的方式實現(xiàn)進(jìn)程間的通信。
1.通訊服務(wù)程序。PLC與計算機(jī)以“幀”為單位進(jìn)行通信。計算機(jī)通過RS232串行通訊端口向PLC發(fā)命令幀,PLC收到后解析命令,若是請求進(jìn)人數(shù)命令,則將進(jìn)人數(shù)包裝成響應(yīng)幀通過端口再返回給計算機(jī),若是請求出人數(shù)命令,則將出人數(shù)包裝成響應(yīng)幀返回給計算機(jī)。計算機(jī)在接到響應(yīng)幀后,從中提取出人數(shù)。
2.進(jìn)程通訊。在Windows中提供了多種使應(yīng)用程序能夠迅速而方便地共享數(shù)據(jù)和信息的機(jī)制,包括窗口消息、郵箱、管道和共享內(nèi)存等等。在本系統(tǒng)中主要使用共享內(nèi)存的方式實現(xiàn)進(jìn)程通信。
內(nèi)存由操作系統(tǒng)管理,操作系統(tǒng)已將其以動態(tài)鏈接庫的方式給用戶程序調(diào)用。具體實現(xiàn)中主要用到方法CreateFileMapping,MapViewOfFile,OpenFileMapping等,它們的具體用法請參照MSDN。
五、總結(jié)
通過實際的測試運(yùn)行良好,方便了工作人員實時掌握圖書館在館人數(shù)。但是系統(tǒng)仍有一些不足之處,比如:在進(jìn)出頻繁的時候,加載背景圖片后占用CPU資源較多,這有待進(jìn)一步完善。該系統(tǒng)完全可以運(yùn)用在其他需要人數(shù)檢測的場所,如超市、醫(yī)院等。如對信號檢測端進(jìn)行改造的話,可用于對汽車等物體的檢測。