itop实战gps模块的数据格式v_第1页
itop实战gps模块的数据格式v_第2页
itop实战gps模块的数据格式v_第3页
itop实战gps模块的数据格式v_第4页
itop实战gps模块的数据格式v_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、迅为iTOP-实战-GPS 模块的数据格式本文档由作者收集于网络,主要主要参考网络文章:GPS 模块的数据格式。注意 1:文档中的代码来源于网络,GPS 的代码。注意 2:本文档需要配合实战参考,作者没有测试过,迅为有提供经过测试中的“GPS”来使用。注意 3:本文档中,加红加粗部分,是作者协助用户做项目过程中发现,用户较难理解的知识点,文档中将作者的理解着重标注出来。全球时区的划分每个时区跨 15°经度。以 0°经线为界向西各划出 7.5°经度,作为 0 时区。即 0 时区的经度范围是 7.5°W7.5°E。从 7.5°E 与 7.

2、5°W 分别、15°经度划分为一个时区,直到东 11 区和西 11 区。东 11东部的经度是 172.5°E,由 172.5°E180°之间就是东 12 区。西 11西部的经度是 172.5°W,由 172.5°W180°之间就是西 12 区。东、西 12 区各占经度 7.5°,一个完整的时区,即全球总共划分为 24 个时区。东、西 12区钟点相同,日期相差 1 天,因此 180°称为理论上的国际日期变更线。由于地球的自转,不同地区有不同的地方时间,为了解决时间混乱的问题,采取了划分时区的办法。

3、每个时区经线所在地的地方时间就是这个时区共用的时间,称为。在实际应用中各国全按照定时间,许多制定一个法定时,作为该时间。一使用的时间,例如我国使用 120°E 的地方时间,称为GPS 上电后,每隔一定的时间就会返回一定格式的数据,数据格式为:$类型,x 每行开头的字符都是'$',接着是类型,后面是数据,以逗号分隔开。1迅为例如:$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,A*60GPS类型GPS 每一次都可以接收以下全部六组数据,但是推荐使用“GPRMC”,迅为的例程中也就是了“G

4、PRMC”。GPGSV:可见GPGLL:地理GPRMC:推荐最小GPVTG:地面速度GPGGA:GPSGPGSA:当前GPRMC 最小(最重要)GPS 模块数据推荐使用这一组数据,用于定位。数据详解:$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<1> UTC 时间,hhmmss(时分秒)格式<2><3><4><5>&l

5、t;6><7><8>定位状态,A=有效定位,V=无效定位纬度 ddmm.mmmm(度分)格式(前面的 0 也将被传输) 纬度半球 N(北半球)或 S(南半球)经度 dddmm.mmmm(度分)格式(前面的 0 也将被传输) 经度半球 E(东经)或 W(西经)地面速率(000.0999.9 节,前面的 0 也将被传输)地面航向(000.0359.9 度,以为参考基准,前面的 0 也将被传输)<9> UTC 日期,ddmmyy(日月年)格式2迅为<10> 磁偏角(000.0180.0 度,前面的 0 也将被传输)<11> 磁偏角方向

6、,E(东)或 W(西)<12>模式指示(仅 NMEA01833.00 版本输出,A= 据无效)。定位,D=差分,E=估算,N=数内容:1.时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成(BTC),BTC 和 UTC 差了 8 个小时,要在这个时间基础上加 8 个小时。时间2. 定位状态,在接收到有效数据前,这个位是V,后面的数据都为空,接到有效数据后,这个位是A,后面才开始有数据。3. 纬度,我们需要把它转换成度分秒的格式,计算:如接收到的纬度是:4546.40891 4546.40891/100=45.4640891 可以直接读出 45 度, 4546.408

7、9145*100=46.40891, 可以直接读出 46 分 46.4089146 =0.40891*60=24.5346 读出 24 秒,所以纬度是:45 度 46 分 24 秒。4.5.6.7.南北纬,这个位有两种值N(北纬)和S(南纬)。经度的计算和纬度的计算一样 。东西经,这个位有两种值E(东经)和W(西经) 。速率,这个速率值是海里/时,是节,要把它转换成千米/时,根据:1 海里=1.85公里,把得到的速率乘以 1.85。作者提醒思考,这部分为什么用海里/最先适用于航海定位的,速度当然是海里表示,另外汽车上的速度计算算,汽车上有“车速表”,使用的是车速表来计算速度的。表示?其实 GP

