基于IP2022芯片可支持GPRS的GPS終端設(shè)計(jì)
在GPS終端軟件設(shè)計(jì)方面,為了便于以后擴(kuò)展,采用了嚴(yán)格的分層結(jié)構(gòu),具體的軟件結(jié)構(gòu)如圖3所示。
2.2.1 串口驅(qū)動(dòng)模塊
利用串口驅(qū)動(dòng)模塊來(lái)完成對(duì)串口的操作,向上層提供對(duì)串口參數(shù)配置的功能,并在有數(shù)據(jù)收到或者發(fā)送完畢的時(shí)候通過(guò)IndicateReceive、IndicateSend回調(diào)函數(shù)向上層報(bào)告,上層軟件可以調(diào)用Send、Receive來(lái)進(jìn)行收發(fā)。
2.2.2 網(wǎng)絡(luò)驅(qū)動(dòng)模塊
在硬件中的GPRS模塊只是提供了一種硬件信道,與服務(wù)器之間的數(shù)據(jù)連接必須通過(guò)軟件完成。在通信時(shí),軟件首先通過(guò)GPRS模塊特有的命令(一般為AT+CGMD)與GPRS網(wǎng)絡(luò)連接,再通過(guò)PPP協(xié)議建立數(shù)據(jù)鏈路,最后就可以通過(guò)TCP/IP協(xié)議與遠(yuǎn)程的服務(wù)器通信了。這一部分與網(wǎng)絡(luò)操作的功能都放在網(wǎng)絡(luò)驅(qū)動(dòng)模塊中加以實(shí)現(xiàn)。與串口驅(qū)動(dòng)模塊類似,網(wǎng)絡(luò)驅(qū)動(dòng)模塊也提供了數(shù)據(jù)傳輸?shù)囊恍┓?wù)。
2.2.3 橋接模塊
由于串口是一個(gè)慢速連接,主機(jī)與串口的通信有時(shí)甚至是單字節(jié)操作,如果對(duì)于每一個(gè)這樣小的通信都單獨(dú)通過(guò)一個(gè)TCP包發(fā)送的話,譬如說(shuō)一個(gè)字節(jié)的數(shù)據(jù),這將產(chǎn)生一些41字節(jié)的分組:20字節(jié)的IP頭,20字節(jié)的TCP頭以及1字節(jié)的數(shù)據(jù)。如果在高速網(wǎng)絡(luò)上(例如局域網(wǎng)),這一些小分組通常不會(huì)引起麻煩,但是如果在GPRS這樣的網(wǎng)絡(luò)上(平均往返時(shí)間高達(dá)數(shù)百ms),則會(huì)增加擁塞出現(xiàn)的可能性,并將會(huì)使網(wǎng)絡(luò)的效率極其低。在通常的TCP/IP實(shí)現(xiàn)中,一般采用Nagle算法來(lái)解決這個(gè)問(wèn)題。但是在Ubicom的協(xié)議棧中沒(méi)有這個(gè)功能,因此,必須自己實(shí)現(xiàn)這個(gè)算法??紤]到對(duì)下層硬件結(jié)構(gòu)的無(wú)依賴性,筆者將其放在橋接模塊中實(shí)現(xiàn),而不是放在網(wǎng)絡(luò)驅(qū)動(dòng)模塊中實(shí)現(xiàn)。在算法實(shí)現(xiàn)中,當(dāng)有串口數(shù)據(jù)到來(lái)時(shí),對(duì)于小分組,并不立即就將其發(fā)出,而是等待一段時(shí)間(200s左右),如果在這段時(shí)間中再?zèng)]有小數(shù)據(jù)到來(lái),那么將其發(fā)出,否則將數(shù)據(jù)進(jìn)行累計(jì)后發(fā)出。當(dāng)然有些系統(tǒng)要求立即發(fā)出,那么也可以通過(guò)配置取消這種功能。經(jīng)這樣實(shí)現(xiàn)后,效率有了很大的提高,具體的效果可以參考后面的實(shí)驗(yàn)數(shù)據(jù)。
2.2.4 輔助模塊
在上面一些模塊的介紹中可以看到,其中有一些關(guān)鍵性的數(shù)據(jù)必須支持用戶自己配置,例如串口通信速度、停止位、網(wǎng)絡(luò)驅(qū)動(dòng)模塊中GPRS所要連接的APN、賬戶、密碼、工作模式(是作為服務(wù)器運(yùn)行還是客戶端運(yùn)行)、靜態(tài)IP還是動(dòng)態(tài)IP等。這一部分?jǐn)?shù)據(jù)由配置模塊存儲(chǔ)在外部存儲(chǔ)器里,每次系統(tǒng)啟動(dòng)的時(shí)候再由配置模塊載入。在輔助模塊中還包括一個(gè)重要的子模塊:遠(yuǎn)程管理模塊,它實(shí)現(xiàn)對(duì)GPS終端的遠(yuǎn)程管理,包括遠(yuǎn)程跟蹤和遠(yuǎn)程更新程序。系統(tǒng)的運(yùn)行情況通過(guò)統(tǒng)計(jì)模塊進(jìn)行統(tǒng)計(jì),然后可以通過(guò)遠(yuǎn)程管理模塊進(jìn)行上報(bào)。
2.2.5 系統(tǒng)監(jiān)控模塊
對(duì)于放在遠(yuǎn)程的一個(gè)無(wú)人看管的系統(tǒng)來(lái)說(shuō),最重要的一點(diǎn)就是容錯(cuò)能力,必須能夠在任何錯(cuò)誤的情況下自動(dòng)恢復(fù)到正常運(yùn)行狀態(tài),這一部分就是通過(guò)系統(tǒng)監(jiān)控模塊實(shí)現(xiàn)的。在GPS終端中,經(jīng)常出現(xiàn)的異常包括有TCP連接中斷和網(wǎng)絡(luò)連接中斷,這兩種錯(cuò)誤是有區(qū)別的,解決的方法也不一樣。TCP連接中斷指的是TCP連接進(jìn)入異常狀態(tài),不能在該連接上進(jìn)行數(shù)據(jù)的收發(fā)工作。這種錯(cuò)誤產(chǎn)生的原因是GPRS網(wǎng)絡(luò)有時(shí)會(huì)進(jìn)入偽死狀態(tài),而導(dǎo)致雖然還在網(wǎng)絡(luò)上,但是數(shù)據(jù)的收發(fā)工作無(wú)法進(jìn)行。通過(guò)在每個(gè)連接上設(shè)置一個(gè)收發(fā)超時(shí)計(jì)時(shí)器可以發(fā)現(xiàn)這種錯(cuò)誤。當(dāng)有數(shù)據(jù)傳輸時(shí)即復(fù)位計(jì)數(shù)器,如果計(jì)數(shù)器超時(shí),則表明TCP連接中斷,此時(shí)應(yīng)該根據(jù)工作模式而采取不同的處理。如果是工作在客戶端模式,需要再次與服務(wù)器連接,如果工作在服務(wù)器模式,則只需要簡(jiǎn)單的斷開(kāi)連接即可。
對(duì)于網(wǎng)絡(luò)連接中斷的情況探測(cè)起來(lái)比較困難,一般是通過(guò)監(jiān)測(cè)長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)通信來(lái)判斷。如果一旦發(fā)生此類錯(cuò)誤,則需要重新進(jìn)行網(wǎng)絡(luò)的連接工作。
由于軟件難免會(huì)有一些未曾發(fā)覺(jué)的錯(cuò)誤,在發(fā)生此類錯(cuò)誤的時(shí)候則由硬件看門電路復(fù)位系統(tǒng),并且在下次軟件啟動(dòng)時(shí)將此類錯(cuò)誤發(fā)生過(guò)的信息遠(yuǎn)程傳送到服務(wù)器。
3 服務(wù)器端軟件的設(shè)計(jì)
GPS服務(wù)器程序可以采用兩種方式與遠(yuǎn)程的GPS終端建立連接,一種是采用TCP方式,另外一種是采用串口通信方式。在采用串口通信方式時(shí),需要編制一個(gè)虛擬串口驅(qū)動(dòng)程序,將一個(gè)TCP連接模擬成為一個(gè)串口,這樣服務(wù)器就可以像操縱M12一樣對(duì)遠(yuǎn)程的GPS終端進(jìn)行操作了。
GPS服務(wù)器和遠(yuǎn)程GPS終端之間的通信協(xié)議采用了原始的M12通信命令,核心模塊在GPS服務(wù)器和M12之間進(jìn)行了數(shù)據(jù)透明轉(zhuǎn)發(fā)的作用。M12支持有兩種通信數(shù)據(jù)格式: 一是Motorola二進(jìn)制數(shù)據(jù)指令格式,在采用Motorola二進(jìn)制格式時(shí),通信速率可以保證在9600bps;另一種是NMEA-0183格式,其通信速率只有4800bps,同時(shí)在初始化GPS時(shí)還需要加入由Motorola二進(jìn)制轉(zhuǎn)化為NMEA-0183的指令。因此建議使用Motorola二進(jìn)制數(shù)據(jù)格式。
在此設(shè)計(jì)當(dāng)中,關(guān)鍵的環(huán)節(jié)在于兩個(gè)方面,一是連接的建立,二是M12的初始化。GPS終端返回的定位信息數(shù)據(jù)格式如下:
@@Eamdyyhmsffffaaaaoooohhhhmmmmvvhhddtntimsd imsdimsdimsdimsdimsdimsdimsdsC。
時(shí)間信息:m月,d日,yy年, h小時(shí),m分,s秒。
位置信息:aaaa緯度,oooo經(jīng)度,hhhh橢球高度。
在所有信息終止的前的一個(gè)字節(jié)為校驗(yàn)和,是所有信息字節(jié)的“異或”。
收到數(shù)據(jù)后,只要對(duì)數(shù)據(jù)進(jìn)行解碼,就可以獲得定位信息以及時(shí)間。
4 服務(wù)器端的考慮
在GPRS聯(lián)網(wǎng)中,必須注意的一個(gè)概念是APN。在登陸GPRS時(shí),采用的APN不同,GPS終端和服務(wù)器之間所能采用的方式也有所不同。
如果采用公網(wǎng)APN(cmnet),那么服務(wù)器端只要有一固定公網(wǎng)IP即可,此時(shí)Radius服務(wù)器由移動(dòng)公司提供,GPS終端上網(wǎng)后的IP也是由移動(dòng)公司的Radius服務(wù)器隨機(jī)分配的。GPS終端與服務(wù)器必須經(jīng)過(guò)NAT(Network Address Translation,網(wǎng)絡(luò)地址變換)后才能通信,而從我們數(shù)據(jù)服務(wù)器看過(guò)去的GPS終端的IP地址也不是它的真正地址。因此,GPS終端與數(shù)據(jù)服務(wù)器之間的連接只能由GPS終端發(fā)起,換言之,即GPS終端只能工作在客戶狀態(tài)。在采用公網(wǎng)時(shí)雖然可以節(jié)省開(kāi)支,但需要考慮安全性問(wèn)題,因?yàn)檫@時(shí)候是與Internet直接連通的,并且客戶之間也不可以直接訪問(wèn)。
與公網(wǎng)APN相對(duì)應(yīng)的一種方式是采用私有APN,即用戶向移動(dòng)申請(qǐng)一個(gè)APN號(hào)。在采用這種方式時(shí),所有登陸這個(gè)APN的用戶可以通過(guò)IP地址互相訪問(wèn),因此在數(shù)據(jù)量比較小的時(shí)候甚至可以采用一個(gè)也使用GPRS終端的用戶做服務(wù)器。Radius服務(wù)器的設(shè)置比較靈活,可以采用移動(dòng)公司的Radius服務(wù)器,也可以自建一套R(shí)adius服務(wù)器。自建Radius服務(wù)器的最大好處就是GGSN會(huì)將驗(yàn)證信息發(fā)送給我們,我們可以根據(jù)號(hào)碼或者其它信息為其分配一個(gè)靜態(tài)IP地址,非常適合GPS終端作為服務(wù)器運(yùn)行。
Radius服務(wù)器可以采用一些商用的服務(wù)器,但從實(shí)踐中看,自己編寫一套R(shí)adius服務(wù)器可能更加適合GPRS。
5 結(jié) 論
對(duì)系統(tǒng)進(jìn)行了全面的測(cè)試,在傳輸效率上面,本系統(tǒng)表現(xiàn)的非常良好,連接上網(wǎng)絡(luò)的時(shí)間僅需要3s左右。在使用Class 12的GPRS模塊時(shí),傳輸速率可以達(dá)到38kbps的上傳速度以及44kbps的下傳速度。對(duì)于一般的數(shù)據(jù)采集設(shè)備能夠保證數(shù)據(jù)的及時(shí)傳輸,在發(fā)生GPRS網(wǎng)絡(luò)短暫失效時(shí),可以在網(wǎng)絡(luò)恢復(fù)后的10s內(nèi)重新在線,基本上保證了無(wú)間斷傳輸,因此可以滿足GPS用戶的需要。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論