<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > GPS導航數據提取的設計與研究

GPS導航數據提取的設計與研究

作者: 時(shí)間:2017-06-07 來(lái)源:網(wǎng)絡(luò ) 收藏

Windows CE 是一個(gè)開(kāi)放的、可裁剪的、32位實(shí)時(shí)嵌入式窗口操作系統,具有可靠性好、實(shí)時(shí)性高、內核體積小的特點(diǎn),廣泛應用于各種智能式設備的開(kāi)發(fā)。系統通過(guò)微軟提供的Platform Builder定制需要的Windows CE5.0系統,運行在硬件平臺上。硬件平臺采用博創(chuàng )科技PXA270實(shí)驗箱,該實(shí)驗箱嵌入式處理器是基于A(yíng)RMV5E的Xscale核心PXA270,并支持串口通信。

導航芯片采用天寶iQ 46240,將接收到的數據通過(guò)串口發(fā)送給處理器。串口是計算機系統與外部串行設備之間的數據傳輸通道,是嵌入式通信最可靠、最通用的通信方式。程序員利用Windows API函數可以編寫(xiě)出高效、可移植性的應用程序。Windows CE不支持Windows下常用的串行通信異步I/O方式(Overlapped,非阻塞),因此在嵌入式環(huán)境下采用了同步I/O方式的通信程序設計方法。

實(shí)驗設計根據導航數據有效性確認的標準,對提取的數據進(jìn)行處理,把緩存中接收到的數據格式轉化為電子地圖上常用的浮點(diǎn)型格式。此設計已應用于智能閱讀器盲用定位模塊中。

1 串口通信同步I/O方式的程序設計

串口通信是串行通信的一種,串行通信的模式一般分為上位機和下位機通信。上位機可以讀取下位機的狀態(tài)數據,也可以設置下位機的狀態(tài)。一般串行通信協(xié)議可分為兩類(lèi),即讀和寫(xiě)。讀寫(xiě)協(xié)議的描述如圖1所示,常用的效驗碼有異或、累加和、CRC等[1]。

本文引用地址:http://dyxdggzs.com/article/201706/350728.htm


在實(shí)驗設計中,GPS接收裝置作為下位機只負責提供固定格式的數據,實(shí)驗箱作為上位機不必發(fā)送指令,只負責定時(shí)讀取GPS接收裝置發(fā)送的數據。即可以簡(jiǎn)化通信協(xié)議,提高工作效率。

1.1 設計開(kāi)發(fā)環(huán)境

在Windows NT/ME環(huán)境下安裝eVC4.0編程環(huán)境,設置順序如下:

(1)安裝同步軟件Microsoft ActiveSync 4.0;
(2)安裝eVC4.0;
(3)利用PB(Platform Builder5.0)定制Wince系統對應的SDK并安裝;
(4)利用PB將定制的wince系統下載到實(shí)驗箱上,并與PC機同步[2]。

1.2 同步I/O方式讀取的設計方法

為完成串口通信同步I/O方式程序設計,分為三個(gè)部分,每個(gè)部分有一個(gè)函數完成其對應的功能[3]。函數原型為:

OnOpenCom(); //打開(kāi)并設置串口
ReadThreadFunc(LPVOID lparam); //串口接收線(xiàn)程
OnSeriesRead(CWnd *pWnd, BYTE *buf, int bufLen);
//串口接收數據成功回調函數

串口接收的具體流程圖如圖2所示,圖中對應了串口設置的三個(gè)功能函數。

1.3 程序設計的核心代碼實(shí)現

1.3.1 打開(kāi)并設置通信串口參數

以同步讀取方式打開(kāi)串口COM1

m_hComm=CreateFile(_T(COM1:), GENERIC_READ|GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);

//配置串口,得到打開(kāi)串口的當前屬性參數,修改后再重新設置串口。

