VC++实现GPS全球定位系统定位数据的提取

VC++实现GPS数据提取
本文介绍了一种使用VC++实现GPS全球定位系统定位数据提取的方法。系统主要包括GPS接收天线、信号通道、微处理器等组件。通过RS-232串口传送NMEA0183语句到计算机进行处理。文章详细描述了如何使用Win32API函数对串口进行编程,包括打开串口、设置串口参数及读取数据的具体步骤。
 

VC++实现GPS全球定位系统定位数据的提取

  定位信息的接收

  通常GPS定位信息接收系统主要由GPS接收天线、变频器、信号通道、微处理器、存储器以及电源等部分组成。由于GPS定位信息内容较少,因此多用RS-232串口将定位信息(NEMA0183语句)从GPS接收机传送到计算机中进行信息提取处理。从串口读取数据有多种方法,在此直接使用 Win32 API函数对其进行编程处理。在Windows下不允许直接对硬件端口进行控制操作,所有的端口均被视为"文件",因此在对串口进行侦听之前需要通过打开文件来打开串口,并对其进行相关参数配置:

m_hCom=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL); file://以异步方式打开COM1
SetCommMask (m_hCom, EV_RXCHAR ) ; file://
添加或修改Windows所报告的事件列表
SetupComm (m_hCom,READBUFLEN/*
读缓冲*/,WRITEBUFLEN/*写缓冲*/); // 初始化通讯设备参数
//
清除缓冲信息
PurgeComm (m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ;
//
对异步I/O进行设置
CommTimeOuts.ReadIntervalTimeout = MAXDWORD ; file://
接收两连续字节的最大时间间隔
CommTimeOuts.ReadTotalTimeoutMultiplier =0; file://
接收每字节的平均允许时间
CommTimeOuts.ReadTotalTimeoutConstant = 0 ; file://
接收时间常数
SetCommTimeouts (m_hCom , &CommTimeOuts) ;
file://
获取并设置串口
GetCommState ( m_hCom, &dcb) ;
dcb.BaudRate = CBR_4800;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT ;
SetCommState( m_hCom, &dcb);


  在成功打开并设置通讯口后,可采取轮询串口和事件触发两种方式对数据进行接收处理,本文在此采取效率比较高的事件触发方式进行接收处理,通过等待EV_RXCHAR事件的发生来启动ReadFile函数完成对GPS定位信息的接收:

while(true){
 WaitCommEvent (m_hCom,&dwEvtMask,NULL);
 if (dwEvtMask&EV_RXCHAR == EV_RXCHAR)
  if(ComStat.cbInQue>0)
   ReadFile(m_hCom,m_readbuf,ComStat.cbInQue,&nLength,&olRead);
}



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值