討厭裝逼的人
金牌會員
發(fā)短消息
關(guān)注Ta
積分 6786
帖子 388
威望 21343 個
禮品券 55 個
專家指數(shù) -35
注冊 2008-7-18 專業(yè)方向
無線規(guī)劃
回答問題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
|
大
中
小
發(fā)表于 2009-04-10 20:54:39
只看樓主
|
GPS通訊協(xié)議(NMEA0183)解析 說起NMEA協(xié)議,只要接觸過GPS設(shè)備的人,或者說是要用到GPS設(shè)備研發(fā)的人都知道,這是一個很常用的GPS通訊協(xié)議,而且也有很多人遇到關(guān)于NEMA協(xié)議的一些問題,我忽然有一個想法,就是按照自己對這個協(xié)議的一些理解,寫一點這方面的東西,看是不是能幫剛剛?cè)腴T的人解答一些疑問,由于筆者水平有限,這個東西也只能算是一個簡單介紹,就算是知識普及吧,希望能引高手出來大家一起討論。好了,言歸正傳,我們開始吧!
GPS(全球定位系統(tǒng))接收機與手持機之間的數(shù)據(jù)交換格式一般都由生產(chǎn)廠商缺省定制,其定義內(nèi)容普通用戶很難知曉,且不同品牌、不同型號的GPS接收機所配置的控制應(yīng)用程序也因生產(chǎn)廠家的不同而不同。所以,對于通用GPS應(yīng)用軟件,需要一個統(tǒng)一格式的數(shù)據(jù)標(biāo)準,以解決與任意一臺GPS的接口問題。NMEA-0183數(shù)據(jù)標(biāo)準就是解決這類問題的方案之一。NMEA協(xié)議是為了在不同的GPS導(dǎo)航設(shè)備中建立統(tǒng)一的RTCM(海事無線電技術(shù)委員會)標(biāo)準,它最初是由美國國家海洋電子協(xié)會(NMEA—The NationalMarine Electronics Association)制定的。NMEA協(xié)議有0180、0182和0183這3種,0183可以認為是前兩種的升級,也是目前使用最為廣泛的一種
NMEA通訊協(xié)議硬件接口
符合NMEAO183標(biāo)準的GPS接收機的硬件接口能夠兼容計算機的RS-232C協(xié)議串口,然而,嚴格來說NMEA標(biāo)準不是RS-232C,規(guī)范推薦依照EIA422(也稱為RS-422)。是一個與RS-232C不同的系統(tǒng)。標(biāo)準RS-232C采用負邏輯,即邏輯“1”表示-5V~ -15v,邏輯“0”表示+5V~+15V,利用傳輸信號線和信號地之間的電壓差進行傳輸。而EIA-422是利用導(dǎo)線之間的信號電壓差來傳輸信號的,其每個通道要用兩條信號線,一條是邏輯“1”,~條是邏輯“0”,通過傳輸線驅(qū)動器和傳輸線接收器實現(xiàn)邏輯電平和電位差之間的轉(zhuǎn)換,一般允許驅(qū)動器輸出為±2V~ ±6V 。
雖然存在區(qū)別,但在實際使用中,如果只是接收GPS的輸出.則只需兩根信號線 GPS數(shù)據(jù)輸出線和信號地線,可以直接將EIA-422輸出通道兩條信號線的中一條同計算機的Rs232C輸入線相連(這個方法我并沒有試驗過,是從別的地方聽來的,有興趣有條件的兄弟可以動手實驗一下,不過后果自負哦!呵呵)。
NMEA通訊協(xié)議所定義的標(biāo)準通訊接口參數(shù)為:
波特率:4800bit/s;
數(shù)據(jù)位:8位;
停止位:1位;
奇偶校驗:無;
NMEA-OI83語句解析
NMEA通訊協(xié)議所規(guī)定的通訊語句都已是以ASCII碼為基礎(chǔ)的,NMEA-0183協(xié)議語句的數(shù)據(jù)格式如下:“$”為語句起始標(biāo)志;“,”為域分隔符;“ *”為校驗和識別符,其后面的兩位數(shù)為校驗和,代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個字符);“/”為終止符,所有的語句必須以來結(jié)束,也就是ASCII 字符的“回車”(十六進制的0D)和“換行”(十六進制的0A)。
典型的NMEA0183語句如下面的GPGGA語句。
當(dāng)GPS正常工作時,語句如:
$GPGGA,053152,3957.7484,N,11626.7626,E,1,06,1.5,88.1,M,-8.0,M,,*64
當(dāng)GPS收不到衛(wèi)星信號時,GPGGA語句輸出變?yōu)椋?br />
$GPGGA,053247,3957.7484,N,11626.7626,E,0,00,,,M,,M,,*46
除標(biāo)準語句外,NMEAO183規(guī)范還允許個別廠商定義私有的語句格式,這些語句以“$P”開始,然后是三個字符長度的廠商識別號,跟著是廠商定義的數(shù)據(jù),接下來的數(shù)據(jù)格式與標(biāo)準格式相同。
如Garmin的PGRME私有格式如下:
$PGRME,8.9,M,6.1,M,10.8,M*11
其中,“P”代表私有格式,“GRM”是Garmin的代碼,“E”表示語句類型。
NMEA數(shù)據(jù)處理中的注意事項
如果開發(fā)基于GPS的應(yīng)用系統(tǒng),就需要將GPS作為信息源,正確接收和解析GPS發(fā)送的NMEA一0183數(shù)據(jù)。此時,在編程實現(xiàn)時需要注意幾個問題。
1、通訊端口的設(shè)置
雖然NMEA規(guī)范推薦的串行通訊參數(shù)為“波特率:4800;奇偶校驗:無;數(shù)據(jù)位:8;停止位:1”,但也有廠商的產(chǎn)品允許用戶將波特率設(shè)置的更高,此時需要注意設(shè)置計算機的接口參數(shù)與GPS設(shè)備一致。
2、 所需信息的正確提取
NMEA—O183是以語句形式發(fā)送數(shù)據(jù)的,接收機可能發(fā)送很多類型的語句,而我們需要的可能只是某些語句中的幾個字段。因此就需要對接收到的數(shù)據(jù)進行解析,取得所需的信息。另外,可能會由于小數(shù)點位數(shù)不同等原因,語句的長度是可變的,因而分離感興趣的信息時,不能按照該信息在語句中所處的字符位置來查找,只能依據(jù)逗號分隔符,這一點在數(shù)據(jù)提取的過程中非常重要。筆者就經(jīng)常遇到一些應(yīng)用軟件工程師,在提取NMEA語句中的信息的時候按照字符的長度提取,這樣編出來的程序,通用性差,而且經(jīng)常會出現(xiàn)信息提取錯誤的問題。
以上都是我們在程序中需要注意的問題。為解決信息的正確提取問題,并提高程序的復(fù)用性,可以編寫適當(dāng)?shù)暮瘮?shù),如一個函數(shù)用來分離語句(即通過$字符判斷語句頭,一直到換行回車結(jié)束一條語句);一個函數(shù)用來判斷語句中的字段數(shù)(通過“,”分隔符來提取語句字段),還有一個函數(shù)用來返回語句中指定字段的內(nèi)容。有了這三個函數(shù),就可以方便的提取所需的信息,此時的工作只是簡單字符串比較和顯示格式的變換
檢驗和的計算與比較
最后,為了確保所采集的GPS數(shù)據(jù)的可靠性,必須進行檢驗和的計算與比較。檢驗和hh為“$”與“*”之間的所有字符按位異或的結(jié)果,并將其高4位和低4位各用一個十六進制數(shù)(字母大寫)表示出來。為此,需編寫函數(shù),從語句頭識別符“*”開始,計算檢驗和,直至“*”到達為止,這時“*”號后面的兩個字符就是檢驗碼,將自己的計算結(jié)果同這兩個檢驗碼字符比較,若不同,按出錯處理,并繼續(xù)運行;若相同,則說明通訊成功,數(shù)據(jù)接收正確,可以處理該語句,提取所需數(shù)據(jù)。
這里簡單介紹了NMEA一0183規(guī)范的接口定義和數(shù)據(jù)格式,但是篇幅限制沒有對NMEA語句進行詳細的解析,語句的詳細說明可參照NMEA規(guī)范或各GPS接收機的說明書。我現(xiàn)在手中有一份中文版本的NMEA協(xié)議語句的詳細解析,當(dāng)然并不是全部的語句,是根據(jù)GARMIN技術(shù)手冊翻譯過來的,如果有興趣了解的兄弟可以留下郵箱。
以上這些文字,是AKA按照自己對NMEA協(xié)議的的理解,再加上一點東找西看來的東西寫出來的,如對其中的問題有疑問,歡迎探討!
|
掃碼關(guān)注5G通信官方公眾號,免費領(lǐng)取以下5G精品資料
1、回復(fù)“YD5GAI”免費領(lǐng)取《中國移動:5G網(wǎng)絡(luò)AI應(yīng)用典型場景技術(shù)解決方案白皮書》
2、回復(fù)“5G6G”免費領(lǐng)取《5G_6G毫米波測試技術(shù)白皮書-2022_03-21》
3、回復(fù)“YD6G”免費領(lǐng)取《中國移動:6G至簡無線接入網(wǎng)白皮書》
4、回復(fù)“LTBPS”免費領(lǐng)取《《中國聯(lián)通5G終端白皮書》》
5、回復(fù)“ZGDX”免費領(lǐng)取《中國電信5G NTN技術(shù)白皮書》
6、回復(fù)“TXSB”免費領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解》
7、回復(fù)“YDSL”免費領(lǐng)取《中國移動算力并網(wǎng)白皮書》
8、回復(fù)“5GX3”免費領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1》
| |