GPS外场数据与电脑的数据通信(2)
作者:佚名; 更新时间:2014-12-05
2.4 读、写串口程序
读语句:DWORD iLength; void* pBuffer; DWORD pReadFact; ReadFile (m_ hComm, pBuffer, iLength, &pReadFact,NULL);
读到的数据放在内存pBuffer里,pBuffer要先申请好内存空间,iLength为需要读的数据长度,pReadFact存放实际读的数据长度。
写语句:
DWORD iLength; void * pBuffer; DWORD pReadFact; WriteFile ( hComm, pBuffer, iLength, &pWriteFact,NULL);
要写的数据放在内存pBuffer里,iLength为需要写的数据长度,pReadFact存放实际写的数据长度。
3 通讯程序中的多线程语句及Windows消息传递
相对于GPS数据处理,计算机和GPS的通信要慢得多,而且和GPS的通信还有可能要阻塞,有时计算机还需要和多台GPS通信,所以如果应用程序写成单线程的话,是很不理想的选择。
写多线程的程序主要是给GPS通信的读和写分别开一个线程。开线程的API如下:
HANDLE CreateThread(LPSECURITY _ATTRIBUTES
lpThreadAttributes, DWORD wStackSize, LPTHREAD_
STAR_T ROUTINE lpStartAddress,LPVOID lpParameter,
DWORD dwCreationFlags,LPDWORD lpThreadid);
由于篇幅关系,具体参数含义请参见MSDN。
在写多线程程序时,一定要仔细考虑须传递的参数结构。还有,在写多线程程序时还要考虑线程的同步问题,这主要通过下面的API来解决;
DWORD WaitForSingleObject ( HANDLE hHandle,DWORD dwMilliseconds);
HHandle是需要同步的对象的句柄,本程序中取m hComm,即串口句柄。DwMilliseconds是等待的时间,一般取INFINITE,即无限等待。
此外,由于是多线程程序,当计算机和一个GPS通信完成时,必须要通知GPS数据处理线程,现在可以处理数据了。然后通信线程继续和GPS通信,数据处理线程开始处理数据。
通信线程和数据处理线程之间的通信就是采用Windows的消息机制。发送消息的API如下:
BOOL PostMessage ( HWND hWnd, UINT Msg,WPARAM wParam,LPAPAM IParam);
HWnd是数据处理线程的窗口句柄。Msg是自定义的消息标识,比如接收成功(WM RECEIVEK)等等。wParam和LParam是需要传递的消息参数,比如可以将接收到的数据传递给数据处理线程等等。
4 结束语
在实际工作中,我们一般采用以下几个步奏,外场数据采集,数据回送(其中包含远程光缆数据传输和人工回送),之后通过D型RS-232C接口的连接,完成本文采用的——GPS接收机和计算机之间的的数据通讯,从而实现数据传递以及相关的数据处理。虽然GPS接收机有不同的具体数据格式,但是应用本文所论述的技术,依然可以编写出一个实用的GPS应用程序。目前这个方法,用在实际工作中经验证,数据传输不存在误码,稳妥可靠。
参考文献:
[1] 王广运,郭秉义,李洪涛.差分定位技术与应用[M],北京:电子工业出版社,1998.
[2] 周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,1998.
上一篇:论计算机远程教育与多媒体技术
下一篇:学校无线网安全策略研究
热门论文