劉慶武 付美艷 王黎明
[摘要]圖書館在館人數檢測與顯示系統為圖書館管理員實時掌握圖書館的在館人數提供了有力地支持。它主要有信號檢測與信息顯示兩大模塊組成。從系統結構、人機界面、技術難點及性能改善四個方面介紹其顯示部分軟件部分的設計與實現。
[關鍵詞]PLC通訊 系統服務 進程通訊 LED控件 多線程
中圖分類號:TP3 文獻標識碼:A 文章編號:1671-7597(2009)0720058-01
一、引言
圖書館人數檢測與顯示系統主要由信號檢測、信息顯示兩大模塊組成。信號檢測模塊主要由光電傳感器檢測信號并傳輸給PLC,PLC完成進出人數的計數,并通過RS232接口傳輸給計算機;顯示模塊主要由計算機讀取PLC的進出人數,并使用7段數碼管控件在計算機屏幕上輸出顯示。本文從系統結構、人機界面的設計、技術難點及性能改善四個方面總結系統顯示部分軟件的設計與實現。
二、系統結構

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