DCB portDCB;
portDCB.DCBlength=sizeof(DCB); //DCB結構大小
portDCB.BaudRate=CBR_4800; //波特率
portDCB.ByteSize=8; //字符位
portDCB.Parity=NOPARITY; //奇偶校驗位
portDCB.StopBits=ONESTOPBIT; //停止位
//設置串口讀寫(xiě)時(shí)間,配置超時(shí)
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(m_hComm,CommTimeouts);
CommTimeouts.ReadIntervalTimeout= MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier=0;
CommTimeouts.ReadTotalTimeoutConstant=0;
//指定端口監測的事件集
SetCommMask (m_hComm, EV_RXCHAR);
//分配設備緩沖區
SetupComm(m_hComm,512,512);
//初始化緩沖區中的信息
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_
RXCLEAR);
m_hReadCloseEvent=CreateEvent(NULL,TRUE,FALSE,
NULL);

1.3.2 GPS定位信息的接收

在成功打開(kāi)并設置通信口后,在主程序中創(chuàng )建線(xiàn)程函數ReadThreadFunc(LPVOID lparam):

//創(chuàng )建串口接收線(xiàn)程
hRecvThread=CreateThread(0, 0, CommRecvTread, this, 0, IDThread);
然后在線(xiàn)程函數中采取事件觸發(fā)方式進(jìn)行接收處理,通過(guò)等待EV_RXCHAR事件的發(fā)生來(lái)啟動(dòng)ReadFile函數完成對GPS定位信息的接收:
while (TRUE){
if (evtMask EV_RXCHAR){
ClearCommError(m_hComm,dwReadErrors,cmState);
willReadLen = cmState.cbInQue ;
//接收緩沖區中存儲的待讀取的字符數
readBuf = new BYTE[willReadLen+1];
ReadFile(m_hComm,readBuf,willReadLen,actualReadLen,0);
readBuf[willReadLen]=0; //如果讀取的數據大于0,
if (actualReadLen>0){ //觸發(fā)讀取回調函數 m_OnSeriesRead(ceSeries->m_pPortOwner,readBuf,actualReadLen); }}
如果收到讀線(xiàn)程退出信號,則退出線(xiàn)程
if(WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0) break;

2 對導航數據的格式進(jìn)行處理

對于實(shí)驗中所使用的iQ46240接收芯片,其發(fā)送到計算機的數據(采用NEMA0183語(yǔ)句)主要由幀頭、幀尾和幀內數據組成。根據數據幀的不同,幀頭也不相同,主要有“$GPGGA”、“$GPGSA”、“$GPRMC”等。這些幀頭標識了后續幀內數據的組成結構,各幀均以回車(chē)符和換行符作為幀尾識別一幀的結束。本文中,定位數據經(jīng)緯度、速度、時(shí)間等均可以從“$GPGGA”幀中獲取得到。該幀的結構及各字段釋義如下[4]:

$GPGGA,1>,2>,3>,4>,5>,6>,7>,8>,9>,10,11>,12>,13>,14>*hh
1>當前位置的格林尼治時(shí)間
2>緯度值
3>緯度標識,N或者S(南北)
4>經(jīng)度值
5>經(jīng)度標識,E或者W(東西)
6>衛星接收信號質(zhì)量
7>正在使用衛星的數量

2.1 GPS導航數據有效性確認標準

GPS定位的基本原理是根據高速運動(dòng)衛星的瞬間位置作為已知的起算數據,采用空間距離后方交會(huì )的方法確定待測點(diǎn)的位置。假設t時(shí)刻在地面待測點(diǎn)安置GPS接收機,可以測定GPS信號到達接收機的時(shí)間,加上接收機所接收到的衛星星歷等其他數據可以確定以下4個(gè)方程式。衛星定位示意圖如圖3所示。


xi,yi,zi(i=1,2,3,4)分別代表衛星1、2、3、4在t時(shí)刻的空間直角坐標,可由衛星導航電文求得,Vti代表衛星鐘差,Vt0為接收機的鐘差。

由以上4個(gè)方程式可計算出待測點(diǎn)的坐標x、y、z和接收機的鐘差Vt0。因此導航數據能夠有效計算必須保證接收到4個(gè)衛星的星歷。對固定格式的導航電碼中提取衛星符號進(jìn)行確認,如果滿(mǎn)足4個(gè)衛星的接收狀態(tài)即可確定當前接收的導航電碼可用于數據處理。通常,3顆衛星可以在二維平面上得到經(jīng)度緯度坐標,為精確起見(jiàn),4顆衛星可以保證獲得三維空間坐標。

2.2 有效數據提取和數據格式轉化

有效數據的提取和數據格式轉化都是在回調函數中進(jìn)行的[5]。幀內各數據段由逗號分割,因此在處理緩存數據時(shí),可以通過(guò)搜索ASCII碼“$”來(lái)判斷是否是幀頭。對幀頭類(lèi)別進(jìn)行識別后,再通過(guò)對所經(jīng)歷逗號的個(gè)數計數來(lái)判斷當前處理的是哪一種定位導航參數,并做相應的處理。eVC支持CString類(lèi)型格式,由于定位信息格式固定,本文先利用mbstowcs函數將緩存中的字符型數據轉換為寬字符型,然后強制轉化為字符串類(lèi)型。

WCHAR wszbuf[512];
mbstowcs(wszbuf,(char*)buf,strlen((char*)buf));字符串類(lèi)型進(jìn)行處理,然后利用Find函數,搜索$GPGGA,
strRecv.Find(_T($GPGGA),1);
state=strRecv.Mid(pos+37,1);
得到GPS 質(zhì)量指示指標
strSatelliteNum=strRecv.Mid(pos+39,1) ;
得到接收到的衛星數量字符,將衛星數量字符型轉化為整型判斷衛星數量是否大于4,作為判斷是否為有效數據的標準。
int iSatelliteNum=atoi((LPSTR)(LPCTSTR)strSatelliteNum);
當iSatelliteNum>3 state = =‘1’時(shí)說(shuō)明接收到的是有效數據,可對strRecv中的數據進(jìn)行提取,并賦給經(jīng)緯度和時(shí)間變量。
strLatitude =strRecv.Mid(pos+16,8);
strLongitude=strRecv. Mid(pos+27,9);
將提取到得經(jīng)度緯度字符型數據轉化為浮點(diǎn)型數據,通過(guò)atof函數實(shí)現。
double Longitude_new = (atof(strLongitude))/100;
double Latitude_new = (atof(strLatitude))/100;
這樣將經(jīng)度緯度信息提取到GPS結構數組中,后續的處理和高層決策可根據該結構中存儲的數據作出相應的處理。

3 程序運行結果分析

程序運行后,在實(shí)驗平臺上收集的部分數據如表1所示。

對以上結果分析,可知通過(guò)串口在不同時(shí)段接收的數據是比較穩定的,能夠以此為基礎提取到有效的數據和定位信息,本系統結合超圖格式(pwr,pmw)的北京市公交站點(diǎn)地圖數據,在編寫(xiě)程序時(shí)調用超圖接口函數打開(kāi)電子地圖數據,將串口接收到的數據讀入,得到附近的公交站點(diǎn)并以文本方式輸出到界面。

本文結合相關(guān)程序代碼陳述了基于eVC環(huán)境下串口通信程序的設計,對GPS全球定位系統定位信息的接收和數據提取進(jìn)行了詳細的分析和討論。主要解決了EVC編程環(huán)境下實(shí)現串口通信功能、對GPS定位信息的提取和處理的問(wèn)題。實(shí)驗對wince5.0自定義平臺下開(kāi)發(fā)GPS接收裝置給出了代碼樣例供參考,并已應用于智能閱讀器項目中盲用定位模塊。



關(guān)鍵詞: pxa270 WinCE GPS

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>