摘要:使用GSM模塊和CPS數據庫結合的方式實現了一種定位方法。該方法基于短信通信和數據庫處理,可以使用現有設備,工程實現簡單,具有很強的可用性。但其定位精度取決于數據庫。
關鍵詞:CPS;蜂窩信息;短信模塊;基站信息數據庫;數據搜索
引言
目前主要的定位方式有兩種,一是GPS及其類似技術,如我國的“北斗”導航系統;二是基于蜂窩小區的定位技術(CPS),它根據移動臺到已知位置的差值來定位。這兩種方式都具有自己的優點和不足。GPS定位精度較高,適用地域非常廣,但是設備價格昂貴。蜂窩定位技術可以作為蜂窩系統的附加方式,投入相對較低,僅限于有移動臺的地方適用,基站密度降低精度也將大大降低,但因它的簡單和方便性有一定的價值。本文就這一定位技術的實現做相關討論。
1 系統結構和定位方法
根據蜂窩定位原理,要獲得當前的位置信息必須首先獲得基站和小區信息。GSM系統規定每個基站在接受移動臺的接入時必須出示自己的代號以及一些特有的信息。移動臺保存這些信息并且在一定時間一定范圍內用這些信息和基站通信。嚴格的定位技術將根據信號強度、載波相位、信號到達角度、時間差等信息進行定位,雖然精度高但是移動臺需要具有相當多的信號檢測功能。一般的手機并不具有這些監測功能,所以用普通手機很難實現嚴格定位。然而使用邏輯層的定位,使用固定的基站信息定位,這是一般的手機都能做到的Ⅲ。相應的系統流程圖和結構圖如圖1、圖2所示。

