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