NMEA协议解析

news2024/11/20 4:50:35

文章目录

  • 一、NMEA0183协议
    • 1、NMEA基本框架·
    • 2、常用语句
      • 1)GNGGA
      • 2)GNGLL
      • 3)GNGSA
      • 4)GPGSV
      • 5)GNRMC
      • 6)GNVTG
      • 7)GNZDA
      • 8)PAIRCLK等
  • 二、异或校验和代码
    • 1、网址在线计算BCC
    • 2、BCC校验和代码

一、NMEA0183协议

NMEA0183协议协议解析,详细 NMEA协议标准参考 http://www.nmea.org/,NMEA详细协议下载链接:链接:https://pan.baidu.com/s/14dkAlVcFhPjCho5t37GRQw ,提取码:uxss 。图1是接收到一包GPS数据,包含30行数据。

1、NMEA基本框架·

以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>

$是起始符,所有的语句都是以$开始

<CR><LF>是回车换行符为结束序列,所有的语句都是以<CR><LF>结束

<CR>:ASCII 13, \r

<LF>:ASCII 10, \n

*5F*后面跟的是校验和,其中5F代表校验和,对$*之间的数据(不包括这两个字符)按字节进行异或运算的结果,以十六进制表示。

2、常用语句

1)GNGGA

以第1行数据为例:$GNGGA,081729.804,,,,,0,0,,,M,,M,,*5F<CR><LF>。GNGGA的GN是发送器的标识符,表示是GNSS,定义如下:

发送器标识符
北斗导航卫星系统(BDS)BD
全球定位系统(GPS、SBAS、QZSS)GP
全球导航卫星系统(GLONASS)GL
全球导航卫星系统(GNSS)GN
自定义信息P

GGA:输出接收机时间、位置及定位相关的数据。

格式:$--GGA,UTCtime,Lat,uLat,Lon,uLon,FS,numSv,HDOP,Msl,uMsl,Sep,uSep,DiffAge,DiffSta*CS<CR><LF>

081729.804表示UTC时间8h:17min:29.804s,UTC时间格式是hhmmss.sss,北京时间需要在此基础上+8h

因为这一包数据是未定位数据,所以有,,,,,少了四个数据对应经纬度信息。

,0,0,第一个0表示当前定位不可用或无效,第2个0表示用于定位的卫星数量为0。

,M,,M,这2个M都是固定字符,高度的单位米。

2)GNGLL

$GNGLL,,,,,081729.804,V,N*6D<CR><LF>

同上因为未定位,无经纬度信息,多以有5个,

081729.804表示UTC时间同上。

VN均表示数据无效。

6D表示BCC校验和。

3)GNGSA

$GNGSA,A,1,,,,,,,,,,,,,,,,1*1D<CR><LF>

A表示自动切换

1表示定位无效

4)GPGSV

$GPGSV,4,1,13,10,69,178,35,196,64,139,25,194,61,094,,32,53,007,35,1*65<CR><LF>

$GPGSV,4,2,13,25,51,063,28,31,48,279,27,22,38,330,,23,37,158,,1*69<CR><LF>

$GPGSV,4,3,13,26,21,204,,12,19,044,,195,12,154,,29,07,124,,1*5E<CR><LF>

$GPGSV,4,4,13,21,05,290,,1*5B<CR><LF>

4表示该条GSV语句中有4个参数组。

1表示该条是第1句,后面有$GPGSV,4,2$GPGSV,4,3$GPGSV,4,4

因为总共卫星数为13>4,所以需要13/4=3余1,也就是需要四个语句。以第一个语句为例,包含了四颗卫星的信息,分别是10,69,178,35196,64,139,25194,61,094,,32,53,007,35,其中第3组信息中载噪比为空,表示没有跟踪到编号194的卫星。

5)GNRMC

$GNRMC,081729.804,V,,,,,,,111022,,,N,V*21<CR><LF>

081729.804表示UTC时间同上。

V表示数据无效。

111022表示22年10月11日,数据格式为ddmmyy(先日后月再年)

N所在位是定位模式标志,表示数据无效。

6)GNVTG

$GNVTG,,T,,M,,N,,K,N*32<CR><LF>

对应解析数据即可。T、M、N、K均是固定字符。

7)GNZDA

$GNZDA,081729.804,11,10,2022,,*42<CR><LF>

081729.804表示UTC时间同上。

11,10,2022表示日/月/年。

