西南科技大學信息工程學院 鄧輕松
本文利用基于B/S架構的嵌入式Web服務器,以ARM9-S3C2440處理器為硬件核心,以嵌入式Linux系統為軟件平臺,研究并設計了一個嵌入式Web監測系統,通過Int er net接入到網絡,提供一種低成本、簡單且有效的對遠端設備進行監控方案。
本文設計一種低成本的嵌入式Web監控系統主要是通過嵌入式終端上的傳感器對模擬信號實時采集,然后再通過AD轉換成為數字信號,最后系統將轉換后的數據保存到嵌入式系統的數據庫中。用戶可以通過Web瀏覽器實時遠程查看當前采集到的信號值,也可以查看以往采集的歷史數據。
本系統使用的硬件平臺功能框架圖如圖1所示,該平臺使用三星公司S3C2440處理器,該處理器基于ARM920T內核,32位內部總線架構,并且片上資源非常豐富,而且還對硬件系統的配置進行了相關的擴展,包括1塊256MB的NAND Fl ash 和 2塊32MB的DDR SDRAM,AD由S3C2440芯片引出,3個電位器控制輸入、4個USB接口、3個RS232串口用于調試以及與PC機通信、1個DM9000AE 10/100M自適應Et her Net網卡、1個25針的板載JTAG,直接支持下載與仿真等等,其硬件如圖1所示。
本次設計采用嵌入式系統中常用的Boa Web服務器。它是一款進程的、迭代的HTTP服務器,即同一時刻只能響應一個用戶。這也是和Apache等并發web服務器的主要差別,嵌入式系統與傳統PC服務器相比,其本身資源有限,但這對于滿足嵌入式設備場合完全足夠。通過編譯后的boa服務器代碼大約只有60kB的可執行代碼,這對資源緊缺的嵌入式系統來說,無疑是非常實用。而且boa還支持CGI,只為CGI程序f or k一個新的進程來響應用戶的要求,這在最大程度上節省了系統資源,對嵌入式系統來說是至關重要的。本次設計側重介紹boa服務器的移植,故對boa服務器工作原理以及流程不做過多介紹。

