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