| 摘要 闡述在WiTadows CE嵌入式系統(tǒng)中,利用串口實(shí)現(xiàn)GPS和PDA通信的方法。首先,介紹GPS信號(hào)的數(shù)據(jù)格式,并對(duì)系統(tǒng)的軟硬件環(huán)境及串行通信進(jìn)行描述。最后,設(shè)計(jì)GPS信號(hào)處理模塊,詳細(xì)說(shuō)明如何使用嵌入式程序語(yǔ)言開(kāi)發(fā)串口通信程序,并給出具體步驟和部分實(shí)現(xiàn)代碼。 關(guān)鍵詞 GPS PDA 串口通信 Windows CE 引言 3PS即全球定位系統(tǒng),主要有三大組成部分——空間星座部分、地面監(jiān)控部分和用戶設(shè)備部分。其中(GPS空間星座部分、地面監(jiān)控部分均為美國(guó)所控制;(GPS的用戶設(shè)備主要由接收機(jī)硬件和處理軟件組成。用戶通過(guò)用戶設(shè)備接收GPS衛(wèi)星信號(hào),經(jīng)信號(hào)處理而獲得用戶位置、速度等信息,最終實(shí)現(xiàn)利用GPS進(jìn)行導(dǎo)航和定位的目的。目前,許多GPS廠商遵循NMEAO183協(xié)議針對(duì)PDA掌上電腦開(kāi)發(fā)許多導(dǎo)航型GPS。
GPS通過(guò)串口與PDA實(shí)現(xiàn)數(shù)據(jù)通信,利用(3PS傳來(lái)的數(shù)據(jù),可以在PDA上得到物體的實(shí)時(shí)位置、速度等參數(shù)。通過(guò)與GIS系統(tǒng)的集成,可以在PDA上實(shí)現(xiàn)數(shù)字導(dǎo)航,很直觀地在地圖上了解所處的位置等信息。下面具體說(shuō)明如何實(shí)現(xiàn)GPS與PDA的串口通信。 1 串行通信 每個(gè)Pocket PC都配有一個(gè)串行端口,以便PocketPC與外部串行設(shè)備之間進(jìn)行通信。串行端口的本質(zhì)功能是作為芯片和串行設(shè)備之間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從芯片經(jīng)過(guò)串行端口發(fā)送出去時(shí),字節(jié)數(shù)據(jù)被轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時(shí),串行的位將被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。Windows CE使用了通信驅(qū)動(dòng)程序Comm.drv,以便使用標(biāo)準(zhǔn)的Windows API函數(shù)發(fā)送和接收數(shù)據(jù)。驅(qū)動(dòng)程序通常由串口設(shè)備制造商提供,以便將硬件與Windows CE連接。在程序設(shè)計(jì)中,模擬了一個(gè)COM6串口。先使用Comm6.PoxtOpen打開(kāi)串口,設(shè)置Comm控件的屬性,Timer觸發(fā)OnComm接收GPS信號(hào)的事件,實(shí)現(xiàn)GPS信號(hào)的實(shí)時(shí)接收。GPS提供串行通信接口,串行通信參數(shù)為:波特率=57 600 bps,數(shù)據(jù)位=8位,開(kāi)始位=1位,停止位=1位,無(wú)奇偶校驗(yàn)。 2 GPS數(shù)據(jù)格式 NMEA0183協(xié)議是美國(guó)國(guó)家海洋電子協(xié)會(huì)(NationaIMarine Electronlcs Association)制定的GPS接口協(xié)議標(biāo)準(zhǔn)。NMEA0183定義了若干代表不同含義的語(yǔ)句,每個(gè)語(yǔ)句實(shí)際上是一個(gè)ASCII碼串。這種碼直觀,易于識(shí)別和應(yīng)用。在試驗(yàn)中,不需要了解NMEA0183通信協(xié)議的全部信息,僅需要從中挑選出需要的那部分定位數(shù)據(jù),其余的信息忽略掉。
GPS與掌上電腦通信時(shí),通過(guò)串口每秒鐘發(fā)送10條數(shù)據(jù)。實(shí)際導(dǎo)航應(yīng)用讀取GPS的空間定位數(shù)據(jù)時(shí),可以根據(jù)需要每隔幾秒鐘更新一次經(jīng)緯度和時(shí)問(wèn)數(shù)據(jù),不必頻繁地更新數(shù)據(jù),否則,會(huì)浪費(fèi)掌上設(shè)備有限的電能。如果和衛(wèi)星通信正常,可以接收到的數(shù)據(jù)格式如下:$GPGGA,<l>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<u>,<12>*hh<cR><LF>。其具體信息如表l所列。  一個(gè)完整的NEMA0183語(yǔ)句是從起始符“$GPGGA”到終止符“<CR><LF>”為止的一段字符串。需要掌握的信息是經(jīng)緯度、經(jīng)緯度方向、GPS定位狀態(tài)和接收信號(hào)的時(shí)間。所以當(dāng)接收到這樣一個(gè)完整的NEMA0183語(yǔ)句時(shí),提取有用信息的方法是:先判定起始符$GPGGA的位置,從起始符開(kāi)始讀人數(shù)據(jù),再通過(guò)異或校驗(yàn)后的語(yǔ)句中尋找字符“,”,然后截取前后兩個(gè)“,”之間的字符(串)獲得所關(guān)心的數(shù)據(jù),并以回車(chē)符為一個(gè)CPS語(yǔ)句的終止符,得到一個(gè)完整的GPS信號(hào)。在提取出的GPS語(yǔ)句中,找尋經(jīng)緯度所在的逗號(hào)位置,讀出經(jīng)緯度坐標(biāo),再將經(jīng)緯度坐標(biāo)進(jìn)行度數(shù)的轉(zhuǎn)換。因?yàn)榈貓D的坐標(biāo)是以度數(shù)為標(biāo)準(zhǔn)的。 3 GPS信號(hào)處理 根據(jù)串行通信的原理,結(jié)合GPS數(shù)據(jù)的格式,可以設(shè)計(jì)GPS信號(hào)處理模塊以提取與(3PS位置相關(guān)的信息。由于一般用戶坐標(biāo)系均為制圖坐標(biāo)系,所以還要把從GPS信號(hào)中提取的坐標(biāo)由WGS84坐標(biāo)變換為相應(yīng)的54、80坐標(biāo)或地方坐標(biāo)。
3.1 GPS信號(hào)處理模塊設(shè)計(jì) GPS數(shù)據(jù)處理模塊的設(shè)計(jì)方案如圖l所示。GPS接收機(jī)通過(guò)串口6將定位數(shù)據(jù)(NMEA 0183 Ver2.O)傳給Pocket PC,并將GPS數(shù)據(jù)在電子地圖上定位。在EVB中,借助Comm控件將定位數(shù)據(jù)讀進(jìn)來(lái),接著進(jìn)行定位數(shù)據(jù)的分類,并提取出所需要的信息,同時(shí)將這些有用的信息傳給主應(yīng)用程序。主應(yīng)用程序再將GPS接收機(jī)的控制信息整理成NEMA0183 VER2.O語(yǔ)句,通過(guò)Comm控件的傳遞并發(fā)送到GPS接收機(jī)。這樣,P0cket。PC與GPS接收機(jī)的串口通信和GPS定位數(shù)據(jù)處理功能通過(guò)進(jìn)程外的ActiveX服務(wù)器封裝,將系統(tǒng)的實(shí)時(shí)性能通過(guò)操作系統(tǒng)的進(jìn)程管理器來(lái)實(shí)現(xiàn).從而繞過(guò)了EVB單線程的不足。  3.2 GPS信號(hào)接收和處理過(guò)程 GPS接收到位置信號(hào)后,系統(tǒng)將對(duì)GPS的定位信息進(jìn)行分解并提取出有用數(shù)據(jù)。GPS信號(hào)接收和處理的過(guò)程:通過(guò)串口6將GPS輸出的數(shù)據(jù)傳遞給PDA,PDA主程序獲得目標(biāo)當(dāng)前的位置(經(jīng)緯度坐標(biāo)、海拔),將接收機(jī)獲得的GPS數(shù)據(jù)進(jìn)行分解,從中得到目標(biāo)當(dāng)前的位置和格林威治時(shí)間(該時(shí)間加上8小時(shí)即為我國(guó)標(biāo)準(zhǔn)時(shí)),經(jīng)過(guò)相應(yīng)的坐標(biāo)轉(zhuǎn)換,再將當(dāng)前位置顯示在電子地圖上。GPS信號(hào)接收和處理如圖2所示。  3.3 GPS信號(hào)的接收程序?qū)崿F(xiàn) 系統(tǒng)采用Embedded Visual Basic中的Comm通信控件和Timer定時(shí)器。定時(shí)器設(shè)置為每隔2 s更新1次經(jīng)緯度和時(shí)間數(shù)據(jù)。每個(gè)Comm控件提供一個(gè)通信端口,實(shí)現(xiàn)數(shù)據(jù)傳輸。
開(kāi)始實(shí)時(shí)接收。 Prlvate Sub mnustart() Timerl.lrlteIval=2000 Timerl.Enabled=True Comml.CommPort=6 Comml.Settings=″57600,N,8.1″ Comml.PortOpen=True strsmsdata=Comml.Input ′去除串口Buffer中的暫存信息 Timerl_Timer End Sub Private Sub TimerLTimer() Dim IngNextvbCrLf As Long′記錄下一個(gè)回車(chē)換行符位置 Dim IngFirstGPGGA As Long Dim Message As String Dim sDate As String Dim cn strsmsdata=Comml.Input IngFirstGPGGA=Instr(1,strsmsclata,″$GPGGA″) If lngFirstGPGGA Then IngNextVbCrLf=lnstr(IngFirstGPGGA+1, strsmsdata,vbCrLf) Message=Mid(Strsmsdata,ingFirstGPGGA,lngNextvb CrLf-ingFirstGPGGA) ParseNMEAMessage Message,dblXCoord,dblYCoord,sDate ProcessInput dblXCoord,dblYCoord End Tf
4 GPS坐標(biāo)變換 GPS定位所得出的結(jié)果屬于WGS84坐標(biāo),而在工程上實(shí)用的大多是國(guó)家坐標(biāo)系,或者是獨(dú)立坐標(biāo)系。獨(dú)立坐標(biāo)系一般是在國(guó)家坐標(biāo)系基礎(chǔ)上形成的,因此,GPS定位結(jié)果的使用中就有與國(guó)家坐標(biāo)系間的坐標(biāo)轉(zhuǎn)換問(wèn)題。一般要通過(guò)兩步轉(zhuǎn)換:首先將WGS84的大地坐標(biāo)(L,B)轉(zhuǎn)換為對(duì)應(yīng)于WGS84橢球的高斯平面坐標(biāo)(X84、Y84),然后再經(jīng)過(guò)平面坐標(biāo)轉(zhuǎn)換,將高斯平面坐標(biāo)(X84、Y84)強(qiáng)制附合到本地高斯平面坐標(biāo)系統(tǒng)。
4.1高斯換算 將GPS定位所得出的大地坐標(biāo)(L,B)轉(zhuǎn)換為高斯平面坐標(biāo)(X84、Y84)。有關(guān)的推導(dǎo)過(guò)程較復(fù)雜,本文只給出結(jié)果: |