1、用户需要先弄清楚需要哪些信息,然后对照GPS OEM接收板的技术资料,寻找那些包括所需信息的NMEA语句。下面将介绍兼容性最广泛的6条NMEA语句(1)$GPGGA语句Global Positioning System Fix Data(GGA),即GPS定位信息。该语句中反映GPS定位主要数据,包括经纬度、质量因子、HDOP、高程、参考站号等字段。其标准格式如下:$GPGGA,3456789,M,1112*hh地球椭球面相对水准面的高度(高程异常)差分时间从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空参考站号00001023;不使用DGPS时为空例句:$GPGGA,074529.
2、82,2429.6717,N,11804.6973,E,1,8,1.098,42.110,M,M,*76(2)$GPGSA语句GPS DOP and Active Satellites(GSA)即当前卫星信息, 其标准格式如下:$GPGSA,各字段的含义和取值围见表3所示。表3 $GPGSA语句各字段的含义和取值围模式M=手动,A=自动定位类型1=没有定位,2=2D定位,3=3D定位PRN码(伪随机噪声码),正在用于解算位置的卫星号0132PDOP位置精度因子0.599.9HDOP水平精度因子VDOP垂直精度因子$GPGSA,A,3,19,11,03,23,27,13,16,3.43,1.67
3、,2.99*0E(3)$GPGSV语句GPS Satellites in View(GSV)可见卫星信息,反映GPS可见星的方位角、俯仰角、信噪比等。$GPGSV,各字段的含义和取值围见表4所示。表4 $GPGSV语句各字段的含义和取值围总的GSV语句电文数012当前GSV语句号1-3可视卫星总数卫星号卫星仰角0090度卫星方位角000359度信噪比0099dB,没有跟踪到卫星时为空注:信息将按照每颗卫星进行循环显示,每条GSV语句最多可以显示4颗卫星的信息。其他卫星信息将在下一序列的NMEA0183语句中输出。$GPGSV,3,1,11,1,83,54,32,3,19,192,28,6,26
4、,57,36,7,51,140,37*7D$GPGSV,3,2,11,14,40,136,34,16,64,266,36,20,21,293,22,2,168,*4C$GPGSV,3,3,11,23,10,321,25,53,7,40,30,2,46,*48(4)$GPRMC 语句Recommended Minimum Specific GPS/TRANSIT Data(RMC),即推荐定位信息。$GPRMC,各字段的含义和取值围见表5所示。表5 $GPRMC语句各字段的含义和取值围UTC时间, hhmmss.ss定位状态A=有效定位,V=无效定位N表示北纬;S表示南纬地面速率000.0999
5、.9节地面航向000.0359.9,以真北为参考基准UTC日期,格式:ddmmyy日月年磁偏角000.0180.0度E表示偏东;W表示偏西模式指示(NMEA0183 3.00版本输出)A=自主定位,D=差分,E=估算,N=数据无效$GPRMC,074529.82,A,2429.6717,N,11804.6973,E,12.623,32.122,010806,W,A*08(5)$GPVTG 语句Track Made Good and Ground Speed(VTG),即地面速度信息。其标准格式为:$GPVTG,T,N,K,各字段的含义和取值围见表6所示。表6 $GPVTG 语句各字段的含义和取
6、值围以真北为参考基准的地面航向以磁北为参考基准的地面航向0000.01851.8公里/小时模式指示(仅NMEA0183 3.00版本输出)$GPVTG,257.314,T,257.314,M,10.739,N,19.888,K,A*2F(6)$GPGLL语句Geographic Position(GLL),即定位地理信息。其标准格式如下:$GPGLL,各字段的含义和取值围见表7所示。表7 $GPGLL语句各字段的含义和取值围N表示北半球;S表示南半球经度,格式:dddmm.mmmmUTC时间,格式:hhmmss5 NMEA 0183数据模拟该源代码为VC+源代码,是对一个模拟NMEA数据的类的
7、定义。struct CNmeaDataCNmeaData ();void ResetData ();/ Data retrieved from the NMEA sentences.double lat; / 纬度,单位为度(正数为北纬,负数为南纬)double lon; / 经度,单位为度(正数为东经,负数为西经)double altitude; / 海拔高度,米double speed; / 速度,节double track; /追踪卫星高度角,度double magVariation; / 磁偏角,度double hdop; / HDOP值int numSats; / 追踪卫星数int
8、UTCYear; / UTC年int UTCMonth; / UTC月int UTCDay; / UTC日int UTCHour; / UTC时int UTCMinute; / UTC分int UTCSecond; / UTC秒CSatData satDataMAC_SATS;/ 卫星锁定数:/ 0 = 无效, 1 = 卫星锁定, 2 = DGPS状态GPS_FIX_QUALITY lastFixQuality;/ 有效卫星数bool isValidLat; / 纬度bool isValidLon; / 经度bool isValidAltitude; / 高程bool isValidSpeed
9、; / 速度bool isValidDate; / 日期bool isValidTime; / 时间bool isValidTrack; / 追踪卫星角bool isValidMagVariation; / 磁偏角变化bool isValidHdop;bool isValidSatData; / 卫星数/ 确定是否有有效的坐标数据发送到数据端口bool hasCoordEverBeenValid;class CNmeaParserpublic:CNmeaParser ();SENTENCE_STATUS ParseSentence (const char* sentence);void Get
10、Data (CNmeaData& data)const;void ResetData ()m_data.ResetData ();private:bool ParseDegrees (double& degrees, const char* degString)const;bool ParseDate (int& year, int& month, int& day,const char* dateString)const;bool ParseTime (int& hour, int& minute, int& second,const char* timeString)const;void
11、ParseAndValidateAltitude (const char* field, const char unit);void ParseAndValidateDate (const char* field);void ParseAndValidateFixQuality (const char* field);void ParseAndValidateLat (const char* field, const char hem);void ParseAndValidateLon (const char* field, const char hem);void ParseAndValid
12、ateHdop (const char* field);void ParseAndValidateSpeed (const char* field);void ParseAndValidateMagVariation(const char* field,const char direction);void ParseAndValidateTime (const char* field);void ParseAndValidateTrack (const char* field);void ParseGGA (const char* sentence);void ParseGLL (const
13、char* sentence);void ParseRMC (const char* sentence);void ParseGSV (const char* sentence);bool GetNextField (char* data, const char* sentence,uint& currentPosition)const;bool IsValidSentenceType (const char* sentence)const;bool IsCorrectChecksum (const char* sentence)const;CNmeaData m_data;/ 需要分解GSV
14、语句int m_lastSentenceNumber;/ 确定结束语句int m_numSentences; / 处理语句数int m_numSatsExpected; / 分析捕获卫星数int m_numSatsLeft; / 分析失锁卫星数int m_satArrayPos; / 下一次捕获卫星位置预测CSatData m_tempSatDataMAC_SATS;class CNmeaSerialpublic:CNmeaSerial ();CNmeaSerial (HWND hMsgWnd, DWORD timeout);CNmeaSerial ();SERIAL_RESULT_TYPE
15、CloseConnection ();SERIAL_RESULT_TYPE OpenConnection ();SERIAL_RESULT_TYPE OpenConnection (uint8 comPort, uint32 baudRate,uint8 dataBits, SETPARITY parity, STOPBITS stopBits);SERIAL_RESULT_TYPE GetData (CNmeaData&SERIAL_RESULT_TYPE GetSettings (uint8& comPort, uint32& baudRate,uint8& dataBits, SETPA
16、RITY& parity, STOPBITS& stopBits)const;unsigned long GetThreadHandle ()const return m_hThread;BOOL IsConnected ()const return m_isConnected;SERIAL_RESULT_TYPE InitThread ();BOOL KillThread ();BOOL LockData ()const;void SetDefaults ();BOOL UnlockData ()const;/ 元函数描述语句,并运行该语句/ 进入另外线程static void Proces
17、sSentences (void* currentObject);uint8 m_comPort;uint32 m_baudRate;uint8 m_dataBits;SETPARITY m_parity;STOPBITS m_stopBits;BOOL m_isConnected;DWORD m_timeout;unsigned long m_hThread;HANDLE m_hPort;HANDLE m_hMutex;DWORD m_threadId;CNmeaParser m_parser;/ 接收描述信息窗口HWND m_hMsgWnd;/ 如果值为True,则进行线程分析/ 否则结束状态BOOL m_terminateThread;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1