圖1 系統硬件結構框圖
(1)下載boa-0.94.13.t ar.gz源碼包并解壓。
# t ar –xvzf boa-0.94.13.t ar.gz
(2)進入sr c目錄并運行./conf igur e腳本,然后修改生成的Makef il e文件。
# ./conf igur e, 生成Makef il e文件。
如下修改Makef il e文件:
CC=gcc 修改為 CC=ar m-l inux-gcc
CPP=gcc –E 修改為 CPP=ar m-l inux-gcc –E
修改sr c/compat.h文件內容如下:
#def ine TIMEZONE_OFFSET(f oo) f oo##->t m_gmtof f修改為
#def ine TIMEZONE_OFFSET(f oo) f oo->t m_gmt of f
保存修改后的Makef il e并運行make命令進行編譯,編譯成功后,在sr c目錄下得到可執行文件boa,將其下載到開發板的/bin目錄中。
根據系統時間需求,修改boa的配置文件boa.conf。修改完成后將其下載到開發板的/etc/boa目錄中。
# vim boa.conf
(1)Gr oup nogr oup修改為 Gr oup 0,設置為只有root 才可以執行boa 服務器;
(2)Script Al ias /cgi-bin / /usr/l ib/l ib/cgi-bin/修改為 Script Al ias /cgi-bin/ /var/www/cgi-bin/
(3)#Ser ver Name www.your.or g.her e 修改為 開發板的IP地址即可。
其他設置保持默認設置不變即可,最后將編譯后的可執行文件boa下載到開發板的/bin/目錄下并運行boa服務器,通過PC機端的瀏覽器訪問,若能夠訪問到boa靜態ht ml網頁和測試cgi程序,表明boa web服務器移植成功。
因為既要實現能夠讓用戶查詢監控系統的歷史數據,故必須對采集到的數據進行保存,故需要在嵌入式系統中運行數據庫系統。SQLit e數據庫一款輕量級、跨平臺的關系數據庫,支持絕大部分SQL92標準(如視圖、事務、觸發器等)弱類型數據庫存儲,代碼開源。SQl it e不是一個與其他應用程序通信的獨立進程,而是與其他應用程序集成于一體,共同使用相同的進程空間,所以主要的通信協議是在編程語言內直接調用其提供的API。SQLit e運行開銷很少,基本上是為嵌入式系統量身定做的一款數據庫。SQLit e數據庫移植過程如下:
(1)下載sql it e-3.6.17.t ar.gz源碼包并解壓。
# t ar –xzvf sql it e-3.6.17.t ar.gz
(2)在/usr/l ocal/目錄下創建目錄sql it e_ar m。
# mkdir /usr/l ocal/sql it e_ar m
(3)進入sql it e-3.6.17目錄運行conf igur e腳本并進行配置。
# ./conf igur e –pr ef ix=/usr/l ocal/sql ite_ar m –disabl e-t cl –host=ar m-l inux
(4)交叉編譯并安裝
#make #make inst al l
安裝完成后,在/usr/l ocal/sql it e_ar m目錄下生成了bin、incl ude和l ib三個目錄。其中bin目錄下有可執行文件sql it e3;l ib和incl ude目錄下生成對應的鏈接庫文件和相應的頭文件。將l ib目錄下的庫文件下載到開發板的/usr/l ib中,將/bin目錄下的可執行文件sql it e3下載到開發板的/bin/目錄下;將incl ude目錄下的頭文件下載到開發板的/usr/incl ude/目錄下即可。
本系統設計的嵌入式Web遠程監控系統,根據功能需求劃分為4個模塊。
(1)嵌入式Web服務器模塊。該模塊是整個系統的核心部分負責接受客戶端瀏覽器請求并對用戶提交的數據進行解析,根據請求作出相應的處理,并將處理后的結果發送給客戶端瀏覽器,關閉與客戶端的TCP連接。
(2)SQLit e數據庫模塊。該模塊用來為其他模塊提供后臺支持,既可以實現現場設備數據的存儲和查詢,也可以實現用戶信息的管理等功能。
(3)CGI通用網關接口模塊。CGI是外部擴展應用程序與嵌入式Web服務器交互的一個標準接口。按照CGI標準編寫外部擴展應用程序,可以處理客戶端瀏覽器輸入的數據并將產生的信息以HTML文檔格式的形式反饋給客戶端,從而完成客戶端與Web服務器的交互操作
(4)設備采集與控制模塊。該模塊主要是實現對開發板上的多路A/D數據動態采集以及處理客戶端發送過來的控制命令,從而實現對遠程設備進行控制的目的。
首先,系統采集到的數據經過A/D轉換后寫入到本地的data.xml文件中。當用戶要求查看采集到的實時數據請求時,html頁面通過調用set Timeout(“l oadXML()”,1000)方法每隔1秒間隔讀取data.xml文件內容,動態實時刷新采集到的數據。當用戶請求查看歷史數據時,CGI程序通過調用SQLiteAPI執行查詢語句,并將查詢結果輸出到Web服務器,最后再將結果反饋給客戶如果用戶發送的是請求控制設備命令,Web服務器將收到的請求數據進行解碼后執行相應的CGI程序,在CGI程序中通過系統調用進入內核,執行設備的驅動程序即可實現對設備的控制。最后再將處理結果反饋給用戶即可。
用戶在客戶端瀏覽器里輸入嵌入式Web服務器的IP地址(ht t p://192.168.1.100)輸入用戶名和密碼后,進入導航主頁后點擊查看,就可以看到采集到的實時數據,實驗結果如圖2,圖3所示。

圖2 系統登錄界面

圖3 實時電壓值顯示界面
本文以三星s3c2440處理器為硬件平臺、嵌入式l inux系統為軟件平臺設計了一種嵌入式Web遠程測控系統。用戶只需以瀏覽器為客戶端軟件通過網絡訪問Web服務器進而查看當前各個電位器的電壓值,查詢電位器的歷史電壓值、控制設備等。本文設計的遠程測控系統開發難度小、功能實用、系統維護、升級方便,可以廣泛用于人們生活中。
[1]杜國相,石俊杰.SQLite嵌入式數據庫的應用[J].數據庫與信息管理,2012.5:43-45.
[2]田智春.基于嵌入式數據庫SQLite3.0的遠程監控系統[D].西安建筑科技大學,2010.
[3]孟旭霞.基于嵌入式Web的遠程監控系統的研究與實現[D].廣西師范大學,2008.