GSM模塊使用的是西門子公司的TC35通信模塊,該模塊具有完整的功能和很高的性能,但不支持GPRS。該模塊的功能相當于普通手機中的射頻和基帶處理部分。
2 小區和基站信息的獲取
TC35模塊使用特有的指令“AT MONI”來獲取當前接入的小區信息,獲取鄰近小區信息的指令是:AT MONP。(不同的模塊有不同的指令,可以參考該模塊的使用方法)
其中chann指當前和基站通信使用的信道編號,rs指移動臺感受到的信號強度等級,dBm,指信號的具體強度值。如果模塊暫時不能完成輸入處理,那么就返回空值。
需注意的是,由于該信息的實時性較強而且獲取過程需要一定的時間,所以有時候模塊會返回空信息(只有格式沒有內容)或者無返回信息。所以在這種情況下要多次嘗試才有有效信息出現。
返回信息中的5個參數的具體含義如下:
PLMN:運營商的代碼,460表示中國,后面的00表示中國移動,01表示中國聯通。
LAC:位置區碼,表示一個區域的代號,一個區中可能包含多個的Cell。
Cell:小區識別,在一個LAC中cell代號不能重復,其中LAC和cell都是16bit,以16進制表示。
NCC:網絡色碼,用于識別相鄰的不同運營商的基站,一般相鄰的基站不能有相同的NCC。
BCC:基站色碼,表示同一個PLMN中載頻相同的不同基站。其中NCC與BCC各為3bit,并一起組成了基站識別碼。
剩下的還有:
PWR:該基站允許的最大功率;RXLev:該基站允許的最小信號門限,小于這個值將不能入網,即通常說的掉線。再后面的信息表示通話時使用的信道狀況。因為在GSM系統中系統信道和數據信道是分開的,每次通話會分配單獨的信道,所以未通話時顯示為No connection。這個數據不易獲得且意義不大,所以一般不作為定位數據。
其中c1,c2,是和基站有關的一些系數,其他和上面意義相同,表示6個鄰近區的信息。由于在蜂窩中采用了扇區定向技術或信號太弱等原因,很多鄰近小區不能檢測到有效信息,顯不為空。
獲取后的信息無效部分較多,難以用一條短信傳送,所以必須進行數據壓縮和格式化。有意義的數據包括本小區的PLMN、LAC、cell、NCC、BCC,鄰近小區的BCC、c1、c2。注意長度不能超過70個字符。
3 信息傳輸
3.1 短信發送
GSM模塊不僅能獲取信息還能收發短信。由于短信收發功能不是很難,而且相關文章也較多,所以這里只做粗略介紹。首先是格式選擇,因為考慮到系統可升級性,可能需要支持漢字,所以應該選擇PDU模式。需要注意的是一般的字符轉換成PDU模式的方法,如在VB下代碼可以這樣寫:
其中,Hex( )是一個將變元轉變成16進制數的函數。注意變成PDU格式后還要進行逆序操作,包括接受號碼字段。
生成好了格式后要先用“AT+CMGS=字符長度+回車”來進入發送狀態,如果模塊工作正常可以發送,則會回顯“>”。這時把剛才生成的PDU字符輸出,用回車符結束,發送成功會返回“OK”。需要注意的是在這之前最好用“ATEO”關掉自動回顯功能,這樣可以減小數據量,提高發送速度。
3.2 短信接收
信息通過GSM網絡發送到服務器端后同樣需要GSM模塊來接收。將一個正常工作的GSM模塊以及SIM卡等連接好以后可以設置自動接收,用命令“AT+CMNI=模式選擇”來設置新消息到達的方式(具體格式請參見相關手冊)。同樣也可以用查詢的方式:AT+CMGL=0來讀取新消息。
讀取到的消息采用的是PDU編碼,消息中有許多附加的信息,比如記錄編號、時間、發送人等。進行格式分析的時候,注意很多字段采用交換順序的方式存放PDU碼,如果服務器性能好的話可以把這部分工作放到服務器上面做,降低設計難度。
在編程的時候要注意接收的延時問題,區分模塊的“無響應”和“傳輸完”兩種情況。有時候模塊可能不能響應發送的命令,需要重發,但這時服務器并不知道,它看到的卻是“正在響應,需要等待”,如果不排除這種情況那么很容易出現“死機”狀態。經過實際驗證,比較好的方法是吸取TCP/IP的重傳形式,使用定時器,每收到一個數據包就把定時器清零,給予模塊足夠的響應時間。當收到結束字符“OK”或者計數器溢出的時候程序返回。經實際驗證該方法非常有效。
具體的命令格式和字段協議請參照模塊的使用手冊。對GSM模塊的論述文章較多,但很多都未對穩定性和差錯可恢復性做周到考慮,就服務器端而言這是至關重要的,必須考慮到。
4 信息處理
信息的處理主要是信息提取和數據庫應用。信息提取注意和前面的信息生成相對應,不要錯位;不僅要記錄下對方發送的位置信息還要記錄下對方的號碼以及定義的特殊操作等內容,便于執行特殊功能和消息回送。
取得需要的數據后需要在數據庫中查找對應小區和基站代號的實際位置。理論上講每個基站都有自己的代號和地理位置,這些都記錄在運營商的資料數據庫中。但是這些數據作為商業機密是不會公開的,所以很難取得。目前網上僅有的部分數據是人為測試得出的,相當地少,很多時候不能實現定位查找。如果運營商能開放這個數據庫接口,那樣定位精度能在1km內(因為單個基站的覆蓋半徑一般在2km內,如果采用多基站定位精度還能得到提高)。
為了給予查詢者足夠的參考信息,可以把相鄰的地理位置一并告知,這需要模糊查找或者相關查找。在建立數據庫的時候也可以把相應的重要單位位置,比如酒店,車站等存儲在數據庫中,在查詢的時候一并返回,于是查詢者就知道自己的周邊環境了。
在這里使用的是微軟的ADO數據庫技術提供和數據庫無關的接口。
如果信息太多還可以在輸出前進行二次篩選,去掉相關性弱的數據,同時根據用戶的選擇決定是否輸出相鄰數據或者特定信息。在一個具體系統中,也可根據需要把不同的查找要求。
5 信息回送
將服務器查到的數據回送給請求查詢的手機。這里要使用先前提取的手機號碼。PDU數據格式生成和GSM發送模塊一樣,在此不贅述。回送完成后服務器繼續監聽請求。
6 信息顯示
請求端的GSM模塊在服務器處理完信息后將得到具體的地理位置消息,這時可以通過查詢或者新消息自動提示的方法用AT命令讀出,送到相關的顯示模塊進行顯示,最終完成整個定位過程。效果如圖3所示(由于數據庫信息有限所以目前位置還很寬泛)。

7 結束語
在當前條件下實現蜂窩定位有兩個難點:一是基站數據庫信息是運營商的商業資料,不對外公示,所以定位精度受限于數據庫的詳細程度。二是一般GSM設備的物理層通信協議還沒有對當前基站和鄰近基站的其他參數進行監聽和記錄,不能進行更高級的物理信號定位,當今后的射頻部分能檢測到的參數更多的時候這種定位方式將發生質的變化;目前的GSM設備都是記錄了當前基站的代號和顏色代碼以及信號強度等,鄰近基站只有顏色代碼和信號強度,缺少關鍵的基站代碼,這是不能提高定位精度的又一大障礙。
從技術角度看解決這些問題有很大的可行性,目前很多的手機生產商已經就此方面技術申請了專利,相信不久的將來就有更加方便,廉價,靈活的蜂窩定位技術出現。