文獻標識碼: 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)擴展(LAN eXtensions for Instrumentation),,它是繼GPIB,、VXI和PXI等傳統(tǒng)總線技術(shù)之后發(fā)展起來的新一代儀器總線技術(shù)。LXI總線具有無處不在的LAN 接口,、不受距離和節(jié)點數(shù)目的限制,、精確時間同步技術(shù)以及遠程網(wǎng)頁訪問等特點。因此,,在組建網(wǎng)絡(luò)化,、分布式自動化測試系統(tǒng)時,LXI總線擁有傳統(tǒng)測試儀器總線技術(shù)無法比擬的優(yōu)勢[1],。
LXI儀器是指符合LXI標準的新型儀器,。LXI標準中明確提出LXI儀器必須提供能夠被W3C兼容瀏覽器訪問的Web頁面,用戶可以通過瀏覽器對儀器進行遠程訪問,、控制以及故障排查,,不需要傳統(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ù)器對接收到的請求消息進行解析,解析的內(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)用程序進程,,并將所需信息按CGI規(guī)范傳遞給CGI應(yīng)用程序進程,,此后由CGI應(yīng)用程序接管控制。CGI應(yīng)用程序?qū)邮盏降男畔⑦M行解碼,,解碼后調(diào)用設(shè)備驅(qū)動程序?qū)τ布M行控制,,必要時將解碼的參數(shù)利用嵌入式數(shù)據(jù)庫進行保存,同時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ù),,如當前超主時鐘的MAC地址、父時鐘的MAC地址,、時鐘端口狀態(tài),、當前PTP時間、PTP子域,、IEEE 1588協(xié)議版本[4],。
IEEE1588同步參數(shù)配置頁面可對IEEE1588中的參數(shù)進行設(shè)置,如可對PTP子域,、PTP首選主時鐘,、同步時間間隔、PTP時間,、IEEE1588觸發(fā)時間,、IEEE1588觸發(fā)信號類型等進行設(shè)置。
2.2 嵌入式Web服務(wù)器的移植
嵌入式設(shè)備常用的Web服務(wù)器有Lighttpd,、thttpd,、shttpd、apache,、boa[5],。本設(shè)計采用boa作為嵌入式Web服務(wù)器,它具有小巧,、高效,、支持CGI技術(shù)的特點,。
boa服務(wù)器是開源的,要將其用于Linux系統(tǒng)需要進行移植,,移植的步驟如下:
(1)從官方網(wǎng)站www.boa.org下載boa發(fā)布版源碼,,本設(shè)計選擇版本為boa-0.94.13,在命令終端執(zhí)行解壓命令,,將其解壓到PC linux虛擬機下,。
(2)進入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命令進行編譯,然后把編譯得到的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è)置部分,,其他部分采用默認設(shè)置,。設(shè)置完成后,保存退出,,然后,,拷貝PC機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)用程序)進行通信的橋梁,,如圖3所示。
IEEE 1588同步配置頁面利用嵌入式數(shù)據(jù)庫實現(xiàn)兩個方面的作用:一方面是對一些IEEE 1588配置參數(shù)進行存儲,,PTP程序可以通過數(shù)據(jù)庫API訪問這些參數(shù);另一方面是PTP程序在運行過程中可以動態(tài)存儲重要的狀態(tài)信息,,客戶端可以通過調(diào)用CGI應(yīng)用程序?qū)崿F(xiàn)對這些信息的訪問,。本設(shè)計選用在嵌入式系統(tǒng)中應(yīng)用最廣的SQLite進行移植。
移植嵌入式數(shù)據(jù)庫SQLite到Linux系統(tǒng)中的步驟如下:
(1)從官方網(wǎng)站www.sqlite.org下載SQLite數(shù)據(jù)庫源碼壓縮包,,本設(shè)計選擇的版本是sqlite-3.5.9,。
(2)壓縮包將其解壓到PC虛擬機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ù)器無法支持功能強大的腳本語言實現(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ù)器之間的接口標準,是在CGI程序和Web服務(wù)器之間傳遞信息的規(guī)程,。例如,,可以通過編寫CGI程序訪問數(shù)據(jù)庫以及通過設(shè)備驅(qū)動接口訪問硬件等[6]。
CGI程序可以用任何腳本語言或者獨立編程語言實現(xiàn),,只要該語言可以在系統(tǒng)上運行,。傳統(tǒng)的使用CGI實現(xiàn)動態(tài)網(wǎng)頁的方法步驟如下:
(1)瀏覽器通過表單把請求數(shù)據(jù)發(fā)送到Web服務(wù)器。
(2)CGI程序從環(huán)境變量或者標準輸入中提取表單數(shù)據(jù),,并進行相應(yīng)的處理,。
(3)用printf函數(shù)輸出整個HTML頁面代碼,,將結(jié)果返回給瀏覽器。
這種方法雖然可行,,但是用CGI程序?qū)⒄麄€HTML靜態(tài)頁面全部通過printf輸出,,會使得CGI代碼混亂不堪,并且難以實現(xiàn)復(fù)雜的HTML頁面,。另外,,還有一個缺點就是接到每一次請求都會將整個HTML頁面重傳一遍,增加了服務(wù)器的負擔,。在已經(jīng)打開一個網(wǎng)頁進行操作的過程中,,每次請求往往只需要更新頁面中少部分數(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頁面進行隱藏,。
(4)使用JavaScript腳本語言從CGI響應(yīng)的HTML頁面中取出服務(wù)器返回的數(shù)據(jù),并將其顯示在主HTML頁面的指定位置,。
3 LXI儀器Web接口功能驗證
為了對LXI儀器Web接口功能進行測試,,搭建圖4所示的測試平臺。其中,,美國安捷倫公司的觸發(fā)盒E5818A與待測LXI儀器通過交換機相連,,同時,PC也通過交換機接入到局域網(wǎng)中,PC可通過網(wǎng)頁訪問對待測LXI儀器進行控制,。將觸發(fā)盒和待測LXI儀器的觸發(fā)輸出口分別接到示波器的兩個通道,用于測量同步誤差[7],。
3.1 IEEE1588基本信息頁面的驗證
首先,,通過交換機將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ù)配置頁面的驗證
通過交換機將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ù)進行設(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ù)器的負擔,。最終,通過搭建測試平臺,,驗證了所提出的方法切實可行,,為LXI儀器的Web頁面設(shè)計提供了參考,。
參考文獻
[1] 王彪.LXI關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學,2009.
[2] LXI Consortium,,Inc.LXI Consortium.LXI standard revision1.3[S].2008.
[3] 覃斌毅,,陳鐵軍,邱杰,,等.基于IEEE1588協(xié)議時鐘同步精度影響因素的研究[J].計算機測量與控制,,2014,22(10):3312-3315.
[4] 于志成.LXI關(guān)鍵技術(shù)-IEEE1588協(xié)議的研究與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學,,2012.
[5] 胡聰,,高明,牛軍浩.LXI標準Web接口儀器控制研究[J].計算機測量與控制,,2011,,19(6):1354-1356.
[6] 謝仕義,徐兵.嵌入式Web服務(wù)器的設(shè)計及其CGI 實現(xiàn)[J].計算機工程與設(shè)計,,2007,,28(7):1598-1600.
[7] 朱旺純,覃斌毅,,王玉娟.基于IEEE1588協(xié)議同步技術(shù)的研究[J].計算機測量與控制,,2014,33(7):98-101.