文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.03.021
中文引用格式: 覃斌毅,邱杰,鄭金存,等. 基于LXI總線的Web關(guān)鍵技術(shù)研究與實現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(3):74-77.
英文引用格式: Qin Binyi,Qiu Jie,Zheng Jincun,et al. Research and implementation of Web key technologies based on LXI bus[J].Application of Electronic Technique,2016,42(3):74-77.
0 引言
LXI的全稱是儀器在局域網(wǎng)擴(kuò)展(LAN eXtensions for Instrumentation),它是繼GPIB、VXI和PXI等傳統(tǒng)總線技術(shù)之后發(fā)展起來的新一代儀器總線技術(shù)。LXI總線具有無處不在的LAN 接口、不受距離和節(jié)點(diǎn)數(shù)目的限制、精確時間同步技術(shù)以及遠(yuǎn)程網(wǎng)頁訪問等特點(diǎn)。因此,在組建網(wǎng)絡(luò)化、分布式自動化測試系統(tǒng)時,LXI總線擁有傳統(tǒng)測試儀器總線技術(shù)無法比擬的優(yōu)勢[1]。
LXI儀器是指符合LXI標(biāo)準(zhǔn)的新型儀器。LXI標(biāo)準(zhǔn)中明確提出LXI儀器必須提供能夠被W3C兼容瀏覽器訪問的Web頁面,用戶可以通過瀏覽器對儀器進(jìn)行遠(yuǎn)程訪問、控制以及故障排查,不需要傳統(tǒng)儀器的前面板即可實現(xiàn)單臺儀器的所有功能。其中,LXI總線B類儀器需要提供的基本W(wǎng)eb頁面主要包括:主頁面、LAN配置頁面、IEEE 1588同步配置頁面、儀器功能頁面以及事件日志訪問頁面[2]。因此,Web頁面的實現(xiàn)是LXI總線技術(shù)中的一個關(guān)鍵。本文以LXI總線中IEEE1588同步配置頁面為例,提出了一種實現(xiàn)LXI儀器Web頁面的方法。
1 LXI儀器Web接口硬件設(shè)計
為了實現(xiàn)LXI儀器的Web接口,本設(shè)計使用ARM+DM9000+DP83640的架構(gòu),其中,選用三星公司的S3C2440處理器為主控制器,DM9000為MAC層芯片,DP83640為物理層芯片[3]。LXI儀器Web接口硬件系統(tǒng)框圖如圖1所示。
2 LXI儀器Web接口軟件設(shè)計
本設(shè)計操作系統(tǒng)選用Linux系統(tǒng),在系統(tǒng)中搭建嵌入式服務(wù)器,結(jié)合HTML、CGI以及SQLite數(shù)據(jù)庫技術(shù),實現(xiàn)了IEEE1588同步配置頁面。整個LXI 儀器Web接口軟件系統(tǒng)如圖2所示。
系統(tǒng)工作過程為:用戶在客戶端發(fā)送HTTP請求消息,boa服務(wù)器對接收到的請求消息進(jìn)行解析,解析的內(nèi)容包括:讀取請求URL、區(qū)分客戶端請求的資源是靜態(tài)頁面還是CGI應(yīng)用程序。若用戶請求的是靜態(tài)頁面,則服務(wù)器讀取相應(yīng)的HTML的內(nèi)容,并將其作為HTTP響應(yīng)消息中的實體返回給客戶端瀏覽器;若客戶端請求的是CGI應(yīng)用程序,則服務(wù)器將創(chuàng)建相應(yīng)的CGI應(yīng)用程序進(jìn)程,并將所需信息按CGI規(guī)范傳遞給CGI應(yīng)用程序進(jìn)程,此后由CGI應(yīng)用程序接管控制。CGI應(yīng)用程序?qū)邮盏降男畔⑦M(jìn)行解碼,解碼后調(diào)用設(shè)備驅(qū)動程序?qū)τ布M(jìn)行控制,必要時將解碼的參數(shù)利用嵌入式數(shù)據(jù)庫進(jìn)行保存,同時CGI將結(jié)果在客戶端瀏覽器上顯示。
2.1 Web頁面構(gòu)成
IEEE1588同步配置頁面是LXI總線B類儀器Web系統(tǒng)中的重要組成部分,用于對IEEE1588時鐘同步狀態(tài)監(jiān)控和對輸出觸發(fā)信號動態(tài)配置。它由2個Web網(wǎng)頁構(gòu)成:IEEE1588基本信息頁面和IEEE1588同步參數(shù)配置頁面。
IEEE1588基本信息頁面用于顯示IEEE1588中的參數(shù),如當(dāng)前超主時鐘的MAC地址、父時鐘的MAC地址、時鐘端口狀態(tài)、當(dāng)前PTP時間、PTP子域、IEEE 1588協(xié)議版本[4]。
IEEE1588同步參數(shù)配置頁面可對IEEE1588中的參數(shù)進(jìn)行設(shè)置,如可對PTP子域、PTP首選主時鐘、同步時間間隔、PTP時間、IEEE1588觸發(fā)時間、IEEE1588觸發(fā)信號類型等進(jìn)行設(shè)置。
2.2 嵌入式Web服務(wù)器的移植
嵌入式設(shè)備常用的Web服務(wù)器有Lighttpd、thttpd、shttpd、apache、boa[5]。本設(shè)計采用boa作為嵌入式Web服務(wù)器,它具有小巧、高效、支持CGI技術(shù)的特點(diǎn)。
boa服務(wù)器是開源的,要將其用于Linux系統(tǒng)需要進(jìn)行移植,移植的步驟如下:
(1)從官方網(wǎng)站www.boa.org下載boa發(fā)布版源碼,本設(shè)計選擇版本為boa-0.94.13,在命令終端執(zhí)行解壓命令,將其解壓到PC linux虛擬機(jī)下。
(2)進(jìn)入src目錄下執(zhí)行命令./configure,產(chǎn)生一個 make-file文件。修改makefile文件:將CC=gcc改為CC=arm-linux-gcc,將CPP=gcc-E改為CPP=arm-linux-g++ -E。
(3)修改src目錄下compat.h文件,找到頭文件中的#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo)(foo)->tm_gmtoff。
(4)執(zhí)行make命令進(jìn)行編譯,然后把編譯得到的boa可執(zhí)行文件拷貝到嵌入式設(shè)備文件系統(tǒng)的“sbin/”目錄下;把“boa-0.94.13/”目錄下的boa.conf文件拷貝到文件系統(tǒng)的“etc/boa/”目錄下。
(5)修改boa配置文件boa.conf,主要修改內(nèi)容有:
Port 80 //端口
User root
Group root
ServerName GUET //服務(wù)器名
DocumentRoot /www //存放html文檔主目錄
DirectoryIndex index.html
MimeTypes/etc/mime.types //指明文件位置
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/sbin:/sbin
ScriptAlias /cgi-bin/ /www/cgi-bin/
以上為關(guān)鍵設(shè)置部分,其他部分采用默認(rèn)設(shè)置。設(shè)置完成后,保存退出,然后,拷貝PC機(jī)Linux系統(tǒng)etc/目錄下的mime.types到文件系統(tǒng)etc/目錄下。至此,boa服務(wù)器在Linux系統(tǒng)上的移植完成。最后,將HTML文件放在文件系統(tǒng)的/www文件夾中,將CGI腳本程序放在/www/cgi-bin文件夾中即可以實現(xiàn)網(wǎng)絡(luò)訪問。
2.3 嵌入式數(shù)據(jù)庫的移植
數(shù)據(jù)庫主要用于數(shù)據(jù)存儲和查詢,在本設(shè)計中,嵌入式數(shù)據(jù)庫是客戶端瀏覽器與PTP程序(PTP程序是指實現(xiàn)IEEE1588協(xié)議的應(yīng)用程序)進(jìn)行通信的橋梁,如圖3所示。
IEEE 1588同步配置頁面利用嵌入式數(shù)據(jù)庫實現(xiàn)兩個方面的作用:一方面是對一些IEEE 1588配置參數(shù)進(jìn)行存儲,PTP程序可以通過數(shù)據(jù)庫API訪問這些參數(shù);另一方面是PTP程序在運(yùn)行過程中可以動態(tài)存儲重要的狀態(tài)信息,客戶端可以通過調(diào)用CGI應(yīng)用程序?qū)崿F(xiàn)對這些信息的訪問。本設(shè)計選用在嵌入式系統(tǒng)中應(yīng)用最廣的SQLite進(jìn)行移植。
移植嵌入式數(shù)據(jù)庫SQLite到Linux系統(tǒng)中的步驟如下:
(1)從官方網(wǎng)站www.sqlite.org下載SQLite數(shù)據(jù)庫源碼壓縮包,本設(shè)計選擇的版本是sqlite-3.5.9。
(2)壓縮包將其解壓到PC虛擬機(jī)Linux系統(tǒng)的opt目錄中,會生成一個名為sqlite-3.5.9的文件夾。
(3)在sqlite-3.5.9根目錄下新建目錄_install。
(4)配置SQLite,生成Makefile文件。
(5)執(zhí)行make和make install命令,編譯安裝結(jié)束后,在/_install目錄下生成bin、lib、include目錄。
(6)把bin目錄下的sqlite3和sqlite_test文件拷貝到嵌入式Linux文件系統(tǒng)中的bin目錄下,把lib目錄下的庫文件拷貝到文件系統(tǒng)的lib目錄下,這樣在嵌入式Linux中就可以使用SQLite數(shù)據(jù)庫了。
(7)把include目錄下面的數(shù)據(jù)庫頭文件拷貝到交叉編譯器的include目錄下,把lib目錄下的庫文件拷貝到交叉編譯器的lib目錄下,讓交叉編譯器支持sqlite3數(shù)據(jù)庫。
為實現(xiàn)相關(guān)的數(shù)據(jù)存儲,建立了一個數(shù)據(jù)庫文件config.db,存放在文件系統(tǒng)的mnt文件夾中。使用“create table”語句創(chuàng)建2個用于存放1588參數(shù)信息的表:config1588和parameters。其中,config1588存放PTP子域、首選主時鐘、同步間隔等;parameters存放超主時鐘的MAC地址、父時鐘的MAC地址、端口狀態(tài)等。
2.4 CGI動態(tài)網(wǎng)頁的實現(xiàn)
嵌入式系統(tǒng)由于自身軟硬件資源的限制,Web服務(wù)器無法支持功能強(qiáng)大的腳本語言實現(xiàn)動態(tài)網(wǎng)頁。因此,在嵌入式Web服務(wù)器中通常使用CGI實現(xiàn)動態(tài)網(wǎng)頁。
CGI(公共網(wǎng)關(guān)接口)是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程。例如,可以通過編寫CGI程序訪問數(shù)據(jù)庫以及通過設(shè)備驅(qū)動接口訪問硬件等[6]。
CGI程序可以用任何腳本語言或者獨(dú)立編程語言實現(xiàn),只要該語言可以在系統(tǒng)上運(yùn)行。傳統(tǒng)的使用CGI實現(xiàn)動態(tài)網(wǎng)頁的方法步驟如下:
(1)瀏覽器通過表單把請求數(shù)據(jù)發(fā)送到Web服務(wù)器。
(2)CGI程序從環(huán)境變量或者標(biāo)準(zhǔn)輸入中提取表單數(shù)據(jù),并進(jìn)行相應(yīng)的處理。
(3)用printf函數(shù)輸出整個HTML頁面代碼,將結(jié)果返回給瀏覽器。
這種方法雖然可行,但是用CGI程序?qū)⒄麄€HTML靜態(tài)頁面全部通過printf輸出,會使得CGI代碼混亂不堪,并且難以實現(xiàn)復(fù)雜的HTML頁面。另外,還有一個缺點(diǎn)就是接到每一次請求都會將整個HTML頁面重傳一遍,增加了服務(wù)器的負(fù)擔(dān)。在已經(jīng)打開一個網(wǎng)頁進(jìn)行操作的過程中,每次請求往往只需要更新頁面中少部分?jǐn)?shù)據(jù)即可,沒有必要重傳整個頁面。
為解決上述問題,本設(shè)計參照了AJAX技術(shù),使用局部動態(tài)網(wǎng)頁刷新的方法實現(xiàn)動態(tài)網(wǎng)頁。AJAX主要由JavaScript、XMLHTTPREQUEST、XML三部分組成。其中JavaScript用于頁面數(shù)據(jù)傳遞、刷新局部頁面;XMLHTTPREQUEST用于向服務(wù)器提交請求,與服務(wù)器響應(yīng);XML是服務(wù)器返回數(shù)據(jù)的格式。由于boa服務(wù)器不支持XMLHTTPRE-QUEST發(fā)出的請求,因此仍使用CGI實現(xiàn)請求的提交與響應(yīng),數(shù)據(jù)格式可以任意定義。具體實現(xiàn)方法如下:
(1)參照大型服務(wù)器Web動態(tài)網(wǎng)頁的實現(xiàn)方法,先建立一個HTML靜態(tài)網(wǎng)頁框架。
(2)對每一個表單請求創(chuàng)建一個CGI響應(yīng)程序,CGI只對需要返回的數(shù)據(jù)用printf函數(shù)輸出。
(3)采用HTML內(nèi)聯(lián)框架技術(shù)將CGI響應(yīng)的HTML頁面進(jìn)行隱藏。
(4)使用JavaScript腳本語言從CGI響應(yīng)的HTML頁面中取出服務(wù)器返回的數(shù)據(jù),并將其顯示在主HTML頁面的指定位置。
3 LXI儀器Web接口功能驗證
為了對LXI儀器Web接口功能進(jìn)行測試,搭建圖4所示的測試平臺。其中,美國安捷倫公司的觸發(fā)盒E5818A與待測LXI儀器通過交換機(jī)相連,同時,PC也通過交換機(jī)接入到局域網(wǎng)中,PC可通過網(wǎng)頁訪問對待測LXI儀器進(jìn)行控制。將觸發(fā)盒和待測LXI儀器的觸發(fā)輸出口分別接到示波器的兩個通道,用于測量同步誤差[7]。
3.1 IEEE1588基本信息頁面的驗證
首先,通過交換機(jī)將PC與LXI測試儀器相連,設(shè)置PC和LXI儀器在同一局域網(wǎng)內(nèi),然后在瀏覽器中輸入網(wǎng)址:http://192.168.1.6/ieee1588ViewConfiguration.html,打開網(wǎng)頁,界面如圖5所示。
經(jīng)驗證,PC可通過瀏覽器訪問嵌入式系統(tǒng)中的IEEE1588基本信息頁面,在頁面正確顯示了IEEE1588的相關(guān)參數(shù)。
3.2 IEEE1588同步參數(shù)配置頁面的驗證
通過交換機(jī)將PC與LXI測試儀器相連,設(shè)置PC和LXI儀器在同一局域網(wǎng)內(nèi),然后在瀏覽器器中輸入網(wǎng)址:http://192.168.1.6/ieee1588ModifyConfiguration.html,界面如圖6所示。
經(jīng)驗證,PC可通過瀏覽器訪問嵌入式系統(tǒng)中的IEEE1588同步參數(shù)配置頁面。
通過對觸發(fā)時間、觸發(fā)周期、觸發(fā)源等參數(shù)進(jìn)行設(shè)置,可在指定的時刻輸出觸發(fā)信號。為了驗證同步觸發(fā)功能,分別通過網(wǎng)頁設(shè)置E5818A 和待測LXI儀器在同一時刻觸發(fā)輸出脈沖信號,用示波器檢測這兩路輸出信號。圖7是在指定時刻下,示波器測得的同步觸發(fā)的信號,從圖7可得同步誤差時間是258 ns。
4 結(jié)束語
本設(shè)計使用ARM+DM9000+DP83640的架構(gòu)實現(xiàn)了LXI儀器Web硬件接口;將boa服務(wù)器和sQList數(shù)據(jù)庫、Linux操作系統(tǒng)、HTML、CGI 等技術(shù)結(jié)合起來,實現(xiàn)了LXI儀器Web軟件接口。在Web軟件接口實現(xiàn)的過程中,使用了CGI局部刷新技術(shù)代替?zhèn)鹘y(tǒng)的CGI全局刷新,減輕了Web服務(wù)器的負(fù)擔(dān)。最終,通過搭建測試平臺,驗證了所提出的方法切實可行,為LXI儀器的Web頁面設(shè)計提供了參考。
參考文獻(xiàn)
[1] 王彪.LXI關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.
[2] LXI Consortium,Inc.LXI Consortium.LXI standard revision1.3[S].2008.
[3] 覃斌毅,陳鐵軍,邱杰,等.基于IEEE1588協(xié)議時鐘同步精度影響因素的研究[J].計算機(jī)測量與控制,2014,22(10):3312-3315.
[4] 于志成.LXI關(guān)鍵技術(shù)-IEEE1588協(xié)議的研究與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2012.
[5] 胡聰,高明,牛軍浩.LXI標(biāo)準(zhǔn)Web接口儀器控制研究[J].計算機(jī)測量與控制,2011,19(6):1354-1356.
[6] 謝仕義,徐兵.嵌入式Web服務(wù)器的設(shè)計及其CGI 實現(xiàn)[J].計算機(jī)工程與設(shè)計,2007,28(7):1598-1600.
[7] 朱旺純,覃斌毅,王玉娟.基于IEEE1588協(xié)議同步技術(shù)的研究[J].計算機(jī)測量與控制,2014,33(7):98-101.