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