引言
隨著網(wǎng)絡(luò)技術(shù)和嵌入式技術(shù)的發(fā)展,將嵌入式系統(tǒng)與Internet相結(jié)合對(duì)系統(tǒng)進(jìn)行數(shù)據(jù)、圖像監(jiān)控和管理,成為重要研究方向之一。嵌入式Web網(wǎng)絡(luò)傳感器技術(shù)是傳感器、嵌入式、分布式信息處理和Internet等相關(guān)技術(shù)交叉結(jié)合的技術(shù),它是在智能傳感器的基礎(chǔ)上把TCP/IP協(xié)議作為一種嵌入式應(yīng)用,嵌入現(xiàn)成智能服務(wù)器的ROM中,利用傳感器內(nèi)建的Web服務(wù)器,用戶(hù)可以通過(guò)瀏覽器采集遠(yuǎn)程監(jiān)控對(duì)象的信息。
1 Web網(wǎng)絡(luò)傳感器數(shù)據(jù)采集系統(tǒng)工作原理
用戶(hù)通過(guò)瀏覽器訪問(wèn)Web服務(wù)器上的數(shù)據(jù),將遠(yuǎn)程采集到的數(shù)據(jù)實(shí)時(shí)顯示到Internet網(wǎng)頁(yè)上。用戶(hù)需要實(shí)時(shí)看到數(shù)據(jù)的變化,而HTML網(wǎng)頁(yè)通常只能是靜態(tài)的數(shù)據(jù),為此在Web服務(wù)器上應(yīng)用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)是必要的。動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)技術(shù)有CGI和HTML腳本嵌入技術(shù)(如ASr、PHP、JSP等),由于網(wǎng)絡(luò)傳感器嵌入式系統(tǒng)采用的是單片機(jī)來(lái)實(shí)現(xiàn),其資源有限,為此采用CGI技術(shù)來(lái)實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)。
1.1 CGI原理
CGI(Common Gateway Interface,公共網(wǎng)關(guān)接口)提供給Web服務(wù)器一個(gè)外部程序的通道,實(shí)現(xiàn)處理器與瀏覽器之間的通信。CGI是一種接口規(guī)范,可以處理客戶(hù)端(一般是瀏覽器)輸入的數(shù)據(jù),完成瀏覽器和服務(wù)器之間的交互操作。CGI是運(yùn)行在Web服務(wù)器上的程序,由瀏覽器的輸入觸發(fā),是服務(wù)器和系統(tǒng)中其他程序的橋梁。CGI程序?qū)儆谝粋€(gè)外部程序,是運(yùn)行在服務(wù)器端的一個(gè)可執(zhí)行文件。
CGI程序的工作原理示意圖如圖1所示。
客戶(hù)端的Web瀏覽器瀏覽到某個(gè)主頁(yè)后,利用一定的方式提交數(shù)據(jù),并通過(guò)HTTP協(xié)議向Web服務(wù)器發(fā)出請(qǐng)求。服務(wù)器端的HTTP Daemon(守護(hù)進(jìn)程)將描述的主頁(yè)信息通過(guò)標(biāo)準(zhǔn)輸入(STDIN)和環(huán)境變量(environment variable)傳遞給主頁(yè)指定的CGI程序,并啟動(dòng)此應(yīng)用程序進(jìn)行處理(包括對(duì)數(shù)據(jù)庫(kù)的處理)。處理結(jié)果通過(guò)標(biāo)準(zhǔn)輸出(STDOUT)返回給HTTP Daemon,再通過(guò)HTTP協(xié)議返回給客戶(hù)端的瀏覽器,由瀏覽器負(fù)責(zé)解釋執(zhí)行,將最終的結(jié)果顯示給用戶(hù)。
1.2 基于CGI的數(shù)據(jù)采集流程
CGI的數(shù)據(jù)采集流程如圖2所示。當(dāng)用CGI實(shí)現(xiàn)遠(yuǎn)程傳感器溫度數(shù)據(jù)采集時(shí),CGI程序可以通過(guò)直接訪問(wèn)硬件或調(diào)用驅(qū)動(dòng)程序的方式獲得數(shù)據(jù)。當(dāng)數(shù)據(jù)采集完畢后,CGI程序?qū)?shù)據(jù)組織成HTTP流并發(fā)送到Web服務(wù)器上,由Web服務(wù)器負(fù)責(zé)送到客戶(hù)端。
2 實(shí)時(shí)數(shù)據(jù)采集技術(shù)
2.1 連續(xù)數(shù)據(jù)采集的實(shí)現(xiàn)方法
由于HTTP是基于請(qǐng)求/響應(yīng)模式的,客戶(hù)端和服務(wù)端進(jìn)行一次交互時(shí),開(kāi)始于客戶(hù)提出的一個(gè)請(qǐng)求,并在服務(wù)器給出響應(yīng)后結(jié)束。而一次交互只能得到一組數(shù)據(jù),那么如何實(shí)現(xiàn)連續(xù)的數(shù)據(jù)采集呢? 一般有兩種方法:即客戶(hù)端牽引和建立TCP連接。
客戶(hù)端牽引就是在網(wǎng)頁(yè)中插入定時(shí)刷新功能,它的數(shù)量級(jí)為s,可以使用戶(hù)看到數(shù)據(jù)的變化,但不能滿(mǎn)足強(qiáng)實(shí)時(shí)性的要求,而且其中會(huì)漏掉一些中間的數(shù)據(jù)。
建立TCP連接就是通過(guò)在網(wǎng)頁(yè)中嵌入ActiveX控件或Java Applet小程序來(lái)增強(qiáng)客戶(hù)機(jī)的功能。其中,ActiveX控件只能在windows環(huán)境下運(yùn)行,而Java Applet通用性強(qiáng),可以實(shí)現(xiàn)跨平臺(tái)操作。所以本系統(tǒng)采用Java Applet來(lái)進(jìn)行遠(yuǎn)程數(shù)據(jù)的實(shí)時(shí)采集。
2.2 Java Applet
Applet是用Java編寫(xiě)的,含有可視化內(nèi)容的,并被嵌入Web頁(yè)面中用來(lái)產(chǎn)生特殊頁(yè)面效果的小程序,經(jīng)常被用于增加網(wǎng)頁(yè)多媒體效果,并使網(wǎng)頁(yè)產(chǎn)生互動(dòng)功能。
當(dāng)用戶(hù)訪問(wèn)帶有Java Applet的網(wǎng)頁(yè)時(shí),Applet被下載到用戶(hù)計(jì)算機(jī)上執(zhí)行,但前提是用戶(hù)使用的是支持Java的網(wǎng)絡(luò)瀏覽器。由于Applet是在用戶(hù)計(jì)算機(jī)上執(zhí)行的,因此它的執(zhí)行速度是不受網(wǎng)絡(luò)寬帶或者M(jìn)ODEM存取速度的限制,用戶(hù)可以更好地查看網(wǎng)頁(yè)上Applet產(chǎn)生的多媒體效果。
Applet必須將HTML的