文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.02.013
中文引用格式: 陳娟,李元,李萬國. 基于B/S模式的嵌入式系統測試方法與實現[J].電子技術應用,2016,42(2):50-52,56.
英文引用格式: Chen Juan,Li Yuan,Li Wanguo. The measurement method and implementation of embedded system based on B/S mode[J].Application of Electronic Technique,2016,42(2):50-52,56.
0 引言
伴隨數字信息技術高速發展,嵌入式系統設備數量已經遠超過通用計算機,后PC時代已經到來。嵌入式系統設備廣泛服務于網絡通信、消費電子、工業控制、測控等多個領域。
嵌入式技術在測試領域應用日益成熟,但由于其具體應用場合不同,難以形成統一的軟件開發框架。呂國勇、史祥龍等人分析了Ajax異步交互、CGI(Comment Gateway Interface)通用網關在嵌入式系統中的應用[1-2],從而減輕了服務器的負擔,提高了客戶端與服務器之間的交互速度。劉利枚、周鮮成等人對嵌入式軟件測試系統的設計與實現進行了探索,提出了一種實用的嵌入式軟件動態測試系統的結構框架[3]。蔡勇、王勇等人基于嵌入式數據庫SQLite3.0技術設計了測控系統,分析了嵌入式數據庫的特點和關鍵技術,著重研究了應用方式和移植方法[4]。張振、王小寧等人對嵌入式Web服務器Boa的移植與應用進行了研究,并實現了其在控制領域的遠程管理[5]。本文在前人的技術基礎上進行綜合、擴展,提出了一套較為成熟的基于B/S測控模式的嵌入式軟件架構,并對其中軟件的實現及移植過程進行了較為全面的探討和總結,最終提供一套具體可行的實現方案。
1 整體結構
系統采用B/S軟件架構模式,Server端為嵌入式測試系統,具備Web服務和數據庫存儲能力,Browser端為符合W3C的標準瀏覽器。
用戶通過Web頁面登錄至服務器后發出配置、測試等控制命令;Server響應用戶的請求,調用對應的CGI服務程序,并采用Ajax異步數據傳輸的方式將測試結果動態返回至用戶Web頁,前端采用波形曲線、指針等多種形式展現數據。
1.1 硬件結構
系統硬件結構分為4個部分:嵌入式測試系統、交叉編譯系統、被測對象配電器和時鐘同步系統。嵌入式測試系統采用ARM11-S3C6410處理器,操作系統內核為Linux2.6.3.8。交叉編譯系統與嵌入式測試系統通過NFS(Network File System)網絡文件系統、TFTP(Trivial File Transfer Protocol)文件傳輸協議、串口通信等協議來進行系統調試、程序傳輸以及與下位機進行通信。嵌入式測試系統繼電器模塊、AD轉換模塊與被測對象配電器通過兩條通信電纜相連,系統產生激勵并讀取配電器返回的測試結果。嵌入式測試系統通過NTP協議與外部的時鐘服務器同步,可為今后擴展為分布式測試系統提供統一時鐘校對服務。系統硬件結構如圖1所示。
1.2 軟件結構
測試系統軟件采用B/S架構模式,軟件分為3層結構進行設計。整個結構分為上層、中間層和底層3部分:上層為用戶接口界面,負責接受用戶指令、顯示動態數據等;中間層由Web服務器和數據庫構成,負責提供Web服務、數據存儲等功能;底層由硬件驅動程序、測試應用程序構成,提供底層函數調用。
2 功能及實現
根據上文所述硬件結構、軟件架構,設計并實現測試系統的各部分功能。以下就本設計的關鍵模塊進行詳細說明。系統功能模塊設計如圖2。
2.1 用戶界面設計
用戶界面設計主要分為4個功能模塊:用戶身份驗證模塊、測試設備基本信息瀏覽與配置模塊、動態數據查看模塊和歷史數據瀏覽模塊。
用戶身份驗證模塊加強了系統安全性,分為普通用戶和管理員兩種權限模式。基本信息瀏覽模塊與配置模塊將調用底層CGI程序獲取設備基本信息,如服務器IP地址、客戶端IP地址、主機名稱、內核版本等信息;動態數據顯示模塊采用開源的Flot Javascript插件,將數據以數字、儀表、曲線多種方式來呈現。前臺與后臺數據交換采用了Ajax異步通信技術來實現動態更新頁面;歷史數據查看模塊調用后臺數據庫歷史數據后采用Ajax異步通信更新前端頁面,并自動生成CVS格式的歷史數據文件,用戶下載后可用于數據分析。
2.2 Web服務器、數據庫設計
為構建B/S模式測試系統,系統必須具備提供Web服務能力和實驗數據管理能力。本節詳細介紹服務器和數據庫的實現過程。
2.2.1 嵌入式Web服務器設計
目前在嵌入式設備中常用的Web服務器有Boa、thttpd、Mini_httpd等,同等硬件條件下,Boa顯示出更快的處理速度,內存需求小,能耗低,支持CGI腳本程序。
主要移植步驟如下:(1)編譯源碼,生成ARM架構下可執行文件Boa。(2)修改服務器配置文件相關參數:DocumentRoot(測試頁面文檔路徑)、ScriptAlias(測試CGI腳本路徑)。
圖3為服務器文件部署目錄,在boa.conf中更改參數如下:DocumentRoot/Testwww;ScriptAlias/cgi-bin/ /Testwww/CGIScripts/。Pages目錄主要部署HTML網頁文件、JavaScript腳本文件;CGIScripts目錄部署CGI腳本程序,包括數據庫查詢腳本、數據測試腳本、獲取設備基本信息腳本等;DataTbls目錄主要存儲數據庫文件,包括歷史數據表、用戶密碼數據表、設備基本信息表。分類目錄設計更利于文檔的編輯和管理。
2.2.2 嵌入式數據庫設計
嵌入式設備中常用的數據庫有mSQL、SQLiteDB等。經對比選擇開源數據庫SQLiteDB,它支持數據庫大小為2 TB,足夠小,全部代碼250 KB,比目前流行的大多數數據庫對數據的操作要快。
移植步驟如下:(1)編譯源碼包生成可執行文件目錄。(2)將編譯生成的bin、include、lib目錄通過NFS文件系統復制至對應嵌入式文件系統下。
根據需求分析設計數據庫實體對象,分為用戶實體、設備基本信息實體、歷史數據測試信息實體,最終設計對應的數據表。圖4給出用戶實體E-R圖。
2.3 CGI、Ajax異步通信設計
為了加強系統頁面與用戶的動態交互性,本系統采用CGI與Ajax的解決方案。使用CGI技術在服務器端發布動態網頁,與Ajax的XMLHttpRequest組件進行數據交互,實現了動態Web功能,使網頁局部自動刷新,無須手動更新網頁。這是本系統前臺與后臺數據通信的主要方式。
工作流程如下:(1)用戶通過Web瀏覽器訪問嵌入式服務器中部署好的測試頁面,服務器響應瀏覽器請求,返回內嵌有JavaScript腳本的Web頁面。(2)瀏覽器解析返回頁面代碼并顯示,執行內嵌的JavaScript腳本程序。(3)用戶在瀏覽器輸入的數據首先由JavaScript程序預處理,然后通過XMLHttp Request對象向服務器發出異步請求。服務器解析請求參數后調用底層相應驅動程序進行測試或存取數據庫,并將獲取的數據以XML格式返回給瀏覽器。(4)瀏覽器通過responseXML方法獲得數據,然后通過DOM文檔對象模型來更新用戶界面。
2.4 測試系統時鐘同步設計
以上討論的是單測試系統組網情況,而B/S架構可搭建分布式測試系統。在分布式系統中, 常常需要一個全局時間, 用來確定系統中各種事件發生的先后、協調各種消息的傳輸、控制和監視系統的狀態,這就需要對系統中各個部件進行時鐘同步,保障局部時間統一。
2.4.1 網絡時間同步協議
常用的網絡時間同步協議主要有NTP(Net Work Protocol)、SNTP(Simple Net Work Protocol)以及PTP(Precision Time Protocol)等,表1為三者綜合比較。
考慮協議的同步時間精度及其實現的難易度,決定采用NTP作為測試網絡中的時鐘同步協議。NTP時間同步模式分為4種:客戶端/服務器模式、對等體模式、廣播模式、組播模式。系統采用客戶端/服務器模式。
2.4.2 設計方案
首先構建測試網絡,采用一臺Windows7操作系統的主機作為時鐘源服務器,兩臺嵌入式測試設備作為被同步對象。3個節點由路由器連接,構成局域測試網絡。
其次配置時鐘源服務器、移植NTP協議至嵌入式測試設備。(1)對于Windows時鐘服務器只需更改注冊表相應參數,使其對外提供NTP服務。(2)嵌入式測試系統將作為NTP協議的Client,首先需要移植NTP協議。其次在配置文件ntp.conf中添加語句server 192.168.1.131,根據具體IP參數設置時鐘服務器的IP地址。(3)將嵌入式系統ntpd設置為開機自啟動服務,在/etc/init.d/rcS添加如下語句:ntpdate 192.168.1.131;/etc/init.d/ntpd。首先ntpdate將行一次時間校正,以防止服務器和客戶端時間誤差太大導致ntpd更新失敗,然后啟動ntpd服務,該服務每隔64 s會自動更新一次時間,在局域網條件下時鐘同步誤差范圍為1~10 ms之間。
3 實驗結果及分析
使用瀏覽器登錄B/S模式嵌入式測試系統。圖6為測試數據實時顯示頁面,左側為動態數字顯示,并且對異常數據用顏色標識提示,右側為儀表顯示方式,以更加直觀的方式查看數據。圖7為波形圖表顯示頁面,直觀顯示數據隨時間變化趨勢。
4 結束語
本文通過基于嵌入式B/S模式測試系統的構建以及基于ARM平臺的測試程序設計,對其中的服務器搭建、數據庫配置、前后臺數據傳輸方式以及未來多測試子系統組網的時鐘同步問題進行了詳細的闡述。從底層數據采集到數據存儲以及上層數據顯示都較好地完成了配電器測試任務,最終提出了一套可行的構建嵌入式測試系統方案。本文研究對未來實現B/S模式的分布式遠程測控系統打下了良好基礎,具有一定的參考價值。
參考文獻
[1] 呂國勇,史祥龍.基于嵌入式Linux和Ajax技術的Web異步交互設計[J].計算機應用,2013,33:247-251.
[2] 王寶忠,馬成.基于CGI技術的嵌入式動態Web的研究與實現[J].電子設計工程,2012,20(18):161-163.
[3] 劉利枚,周鮮成,石彪.嵌入式軟件測試系統的設計與實現[J].國外電子測量技術,2008,27(1):59-61.
[4] 蔡勇,王勇.嵌入式數據庫SQLite在測控系統設計中的應用[J].電子測試,2011(10):89-93.
[5] 張振,王曉寧,張元.嵌入式Web服務器移植與測試[J].電子設計工程,2010,18(6):1-3.