GPS通訊協議(NMEA0183)協議解析
核心提示:說起NMEA協議,只要接觸過GPS裝置的人,或者說是要用到GPS裝置研發的人都知道,這是一個很常用的GPS通訊協議,而且也有很多人遇到關於NEMA協議的一些問題
說起NMEA協議,只要接觸過GPS裝置的人,或者說是要用到GPS裝置研發的人都知道,這是一個很常用的GPS通訊協議,而且也有很多人遇到關於NEMA協議的一些問題,我忽然有一個想法,就是按照自己對這個協議的一些理解,寫一點這方面的東西,看是不是能幫剛剛入門的人解答一些疑問,由於筆者水平有限,這個東西也只能算是一個簡單介紹,就算是知識普及吧,希望能引高手出來大家一起討論。好了,言歸正傳,我們開始吧!
GPS(全球定位系統)接收機與手持機之間的資料交換格式一般都由生產廠商預設定製,其定義內容普通使用者很難知曉,且不同品牌、不同型號的GPS接收機所配置的控制應用程式也因生產廠家的不同而不同。所以,對於通用GPS應用軟體,需要一個統一格式的資料標準,以解決與任意一臺GPS的介面問題。NMEA-0183資料標準就是解決這類問題的方案之一。NMEA協議是為了在不同的GPS導航裝置中建立統一的RTCM(海事無線電技術委員會)標準,它最初是由美國國家海洋電子協會(NMEA—The
NationalMarine Electronics Association)制定的。NMEA協議有0180、0182和0183這3種,0183可以認為是前兩種的升級,也是目前使用最為廣泛的一種
NMEA通訊協議所定義的標準通訊介面引數為:
波特率:4800bit/s;
資料位:8位;
停止位:1位;
奇偶校驗:無;
NMEA-OI83語句解析
NMEA通訊協議所規定的通訊語句都已是以ASCII碼為基礎的,NMEA-0183協議語句的資料格式如下:“$”為語句起始標誌;“,”為域分隔符;“ *”為校驗和識別符,其後面的兩位數為校驗和,代表了“$”和“*”之間所有字元的按位異或值(不包括這兩個字元);“/”為終止符,所有的語句必須以來結束,也就是ASCII
字元的“回車”(十六進位制的0D)和“換行”(十六進位制的0A)。
典型的NMEA0183語句如下面的GPGGA語句。
當GPS正常工作時,語句如:
$GPGGA,053152,3957.7484,N,11626.7626,E,1,06,1.5,88.1,M,-8.0,M,,*64
當GPS收不到衛星訊號時,GPGGA語句輸出變為:
$GPGGA,053247,3957.7484,N,11626.7626,E,0,00,,,M,,M,,*46
除標準語句外,NMEAO183規範還允許個別廠商定義私有的語句格式,這些語句以“$P”開始,然後是三個字元長度的廠商識別號,跟著是廠商定義的資料,接下來的資料格式與標準格式相同。
如Garmin的PGRME私有格式如下:
$PGRME,8.9,M,6.1,M,10.8,M*11
其中,“P”代表私有格式,“GRM”是Garmin的程式碼,“E”表示語句型別。
NMEA資料處理中的注意事項
如果開發基於GPS的應用系統,就需要將GPS作為資訊源,正確接收和解析GPS傳送的NMEA一0183資料。此時,在程式設計實現時需要注意幾個問題。
1、通訊埠的設定
雖然NMEA規範推薦的序列通訊引數為“波特率:4800;奇偶校驗:無;資料位:8;停止位:1”,但也有廠商的產品允許使用者將波特率設定的更高,此時需要注意設定計算機的介面引數與GPS裝置一致。
2、 所需資訊的正確提取
NMEA—O183是以語句形式傳送資料的,接收機可能傳送很多型別的語句,而我們需要的可能只是某些語句中的幾個欄位。因此就需要對接收到的資料進行解析,取得所需的資訊。另外,可能會由於小數點位數不同等原因,語句的長度是可變的,因而分離感興趣的資訊時,不能按照該資訊在語句中所處的字元位置來查詢,只能依據逗號分隔符,這一點在資料提取的過程中非常重要。筆者就經常遇到一些應用軟體工程師,在提取NMEA語句中的資訊的時候按照字元的長度提取,這樣編出來的程式,通用性差,而且經常會出現資訊提取錯誤的問題。
以上都是我們在程式中需要注意的問題。為解決資訊的正確提取問題,並提高程式的複用性,可以編寫適當的函式,如一個函式用來分離語句(即通過$字元判斷語句頭,一直到換行回車結束一條語句);一個函式用來判斷語句中的欄位數(通過“,”分隔符來提取語句欄位),還有一個函式用來返回語句中指定欄位的內容。有了這三個函式,就可以方便的提取所需的資訊,此時的工作只是簡單字串比較和顯示格式的變換
檢驗和的計算與比較
3、最後,為了確保所採集的GPS資料的可靠性,必須進行檢驗和的計算與比較。檢驗和hh為“$”與“*”之間的所有字元按位異或的結果,並將其高4位和低4位各用一個十六進位制數(字母大寫)表示出來。為此,需編寫函式,從語句頭識別符“*”開始,計算檢驗和,直至“*”到達為止,這時“*”號後面的兩個字元就是檢驗碼,將自己的計算結果同這兩個檢驗碼字元比較,若不同,按出錯處理,並繼續執行;若相同,則說明通訊成功,資料接收正確,可以處理該語句,提取所需資料。
這裡簡單介紹了NMEA一0183規範的介面定義和資料格式,但是篇幅限制沒有對NMEA語句進行詳細的解析,語句的詳細說明可參照NMEA規範或各GPS接收機的說明書。我現在手中有一份中文版本的NMEA協議語句的詳細解析,當然並不是全部的語句,是根據GARMIN技術手冊翻譯過來的,如果有興趣瞭解的兄弟可以留下郵箱。
以上這些文字,是AKA按照自己對NMEA協議的的理解,再加上一點東找西看來的東西寫出來的,如對其中的問題有疑問,歡迎探討!
相關推薦
GPS通訊協議(NMEA0183)協議解析
核心提示:說起NMEA協議,只要接觸過GPS裝置的人,或者說是要用到GPS裝置研發的人都知道,這是一個很常用的GPS通訊協議,而且也有很多人遇到關於NEMA協議的一些問題 說起NMEA協議,只要接觸過GPS裝置的人,或者說是要用到GPS裝置研發的人都知道,這是一個很常用的G
深入理解HTTP協議(二)——協議詳解篇
1.HTTP/1.0和HTTP/1.1的比較 RFC 1945定義了HTTP/1.0版本,RFC 2616定義了HTTP/1.1版本。 1.1建立連線方面 HTTP/1.0 每次請求都需要建立新的TCP連線,連線不能複用。HTTP/1.1 新的請求可以在上次請求建立
Objective-C的協議(Protocol)——協議的實現
協議就是定義了一組方法,然後要求其他類去實現。 以下類的複製來舉例說明,遵守NSCopying協議的類是如何實現複製的。 0x01 NSCopying協議 NSCopying是物件拷貝的協議。 類的物件如果支援拷貝,則該類應遵守並實現NSCopying協議。 用
地址解析協議(ARP)
1.3 開始 linu 網絡 報文結構 自己的 不可 分析 png 地址解析協議(ARP) 1.作用 為什麽主機需要有各自的ipv4地址和mac地址才能通信呢? ip屬於網絡層,mac地址屬於數據鏈路層。通過沿ip傳輸的路徑是邏輯路徑,由路由設備根據路由表進行轉發,而一條邏
基於Java Netty框架構建高性能的Jt808協議的GPS服務器(轉)
邏輯 利用 影響 成熟 機制 和數 rap 架構 spdy 原文地址:http://www.jt808.com/?p=971 使用Java語言開發一個高質量和高性能的jt808 協議的GPS通信服務器,並不是一件簡單容易的事情,開發出來一段程序和能夠承受數十萬臺車載接入是兩
ARP地址解析協議(圖解)
TCP/IP的第四章講到ARP地址解析協議,APR協議的作用就是尋找到對應目標的MAC地址,其方式也是很簡單的一問一答的方式,以書上的圖為例: 根據OSI模型,從上到下對資料進行封裝,但是封裝到二層時候,發現沒有對方的目的MAC地址,此時,會發送一個APR廣播請求,獲得
GPIO模擬I2C通訊協議(一)
概要: 從本節開始,我將用3-5篇部落格的篇幅對我為期3個月的本科實習做總結。本節將首先介紹I2C協議的基本時序,然後給出用GPIO模擬實現I2C功能的C程式碼。最後介紹驅動開發的一些思路。 關鍵字
TCP/IP詳解卷一之地址解析協議(ARP)
1 概述 —地址解析協議提供了一種在IPv4地址和各種網路技術使用的硬體地址之間的動態對映。 —ARP僅用於IPv4(ARP也能用於IPv4以外的地址,但很少見),IPv6使用鄰居發現協議,它被合併入ICMPv6。 —ARP會自動執行和隨時間變化,而不需要系統管理員重新配置,ARP操作通常與
C#基於TCP、UDP協議的網路通訊實現(unity)
一、TCP協議: TCP協議是面向有連線的,所以伺服器要與客戶端建立連線 伺服器端: using System; using System.Net.Sockets; using System.Net; using System.Text; public static
一個簡單的自定義通訊協議(socket)
這是轉自javaeye的一篇文章,作者是vtrtbb。 按照網路通訊的傳統,我們都會自定義協議,這有很多好處,大家可以自己體會(嘿嘿)。 一直不知道socket通訊時候自定義資料包是什麼樣子的,偶然做了個小例子。 先來說說資料包的定義,我這裡是包頭+內容 組
深入理解HTTP協議(轉) 瀏覽器和伺服器如何通訊(HTTP協議)
http協議學習系列 1. 基礎概念篇 1.1 介紹 HTTP是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫。它的發展是全球資訊網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet En
深入理解HTTP協議(轉) 瀏覽器和伺服器如何通訊(HTTP協議)
http協議學習系列 1. 基礎概念篇 1.1 介紹 HTTP是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫。它的發展是全球資訊網協會(World Wide Web Consortium)和Internet工作小組
基於STM32之UART串列埠通訊協議(二)傳送
一、前言 1、簡介 在上一篇UART詳解中,已經有了關於UART的詳細介紹了,也有關於如何使用STM32CubeMX來配置UART的操作了,而在該篇部落格,主要會講解一下如何實現UART串列埠的傳送功能。 2、UART簡介 嵌入式開發中,UART串列埠通訊協議是我們常用的通訊協議之一,全稱叫做
基於STM32之UART串列埠通訊協議(三)接收
一、前言 1、簡介 回顧上一篇UART傳送當中,已經講解了如何實現UART的傳送操作了,接下來這一篇將會繼續講解如何實現UART的接收操作。 2、UART簡介 嵌入式開發中,UART串列埠通訊協議是我們常用的通訊協議之一,全稱叫做通用非同步收發傳輸器(Universal Asynchronou
TCP/IP協議(2):網絡設備
數據包 服務器 網絡設備 風暴 二層交換機 不同的 中繼器 tcp/ip 解決 1、中繼器(Repeater) 中繼器工作在OSI的一層,我們知道,超5類線的傳輸距離最大為100米,超過這個距離信號就會衰減,中繼器就是為了防止信號變差,將網絡信號進行再生和重定時。 2、
HTTP協議(一)——了解Web及網絡基礎
協議 http web 一、使用HTTP協議訪問Web Web頁面不會憑空顯示出來,根據Web瀏覽器地址欄中指定的URL,Web瀏覽器從Web服務器獲取文件資源等信息,從而顯示出Web頁面。 像這種通過發送請求獲取服務器資源的Web瀏覽器等,都可稱為客戶端。本文出自 “IT菜鳥” 博客
[圖解]ARP協議(一)
tcp/ip arp協議 一、ARP概述如果要在TCP/IP協議棧中選擇一個"最不安全的協議",那麽我會毫不猶豫把票投給ARP協議。我們經常聽到的這些術語,包括"網絡掃描"、"內網滲透"、"中間人攔截"、"局域網流控"、"流量欺騙",基本都跟ARP脫不了幹系。大量的安全工具,例如大名鼎鼎的Cain、功
圖解ARP協議(二)ARP攻擊原理與實踐
tcp/ip arp協議 網絡安全 局域網安全 一、ARP攻擊概述在上篇文章裏,我給大家普及了ARP協議的基本原理,包括ARP請求應答、數據包結構以及協議分層標準,今天我們繼續討論大家最感興趣的話題:ARP攻擊原理是什麽?通過ARP攻擊可以做什麽,賬號是否可以被竊取?有哪些常見的ARP滲透(攻
圖解ARP協議(三)ARP防禦篇-如何揪出"內鬼"並"優雅的還手"
負責任 text 介紹 成功 過濾器 現在 導致 打開 是個 一、ARP防禦概述 通過之前的文章,我們已經了解了ARP攻擊的危害,黑客采用ARP軟件進行掃描並發送欺騙應答,同處一個局域網的普通用戶就可能遭受斷網攻擊、流量被限、賬號被竊的危險。由於攻擊門檻非常低,普通人只要拿