首页 用VC_6_0开发计算机与GPS通信的应用程序

用VC_6_0开发计算机与GPS通信的应用程序

举报
开通vip

用VC_6_0开发计算机与GPS通信的应用程序 是 英 文GPS Navigation Satellite Timing and Ranging/ 的缩写词 的简称,Global Postioning System NAVSTAR/GPS 其含义为:利用卫星的测时和测距进行导航,以构成全球卫 星定位系统。 对于用户来说,最重要的关键设备就是用户接收机 接收机 。很多情况下,用户都是用计算机和 接收(GPS ) GPS 机通信,将 信息导入计算机然后再处理。而 由于其GPS VC 在和 接收机的通信及后面的数据处理应用方面的强大威GPS 力,成为许...

用VC_6_0开发计算机与GPS通信的应用程序
是 英 文GPS Navigation Satellite Timing and Ranging/ 的缩写词 的简称,Global Postioning System NAVSTAR/GPS 其含义为:利用卫星的测时和测距进行导航,以构成全球卫 星定位系统。 对于用户来说,最重要的关键设备就是用户接收机 接收机 。很多情况下,用户都是用计算机和 接收(GPS ) GPS 机通信,将 信息导入计算机然后再处理。而 由于其GPS VC 在和 接收机的通信及后面的数据处理应用方面的强大威GPS 力,成为许多用户开发 应用程序的首选语言。GPS 本文将介绍利用 编写计算机与 接收机的通信和VC GPS 消息的传递及多线程的 应用程序。Windows GPS 数据采集1 GPS 数据传送分为同步串行传送和异步串行传送。同步GPS 串行传送是用单独的时钟信号来对传送的数据进行定时,因 此要求有严格的时间控制和同步 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 。异步串行传送不要求 有严格的时间控制和同步协议,但要求在电文中作一些规 定。在数据传送之前送一个“开始”位,传送完一组数据后 再送一个“停止”位。因此异步串行传送是字符为基础的。 在计算机与 通信进行数据传送时,都采用异步串行GPS 传送方式。 作为数据终端设备 与计算机 之GPS (DTE) (DCE) 间利用 型 — 电缆接口进行数据交换。D RS 232C 从数据输出形式来看, 的输出分为两类:十进制GPS 码和二进制码。ASCII 十进制 码1.1 ASCII 这种码直观,易于识别和应用。 的统一 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 格式GPS — 输出就采用 码。其格式定义如下:NMEA 0183 ASCII 比特率 4800 bit/s 数据位 8 bit 奇偶校验 无 开始位 1 bit 停止位 1 bit 二进制码1.2 二进制码是用 和 表示的编码。此种编码虽然不直观,0 1 但运算方便,在计算机中应用非常普遍。目前通用的字长为 位,可用两位 进制数表示。在编码时,一个二进制数由8 16 小数点向左,每 位一分,不足 位前面补 ,组成整数部4 4 0 分。由小数点向右,每 位一分,不足 位前面补 ,组成小4 4 0 数部分。输出 输入二进制数据流的格式是低字节高字节排/ / 列,每一个字节的输出次序是从最低有效位( )到最高LSB 有效位( )。MSB 的原始观测量、星历以及其它数据都采用了二进制GPS 编码。为了满足异步串行通信的要求,每一组数据需包含3 个部分:字头块、数据块和结束符。字头块包括电文的标志 和语句名。数据块包括电文中的全部数据。结束符包括校验 和与回车换行。 各种 接收机的数据格式在总体结构上相同,但具体GPS 采用的符号、内容、字长等各不相同。因此,在编写软件之 前,需知道此数据的具体结构。 另外,在编写软件时,为了确保数据的传送和采集质 量,必须进行校验和的检验。 用 编写基本的串行通信程序2 VC 用 编写基本串行通信程序一般都是采用 的VC Win32 API 来实现。 ( )创建串行通信句柄1 HANDLE m_hComm; m_hComm=CreateFile(m_sFileName,GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ ATTRIBUTE_NORMAL,NULL); 一般取“ ”或“ ” 其他参数请参考m_sFileName com1 com2 , 作者简介:李宗标( ),男,硕士生,主要研究方向为通信1972~ 与信息系统; ,硕士生;蒋传纪,副教授Barkoch Abdelaziz 收稿日期:2001-02-16 用 开发计算机与 通信的应用程序VC++6.0 GPS 李宗标 蒋传纪 , Barkoch Abdelaziz , (华东师范大学电子系 上海 ) , 200062 摘 要: 介绍了 的数据采集格式,和在 以上环境下,用 开发基于 消息机制的多线程的 应用程序,并给GPS Windows95 VC++6.0 Windows GPS 出了一个实例。 关键词: 计算机 数据格式 串行通信 多线程 消息机制GPS ; ; ; ; ; Windows Using VC++6.0 to Design the GPS-computer Communication Application LI Zongbiao , Barkoch Abdelaziz , JIANG Chuanji (Electronic Science and Technology Department of ECNU , Shanghai 200062 ) 【 】Abstract We introduce the format of GPS data, and give out an example of multi-thread GPS application based on Windows message processing ,which we use VC++6.0 to realize under the environment above Windows95. 【 】Key words GPS ; Computer ; Data format ; Serial communication ; Multi-thread ; Windows message processing 第27卷 第10期 Vol.27 № 10 计 算 机 工 程 Computer Engineering 2001年10月 October 2001 · 开发研究与设计技术· 中图分类号: TN919 文章编号:1000—3428(2001)10 —0183—03 文献标识码:A —183— ,由于篇幅关系,这里不作详细介绍。MSDN ( )设置串行通信内部缓存2 BOOL SetupComm(HANDLE hFile,DWORD dwInQueue, DWORD dwOutQueue); 取上面创建的串行通信句柄, 分HFile dwInQueue,dwOutQueue 别是输入缓存和输出缓存的大小,一般取 即可。1000 ( )设置串行通信环境3 DCB dcb; 设置 的参数// dcb SetCommState(m_hComm,&dcb); 是串行通信设备的控制字,对 来说,要设置比特率、DCB GPS 数据位、奇偶校验、开始位、停止位,还要设置 、 等串行RTS DTR 通信协议。 ( )设置串行通信时限4 COMMTIMEOUTS commtimeouts; 设置 的参数 // commtimeouts SetCommTimeouts(m_hComm,&commtimeouts); 是一个结构,读和写的间隔字符的时间和总COMMTIMEOUTS 共的时间,单位是 。ms 通过上面的设置,就可以进行串口的读和写。 读串口(5) DWORD iLength; void * pBuffer; DWORD pReadFact; ReadFile(m_hComm,pBuffer, iLength,&pReadFact,NULL); 读到的数据放在内存 里, 要先申请好内存空pBuffer pBuffer 间, 为需要读的数据长度, 存放实际读的数据长iLength pReadFact 度。 写串口(6) DWORD iLength; void * pBuffer; DWORD pReadFact; WriteFile(hComm,pBuffer,iLength,&pWriteFact,NULL); 要写的数据放在内存 里(当然 已先申请好内存pBuffer pBuffer 空间并且以赋好值), 为需要写的数据长度, 存iLength pReadFact 放实际写的数据长度。 多线程的通信程序3 相对于 数据处理,计算机和 的通信要慢得多,GPS GPS 而且和 的通信还有可能要阻塞,有时计算机还需要和多GPS 台 通信,所以如果应用程序写成单线程的话,是很不理GPS 想的选择。 写多线程的程序主要是给 通信的读和写分别开一个GPS 线程。开线程的 如下:API HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD wStackSize,LPTHREAD_START_ ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId); 是安全属性结构,一般取 即LpThreadAttributes NULL 可。 是线程堆栈的大小,一般取 ,由系统设wStackSize 0 置。 是读或写 的函数, 是该LpStartAddress GPS lpParameter 函数的参数。 是创建线程的参数,一般取DwCreationFlags ,即创建以后马上执行线程而不挂起。 是为了0 LpThreadId 存储线程的 。ID 在写多线程程序时,一定要仔细考虑需传递的参数结 构。还有,在写多线程程序时还要考虑线程的同步问题,这 主要通过下面的 来解决:API DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); 是需要同步对象的句柄,本程序中取HHandle m_ ,即串口句柄。 是等待的时间,一般hComm DwMilliseconds 取 ,即无限等待。INFINITE 消息的传递4 Windows 由于是多线程程序,当计算机和一个 通信完成时,GPS 必须要通知 数据处理线程,现在可以处理数据了。然后GPS 通信线程继续和 通信,数据处理线程开始处理数据。GPS 通信线程和数据处理线程之间的通信就是采用Windows 的消息机制。发送消息的 如下:API BOOL PostMessage( HWND hWnd,UINT Msg, WPARAM wParam, LPARAM lParam); 是数据处理线程的窗口句柄。 是自定义的消HWnd Msg 息标识,比如接收成功( )等等。WM_RECEIVEK wParam 和 是需要传递的消息参数,比如可以将接收到的数据lParam 传递给数据处理线程等。 “ ⋯ ”函数是消息发送以后,马上处理本PostMessage( ) 线程的程序,不像“ ⋯ ”需等待数据处理线SendMessage( ) 程执行完毕以后才能处理本线程的程序。 一个多线程的读 及消息发送的例子5 GPS 首先设置好串口的参数,具体请参见上面的论述。// 传递给读线程的参数数据结构// typedef struct _ReadWrite { 期望读或写的字节长度 int iLength;// 读或写的数据 void *pBuffer;// 实际读或写的长度 DWORD *pFact;// 串口句柄 HANDLE hComm;// 调用该线程的线程的窗口句柄 HWND hWnd;// 读或写的序号 int iIndex;// }RWParameter; 主线程创建读线程// int Read(int iLength, void *pBuffer) { HANDLE hThread; DWORD threadID; RWParameter *parameter=NULL; DWORD *pReadFact=NULL; parameter=new RWParameter[1]; pReadFact=new DWORD[1]; parameter->iLength=iLength; parameter->pBuffer=pBuffer; parameter->pFact=pReadFact; parameter->hComm=m_hComm; parameter->pOverlapped=m_pReadOverlapped; parameter->hWnd=m_hWnd; parameter->iIndex=m_iReadIndex; hThread=CreateThread(NULL,10000,(LPTHREAD_ START _ROUTINE)ReadComm,(void *)parameter,0,& threadID); return 1; } 读线程// int ReadComm(void * pParameter) { RWParameter *pRW; int iLength; void * pBuffer; DWORD * pReadFact; —184— HANDLE hComm,hThread,hPseudThread,hProcess; HWND hWnd; int index; pRW=(RWParameter *)pParameter; iLength=pRW->iLength; pBuffer=pRW->pBuffer; pReadFact=pRW->pFact; hComm=pRW->hComm; hWnd=pRW->hWnd; index=pRW->iIndex; WaitForSingleObject(hComm,INFINITE); BOOL flag; flag=ReadFile(hComm,pBuffer,(DWORD)iLength, pReadFact,NULL);//pOverlapped); if(flag==0) { DWORD error=GetLastError(); if(error!=ERROR_IO_PENDING) { 读失败! AfxMessageBox(" "); *(pReadFact)=-1; } } hProcess=GetCurrentProcess(); hPseudThread=GetCurrentThread(); BOOL dupflag; dupflag=DuplicateHandle(hProcess,hPseudThread, hProcess,& hThread,0,0,DUPLICATE_SAME_ACCESS); if(!dupflag) { 出现了致命的错误,请关闭程序! AfxMessageBox(" "); delete(pBuffer); ::PostMessage(hWnd,WM_RECEIVEERROR,0,0); } if(flag) { HopeAndResult *pHR=new HopeAndResult[1]; pHR->iHope=iLength; pHR->iResult=*pReadFact; pHR->hThread=hThread; pHR->iIndex=index; ::PostMessage(hWnd,WM_RECEIVEOK,( WPARAM) pBuffer,(LPARAM)pHR); } else { delete(pBuffer); ::PostMessage(hWnd,WM_RECEIVEERROR,0,0); } DWORD number=*pReadFact; delete(pParameter); delete(pReadFact); return number; } 其中有读线程传递给数据处理线程的参数的数据结构,如 下: struct HopeAndResult { 期望读或写的字节长度 DWORD iHope;// 实际读或写的长度 DWORD iResult;// 当前读或写的线程的句柄 HANDLE hThread;// 读或写的序号 int iIndex;// }; 结束语6 一个 应用系统一般包括数据终端设备( )—— GPS DTE 接收机和计算机( ),不同的 接收机有不同的GPS DCE GPS 具体数据格式,但是应用本文所论述的技术,一般都可以编 出一个高效实用的 应用程序。GPS 参考文献 周明德微型计算机系统原理及应用北京清华大学出版社1 . . : ,1998 设备驱动程序设计指南 北京:机械工业出2 Baker A . Windows NT . 版社 , 1997-12 刘大杰 全球定位系统 的原理与数据处理 上海:同济大3 . (GPS) . 学出版社 , 1996-08 上接第 页( 169 ) 由于 不能显示动画,所以给报警设备的动态显AutoCAD 示带来了一定困难,笔者利用了图层的概念,在进行消防设 备的标注时,用 二次开发技术使得每一个报警点ObjectARX 都属于自己的图层,并用设备编码唯一地标识。这样当响应 的设备发出警报信息时,只需要控制相应的图层的开关状 态,就可用 窗体将报警点位置动态显示出来了,相Viewview 关的实现方法用了定时器事件,其响应函数的代码如下: void CCRTDlg::OnTimer(UINT nIDEvent) { 使一个布尔型的变量,在这里用来控制图 Flag=!Flag; //Flag 层的开关 if(Flag==TRUE) m_Avviewx.SetLayersOn(yourlayername); else m_Avviewx.SetLayersOff(yourlayername); } 通过以上的介绍,我们可以看到利用 控件出色Voloview 地完成了火灾报警系统的彩色显示任务。 结束语4 是一个优秀的 平台下绘制图Voloview Express AutoCAD 形的浏览器,通过利用其提供的 功能,可以实现特殊的API 显示效果。在不需要对图形进行重绘的前提下,它是实现图 形浏览的最佳选择。 参考文献 公司,1 Voloview Express Online and Print Manuals. Autodesk 2000 高 强,朱国安 高级编程技巧 北京:人民邮电出2 . Visual C++ . 版社, 2000 —185—
本文档为【用VC_6_0开发计算机与GPS通信的应用程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_793768
暂无简介~
格式:pdf
大小:90KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-04-23
浏览量:13