GPS定位信息的接收

来源:互联网 发布:网络揭阳广播电视大学 编辑:程序博客网 时间:2024/05/16 15:21
 

    通常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);  
}    

原创粉丝点击