許春杰,杜 仲,2
(1.武漢郵電科學(xué)研究院,湖北 武漢430074;2.光纖通信技術(shù)和網(wǎng)絡(luò)國家重點(diǎn)實(shí)驗(yàn)室,湖北 武漢430074)
Internet和嵌入式技術(shù)在過去的十幾年里飛速發(fā)展,影響深遠(yuǎn),二者結(jié)合的產(chǎn)物——嵌入式Web服務(wù)器應(yīng)運(yùn)而生,在最近幾年的時(shí)間中影響逐步擴(kuò)大,發(fā)展勢頭良好,在實(shí)際生產(chǎn)中有廣泛的應(yīng)用。本文研究的嵌入式無線Web將無線技術(shù)融入其中,為管理、監(jiān)控嵌入式產(chǎn)品提供了一種基于無線IP的方法。在嵌入式終端中,可以通過嵌入式Web實(shí)現(xiàn)對(duì)設(shè)備的遠(yuǎn)程連網(wǎng)控制,無線技術(shù)將使遠(yuǎn)程控制變得更為靈活。通過本設(shè)計(jì)能夠?qū)崿F(xiàn):1)在互聯(lián)網(wǎng)的任意地點(diǎn)查看或控制設(shè)備的運(yùn)行狀態(tài);2)讓設(shè)備主動(dòng)上報(bào)自己的運(yùn)行狀態(tài)。
Linux操作系統(tǒng)在嵌入式設(shè)備開發(fā)中被廣泛使用,它擁有穩(wěn)定的性能和成熟的API。節(jié)省成本的特點(diǎn)也備受青睞,讀者可以從“http://ww.kernel.org/Pub/linux/kernel/v2.6/”下載Linux 2.6.30版本內(nèi)核。
現(xiàn)在的嵌入式設(shè)備由于功能越來越復(fù)雜以及智能化的需求,大多采用了嵌入式的操作系統(tǒng)作為其系統(tǒng)開發(fā)的平臺(tái),WebServer則作為其操作系統(tǒng)中的一個(gè)任務(wù)存在。本文所采用的WebServer是目前在市場中應(yīng)用較為廣泛的GoAhead WebServer。它支持ASP編程,Javascript,SSL加密、驗(yàn)證,標(biāo)準(zhǔn)的CGI、底層CGI處理GoFroms過程,廣泛使用在基于WinCE和Linux的嵌入式產(chǎn)品開發(fā)中。每秒可處理超過50個(gè)請(qǐng)求的響應(yīng)速度,可以很好地處理用戶對(duì)于嵌入式Web的需求。支持HTTP協(xié)議,支持多種操作系統(tǒng),包括eCos,QNX,LynxOS,linux,VxWorks和WinCE等。
無線Modem的工作模式有兩種:一種是與人們生活很貼近的GSM通信模式,另一種是TCP/IP通信模式?,F(xiàn)有的Modem大多內(nèi)置TCP/IP協(xié)議棧,但本文使用的是外置的協(xié)議?!狶inux內(nèi)核支持的TCP/IP協(xié)議棧。TCP/IP通信方式是基于IP網(wǎng)絡(luò)通信的方式,無線Modem基于IP網(wǎng)絡(luò)通信之前,首先要進(jìn)行PPP拔號(hào)過程,進(jìn)行PPP拔號(hào)過程時(shí)需要后臺(tái)計(jì)算機(jī)(也可能是其他設(shè)備)軟硬件資源支持。需依附于計(jì)算機(jī)操作系統(tǒng)(或者具有PPP拔號(hào)功能設(shè)備)之上才能完成PPP拔號(hào)過程,獲取到無線網(wǎng)絡(luò)IP地址進(jìn)行通信。無線Modem的選型主要考慮參數(shù)包括:1)支持的網(wǎng)絡(luò)模式;2)支持的業(yè)務(wù)功能;3)AT命令,AT命令不同,程序中做的處理也不同;4)支持的操作系統(tǒng)類型。
不同的無線Modem生產(chǎn)廠家可能有自己定義的AT命令,但主要的AT命令相同,具體AT命令可以參看Modem的AT命令手冊。
本設(shè)計(jì)選用的是搭載Linux操作系統(tǒng)的ARM9260系統(tǒng)平臺(tái),使用ARM926EJ-S處理器,ARM926EJ-S處理器是通用微處理器ARM9家族中的一員。ARM926EJ-S屬于5TEJ版ARM架構(gòu),針對(duì)的是多任務(wù)應(yīng)用,包括全儲(chǔ)存器管理,高性能、小核心尺寸和低功耗都是其重要的特點(diǎn)。圖1是在ARM9260平臺(tái)上基于Linux操作系統(tǒng)開發(fā)的應(yīng)用軟件功能結(jié)構(gòu)圖。
圖1 功能結(jié)構(gòu)圖
嵌入式無線Web包含嵌入式WebServer、無線Modem控制以及硬件控制數(shù)據(jù)控制3個(gè)組成部分。系統(tǒng)上電后,依次啟動(dòng)Modem控制模塊、Webserver、數(shù)據(jù)監(jiān)控模塊,這3個(gè)模塊以3個(gè)進(jìn)程的形式存在于Linux操作系統(tǒng)中,3個(gè)進(jìn)程間通信需要依據(jù)一定的協(xié)議,這個(gè)協(xié)議可以依據(jù)功能需求來定制。
Modem控制模塊主要完成的功能是對(duì)Modem工作狀態(tài)進(jìn)行控制,如在上電時(shí)進(jìn)行Modem探測,將探測到的狀態(tài)刷新到內(nèi)存中,以供運(yùn)行時(shí)查詢;在需要發(fā)送短信時(shí)填寫短信內(nèi)容以及要發(fā)往的電話號(hào)碼。協(xié)議接口3(由數(shù)據(jù)監(jiān)控模塊)發(fā)來的協(xié)議數(shù)據(jù)通常用于觸發(fā)Modem控制模塊工作方式變換。
WebServer由GoAhead服務(wù)器實(shí)現(xiàn),提供Web服務(wù)器功能,在設(shè)備的文件系統(tǒng)中存放設(shè)計(jì)好的網(wǎng)頁文件,響應(yīng)來自瀏覽器的HTTP請(qǐng)求,通過輸入設(shè)備的聯(lián)網(wǎng)IP實(shí)現(xiàn)對(duì)網(wǎng)頁的訪問,隨時(shí)隨地管理設(shè)備。關(guān)于網(wǎng)頁過程的設(shè)計(jì)方法會(huì)在下文中介紹。WebServer通過協(xié)議接口1與Modem控制模塊通信,通過協(xié)議接口2與數(shù)據(jù)監(jiān)控模塊通信。當(dāng)用戶請(qǐng)求的網(wǎng)頁中包含GoAhead Asp及GoForm過程時(shí),這些過程會(huì)關(guān)聯(lián)到事先定義的處理函數(shù)中,有這些函數(shù)通過調(diào)用協(xié)議接口2查詢或設(shè)置數(shù)據(jù)。同時(shí)將包含處理結(jié)果的網(wǎng)頁通過HTTP協(xié)議返回給瀏覽器。
完成的功能是:輪詢數(shù)據(jù)控制模塊,通過通信接口采集到新的數(shù)據(jù)來更新本地內(nèi)存中的數(shù)據(jù),提供給Web-Server查詢;根據(jù)需求設(shè)置數(shù)據(jù)到數(shù)據(jù)控制模塊中,當(dāng)WebServer下發(fā)了設(shè)置請(qǐng)求時(shí),數(shù)據(jù)監(jiān)控模塊要解析設(shè)置命令并將數(shù)據(jù)設(shè)置到系統(tǒng)狀態(tài)或外部模塊中;寫文件保存需要斷電保存的數(shù)據(jù)及信息;監(jiān)控告警狀態(tài),在告警處理中發(fā)出Modem控制信號(hào),例如,采集到的“溫度”高出設(shè)定的門限,數(shù)據(jù)監(jiān)控模塊此時(shí)將變被動(dòng)為主動(dòng),通過協(xié)議接口3告知Modem控制模塊發(fā)出告警短信,用戶收到提醒就能夠及時(shí)排查設(shè)備故障。其流程設(shè)計(jì)如圖2所示。
圖2 數(shù)據(jù)監(jiān)控模塊流程圖
PPP撥號(hào)成功會(huì)生成一個(gè)虛擬的網(wǎng)卡,它包含IP地址的信息,這個(gè)地址就是WebSever的網(wǎng)絡(luò)地址,有了它,設(shè)備才能與外界發(fā)生聯(lián)系。Linux下PPP撥號(hào)包含如下步驟:
1)配置內(nèi)核,啟動(dòng)PPP撥號(hào)服務(wù);
2)下載撥號(hào)源碼,執(zhí)行配置命令;
3)將與Modem配套的撥號(hào)腳本放至對(duì)應(yīng)目錄;
4)在應(yīng)用程序中啟動(dòng)撥號(hào)命令;
5)撥號(hào)完成。
撥號(hào)成功后執(zhí)行#ifconfig命令,可以看見新建了一個(gè)ppp0的網(wǎng)卡,上面的IP地址就是運(yùn)營商劃分給用戶的公網(wǎng)IP地址,表明撥號(hào)成功。在設(shè)備Web建立完成以后,就可以通過互聯(lián)網(wǎng)訪問設(shè)備了。注意:Modem要插放有效的SIM卡。圖3為用撥號(hào)成功后的網(wǎng)卡及路由信息打印,由圖可知,PPP撥號(hào)生成了與Internet聯(lián)系的信息,ppp0是由Modem外部協(xié)議棧生成的虛擬網(wǎng)卡,119.103.110.163為公網(wǎng)IP,通過它,可以訪問設(shè)備的Web,這樣Internet連接的通道就打通了。
圖3 ppp撥號(hào)成功內(nèi)核打印信息(截圖)
AT命令的組織及回應(yīng)。當(dāng)設(shè)備向Modem發(fā)出AT命令后,Modem會(huì)對(duì)AT命令作出解析并給出回應(yīng)。如發(fā)“AT回車”探測Modem,若Modem在位則會(huì)回應(yīng)“OK”。在收發(fā)短信前需要探測短信功能是否正常,以及在收發(fā)GPRS數(shù)據(jù)前要事先確認(rèn)GPRS功能是否正常。也可以制作AT命令腳本,來開啟Modem的某些功能,如登錄GPRS或通信方式切換等。發(fā)短信一般包含兩個(gè)步驟,先發(fā)號(hào)碼回車等待“>”出現(xiàn),然后發(fā)送短信內(nèi)容。例如要發(fā)送的緩存是sendbuf,電話號(hào)碼是“136***”,modem_send執(zhí)行將發(fā)送緩存的內(nèi)容發(fā)送至Modem,執(zhí)行以下過程:
Sendbuf的內(nèi)容為:“AT+CMGS=136*** ”;
modem_send(sendbuf,strlen(sendbuf))。
插有SIM卡的Modem則會(huì)回復(fù)“>”,此時(shí)再通過modem_send發(fā)送短信內(nèi)容,Modem則會(huì)將此次的內(nèi)容以短信形式發(fā)送到手機(jī)號(hào)為“136***”的手機(jī)上。
本文涉及常用的AT命令有:
AT+CMGS發(fā)送短信
AT^IPIINT 初始化登陸命令
AT^IPOPEN連接到指定IP及端口
Web服務(wù)器入口程序首先通過initWeb()函數(shù)實(shí)現(xiàn)一系列的初始化,包括訪問口令、服務(wù)器端口號(hào)、默認(rèn)頁面設(shè)置等。
GoAhead Asp過程:ASP是一種服務(wù)器端腳本編寫環(huán)境,可以用來創(chuàng)建和運(yùn)行動(dòng)態(tài)網(wǎng)頁或Web應(yīng)用程序。ASP網(wǎng)頁可以包含HTML標(biāo)記、普通文本、腳本命令以及COM組件等。
ASP文件是以“.asp”為擴(kuò)展名,在傳送到瀏覽器之前用嵌入式腳本插入動(dòng)態(tài)內(nèi)容,GoAhead Web Server支持一個(gè)運(yùn)行時(shí)選擇腳本引擎的開放式腳本結(jié)構(gòu)。要在ASP頁面中創(chuàng)建ASP腳本使用“<%---%>”定界符。例如:<h1> <% webpage_write("Hello World");%></h1>,webpage_write()的方法在底層實(shí)現(xiàn)。
GoAhead GoForm過程:在嵌入式系統(tǒng)中,有時(shí)用戶需要通過瀏覽器向嵌入式設(shè)備查詢或發(fā)送信息。這就需要使用表單將用戶輸入的信息傳遞給嵌入式設(shè)備的相應(yīng)操作模塊。
下面介紹如何在Goahead中調(diào)用goform過程,Go-Form過程則主要用來處理用戶指令以實(shí)現(xiàn)對(duì)設(shè)備的配置和管理等。GoForm過程網(wǎng)頁存在形式如下。formTest的方法在底層實(shí)現(xiàn),其作用是將頁面的表單數(shù)據(jù)帶入到內(nèi)存中處理,可以將表單的數(shù)據(jù)轉(zhuǎn)化為內(nèi)存控制信息。
<form action=/goform/formTest method=POST>
……
</form>
GoAhead中常用API有:websGetVar函數(shù),可以用于獲取變量及其值;websWrite用于回填網(wǎng)頁內(nèi)容。圖4為一個(gè)簡易的監(jiān)控界面。
圖4 無線Web界面(截圖)
遠(yuǎn)程監(jiān)控廣泛應(yīng)用在工業(yè)生產(chǎn)中,本文提出并設(shè)計(jì)的無線連網(wǎng)監(jiān)控方案結(jié)合了當(dāng)前互聯(lián)網(wǎng)快速發(fā)展的趨勢,可以增加設(shè)備的可移動(dòng)性。在移動(dòng)終端快速發(fā)展的趨勢中,能夠使嵌入式Web控制擁有無線接入的優(yōu)勢,勢必會(huì)在環(huán)境復(fù)雜多變的工業(yè)控制中取得其一席之地。
[1]郭欣.構(gòu)建高性能Web站點(diǎn)[M].修訂版.北京:電子工業(yè)出版社,2012.
[2]單維鋒,白靈.ASP.NET Web應(yīng)用程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2010.
[3]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[4](印)拉克什曼.Linux Shell腳本攻略[M].門佳,譯.北京:人民郵電出版社,2011.