朱曉駿,董黎剛
(浙江工商大學(xué)信息與電子工程學(xué)院,浙江杭州310018)
隨著社會(huì)的發(fā)展,許多公司的產(chǎn)品都會(huì)遠(yuǎn)銷到全國(guó)乃至全球各地。對(duì)于傳統(tǒng)的串口設(shè)備而言要遠(yuǎn)距離進(jìn)行實(shí)時(shí)監(jiān)測(cè)顯得非常麻煩。一般對(duì)于這個(gè)問(wèn)題都是派遣工程師直接去現(xiàn)場(chǎng)進(jìn)行監(jiān)測(cè),或者是安裝特定的客戶端軟件來(lái)對(duì)串口設(shè)備進(jìn)行實(shí)時(shí)監(jiān)測(cè)。但是這兩種方法都有一定的弊端,都不同程度的受到地域和工作環(huán)境的限制。為了解決這個(gè)問(wèn)題,人們很快提出了基于B/S模式的解決方法。其實(shí)B/S模式在監(jiān)測(cè)方面的應(yīng)用已經(jīng)不少,比如在流變儀,濕度計(jì)的監(jiān)測(cè)方面已經(jīng)有了相關(guān)的研究[1、2]。本文主要介紹將其用于串口設(shè)備的實(shí)時(shí)監(jiān)測(cè)中。該系統(tǒng)能夠?qū)⒋谠O(shè)備所采集的數(shù)據(jù)實(shí)時(shí)反應(yīng)在瀏覽器端的動(dòng)態(tài)圖上??梢宰龅诫S時(shí)隨地只要能上網(wǎng)就可以監(jiān)測(cè)到你想監(jiān)測(cè)的串口。
本系統(tǒng)主要有兩個(gè)大的模塊構(gòu)成,如圖1所示,一個(gè)是面向串口端的數(shù)據(jù)采集模塊,另一個(gè)就是面向用戶端的數(shù)據(jù)顯示模塊。兩個(gè)模塊并不直接通訊他們的數(shù)據(jù)交換通過(guò)對(duì)同一個(gè)數(shù)據(jù)庫(kù)的操作來(lái)實(shí)現(xiàn)。這樣一來(lái)有兩個(gè)好處,一是數(shù)據(jù)都被保存了下來(lái),保證了在今后做整體數(shù)據(jù)分析的時(shí)候有完整的數(shù)據(jù)源。二是在今后擴(kuò)展控制模塊的時(shí)候所有命令也是作為數(shù)據(jù)放入數(shù)據(jù)庫(kù)的,以便于日后的調(diào)試以及現(xiàn)場(chǎng)的再恢復(fù)。
圖1 系統(tǒng)功能結(jié)構(gòu)圖
數(shù)據(jù)采集模塊會(huì)在串口有數(shù)據(jù)的后會(huì)立即將串口的數(shù)據(jù)讀取下來(lái),然后實(shí)時(shí)地存貯到數(shù)據(jù)庫(kù)里面去。而在數(shù)據(jù)顯示模塊會(huì)以一定的周期去訪問(wèn)后臺(tái)的數(shù)據(jù)庫(kù)讀取模塊,從而得到最新的數(shù)據(jù)庫(kù)信息,然后將它以圖的方式顯示在瀏覽器上面。
整個(gè)系統(tǒng)硬件上的構(gòu)建主要核心部分是由兩個(gè)服務(wù)器和一個(gè)數(shù)據(jù)庫(kù)構(gòu)成,如圖2所示,面向下位機(jī)的服務(wù)器主要完成接收串口數(shù)據(jù)并寫(xiě)入數(shù)據(jù)庫(kù)的功能,而上位機(jī)服務(wù)器主要實(shí)現(xiàn)的功能是訪問(wèn)數(shù)據(jù)庫(kù)并根據(jù)要求查詢并返回所需的內(nèi)容。
圖2 系統(tǒng)各部分關(guān)系圖
2.1.1 串口接入網(wǎng)絡(luò)的實(shí)現(xiàn)
串口設(shè)備作為一種典型的傳統(tǒng)設(shè)備,要將其接入網(wǎng)絡(luò)是勢(shì)在必行的。本方案初步擬定采用HLKWIFI-RS232M01[3]設(shè)備將串口轉(zhuǎn)換成無(wú)線網(wǎng)口然后接入網(wǎng)絡(luò),如圖3所示,串口采用硬件RTS/CTS[4]流控。
圖3 HLK-WIFI-RS232M01模塊
2.1.2 串口端服務(wù)器的實(shí)現(xiàn)
(1)服務(wù)器連接數(shù)據(jù)庫(kù)
串口端服務(wù)器采用C語(yǔ)言來(lái)實(shí)現(xiàn),通過(guò)標(biāo)準(zhǔn)的ODBC訪問(wèn)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)采用SQL Server。
將訪問(wèn)數(shù)據(jù)庫(kù)的操作封裝成函數(shù)提供給其他函數(shù)調(diào)用,在此函數(shù)中實(shí)現(xiàn)數(shù)據(jù)庫(kù)的鏈接以及向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)。
(2)服務(wù)器鏈接串口設(shè)備
如上所述,串口設(shè)備已經(jīng)通過(guò)HLK-WIFI-RS232M01轉(zhuǎn)換為標(biāo)準(zhǔn)的網(wǎng)口,所以這里對(duì)串口的操作即對(duì)網(wǎng)口的操作。本方案采用標(biāo)準(zhǔn)的TCP協(xié)議[5、6]來(lái)實(shí)現(xiàn),通過(guò)標(biāo)準(zhǔn)的socket[7]套接字與串口的鏈接。在服務(wù)器創(chuàng)建一個(gè)主循環(huán)用于listen()[7]新的鏈接。一旦發(fā)現(xiàn)有新的串口設(shè)備鏈接到服務(wù)器。便為其創(chuàng)建一個(gè)新的進(jìn)程,在這個(gè)進(jìn)程中將調(diào)用上述封裝好的鏈接數(shù)據(jù)庫(kù)的函數(shù)。從而實(shí)現(xiàn)將串口數(shù)據(jù)存入數(shù)據(jù)庫(kù)的目的。
2.2.1 web 端后臺(tái)的實(shí)現(xiàn)
web端選用JSP作為后臺(tái),在JSP后臺(tái)中實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的鏈接以及數(shù)據(jù)的查詢。后臺(tái)每當(dāng)被訪問(wèn)一次便會(huì)主動(dòng)的訪問(wèn)數(shù)據(jù)庫(kù)一次,并且通過(guò)辨別時(shí)間戳來(lái)讀取數(shù)據(jù)庫(kù)的最新的數(shù)據(jù)返回給客戶端。由于考慮到后臺(tái)程序會(huì)被頻繁的訪問(wèn),所以采用ajax[8、9]技術(shù)實(shí)現(xiàn)數(shù)據(jù)的傳輸。這樣只需要局部的刷新數(shù)據(jù)而不用刷新整個(gè)頁(yè)面。并且考慮到ajax用純JS來(lái)實(shí)現(xiàn)的話比較繁瑣,本方案采用的是JQuery[10]封裝好的ajax。
2.2.2 web 端前臺(tái)的實(shí)現(xiàn)
web端的前臺(tái)實(shí)現(xiàn)的主要的功能便是返回一張能實(shí)時(shí)反應(yīng)當(dāng)前串口狀態(tài)的圖。這張圖以時(shí)間為橫軸,串口的狀態(tài)數(shù)據(jù)為縱軸,能夠?qū)崿F(xiàn)數(shù)據(jù)的動(dòng)態(tài)更新。
在本方案中,采用免費(fèi)的第三方控件flot[11]來(lái)實(shí)現(xiàn)圖形的繪制,采用setTimeout()函數(shù)來(lái)定時(shí)的訪問(wèn)后臺(tái)程序這樣以來(lái)就可以實(shí)時(shí)的得到數(shù)據(jù)庫(kù)中最新的串口的信息。在flot中是將整個(gè)圖形的以點(diǎn)集的方式保存在一個(gè)數(shù)組中。后臺(tái)返回的數(shù)據(jù)會(huì)被轉(zhuǎn)換成點(diǎn)的形式,然后將原來(lái)點(diǎn)集中的第一個(gè)點(diǎn)拋棄,并將所有的點(diǎn)前移一位,最后將最新獲得的那個(gè)點(diǎn)插入到點(diǎn)集的最后,這樣便有了一個(gè)新的點(diǎn)集。然后通過(guò)flot內(nèi)部方法flot.setData()來(lái)實(shí)現(xiàn)圖形的更新。這樣一來(lái)每當(dāng)setTimeout()被觸發(fā)的時(shí)候就會(huì)訪問(wèn)一次數(shù)據(jù)庫(kù)并帶回一個(gè)最新的數(shù)據(jù),然后實(shí)時(shí)動(dòng)態(tài)的顯示在圖形了。這樣就實(shí)現(xiàn)了圖形的動(dòng)態(tài)走動(dòng),從而達(dá)到實(shí)時(shí)監(jiān)測(cè)的目的
通過(guò)測(cè)試來(lái)說(shuō)明本方案的效果,瀏覽器的截圖上面的數(shù)據(jù)實(shí)時(shí)地反應(yīng)了串口寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)的內(nèi)容,如圖4所示。
圖4 web瀏覽器效果圖
本文提出的在B/S模式下對(duì)串口的實(shí)時(shí)監(jiān)測(cè),可以讓對(duì)串口的監(jiān)測(cè)不在受到時(shí)間和地域的限制,只要能上網(wǎng)就可以隨時(shí)隨地進(jìn)行。這樣一來(lái)對(duì)于傳統(tǒng)串口設(shè)備的監(jiān)測(cè)可以更加的靈活。而且因?yàn)楸疚奶岢龅拇跀?shù)據(jù)是由數(shù)據(jù)庫(kù)保存的,這樣一來(lái),今后不僅可以看串口數(shù)據(jù)的實(shí)時(shí)圖,在此基礎(chǔ)上還可以根據(jù)數(shù)據(jù)庫(kù)保存的數(shù)據(jù)制作出長(zhǎng)時(shí)間范圍內(nèi)的串口數(shù)據(jù)的走勢(shì)圖,以及進(jìn)行更進(jìn)一步的數(shù)據(jù)挖掘,從而更好的實(shí)現(xiàn)對(duì)串口數(shù)據(jù)的監(jiān)測(cè)。本方案中的所有接口均使用的標(biāo)準(zhǔn)接口,可以很容易的將文中所涉及的服務(wù)器構(gòu)建在任何平臺(tái)上,以及可以將2個(gè)服務(wù)器以及數(shù)據(jù)庫(kù)分別構(gòu)建在不同的機(jī)子上,這樣一來(lái)可以也可以方便管理和維護(hù)。最后本文提出的根據(jù)網(wǎng)絡(luò)來(lái)對(duì)傳統(tǒng)設(shè)備進(jìn)行監(jiān)控也將是今后發(fā)展的一個(gè)趨勢(shì)。
[1] 基于B/S模式的濕度計(jì)在線監(jiān)控系統(tǒng)設(shè)計(jì).博碩教育[EB/OL].http://www.boshuo.net/2011/0328/155716.html,2011-03-28.
[2] 姜云霞.轉(zhuǎn)矩流變儀遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與研究[J].計(jì)算機(jī)測(cè)量與控制,2010,18(3):515-558.
[3] 海凌科有限公司.HLK-WIFI-M03說(shuō)明手冊(cè)[R].香港:海凌科有限公司,2010.
[4] 清水綠竹.RTS和 CTS流控介紹[EB/OL].http://hi.baidu.com/%C7%E5%CB%AE%C2%CC%D6%F1/blog/item/5c399d3aa109a93396ddd8cf.html,2010 -11 -09.
[5] 特南鮑姆.潘愛(ài)民 譯.計(jì)算機(jī)網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2004:454-470.
[6] 樊月華.web技術(shù)應(yīng)用基礎(chǔ)[M].北京:清華大學(xué)出版社,2009:4-15.
[7] 范文慶,周彬彬,安靖.Windows API開(kāi)發(fā)詳解——函數(shù)、接口、編程實(shí)例[M].北京:人民郵電出版社,2011:497-509.
[8] 潘國(guó)榮.基于Ajax技術(shù)的JSP頁(yè)面中模糊查詢的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2011,7(12):2 837-2 838.
[9] 百度公司.百度百科[EB/OL].http://baike.baidu.com/view/1641.htm,2011 -07 -16.
[10] 李剛.瘋狂 Ajax講義——Prototype/jQuery+DWR+Spring+Hibernate整合開(kāi)發(fā).[M].北京:電子工業(yè)出版社,2009:385-386.
[11] IOLA 公司.flot[EB/OL].http://code.google.com/p/flot/,2011 -07 -16.