新闻  |   论坛  |   博客  |   在线研讨会
NMEA-0183 协议简介
电子禅石 | 2023-11-06 16:46:25    阅读:13870   发布文章

 NMEA - 0183 是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了 GPS/北斗导航设备统一的 RTCM(Radio Technical Commission for Maritime services)标准协议。


NMEA-0183 协议采用 ASCII 码来传递 GPS 定位信息,我们称之为帧。


帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF)


1、“$”:帧命令起始位


2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)


3、ddd…ddd:数据


4、“*”:校验和前缀(也可以作为语句数据结束的标志)


5、hh:校验和(check  sum),$与*之间所有字符 ASCII 码的校验和(各字节做异或运算,得到校验和后,再转换 16 进制格式的 ASCII 字符)


6、(CR)(LF):帧结束,回车和换行符


NMEA-0183 常用命令如表所示:

image.png



上表为 NMEA-0183 常用命令表


注 1: 即协调世界时,相当于本初子午线(0 度经线)上的时间,北京时间比 UTC 早 8 个小时。


接下来我们分别介绍这些命令。


 


一,$GNGGA(GPS 定位信息,Global Positioning System Fix Data)


$GNGGA 语句的基本格式如下(其中 M 指单位 M,hh 指校验和,CR 和 LF 代表回车换行,下同):


$GNGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)


UTC 时间,格式为 hhmmss.ss;

纬度,格式为 ddmm.mmmmm(度分格式);

纬度半球,N 或 S(北纬或南纬);

经度,格式为 dddmm.mmmmm(度分格式);

经度半球,E 或 W(东经或西经);

GPS 状态,0=未定位,1=非差分定位,2=差分定位;

正在使用的用于定位的卫星数量(00~12)

HDOP 水平精确度因子(0.5~99.9)

海拔高度(-9999.9 到 9999.9 米)

大地水准面高度(-9999.9 到 9999.9 米)

差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)

差分参考****标号(0000 到 1023,首位 0 也将传送,非差分定位,此项为空)

举例如下:

$GNGGA,095528.000,2318.1133,N,11319.7210,E,1,06,3.7,55.1,M,-5.4,M,,0000*69


 


二,$GNGSA(当前卫星信息)


$GNGSA 语句的基本格式如下:


$GNGSA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF)


模式,M =  手动,A =  自动。

定位类型,1=未定位,2=2D 定位,3=3D 定位。

正在用于定位的卫星号(01~32)

PDOP 综合位置精度因子(0.5-99.9)

HDOP 水平精度因子 1(0.5-99.9)

VDOP 垂直精度因子(0.5-99.9)

举例如下:

$GNGSA,A,3,14,22,24,12,,,,,,,,,4.2,3.7,2.1*2D


         $GNGSA,A,3,209,214,,,,,,,,,,,4.2,3.7,2.1*21


注 1: 精度因子值越小,则准确度越高。


 


三,$GPGSV(可见卫星数,GPS Satellites in View)


$GPGSV 语句的基本格式如下:


$GPGSV,  (1),(2),(3),...,(4),(5),(6),(7)*hh(CR)(LF)


GSV 语句总数。

本句 GSV 的编号。

可见卫星的总数(00~12,前面的 0 也将被传输)。

卫星编号(01~32,前面的 0 也将被传输)。

卫星仰角(00~90 度,前面的 0 也将被传输)。

卫星方位角(000~359 度,前面的 0 也将被传输)

信噪比(00~99dB,没有跟踪到卫星时为空)。

注:每条 GSV 语句最多包括四颗卫星的信息,其他卫星的信息将在下一条$GPGSV 语句中输出。


举例如下:

$GPGSV,3,1,11,18,73,129,19,10,71,335,40,22,63,323,41,25,49,127,06*78


$GPGSV,3,2,11,14,41,325,46,12,36,072,34,31,32,238,22,21,23,194,08*76


$GPGSV,3,3,11,24,21,039,40,20,08,139,07,15,08,086,03*45


 


四,$BDGSV(可见卫星数,GPS Satellites in View)


$BDGSV 语句的基本格式如下:


$BDGSV,  (1),(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF)


GSV 语句总数。

本句 GSV 的编号。

可见卫星的总数(00~12,前面的 0 也将被传输)。

卫星编号(01~32,前面的 0 也将被传输)。

卫星仰角(00~90 度,前面的 0 也将被传输)。

