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