欢迎来到天天文库
浏览记录
ID:37713447
大小:47.50 KB
页数:7页
时间:2019-05-29
《VC++编写GPS的串口通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC++编写GPS的串口通信作者:ths. 本文可以转载,请以超链接标明原始出处和作者信息及版权声明网址:http://www.zhongsisi.com/?p=347::源代码::GPS通信 真的好多事情,这个代码也是半年前写的了,拿出来贴贴。 阅读此文之前,如果你还不知道如何编写VC++的串口通信,那么你可以先看我的这篇文章:VC++编写串口通信. GPS(GolbalPositionSystem)全球定位系统是一个在做一些项目中很常用到的仪器,它通过卫星的通信可以返回给你你当前所处的时间,时区,经纬度等等。VC+
2、+编写GPS通信是属于典型的基本的串口通信例子,而且只用接收信息即可,不用对GPS发送信息。 编写通信的方法的前半部分都跟我上篇文章说的串口通信一样,即注册ActiveX,建立实例及事件的映射等等。完成上面的操作后,你就可以接收的GPS发来的信息了。CGPSDlg::CGPSDlg(CWnd*pParent/*=NULL*/) :CDialog(CGPSDlg::IDD,pParent){ m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_port=1;//端口号
3、设置为1 m_strset=_T("38400,n,8,1");//串口参数,波特率:38400,8为数据位,1为停止位 m_inputBuffer=_T(""); //清空输入缓冲区 m_str=_T("");} voidCGPSDlg::OnBnClickedButton1(){//--------------------------------------------------------------------------- m_str=_T(""); //如果端口原来打开,则需要先关闭
4、if(m_comm.get_PortOpen()) m_comm.put_PortOpen(FALSE); //设置连接参数 m_comm.put__CommPort(m_port); //指定串口号 m_comm.put_Settings(m_strset);//通信参数设置 m_comm.put_InBufferSize(1024);//指定接收缓冲区大小 m_comm.put_InBufferCount(0); //清空输入缓冲区 m_comm.put_InputMode(0);
5、 //文本模式获取数据 m_comm.put_InputLen(0); //读取缓冲区的全部数据 m_comm.put_RThreshold(1); //设置在产生OnComm事件前要接收的字符数阈值 //打开端口连接 if(!m_comm.get_PortOpen()) m_comm.put_PortOpen(TRUE);//--------------------------------------------------------------------------- } 但因为
6、GPS发送来的信息是源源不断的帧数据,如果你直接阅读这些帧数据,你会发现根本无法阅读。所以接下来的关键一步就是对GPS的帧数据的格式分析,筛选出有用的数据。要筛选数据,首先你必须明白GPS的帧格式,这里我就不说了,你去看我百度Hi里以前收集的这篇文章《VC++实现GPS全球定位系统定位数据的提取》 其实数据的提取就是对接收过来的字符串进行分析,个人认为比较可简洁高效的方法是正则表达式法。但我当时使用的是最土的逐字分析法,先查找$帧开头,得到一个帧数据后再对这个帧数据分析,反正就是写得很”猥琐”,不过这么写起来也不难就是了。
7、因为方法太土,也就没有什么好讲的了,自己看代码。voidCGPSDlg::OnCommMscomm1(){ CStringstr=_T(""); VARIANTvar_in; CStringstrtemp; if(m_comm.get_CommEvent()==2){ //事件值为2表示接收缓冲区内有字符 var_in=m_comm.get_Input(); //读缓冲区 m_str+=var_in.bstrVal; //转换成CString类型 if(m_str.G
8、etLength()>100){ //如果端口原来打开,则需要先关闭 if(m_comm.get_PortOpen()) m_comm.put_PortOpen(FALSE); //数据存放变量 CStringGpsTime
此文档下载收益归作者所有