8、S不用 GPS 来换在实现汽车导航功能时,是需要“车速表”来协助校准数据的,不能完全依靠 GPS 的信息。8. 航向,指的是偏离正北的角度 。9. 日期,这个日期是准确的,不需要转换。3迅为GPGGA GPS 定位数据数据详解:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF>$GPGGA:起始引导语句格式说明(本句为 GPS 定位数据

9、);<1> UTC 时间,格式为 hhmmss.sss;<2><3><4><5><6>纬度,格式为 ddmm.mmmm(第一位是零也将传送);纬度半球,N 或 S(北纬或南纬)经度,格式为 dddmm.mmmm(第一位零也将传送); 经度半球,E 或 W(东经或西经)定位质量指示,0=定位无效,1=定位有效;<7>使用数量,从 00 到 12(第一个零也将传送)<8>水平精确度,0.5 到 99.9<9>天线离海平面的高度,-9999.9 到 9999.9 米 M 指米<10>

10、;大地水准面高度,-9999.9 到 9999.9 米 M 指米<11>差分 GPS 数据期限(RTCMSC-104),最后设立 RTCM 传送的秒数量<12>差分参考基站标号,从 0000 到 1023(首位 0 也将传送)。内容:第 9,10 个字段,海平面高度和大地水准面高度,是米GPVTG 地面速度$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<1><2><3>以正北为参考基准的地面航向(000359 度,前面的 0 也将被传输)以磁北为参

11、考基准的地面航向(000359 度,前面的 0 也将被传输)地面速率(000.0999.9 节,前面的 0 也将被传输)4迅为<4><5>据无效地面速率(0000.01851.8 公里/小时,前面的 0 也将被传输)模式指示(仅 NMEA0183 3.00 版本输出,A=定位,D=差分,E=估算,N=数GPGSV可视状态标准格式:$GPGSV,(1),(2),(3),(4),(5),(6),(7),(4),(5),(6),(7)*hh(CR)(LF)例:$GPGSV,2,1,08,06,33,240,45,10,36,074,47,16,21,078, 44,17,36

12、,313,42*78各部分含义为:(1)总的 GSV 语句电文数;2;(2)当前 GSV 语:1;(3)可视总数:08;(4)PRN 码(伪随机噪声码)也可以认为是(5)仰角(0090 度):33 度;(6)方位角(000359 度):240 度;编号(7)信噪比(0099dB):45dB(后面依次为第 10,16,17 号的); *总和校验域;hh总和校验数:78; (CR)(LF)注:每条语句最多,换行。四颗的,每颗的有四个数据项,即:(4)例:号,(5)仰角,(6)方位角,(7)信噪比。$GPGSV,3,1,10,24,82,023,40,05,62,285,32,01,62,123,0

13、0,17,59,229,28*70每条语句包含四部分内容,例如:第一部分是“24,82,023,40”,第二部分是“05,62,285,32”等等。 每部分的第一个词为 PRC,第二个词为信号强度。高程,跟着为方位角和5迅为这个语句里最重要的指标应该算是“信号躁声比(signal-to-noise ratio)”(以下为 SNR)。 这个数值标示信号的接收率。我们知道,是以相同的强度发射信号,但是传播过程中难免会遇到诸如墙之类的物,这样就影响了信号的识别。典型的 SNR 值在 0 到 50 之间,其中 50 表示非常信号。(SNR 可以达到 99)。GPGSA 当前例:$GPGSA,A,3,0

14、1,20,19,13,40.4,24.4,32.2*0A字段 0:$GPGSA,语句 ID,表明该语句为 GPS DOP and Active Satellites(GSA)当前字段 1:定位模式,A=自动手动 2D/3D,M=手动 2D/3D字段 2:定位类型,1=未定位,2=2D 定位,3=3D 定位字段 3:PRN 码(伪随机噪声码),第 1 信道正在使用的位数不足则补 0)字段 4:PRN 码(伪随机噪声码),第 2 信道正在使用的位数不足则补 0)字段 5:PRN 码(伪随机噪声码),第 3 信道正在使用的位数不足则补 0)字段 6:PRN 码(伪随机噪声码),第 4 信道正在使用的