8)PAIRCLK等

P表示的是自定义消息。

二、异或校验和代码

1、网址在线计算BCC

计算BCC(Block Check Character)校验和的网址:http://www.ip33.com/bcc.html,选择Ascii码作为输入。

验证GPS数据包中第1行数据进行BCC校验计算验证,结果为0x64与数据包中的一致。

2、BCC校验和代码

unsigned char getBcc(unsigned char *data, unsigned int length)
{
    unsigned int i;
    unsigned char bcc = 0;        // Initial value
#if 1
	while(length--)
	{
		bcc ^= *data++;
	}		
#else
	for ( i = 0; i < length; i++ )
	{
		bcc ^= data[i];        // crc ^= *data;
	}
#endif	
    return bcc;
}
 
int main(void)
{
    unsigned char data[] = "GNGGA,081729.804,,,,,0,0,,,M,,M,,";				//ASCII输入
//    unsigned char data[] = {0xFF, 0x0A, 0x0B, 0x0C};						//Hex输入
    unsigned char bcc;
 
    bcc = getBcc(data, sizeof(data));
 
	for(unsigned int i = 0; i < sizeof(data); i++) {
		printf("data[%d]:%02X\n", i, data[i]);			
	}
    printf("bcc:%02X\n", bcc);
}

BCC校验和代码也为0x5F,结果正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java语言中的异常处理

异常处理 在java语言中&#xff0c;很机智的将异常作为对象来处理&#xff0c;而且定义一个基类java.lang.Throwable作为所有异常类的父类。在这许多类中一般分为两大类&#xff1a; 错误类(Error)和异常类&#xff08;Expception&#xff09;。 如图&#xff1a; 注&#xf…

iNOF在现实网络中的运用,以带反射器的iONF为例

定义 iNOF&#xff08;Intelligent Lossless NVMe Over Fabric&#xff0c;智能无损存储网络&#xff09;是指通过对接入主机的快速管控&#xff0c;将智能无损网络应用到存储系统&#xff0c;实现计算和存储网络融合的技术。 目的 网络转发设备用于传输流量&#xff0c;不同类…

竞争不是内卷,用头脑学习,而非时间

文章目录 用头脑学习&#xff0c;而非时间 前言 一、自由竞争不是内卷 二、内卷都在哪些行业 三、高效学习来大数据梦想联盟 用头脑学习&#xff0c;而非时间 前言 大多数人不懂&#xff0c;不会&#xff0c;不做&#xff0c;才是你的机会&#xff0c;你得行动&#xff…

【Queue】- 从源码分析ArrayDeque及其常用方法

文章目录概述ArrayDeque基础知识ArrayDeque内部结构ArrayDeque的构造方法ArrayDeque的扩容操作ArrayDeque常用方法将ArrayDeque作为双端队列使用时public void addFirst(E e)public void addLast(E e)public boolean offerFirst(E e)public boolean offerLast(E e)public E pol…

动态SLAM论文归纳

持续更新&#xff0c;持续更新 2022 Multi-modal Semantic SLAM for Complex Dynamic Environments 作者&#xff1a;Han Wang, Jing Ying Ko and Lihua Xie, Fellowcode&#xff1a;https://github.com/wh200720041/MMS_SLAM视频&#xff1a;https://www.youtube.com/watch…

web自动化测试——入门篇01

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

并发编程中的原子性,可见性,有序性问题

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章是关于并发编程中出现的原子性&#xff0c;可见性&#xff0c;有序性问题。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&am…

PyTorch(三)TensorBoard 与 Transforms

文章目录Log一、TensorBoard1. TensorBoard 的安装2. SummaryWriter 的使用① add_scalar() 的使用a. 参数说明b. 函数使用c. 使用 Tensorboard② add_image() 的使用a. 参数说明b. 使用 numpy.array() 对 PIL 图片进行转换c. 使用函数d. 改变 global_step二、Transforms1. Tra…

数据结构 | 时间复杂度与空间复杂度

… &#x1f333;&#x1f332;&#x1f331;本文已收录至&#xff1a;数据结构 | C语言 更多知识尽在此专栏中&#xff01; &#x1f389;&#x1f389;&#x1f389;欢迎点赞、收藏、关注 &#x1f389;&#x1f389;&#x1f389;文章目录&#x1f333;前言&#x1f333;正…

【C++初阶】类和对象(二)

