NMEA 0183 协议解析任务

工作遇到一个任务:对GPS模块的数据进行解析和筛选。、

要求环境:C语言

GPS输出的数据格式如下:

$GPGGA,024131.194,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4A
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,2,1,8,07,,,34,03,,,36,11,,,35,13,,,36*45
$GPGSV,2,2,8,23,,,36,19,,,38,16,,,34,06,,,32*41
$GPRMC,024131.194,V,8960.0000,N,00000.0000,E,0.000,0.00,090180,,,N*48
$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
$GPGGA,024132.194,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*49
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,2,1,8,07,,,33,03,,,36,11,,,34,13,,,36*43
$GPGSV,2,2,8,23,,,35,19,,,38,16,,,33,06,,,32*45
$GPRMC,024132.194,V,8960.0000,N,00000.0000,E,0.000,0.00,090180,,,N*4B
$GPVTG,0.00,T,,M,0.000,N,0.000,K,N*32
$GPGGA,024133.093,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4E
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,2,1,8,07,,,33,03,,,36,11,,,34,13,,,36*43
$GPGSV,2,2,8,23,,,35,19,,,38,16,,,33,06,,,33*44
$GPRMC,024133.093,V,8960.0000,N,00000.0000,E,0.000,0.00,090180,,,N*4C

解析
输出的数据需要可以使用:是否定位、小于/大于速度值、参与定位的卫星颗数、卫星信号强度为条件进行组合筛选。

-------------------------
序号 年月日时分秒 经度 纬度 定位状态 速度 参与定位的卫星颗数 卫星信号强度

下面是对任务的思考:

要求筛选是否定位功能:

定位功能在 GPGGA的第6位 GPS(6)GPS状态位: 0 未定位 1 非差分定位  2 差分定位

小于/大于速度值 在 GPVTG的(3)(4)地面速率位:000-999

参与定位的卫星颗数 在GPGGA的(7)位 正在使用的卫星数量(00-12)

卫星信号强度在 GPGSV的(7)位信噪比(卫星强度,没有跟踪到卫星时为空)

C语言软件设计思路:

首先将GPS数据解析出来存入自己定义的结构体中。由于任务给的源码是存放在TXT文件中,需要用文件IO函数

fopen,fgets,fclose,等函数将文本打开并读取。同时存入字符串数组中供后续筛选条件判断。

筛选条件初步设计单个条件和组合条件筛选。

猜你喜欢

转载自blog.csdn.net/m0_38066484/article/details/81351592