基于GPRS modem的嵌入式Internet的實(shí)現(xiàn)
肖春華1,2,張洪濤1,李秀紅3,2,孫忠富2,宋子凱1?,李金學(xué)1
(1湖北工業(yè)大學(xué)電氣與電子工程學(xué)院武漢?430068
2?中國農(nóng)業(yè)科學(xué)院農(nóng)業(yè)環(huán)境與可持續(xù)發(fā)展研究所北京?100081
3?武漢大學(xué)電子信息學(xué)院武漢?430079 )
摘 要:本文根據(jù)現(xiàn)代信息農(nóng)業(yè)的發(fā)展需求,在嵌入式無線遠(yuǎn)程環(huán)境監(jiān)測系統(tǒng)的研究的基礎(chǔ)之上,成功地完成了GPRSmodem的internet接入。遠(yuǎn)端基于ARM的嵌入式模塊在μC/OS-II操作系統(tǒng)的調(diào)度下實(shí)現(xiàn)信號的采集,在通過串口與模塊相連的GPRSmodem與Internet建立連接后,將數(shù)據(jù)發(fā)送到現(xiàn)場服務(wù)器,從而完成了底層的采集與發(fā)送。
關(guān)鍵字:嵌入式系統(tǒng);GPRS modem;μC/OS-II;AT指令;
Implementation of embeded Internet based on GPRS modem
XIAO Chun-hua?1,2, ZHANG Hong-tao?1, LI Xiu-hong?3,2, SUN Zhong-fu?2, SONG Zi-kai?1, LI Jin-xue?1
(1 School of Electrical and Electronic Engineering, HBUT, Wuhan, 430068, China;
2 Institute of Environment and Development in Agriculture, CAAS, Beijing 100081,China;
3 School of Electronics and Information, Wuhan University, Wuhan 430079,China)
Abstract: According to the need of the modern information agriculture, this article illustrated a successful connection method between GPRS modem and Internet based on the wireless system and remote environment monitor. Due to μC/OS-II double task of the ARM7 embedded machine, the remote data monitored is able to be collected. The GPRS modem is connected with ARM embedded machine by their ports, GPRS modem sends the data to the local web server when connected with Internet .Then the collection of Information could well finished.
Key words:Embeded system; GPRS modem;?μC/OS-II;AT commands
0.?概述
無線通訊模塊GPRS用于數(shù)據(jù)接入有著傳輸速率高、接入范圍廣、接入時(shí)間短、提供實(shí)時(shí)在線功能和按流量計(jì)費(fèi)等優(yōu)點(diǎn)[1] [2],同時(shí)隨著GPRS技術(shù)在無線通信領(lǐng)域應(yīng)用的不斷拓展和深入,GPRS modem作為GPRS在Internet的PC機(jī)終端已經(jīng)得到了廣泛的應(yīng)用。本課題組研制的“嵌入式無線遠(yuǎn)程環(huán)境監(jiān)測系統(tǒng)”就成功的利用了這個(gè)技術(shù),下面將詳細(xì)介紹GPRS modem接入Internet進(jìn)行數(shù)據(jù)傳輸,從而實(shí)現(xiàn)了底層的采集與上層的網(wǎng)絡(luò)發(fā)布的連接。
1.?GPRS接入Internet的系統(tǒng)設(shè)計(jì)
圖1 GPRS接入Internet系統(tǒng)模型
中圖分類號:TP391?文獻(xiàn)標(biāo)識碼:A
[1]基金項(xiàng)目:教育部重點(diǎn)科技項(xiàng)目(206095),?湖北省教育廳重點(diǎn)項(xiàng)目(D200614002).
作者簡介: 肖春華,男,(1981-),湖北松滋人,碩士研究生,研究方向:嵌入式系統(tǒng)
Author brief introduction:XIAO Chun-hua, Sex: Man,Birthday:1981.1.14,Nation: Han;Degree: Postgraduate; Major: Embeded system
通訊地址:湖北工業(yè)大學(xué)電氣與電子工程學(xué)院#926信箱。郵編:430068
EMAIL:xiaochunhua.wh@gmail.com?TEL: 13487084952
本系統(tǒng)采用的是WAVECOM GPRS modem,這是一款內(nèi)嵌TCP/IP/PPP協(xié)議的無線傳輸
模塊,無須在ARM板內(nèi)移植通訊協(xié)議,極大的縮短了開發(fā)周期。它適用于在GSM網(wǎng)絡(luò)下實(shí)現(xiàn)各種無線業(yè)務(wù),其中主要包括電話、短信、GPRS無線上網(wǎng)等業(yè)務(wù)。圖1為GPRS接入Internet的系統(tǒng)模型,GPRS modem將底層電路板采集到的信息以無線傳輸方式發(fā)送出去,通過無線網(wǎng)絡(luò)供應(yīng)商轉(zhuǎn)送到Internet,經(jīng)由Internet最終進(jìn)入數(shù)據(jù)處理中心。
底層核心板為本課題組自行研制,是一款以ARM7芯片LPC2210為核心處理器,有16KB片內(nèi)靜態(tài)RAM,通過外部存儲器接口可將外部存儲器配置成4組,每組的容量高達(dá)16Mb,滿足μC/OS-II移植要求。本硬件設(shè)計(jì)有兩個(gè)通用的九針232輸入/輸出串口,一個(gè)串口GPRS modem連接,另外一個(gè)串口通過轉(zhuǎn)接器與傳感器組相連實(shí)現(xiàn)數(shù)據(jù)的采集。
在GPRS的接入Internet并與遠(yuǎn)程的服務(wù)器接收端連接的設(shè)計(jì)中,關(guān)鍵的設(shè)計(jì)有三個(gè)方面,一是底層ARM板將數(shù)據(jù)通過串口發(fā)送到與之相連的GPRS modem上,二是在ARM CPU中移植嵌入式適時(shí)操作系統(tǒng)μC/OS-II,并在操作系統(tǒng)下實(shí)現(xiàn)任務(wù)的建立,三是在μC/OS-II下用AT指令實(shí)現(xiàn)GPRS modem與網(wǎng)絡(luò)的連接。
2.?μC/OS-II操作系統(tǒng)的移植與任務(wù)的建立
2.1操作系統(tǒng)的移植
移植[3] [5]工作主要針對三個(gè)與處理器相關(guān)的文件進(jìn)行修改,使之與處理器相適合,即:C語言文件OS_CPU.H,OS_CPU_C.C和匯編文件OS_CPU_A.ASM。
(1)0S_CPU.H
①?編譯器相關(guān)數(shù)據(jù)類型的設(shè)定:用#define語句定義兩個(gè)宏開關(guān)中斷
②定義堆棧方向(從上向下遞增):#define OS_STK_GROWTH 1
③?OS_TASK_SW()、OSCtxSw ()的移植:#define OS_TASK_SW() OSCtxSw ()
μC/OS-II從低優(yōu)先級任務(wù)切換到高優(yōu)先級任務(wù)時(shí),通過執(zhí)行OS_TASK_SW()仿中斷的產(chǎn)生。中斷服務(wù)子程序的中斷向量地址指向匯編語言函數(shù)OSCtxSw()。
(2)修改OS_CPU_C.C
OS_CPU_C.C文件中需要用戶定義6個(gè)C語言函數(shù):OSTaskStklnit(),OSSTaskCreateHook(),OSTaskDelHook(),OS_TaskSwHook(),OSTaskStatHook(),OSTimeTickHook()。實(shí)際必須定義的只有OSTaskStklnit()函數(shù),其它5個(gè)函數(shù)需要聲明,但可以不加代碼,但要將OS_CFG.H中的OS_CPU_HOOKS_EN設(shè)為0。
(3)修改OS_CPU_A.ASM
OS_CPU_A.ASM中要改寫四個(gè)匯編語言函數(shù):OSStarHighRdy(),OSCtxSw()
2.2任務(wù)的建立[4]
μC/OS-II是多任務(wù)嵌入式RTOS,最多可添加64個(gè)不同的任務(wù)[6],可以很好的滿足系統(tǒng)設(shè)計(jì)的要求,在μC/OS-II下可以采用模塊化設(shè)計(jì),這樣不同的任務(wù)的添加變得非常簡單,同時(shí)極大的減小了編程的難度,增加了程序的可讀性。基于此,在設(shè)計(jì)時(shí)將GPRS與網(wǎng)絡(luò)的連接和信息的發(fā)送分成兩個(gè)不同的任務(wù)建立,在任務(wù)的建立時(shí)首先要給任務(wù)定義自己的堆棧,由于系統(tǒng)中還有流水燈和多組傳感器的采集,因此在設(shè)計(jì)時(shí)暫將GPRS的連接和數(shù)據(jù)的發(fā)送分別作為第四、第五個(gè)任務(wù)來編寫。
OS_STK TaskStk4 [TaskStkLengh]; //?定義Task4的堆棧
OS_STK TaskStk5 [TaskStkLengh]; //?定義Task5的堆棧
void gprslianjie(void*pdata); // Task4?任務(wù)4
void shujufasong(void*pdata); // Task5?任務(wù)5
OS_EVENT *USEPORTMutex;
int main (void)
{ OSInit (); //操作系統(tǒng)的初始化
OSTaskCreate (gprslianjie,(void *)0, &TaskStk4[TaskStkLengh - 1],7);
//建立GPRS與網(wǎng)絡(luò)連接的任務(wù),任務(wù)名為gprslianjie
OSTaskCreate (shujufasong,(void *)0, &TaskStk5[TaskStkLengh - 1],8);
//建立數(shù)據(jù)發(fā)送的任務(wù),任務(wù)名為shujufasong
USEPORTMutex=OSMutexCreate(2,&err);
OSStart ();
return 0;
}
因?yàn)镚PRS與網(wǎng)絡(luò)連接是本系統(tǒng)建立的第五個(gè)任務(wù),所以定義時(shí)用TaskStk4表示它的堆棧名,由于設(shè)計(jì)時(shí)本著先采集再連接發(fā)送的思想,而且數(shù)據(jù)要按照一定的順序定時(shí)發(fā)送,另外,還要避免資源的共享與沖突的出現(xiàn),于是建立了互斥型信號量加以控制,并且數(shù)據(jù)發(fā)送任務(wù)的優(yōu)先級要低于GPRS連接的優(yōu)先級。其中阿拉伯?dāng)?shù)字7、8分別代表任務(wù)的優(yōu)先級,需要指出的是數(shù)字越小,優(yōu)先級別越高。
這樣一來GPRS與網(wǎng)絡(luò)連接的任務(wù)就在μC/OS-II中建立了。
3.?GPRS modem的AT指令的介紹
限于篇幅,在本文中只介紹GPRS modem接入Internet和與服務(wù)器連接的必要指令,按照接入網(wǎng)絡(luò)時(shí)需要發(fā)送AT指令的順序介紹。
(1)AT,測試GPRS modem是否于ARM板連接好,正常時(shí)返回OK;
(2)AT+CGCLASS=”B”,設(shè)置模塊工作類型為B,正常時(shí)返回OK;
(3)AT+CGDCONT=1,”IP”,”CMNET”,上網(wǎng)設(shè)置,只有開通GPRS功能的SIM卡可以使用,設(shè)置成功后返回OK;
(4)AT+WOPEN=1,激活Q2406B中的TCP/IP協(xié)議棧,成功時(shí)返回OK;
(5)AT+CGATT=1,GPRS附著到網(wǎng)絡(luò),成功后返回OK;
(6)at#connectionstart,模塊中封裝的TCP/IP棧撥號并啟動GPRS連接,成功后返回網(wǎng)關(guān)隨機(jī)分配IP地址。
10.16.140.71
OK_Info_GprsActivation
(7)at#tcpserv=1,”211.147.18.79″,設(shè)置上位機(jī)(TCP server)的IP地址,成功后返回OK;
(8)at#tcpport=1,”1433″,設(shè)置上位機(jī)與Q2406B間的通訊端口,這需與服務(wù)器端正偵聽的端口相同。成功后返回OK;
(9)at#otcp=1,開啟與上位機(jī)的通訊,成功后返回Ok_Info_WaitingForData從而進(jìn)入等待輸入數(shù)據(jù)的狀態(tài)。
通過這九步的成功設(shè)置后GPRS modem就成功的與遠(yuǎn)程的服務(wù)器之間建立了連接,進(jìn)入了數(shù)據(jù)的通訊狀態(tài)。值得注意的是在編寫程序過程中,在定義AT指令時(shí),一條完整的AT指令可以用大寫英文字符定義,也可以用小寫的英文字符定義,但如果是在同一條指令中英文字符的大小寫要一致。另外一點(diǎn)就是引號不能夠省略,也不能夠?qū)懗晌谋揪庉嫚顟B(tài)下的雙引號,否則GPRS modem不予辨別,如輸入AT#tcpport=1,”1433″、at#tcpport=1,1143、at#tcpport=1,“1433”等,通過串口返回的將都會是ERROR。
4.軟件編程注意事項(xiàng)及流程圖
由于通過GPRS modem實(shí)現(xiàn)通過無線網(wǎng)絡(luò)與遠(yuǎn)程服務(wù)器的連接存在不穩(wěn)定和掉線等情況,如當(dāng)時(shí)所在地區(qū)GPRS網(wǎng)絡(luò)不穩(wěn)定。因此在編寫程序的時(shí)候做了以下的一些處理,以保證系統(tǒng)的連接和通訊處于正常和規(guī)范的狀態(tài)。
(1)建立TCP連接的過程中要考慮到每一步可能會出現(xiàn)的錯誤,比如設(shè)備沒有連接好、網(wǎng)絡(luò)信號質(zhì)量不高引起連接失敗等,因此在程序設(shè)計(jì)的時(shí)候要做到兩點(diǎn),一是在modem依附到網(wǎng)絡(luò)、啟動GPRS連接以及開啟與上位機(jī)的通訊等過程中從發(fā)送指令到接收指令之間要有一定的等待時(shí)間;二是所有的步驟中,需要判斷從串口返回的字符串是不是表示ERROR,如果是則再發(fā)送一次該指令,再次對返回的字符串進(jìn)行判斷,如果顯示操作成功則進(jìn)入下一步,否則第三次發(fā)送該指令,第三次判斷后如果還是顯示操作失敗則放棄本次TCP/IP的連接。
(2)由于兩次發(fā)送數(shù)據(jù)之間有一定的時(shí)間間隔,在此期間也有可能因?yàn)橐恍┮蛩卦斐蛇B接關(guān)閉,因此在程序的編寫過程中筆者采用每發(fā)送一次數(shù)據(jù)后自動讓連接關(guān)閉,下次要發(fā)送數(shù)據(jù)時(shí)從新進(jìn)行TCP的連接的機(jī)制。這樣就避免了數(shù)據(jù)采集成功而發(fā)送不成功的隱患的出現(xiàn)。
圖2為軟件實(shí)現(xiàn)的流程圖。
圖2 GPRS接入Internet軟件實(shí)現(xiàn)流程圖
4.?軟件的實(shí)現(xiàn)
char str4[]=”AT+CGATT=1\r”; char str5[]=”at#connectionstart\r”;
char *test=”K”; char strget[100];char str8[]=”at#otcp=1\r”; //部分字符串的定義
void gprslianjie (void *pdata) //Q2406B接入Internet的任務(wù)
{?。。。。。。。。。。。。。。。
while (1)
{。。。。。。。。。。。。。。。
uart1_sendstr(str4); //進(jìn)入TCP連接的第五步
OSTimeDly(OS_TICKS_PER_SEC*6); //延時(shí)等待串口返回?cái)?shù)據(jù)
uart1_getstr( strget,16); //串口1接收Q2406B返回的字符串
value=strstr(strget,test); //判斷返回字符串中是否有“OK“,有表示連接成功
if(value != NULL) //第一次連接如果成功
{ uart1_sendstr(str5); //進(jìn)入下一步
U1FCR=0X07;} //串口要及時(shí)清空,避免出現(xiàn)亂碼
else if(value == NULL)//第二次連接及判斷
{?。。。。。。。。。。else //第二次連接不成功則再次發(fā)送該指令
。。。。。。。。。。else
OSTimeDly(OS_TICKS_PER_SEC);} //三次判斷后連接不成功則
進(jìn)行任務(wù)的下一次調(diào)度,退出本次連接
}。。。。。。。。。。。。。。。。。。。。}
void shujufasong(void *pdata)
{?。。。。。。。。。。。。。。。。。
while (1)
{ OSMutexPend(USEPORTMutex,0,&err);//等待互斥性信號量
uart1_sendstr(data);//data為采集到的數(shù)據(jù),按照接收軟件及數(shù)據(jù)庫定義的格式定義
。。。。。。。。。。。。。。。。
uart1_sendstr(str8);//再次發(fā)送第九步AT指令,自動關(guān)閉連接
OSMutexPost(USEPORTMutex);//釋放互斥性信號量
。。。。。。。。。。。。。。。。。。。。。。。。。。?}}
5.?結(jié)束語
本設(shè)計(jì)利用WAVECOM?(Q2406B)?GPRS modem通過無線網(wǎng)絡(luò)與遠(yuǎn)程服務(wù)器建立連接,實(shí)現(xiàn)了信息的采集與發(fā)布的有效統(tǒng)一,可用于各種條件下的遠(yuǎn)程的環(huán)境監(jiān)測,具有比較大的現(xiàn)實(shí)意義及實(shí)用價(jià)值。當(dāng)然本系統(tǒng)還有待完善,比如短消息功能和語音功能需要進(jìn)一步的開發(fā)得以實(shí)現(xiàn)。
參考文獻(xiàn):
[1]Theodore S. Rappaport,?et al.?Wireless Conmmunications: Past Events and a Future Perspective. IEEE Communications Maganine,50th Anniversary Commemorative Issue, May 2002:150~153.
[2]李秀紅,孫忠富,黃天戍.嵌入式系統(tǒng)在基于WEB的農(nóng)業(yè)信息獲取技術(shù)中的應(yīng)用探討.農(nóng)業(yè)網(wǎng)絡(luò)信息, 2005,12:34-37.
[3]黃天戍李秀紅. RTOS?嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)嵌入式系統(tǒng)μc/OS-Ⅱ.微計(jì)算機(jī)信息, 2005年?18期?.
[4]周立功等編著.?ARM嵌入式系統(tǒng)基礎(chǔ)教程.北京航空航天大學(xué)出版社?.2005.
[5]?Jean J.Labrosse , MicroC/OS-II The Real-Time Kernel, Second Edition.
Published by CMP Books , CMP Media LLC,2002.
[6]?Jane W S Liu.Real-Time Systems.New Jersey:Prenticc Hall,2000.
北京玉笛信息技術(shù)有限責(zé)任公司
地址:北京海淀區(qū)知春路23號量子銀座903(863軟件園)
淘網(wǎng)址:http://shop35321900.taobao.com