大家好我是沐曦希&#x1f495; 类和对象1.类的6个默认成员函数2.构造函数2.1 概念2.2 特性3.析构函数3.1 概念3.2 特性4.拷贝构造函数4.1 概念4.2 特征1.类的6个默认成员函数 空类&#xff1a;类中一个成员都没有 可是空类真的什么都没有吗&#xff1f; 并不是&#xff0c;任…

STM32关于UART的接收方式

STM32的 UART 一般分为定长接收和不定长接收 定长接收&#xff1a; HAL_UART_Receive():只能接收固定长度的数据&#xff0c;如果超过固定长度的数据只能接收对应长度&#xff0c;如果小于固定长度则不会接收 HAL_UART_Receive_IT():中断方式接收&#xff0c;每接收一个字节…

CSS 2 CSS 选择器 - 5 2.8 伪选择器 2.8.1 伪类选择器【根据特定状态选取元素】

CSS 文章目录CSS2 CSS 选择器 - 52.8 伪选择器2.8.1 伪类选择器【根据特定状态选取元素】2 CSS 选择器 - 5 2.8 伪选择器 2.8.1 伪类选择器【根据特定状态选取元素】 【什么是伪类】 伪类用于定义元素的特殊状态。 例如&#xff0c;它可以用于&#xff1a; 设置鼠标悬停在…

如何删除ZIP压缩包的密码?

ZIP是比较常用的压缩文件格式&#xff0c;有时候因为工作需要很多人还会给压缩包设置打开密码。那如果后续不需要密码保护了要如何删除密码呢&#xff1f;密码忘记了还能删除吗&#xff1f; 首先来说说第一种情况&#xff0c;也就是知道密码但后续不需要密码保护&#xff0c;只…

1. 初识Python

1. Pythond 简介 Python 语言由荷兰的 Guido Van Rossum (吉多范罗苏姆, 江湖人称龟叔) 在1989年圣诞节期间为了打发圣诞节的无趣而开发的一个脚本解释语言.Python 源代码遵循 GPL(GNU General Public License)开源协议, 也就是说你可以免费使用和传播它, 而不用担心版权的问…

libusb系列-005-部分API简介

libusb系列-005-部分API简介 文章目录libusb系列-005-部分API简介摘要libusb_initlibusb_open_device_with_vid_pidlibusb_kernel_driver_activelibusb_detach_kernel_driverlibusb_claim_interfacelibusb_release_interfacelibusb_attach_kernel_driverlibusb_closelibusb_exi…

【论文翻译】分布式并发控制中时间戳排序算法与本地计数器同步的改进方法

An Advanced Approach of Local Counter Synchronization to Timestamp Ordering Algorithm in Distributed Concurrency Control DOI目录1 介绍2 时间戳排序算法3 本地计数器同步的一种高级方法3.1 改进更新本地计数器的广播消息方式3.2 减少广播消息中的数据传输费用4 结论参…

时间复杂度与空间复杂度

文章目录1.什么是数据结构2.什么是算法3.如何学好数据结构呢3.1写代码3.2 多去动手画图4.算法效率4.1如何评判一个算法的好与坏呢4.2算法的复杂度5.时间复杂度5.1 概念5.2大O渐进法6常见的时间复杂度6.1常数阶6.2线性阶6.3 对数阶6.4平方阶6.5函数调用6.5.1普通调用6.5.2递归调…

1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo

文章目录&#x1f353;&#x1f353;BRVAH 上部&#x1f344;&#x1f353;动态图结果展示&#x1f344;&#x1f344;myAdapter.java【第一个布局适配器】&#x1f344;&#x1f344;youAdapter.java【第二个布局适配器】&#x1f344;&#x1f344;MainActivity.java【主活动…

【Android】自制静音App,解决他人手机外放问题

契源 看到一个粉丝留言&#xff0c;吐槽舍友深夜手机外放&#xff0c;打扰别人休息&#xff0c;想设计一款软件阻止舍友行径。于是我就来简单设计一下。 需求实现分析 实际上&#xff0c;我之前有篇博文提到过一个类似的Android APP&#xff0c;主要功能是将手机声音强制开到…

内存函数 memcpy、memmove 的简单模拟实现

一、memcpy 函数 数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。注意是以字节为单位进行拷贝。函数声明如下&#xff1a; 1、参数返回值解析 第二个参数 src&#xff1a;源地址&#xff0c;即你要从哪开始拷贝。 第三个参数 count&#xff1a…