劉慶元,鄒 磊
(中南大學(xué) 地球科學(xué)與信息物理學(xué)院,湖南 長沙 410083)
GPS-OEM板因其體積小、功耗低、性能優(yōu)良而且價(jià)格低廉的優(yōu)勢而被廣泛使用。然而,由于各種GPS-OEM板的生產(chǎn)廠商不同,其輸出的數(shù)據(jù)包格式也不盡相同,使得不同芯片或者接口的GPSOEM板無法組合使用。雖然美國國家海洋電子協(xié)會制定了通用的NMEA-0183協(xié)議,但是由于該格式的局限性,無法勝任測量工作[1]。不同GPSOEM芯片有不同的通訊接口,使得芯片的跨平臺混合使用變得很困難,而且數(shù)據(jù)處理程序?qū)R恍院軓?qiáng),一旦芯片數(shù)據(jù)輸出格式或者接口發(fā)生變化,數(shù)據(jù)處理程序便無法再使用。
為解決上述矛盾,本文設(shè)計(jì)編寫了服務(wù)程序,運(yùn)行于用戶的軟件和GPS芯片硬件之間,來統(tǒng)一數(shù)據(jù)包格式和數(shù)據(jù)的通訊方式,使得需要GPS觀測原始數(shù)據(jù)的測量型用戶能獲取到統(tǒng)一的、與芯片無關(guān)的、可靠的數(shù)據(jù),同時(shí),不需要GPS原始數(shù)據(jù)的用戶還能像以前一樣,不受任何影響的使用。
數(shù)據(jù)處理程序工作模式如圖1所示,服務(wù)器端處理程序可以運(yùn)行于任何系統(tǒng)中(可以是計(jì)算機(jī),也可以是PDA甚至是單片機(jī)),設(shè)計(jì)有多種數(shù)據(jù)接收模塊,可以接收各種數(shù)據(jù),并且按照擴(kuò)展的NMEA-0183協(xié)議轉(zhuǎn)發(fā)到固定端口的UDP連接上。用戶端程序同樣可以運(yùn)行于各種平臺,只要能連接Internet(沒有Internet連接時(shí),可以連接本機(jī)),便可以接收到GPS觀測數(shù)據(jù)[2],無需關(guān)心數(shù)據(jù)來自哪一種GPS-OEM芯片,這樣就可以實(shí)現(xiàn)不同芯片的跨平臺使用。
圖1 GPS數(shù)據(jù)處理服務(wù)工作模式
NMEA-0183協(xié)議是美國國家海洋電子協(xié)會(National Marine Electronics Association)為統(tǒng)一海洋導(dǎo)航規(guī)范而制定的標(biāo)準(zhǔn),是GPS接收機(jī)應(yīng)當(dāng)遵守的標(biāo)準(zhǔn)協(xié)議,也是目前GPS接收機(jī)上使用最廣泛的協(xié)議[3-4]。
NMEA-0183格式數(shù)據(jù)串的所有數(shù)據(jù)都采用ASCII文本字符表示,數(shù)據(jù)傳輸以“$”開頭,語句頭由5個字母組成,前兩個一般為“GP”,表示該語句是屬于何種系統(tǒng),后3個字母表示“語句ID”,表示該語句是關(guān)于何方面的數(shù)據(jù)。語句頭后是數(shù)據(jù)體,包含不同的數(shù)據(jù)體字段,語句末尾為校驗(yàn)碼(可選),以回車換行符<CR><LF>結(jié)束。每行語句最多包含82個字符。數(shù)據(jù)字段以逗號分隔識別,空字段保留逗號。常用語句及其含義如表1所列。
表1 NMEA-0183協(xié)議的語句及含義
然而,NMEA-0183協(xié)議常用的定位信息僅能輸出定位的最終結(jié)果信息,卻無法輸出GPS的觀測數(shù)據(jù)信息,而對測量來說這恰恰是最重要的數(shù)據(jù)。
目前一些廠商生產(chǎn)的GPS-OEM芯片可以輸出GPS觀測數(shù)據(jù),比如衛(wèi)星星歷、偽距等數(shù)據(jù),但是數(shù)據(jù)包一般遵守廠商自定義的數(shù)據(jù)格式,因此,不同芯片的GPS-OEM板便不能通用。當(dāng)前的GPSOEM測量數(shù)據(jù)處理程序,由于數(shù)據(jù)包格式不同,僅能針對特定型號的GPS-OEM板,無法實(shí)現(xiàn)不同芯片的混合使用。
綜上,不同GPS-OEM廠商定義了不同的數(shù)據(jù)包,共同遵循的NMEA-0183協(xié)議又無法輸出GPS測量的全部數(shù)據(jù),因此,有必要提出一個相互協(xié)調(diào)的方案。
要擴(kuò)展NMEA-0183協(xié)議滿足測量需要,則必須可以輸出偽距觀測值(目前大多數(shù)GPS-OEM板可以輸出偽距信息)和衛(wèi)星星歷[5]。本文在保留了原有NMEA-0183協(xié)議語句的基礎(chǔ)上,按照該協(xié)議對語句的要求,增加偽距輸出GPPSD語句和衛(wèi)星星歷輸出GPEPHF、GPEPHS和GPEPHT語句(星歷數(shù)據(jù)較多,固分3條語句)。一條GPPSD語句可以輸出多個偽距信息,但顧忌到數(shù)據(jù)包長度限制,最多允許3個觀測值。衛(wèi)星星歷數(shù)據(jù)量較大,需要分3個數(shù)據(jù)包發(fā)送,具體格式說明如下:
格式:$GPPSD,<1>,<2>,<3>,<4>,<2>,<3>,<4>*hh<CR><LF>
舉 例:$GPPSD,2,15,528348,24158712.5312,22,528348,20437393.1094*A3
<1>、本條語句包含的偽距個數(shù)
<2>、GPS衛(wèi)星SV編號
<3>、偽距測量時(shí)間
<4>、衛(wèi)星到接收機(jī)的偽距
$GPEPHF,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
舉 例:$GPEPHF,02,5.1840E+05,5.153691E+03,8.247306E-03,3.041002E-01,-6.05476E-01*7B
<1>、GPS衛(wèi)星SV編號;
<2>、參考時(shí)間toe;
<4>、軌道偏心率e;
<5>、參考時(shí)刻的軌道傾角i0;
<6>、參考時(shí)刻平近點(diǎn)角M0。
$GPEPHS,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
舉 例:$GPEPHS,02,9.525346E-01,-8.267319E-01,1.439048E-09,-2.56977E-09,2.53049E-06*5C
<1>、GPS衛(wèi)星SV編號;
<2>、近地點(diǎn)角距ω;
<3>、參考時(shí)刻的升交點(diǎn)赤經(jīng)Ω0;
<4>、衛(wèi)星平均角速度的改正數(shù)Δn;
<5>、升交點(diǎn)赤經(jīng)變化率Ω-dot;
<6>、升交點(diǎn)正弦調(diào)和改正數(shù)Cus。
$GPEPHF,<1>,<2>,<3>,<4>,<5>,<6>*hh<CR><LF>
舉例:$GPEPHF,02,-9.16621E-07,-6.22543E-08,-1.89728E-08,-5.65938E+01,2.21313E+02*2F
<1>、GPS衛(wèi)星SV編號;
<2>、升交點(diǎn)余弦調(diào)和改正數(shù)Cuc;
<3>、軌道傾角正弦調(diào)和改正數(shù)Cis;
<4>、軌道傾角余弦調(diào)和改正數(shù)Cic;
<5>、軌道半徑正弦調(diào)和改正數(shù)Crs;
<6>、軌道半徑余弦調(diào)和改正數(shù)Crc。
不同GPS-OEM板發(fā)送的數(shù)據(jù)包所遵守的協(xié)議不同,必須要將其轉(zhuǎn)換為擴(kuò)展的NMEA-0183協(xié)議,統(tǒng)一不同GPS-OEM板是數(shù)據(jù)輸出接口。用戶程序僅需要按照擴(kuò)展的NMEA-0183格式來解析數(shù)據(jù)包,就可以獲取需要的數(shù)據(jù),而無需知道GPS-OEM板原始的數(shù)據(jù)格式。
服務(wù)端程序通過通用的TCP/IP協(xié)議中用戶數(shù)據(jù)包協(xié)議(UDP)來轉(zhuǎn)發(fā)數(shù)據(jù)包。UDP是一個簡單的面向數(shù)據(jù)包的傳輸層協(xié)議,為網(wǎng)絡(luò)層以上和應(yīng)用層以下提供了一個簡單的接口。因TCP/IP協(xié)議的通用性,用戶程序可以不受系統(tǒng)限制地從Internet上獲取數(shù)據(jù)。在沒有Internet連接的情況下,還可以連接本機(jī),為本機(jī)的不同程序提供數(shù)據(jù)[2]。
考慮到跨平臺特性,服務(wù)端程序采用了優(yōu)秀的跨平臺應(yīng)用程序庫Qt(關(guān)于Qt請參考相關(guān)文檔)。Qt封裝了對設(shè)備接口的輸入輸出類QIODevice類,利用該類打開串口等計(jì)算機(jī)外圍接口。QIODevice類從外圍接口中按字節(jié)讀取數(shù)據(jù),存放于QByteArray字節(jié)數(shù)組中,并轉(zhuǎn)換為QString字符串對象,通過字符串處理函數(shù),最終把讀入的數(shù)據(jù)轉(zhuǎn)換為擴(kuò)展的NMEA-0183協(xié)議格式[6]。最后,通過Qt封裝的QUdpSocket類,將轉(zhuǎn)換好的數(shù)據(jù)包通過Socket連接發(fā)送到UDP端口。
為實(shí)現(xiàn)在各種系統(tǒng)平臺上都能正常工作,本文選用跨平臺的QT庫編寫數(shù)據(jù)包轉(zhuǎn)換轉(zhuǎn)發(fā)服務(wù)器程序。服務(wù)器端在Windows Xp下運(yùn)行如圖2所示。
圖2 服務(wù)器端程序在Windows下運(yùn)行
服務(wù)器端運(yùn)行后,綁定本機(jī)IP地址127.0.0.1上的9228端口,同時(shí)從串口COM5中讀取Trimble公司的Lassen IQ芯片發(fā)送的數(shù)據(jù)。Lassen IQ發(fā)送TSIP協(xié)議的數(shù)據(jù)包(關(guān)于TSIP協(xié)議的具體定義,請參考Trimble公司的說明),該數(shù)據(jù)包為二進(jìn)制格式,服務(wù)器端程序提取TSIP數(shù)據(jù)包中的相關(guān)信息,生成擴(kuò)展的NMEA-0183協(xié)議格式,發(fā)送到127.0.0.1(本機(jī))的9228端口。
在命令行下編寫程序模擬用戶獲取數(shù)據(jù),連接本機(jī)的9228端口,讀取服務(wù)器端發(fā)送來的數(shù)據(jù),結(jié)果如圖3所示,正確地讀取了數(shù)據(jù)包。
圖3 用戶連接UDP端口獲取的數(shù)據(jù)
同時(shí),程序還在Linux(內(nèi)核版本3.0)上進(jìn)行了實(shí)驗(yàn),服務(wù)器端同樣將Lassen IQ數(shù)據(jù)包成功轉(zhuǎn)換為擴(kuò)展的NMEA-0183數(shù)據(jù)包。
本文提出了利用擴(kuò)展NMEA-0183協(xié)議語句的辦法,即滿足了與其他軟件的兼容性,又滿足了測量型GPS數(shù)據(jù)的發(fā)送;通過數(shù)據(jù)包轉(zhuǎn)發(fā)到UDP端口的辦法,使得用戶完全不必關(guān)心是何種設(shè)備、通過何種方式發(fā)送的何種數(shù)據(jù)包,只要能連接Internet就可以獲取所需要的數(shù)據(jù)包。
本文通過實(shí)驗(yàn),將Trimble公司的TSIP協(xié)議數(shù)據(jù)包成功地轉(zhuǎn)換為擴(kuò)展的NMEA-0183協(xié)議數(shù)據(jù)包,并通過UDP端口發(fā)送給用戶,證明了方案的可行性。
[1]李征航,黃勁松.GPS測量原理及應(yīng)用[M].武漢:武漢大學(xué)出版社,2005.
[2]謝希仁,計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008.
[3]王若璞,張超.Windows CE下手持電腦對GPS OEM板設(shè)置與 通訊[J].測繪科學(xué)技術(shù)學(xué)報(bào),2007,24(S0):22-24.
[4]袁德寶,崔希民,臧永強(qiáng),等,基于VC++的GPS-OEM板串行通信關(guān)鍵算法的設(shè)計(jì)與實(shí)現(xiàn)[J].測繪科學(xué),2008,33(6):170-172.
[5]劉慶元,余文坤,楊哲,等.GPS-OEM板原始數(shù)據(jù)向RINEX格式轉(zhuǎn)換程序設(shè)計(jì)[J].礦山測量,2009(5):31-33.
[6]成潔,盧紫毅.Linux窗口程序設(shè)計(jì)—Qt4精彩實(shí)例分析[M].北京:清華大學(xué)出版社,2008.