摘 要:通過CGI和Flash動態(tài)交互技術實現(xiàn)網(wǎng)絡儀表" title="網(wǎng)絡儀表">網(wǎng)絡儀表數(shù)據(jù)遠程實時監(jiān)測" title="實時監(jiān)測">實時監(jiān)測的方案。描述了系統(tǒng)的設計框架和儀表的硬件組成,移植了ARM-Linux" title="ARM-Linux">ARM-Linux操作系統(tǒng),選取Boa作為嵌入式Web Server,通過編寫CGI程序并結合Flash無狀態(tài)機制實現(xiàn)了遠程監(jiān)測功能。
關鍵詞:網(wǎng)絡儀表? ARM-Linux? 嵌入式Web Server? CGI? Flash
?
??? 網(wǎng)絡儀表是由指針式儀表、數(shù)字儀表、智能儀表發(fā)展起來的新一代儀表,它可以實現(xiàn)遠程調試、診斷、數(shù)據(jù)采集和實時監(jiān)測,從而提高生產(chǎn)效率和管理水平,并最有效地發(fā)揮設備功能[1]。
在實時性要求較高的電力參數(shù)" title="電力參數(shù)">電力參數(shù)測控系統(tǒng)中,為了保證觀測的實時性,以往的處理方法是通過JavaScript或瀏覽器支持的語言定時刷新頁面,但這樣會導致瀏覽器端所顯示的儀表數(shù)據(jù)不停閃動變換,令觀測者無法接受;而用HTML只能直白的顯示數(shù)據(jù),無法動態(tài)描繪波形。怎樣既能解決刷新問題,又能通過動態(tài)波形描繪儀表數(shù)據(jù)?通過將CGI與Shock Wave Flash相結合,可以實現(xiàn)儀表數(shù)據(jù)在瀏覽器上的實時刷新和波形動態(tài)描繪,使人機界面更加友好,數(shù)據(jù)顯示更加直觀,能成功地實現(xiàn)遠程監(jiān)測儀表數(shù)據(jù)的目的。
1 網(wǎng)絡儀表數(shù)據(jù)實時監(jiān)測系統(tǒng)結構
? 系統(tǒng)主要由現(xiàn)場傳感器、網(wǎng)絡儀表和遠程監(jiān)控端三部分組成?,F(xiàn)場傳感器采集待檢測對象的信息并傳送給網(wǎng)絡儀表。網(wǎng)絡儀表以Web Server為核心,接收現(xiàn)場傳感器傳遞來的數(shù)據(jù),并通過RJ45網(wǎng)絡接口連接到Internet。遠程監(jiān)控端可以通過瀏覽器直接訪問網(wǎng)絡儀表服務器,且允許多點訪問,實時監(jiān)測現(xiàn)場數(shù)據(jù),并可以修改參數(shù),對儀表進行相應的調試、校正[2]。系統(tǒng)結構如圖1所示。
?
?
2? 網(wǎng)絡儀表的硬件組成
一個完整的網(wǎng)絡儀表硬件系統(tǒng)以具有Web通信功能的嵌入式微處理器為核心,處理器選用16/32-bit RISC、高性價比、低功耗、集成度高的Samsung S3C2410,該芯片采用203MHz的ARM920T內(nèi)核。外圍的16MB的Flash用來存儲實時操作系統(tǒng)內(nèi)核、TCP/IP協(xié)議棧、CGI程序和Web文檔;SDRAM供系統(tǒng)運行時使用;以太網(wǎng)接口實現(xiàn)與Internet/Intranet連接。其核心硬件組成如圖2所示。
?
該網(wǎng)絡儀表是針對電力變電站的電力參數(shù)測量而設計。主控芯片S3C2410集成了一個8路10位A/D轉換器,在2.5MHz轉換時鐘下其最大轉換率為500KSPS,非線性度為正負1位?,F(xiàn)場傳感器采集的多路信息通過A/D轉換器將數(shù)字量傳遞給主控芯片,可實現(xiàn)電力參數(shù)的多通道測量[3]。
3 網(wǎng)絡儀表的軟件層及關鍵技術
儀表軟件層根據(jù)功能可分為現(xiàn)場儀表數(shù)據(jù)采集處理和遠程顯示兩部分?,F(xiàn)場儀表軟件層采用ARM-Linux操作系統(tǒng)下的Boa作為儀表的Web Server,建立基于B/S模式的網(wǎng)絡結構,來實現(xiàn)遠程網(wǎng)絡監(jiān)測功能。
3.1 ARM-Linux操作系統(tǒng)
為了降低成本,選用開放源代碼的ARM-Linux操作系統(tǒng),主要包括交叉編譯" title="交叉編譯">交叉編譯工具鏈的安裝和內(nèi)核的編譯兩部分內(nèi)容。
3.1.1 安裝交叉編譯工具鏈
交叉編譯工具鏈是整個網(wǎng)絡儀表軟件系統(tǒng)開發(fā)和移植的基礎工具,其正確安裝可以加快系統(tǒng)開發(fā)的速度。主要命令如下:
mkdir –p /usr/local/arm
?tar jxvf cross-2.95.3.tar.bz2
?mv 2.95.3 /usr/local/arm
?export PATH=$PATH:/usr/local/arm/2.95.3/bin
3.1.2 編譯ARM-Linux內(nèi)核
???? 內(nèi)核的編譯主要包括配置內(nèi)核、編譯內(nèi)核、產(chǎn)生內(nèi)核映像文件三步[4]。命令如下:
???? ?make menuconfig
???? ?make dep
???? ?make zImage
3.2 Web Server的選擇和移植
因為儀表采集的數(shù)據(jù)需要在遠程計算機上瀏覽,必須移植相應的Web Server才能實現(xiàn)該功能。在ARM-Linux下主要有三個Web Server:Boa、httpd和thttpd。Boa是一個單線程的HTTP服務器,它不同于其他傳統(tǒng)的Web服務器,不為每個連接創(chuàng)建一個進程,只有當CGI程序運行時才創(chuàng)建一個新的進程。另外,Boa體積非常小,通常只有幾十KB,非常適合于嵌入式系統(tǒng)中使用。因此通過移植Boa來實現(xiàn)網(wǎng)絡儀表遠程測控功能[5]。在移植過程中,需要注意以下幾點:
??? (1)交叉編譯工具的選擇
Boa使用configure配置完成后,以arm-linux-gcc作為交叉編譯工具。
??? (2)ServerRoot的定義
在編譯Boa之前,通過修改defines.h文件來指定boa.conf所在的路徑。
??? (3)boa.conf和MIME.types的配置
為使Web Server正常運行,必須對boa.conf和MIME.types文件進行配置,主要是指定相應的端口、服務器名稱、錯誤日志文件存放的目錄(必須為可讀寫)、HTML及CGI文件路徑。
3.3 CGI結合Flash的動態(tài)實現(xiàn)機理
CGI(Common Gateway Interface)的工作流程是瀏覽器將用戶輸入的數(shù)據(jù)傳遞給服務器,Web Server根據(jù)接收到的數(shù)據(jù)設置環(huán)境變量,并新開一子進程來執(zhí)行CGI腳本。CGI腳本從環(huán)境變量中讀取數(shù)據(jù),然后使用STDOUT輸出HTML形式的結果文件,顯示給遠程瀏覽器端用戶[6]。工作流程如圖3所示。
?
Flash是Macromedia公司出品的用于瀏覽器上動態(tài)顯示且可互動的一種Active控件。因為Flash是一種完全由程序來描述且區(qū)別于點陣圖的矢量控件,所以體積特別小,可輕松移植到嵌入式設備中,滿足嵌入式開發(fā)的小型化需求。此外,F(xiàn)lash內(nèi)嵌了一種強大的面向對象編程語言ActionScript,開發(fā)動態(tài)控件變得異常簡單,并可用Loadvariables(url, target, method)方法接收外部變量,實現(xiàn)Flash的無狀態(tài)刷新和無狀態(tài)響應機制[7]。Flash向Boa服務器發(fā)送請求并調用CGI程序源代碼如下:
??? if(strcmp(getenv('REQUEST_METHOD'),'POST'))?
????//getenv()用來取得環(huán)境變量的內(nèi)容
??? {?
? ???? cl = atoi(getenv('CONTENT_LENGTH'));?
???? for(x=0;cl && (!feof(stdin));x++)
??? //feof檢查文件流是否到達文件尾
???? {
???? ??m=x;
???? ??entries[x].val = fmakeword(stdin,'&',&cl);
???? ??plustospace(entries[x].val);
???? ??unescape_url(entries[x].val);
???? ??entries[x].name = makeword(entries[x].
???? ?val,'=');
?? ??? }
????? }
4 遠程儀表數(shù)據(jù)動態(tài)顯示的實現(xiàn)
動態(tài)功能通過Flash每秒自動向Boa服務器發(fā)送請求,CGI程序接受請求后,通過設置ADCCON模數(shù)轉換控制寄存器,啟動轉換器,讀取實時采集的數(shù)據(jù),同時指定相應轉換通道,當A/D轉換結束后,讀取ADCDAT模數(shù)轉換數(shù)據(jù)寄存器的內(nèi)容,然后再將結果以固定的字符串格式發(fā)送給Flash[8]。電力參數(shù)顯示結果如圖4所示。
?
??? 由于Flash的無狀態(tài)刷新和無狀態(tài)響應機制,可以無需刷新瀏覽器就實時讀取儀表數(shù)據(jù),同時借助Flash強大的動態(tài)繪圖功能,可以實時地接受CGI發(fā)送過來的數(shù)據(jù),并轉換成波形動態(tài)描繪出來,創(chuàng)新性地實現(xiàn)了數(shù)據(jù)在瀏覽器上的實時刷新和動態(tài)描繪,達到了網(wǎng)絡儀表數(shù)據(jù)遠程實時監(jiān)測的目的。
基于網(wǎng)絡儀表的電力參數(shù)測量都是以傳統(tǒng)的靜態(tài)HTML頁面刷新機制來實現(xiàn)實時監(jiān)測功能的。這一機制用于顯示需要動態(tài)刷新的數(shù)據(jù)點時存在閃爍缺陷。本文基于動態(tài)Web技術,通過編寫Flash程序來無刷新請求CGI,合理地解決了上述缺陷,節(jié)約了開發(fā)成本,是一種全新的軟件系統(tǒng)構造技術。
參考文獻
[1] ?麥偉明,金肇光.網(wǎng)絡儀表的原理及其在電力變電站的應用[J].電機電器技術,2004,(4):41-43.
[2] ?吳鋒,李成鐵,何風行等.基于Web技術的遠程監(jiān)控系統(tǒng)研究[J]. 儀器儀表學報,2005,26(8):241-243.
[3] ?李正軍,楊洪軍,宋曉慶.新型電力網(wǎng)絡儀表的諧波測量方法與實現(xiàn)[J].電力系統(tǒng)及其自動化學報, 2006,18(3):28-33.
[4] ?李長明. 基于ARM和Linux嵌入式系統(tǒng)的軟件開發(fā).工業(yè)控制計算機,2006,19(3):47-51.
[5]? 駱懿,章堅武.嵌入式Linux Webserver軟件BOA實現(xiàn)與應用[J].杭州電子工業(yè)學院學報,2004,24(1):52-55.
[6] ?王磊, 姚成虎. 如何實際構造嵌入式Web?服務器[J].計算機應用, 2004,24(12):7-9.
[7] ?王均.用Flash實現(xiàn)鐵路列車運行組織的動態(tài)模擬[J].鐵路計算機應用,2005,14(2):37-39.
[8] ?江甫,黃少先.基于計算機與網(wǎng)絡儀表的電力參數(shù)測量系統(tǒng)[J].儀表技術與傳感器,2003,(11):26-27.