GPS通讯协议(NMEA0183)协议解析

GPS通讯协议(NMEA0183)协议解析
zne1核⼼提⽰:说起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数据处理中的注意事项
vb编程>山西财政厅如果开发基于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协议的的理解,再加上⼀点东西看来的东西写出来的,如对其中的问题有疑问,欢迎探讨!

本文发布于:2024-09-21 01:46:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/404895.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语句   协议   需要   提取   数据   问题
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议