卫星方位角(000~359 度,前面的 0 也将被传输)

信噪比(00~99dB,没有跟踪到卫星时为空)。

注:每条 GSV 语句最多包括四颗卫星的信息,其他卫星的信息将在下一条$BDGSV 语句中输出。


举例如下:

$BDGSV,1,1,02,209,64,354,40,214,05,318,40*69


 


五,$GNRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data)


$GNRMC 语句的基本格式如下:


$GNRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)


UTC 时间,hhmmss(时分秒)

定位状态,A=有效定位,V=无效定位

纬度 ddmm.mmmmm(度分)

纬度半球 N(北半球)或 S(南半球)

经度 dddmm.mmmmm(度分)

经度半球 E(东经)或 W(西经)

地面速率(000.0~999.9 节)

地面航向(000.0~359.9 度,以真北方为参考基准)

UTC 日期,ddmmyy(日月年)

磁偏角(000.0~180.0 度,前导位数不足则补 0)

磁偏角方向,E(东)或 W(西)

模式指示(A=自主定位,D=差分,E=估算,N=数据无效)

举例如下:

$GNRMC,095554.000,A,2318.1327,N,11319.7252,E,000.0,005.7,081215,,,A*73


 


六,$GNVTG(地面速度信息,Track Made Good and Ground Speed)


$GNVTG 语句的基本格式如下:


$GNVTG,(1),T,(2),M,(3),N,(4),K,(5)*hh(CR)(LF)


以真北为参考基准的地面航向(000~359 度,前面的 0 也将被传输)

以磁北为参考基准的地面航向(000~359 度,前面的 0 也将被传输)

地面速率(000.0~999.9 节,前面的 0 也将被传输   

地面速率(0000.0~1851.8 公里/小时,前面的 0 也将被传输)

模式指示(A=自主定位,D=差分,E=估算,N=数据无效)

举例如下:

$GNVTG,005.7,T,,M,000.0,N,000.0,K,A*11


 


七,$GNGLL(定位地理信息,Geographic Position)


$GNGLL 语句的基本格式如下:


$GNGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF)


纬度 ddmm.mmmmm(度分)

纬度半球 N(北半球)或 S(南半球)

经度 dddmm.mmmmm(度分)

经度半球 E(东经)或 W(西经)

UTC 时间:hhmmss(时分秒)

定位状态,A=有效定位,V=无效定位

模式指示(A=自主定位,D=差分,E=估算,N=数据无效)       

举例如下:

$GNGLL,2318.1330,N,11319.7250,E,095556.000,A,A*4F

八,$GNZDA(当前时间信息)


$GNZDA 语句的基本格式如下:


$GNZDA,(1),(2),(3),(4), (5), (6)*hh(CR)(LF)


UTC 时间:hhmmss(时分秒)

本地区域小时(NEO-6M 未用到,为 00)

本地区域分钟(NEO-6M 未用到,为 00)

举例如下:

$GNZDA,095555.000,08,12,2015,00,00*4C


NMEA-0183 协议命令帧部分就介绍到这里,接下来我们看看NMEA-0183 协议的校验,


通过前面的介绍,我们知道每一帧最后都有一个 hh 的校验和,该校验和是通过计算$与*之间所有字符 ASCII 码的异或运算得到,将得到的结果以 ASCII 字符表示就是该校验(hh)。例如语句:$GNZDA,095555.000,08,12,2015,00,00*4C,校验和(红色部分参与计算)计算方法为:


0X47 xor 0X4E xor 0X5A xor 0X44 xor 0X41 xor 0X2C xor 0X30 xor 0X39 xor 0X35 xor 0X35 xor 0X35 xor 0X35 xor 0X2E xor 0X30 xor 0X30 xor 0X30 xor 0X2C xor 0X30 xor 0X38 xor 0X2C xor 0X31 xor 0X32 xor 0X2C xor 0X32 xor 0X30 xor 0X31 xor 0X35 xor 0X2C xor  0X30 xor 0X30 xor 0X2C xor 0X30 xor 0X30


得到的结果就是 0X4C,用 ASCII 表示就是 4C。


NMEA-0183 协议我们就介绍到这里,了解了该协议,我们就可以编写单片机代码,解析 NMEA-0183 数据,从而得到 GPS/北斗定位的各种信息了。


 


 

————————————————

版权声明:本文为CSDN博主「wonull」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012241570/article/details/90769388


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客