15、位数不足则补 0)字段 7:PRN 码(伪随机噪声码),第 5 信道正在使用的位数不足则补 0)字段 8:PRN 码(伪随机噪声码),第 6 信道正在使用的位数不足则补 0)字段 9:PRN 码(伪随机噪声码),第 7 信道正在使用的位数不足则补 0)PRN 码编号(00)(前导PRN 码编号(00)(前导PRN 码编号(00)(前导PRN 码编号(00)(前导PRN 码编号(00)(前导PRN 码编号(00)(前导PRN 码编号(00)(前导6迅为字段 10:PRN 码(伪随机噪声码),第 8 信道正在使用的导位数不足则补 0)字段 11:PRN 码(伪随机噪声码),第 9 信道正在使用的导

16、位数不足则补 0)字段 12:PRN 码(伪随机噪声码),第 10 信道正在使用的(前导位数不足则补 0)字段 13:PRN 码(伪随机噪声码),第 11 信道正在使用的(前导位数不足则补 0)字段 14:PRN 码(伪随机噪声码),第 12 信道正在使用的(前导位数不足则补 0)字段 15:PDOP 综合位置精度因子(0.5 - 99.9) 字段 16:HDOP 水平精度因子(0.5 - 99.9)PRN 码编号(00)(前PRN 码编号(00)(前PRN 码编号(00)PRN 码编号(00)PRN 码编号(00)字段 17:VDOP 垂字段 18:校验值度因子(0.5 - 99.9)GPR

17、MC 的格式09h29m27s,有效定位,维度 2235.9058(海里/时,是节),北半球,经度11400.0518,东经,地面速率 0.000,地面航向 74.11(偏离正北的角度),UTC 日期 15 日12 月 16 年,磁偏角,磁偏角方向,部分代码以下为网友提供的部分代码可供参考。创建一个 GPS 数据结构体:7typedef data struct double latitude; /经度double longitude; /纬度int latitude_Degree;/度intlatitude_Cent;/分迅为时间结构体:算法就是GPRMC 数据,得到经纬度,日期时间,速度,航

18、向:8int GPS_RMC_Parse(char *line, GPS_INFO *GPS)U8 ch, status, tmp;float lati_cent_tmp, lati_second_tmp; float long_cent_tmp, long_second_tmp; float speed_tmp;char *buf = line; ch = buf5;status = bufGetComma(2, buf);if (ch = 'C') /如果第五个字符是 C,($GPRMC)if (status = 'A') /如果数据有效,则分析GPS-&g

19、t;NS = bufGetComma(4, buf); GPS->EW = bufGetComma(6, buf);typedef struct int year; int month; int day; int hour;int minute; int second;DATE_TIME;intlatitude_Second; /秒int longitude_Degree;/度intlongitude_Cent;/分intlongitude_Second; /秒floatspeed; /速度floatdirection; /航向floatheight; /海拔高度int satellit

20、e;U8NS;U8EW; DATE_TIME D;GPS_INFO;迅为line 是串口接收的一行数据 bufGetComma 函数作用是一行数据中第几个逗号后面那个字符在这行数据中的位置9GPS->latitude = Get_Double_Number(&bufGetComma(3, buf); GPS->longitude = Get_Double_Number(&bufGetComma(5, buf);GPS->latitude_Degree = (int)GPS->latitude / 100; /分离纬度lati_cent_tmp = (GP

21、S->latitude - GPS->latitude_Degree * 100); GPS->latitude_Cent = (int)lati_cent_tmp;lati_second_tmp = (lati_cent_tmp - GPS->latitude_Cent) * 60; GPS->latitude_Second = (int)lati_second_tmp;GPS->longitude_Degree = (int)GPS->longitude / 100; /分离经度long_cent_tmp = (GPS->longitude

22、- GPS->longitude_Degree * 100); GPS->longitude_Cent = (int)long_cent_tmp;long_second_tmp = (long_cent_tmp - GPS->longitude_Cent) * 60; GPS->longitude_Second = (int)long_second_tmp;speed_tmp = Get_Float_Number(&bufGetComma(7, buf); /速度(:海里/时) GPS->speed = speed_tmp * 1.85; /1 海里=1.

23、85 公里GPS->direction = Get_Float_Number(&bufGetComma(8, buf); /角度GPS->D.hour = (buf7 - '0') * 10 + (buf8 - '0');/时间GPS->D.minute = (buf9 - '0') * 10 + (buf10 - '0');GPS->D.second = (buf11 - '0') * 10 + (buf12 - '0');tmp = GetComma(9, buf

24、);GPS->D.day = (buftmp + 0 - '0') * 10 + (buftmp + 1 - '0'); /日期GPS->D.month = (buftmp + 2 - '0') * 10 + (buftmp + 3 - '0');GPS->D.year = (buftmp + 4 - '0') * 10 + (buftmp + 5 - '0') + 2000;UTC2BTC(&GPS->D);return 1;return 0;迅为Get_Double_Number 函数作用是把给定字符串第一个逗号之前的字符转化成双精度型,在这里就是把代表经度和纬度的字符串转换成数字,同样的函数还有 Get_Float_NumberUTC2BTC 函数是将世界时间转换成时间(相差 8 小时)在 LCD 显示还有一个 GPGGA把 GPS_INFO 结构体的已经被赋值的变量显示到屏上相应的位置即可段

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论