音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

GPS導航數(shù)據(jù)抽取的設計與研究

出處:牛 立, 王景中 發(fā)布于:2011-07-09 12:57:53

  摘   要: 為解決盲用定位模塊在嵌入式平臺下實現(xiàn)的問題,根據(jù)串口通信同步方式實現(xiàn)Windows CE 5.0操作系統(tǒng)下GPS導航數(shù)據(jù)的提取,并對獲得的數(shù)據(jù)提出一種格式轉(zhuǎn)換的方法。以PXA270嵌入式系統(tǒng)平臺實現(xiàn)系統(tǒng)原型,在有限硬件條件下驗證了系統(tǒng)的功能及可行性。實驗結(jié)果表明,該系統(tǒng)運行穩(wěn)定,實驗數(shù)據(jù)可靠有效,可以有效結(jié)合電子地圖數(shù)據(jù)提取出周邊的位置信息。

  Windows CE作業(yè)系統(tǒng)是Windows家族中的成員,專門設計給掌上型電腦(HPCs)所使用的電腦環(huán)境。這樣的作業(yè)系統(tǒng)可使完整的可攜式技術(shù)與現(xiàn)有的Windows桌面技術(shù)整合工作。 Windows CE 被設計成針對小型設備(它是典型的擁有有限內(nèi)存的無磁盤系統(tǒng))的通用操作系統(tǒng),

  Windows CE 可以通過設計一層位于內(nèi)核和硬件之間代碼來用設定硬件平臺,這即是眾所周知的硬件抽象層(HAL)(在以前解釋時,這被稱為 OEMC (原始設備制造)適應層,即 OAL; 內(nèi)核壓縮層,即 KAL。 以免與微軟的 Windows NT 操作系統(tǒng) HAL 混淆) 。

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

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

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

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

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

  串口通信的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠距離通信。比如IEEE488定義并行通行狀態(tài)時,規(guī)定設備線總長不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。

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

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

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

 ?。?)安裝同步軟件Microsoft ActiveSync 4.0;

 ?。?)安裝eVC4.0;

 ?。?)利用PB(Platform Builder5.0)定制Wince系統(tǒng)對應的SDK并安裝;

 ?。?)利用PB將定制的wince系統(tǒng)到實驗箱上,并與PC機同步[2]。

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

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

  OnOpenCom();                                          //打開并設置串口

  ReadThreadFunc(LPVOID lparam);          //串口接收線程

  OnSeriesRead(CWnd *pWnd, BYTE *buf, int bufLen);

  //串口接收數(shù)據(jù)成功回調(diào)函數(shù)

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

  1.3 程序設計的代碼實現(xiàn)

  1.3.1 打開并設置通信串口參數(shù)

  以同步讀取方式打開串口COM1

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

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

  DCB portDCB;

  portDCB.DCBlength=sizeof(DCB);            //DCB結(jié)構(gòu)大小

  portDCB.BaudRate=CBR_4800;                  //波特率

  portDCB.ByteSize=8;                                     //字符位

  portDCB.Parity=NOPARITY;                     //奇偶校驗位

  portDCB.StopBits=ONESTOPBIT;                      //停止位

  //設置串口讀寫時間,配置超時

  COMMTIMEOUTS CommTimeouts;

  GetCommTimeouts(m_hComm,&CommTimeouts);

  CommTimeouts.ReadIntervalTimeout= MAXDWORD;

  CommTimeouts.ReadTotalTimeoutMultiplier=0;

  CommTimeouts.ReadTotalTimeoutConstant=0;

  //指定端口監(jiān)測的事件集

  SetCommMask (m_hComm, EV_RXCHAR);

  //分配設備緩沖區(qū)

  SetupComm(m_hComm,512,512);

  //初始化緩沖區(qū)中的信息

  PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_

  RXCLEAR);

  m_hReadCloseEvent=CreateEvent(NULL,TRUE,FALSE,

  NULL);

  1.3.2 GPS定位信息的接收

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

  //創(chuàng)建串口接收線程

  hRecvThread=CreateThread(0, 0, CommRecvTread, this, 0, &IDThread);

  然后在線程函數(shù)中采取事件觸發(fā)方式進行接收處理,通過等待EV_RXCHAR事件的發(fā)生來啟動ReadFile函數(shù)完成對GPS定位信息的接收:

  while (TRUE){

  if (evtMask & EV_RXCHAR){

  ClearCommError(m_hComm,&dwReadErrors,&cmState);

  willReadLen = cmState.cbInQue ;

  //接收緩沖區(qū)中存儲的待讀取的字符數(shù)

  readBuf = new BYTE[willReadLen+1];

  ReadFile(m_hComm,readBuf,willReadLen,&actualReadLen,0);

  readBuf[willReadLen]=0;        //如果讀取的數(shù)據(jù)大于0,

  if (actualReadLen>0){                   //觸發(fā)讀取回調(diào)函數(shù)        m_OnSeriesRead(ceSeries->m_pPortOwner,readBuf,actualReadLen); }}

  如果收到讀線程退出信號,則退出線程

  if(WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0) break;

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

  對于實驗中所使用的iQ46240接收芯片,其發(fā)送到計算機的數(shù)據(jù)(采用NEMA0183語句)主要由幀頭、幀尾和幀內(nèi)數(shù)據(jù)組成。本文中,定位數(shù)據(jù)經(jīng)緯度、速度、時間等均可以從“$GPGGA”幀中獲取得到。該幀的結(jié)構(gòu)及各字段釋義如下[4]:

  $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10,<11>,<12>,<13>,<14>*hh

  <1>當前位置的格林尼治時間

  <2>緯度值

  <3>緯度標識,N或者S(南北)

  <4>經(jīng)度值

  <5>經(jīng)度標識,E或者W(東西)

  <6>衛(wèi)星接收信號質(zhì)量

  <7>正在使用衛(wèi)星的數(shù)量

  2.1 GPS導航數(shù)據(jù)有效性確認標準

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


  其主要功能是能夠捕獲到按一定衛(wèi)星截止角所選擇的待測衛(wèi)星,并跟蹤這些衛(wèi)星的運行。當接收機捕獲到跟蹤的衛(wèi)星信號后,就可測量出接收天線至衛(wèi)星的偽距離和距離的變化率,解調(diào)出衛(wèi)星軌道參數(shù)等數(shù)據(jù)。根據(jù)這些數(shù)據(jù),接收機中的微處理計算機就可按定位解算方法進行定位計算,計算出用戶所在地理位置的經(jīng)緯度、高度、速度、時間等信息。接收機硬件和機內(nèi)軟件以及GPS 數(shù)據(jù)的后處理軟件包構(gòu)成完整的GPS 用戶設備。

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

  由以上4個方程式可計算出待測點的坐標x、y、z和接收機的鐘差Vt0。因此導航數(shù)據(jù)能夠有效計算必須保證接收到4個衛(wèi)星的星歷。對固定格式的導航電碼中提取衛(wèi)星符號進行確認,通常,3顆衛(wèi)星可以在二維平面上得到經(jīng)度緯度坐標,為起見,4顆衛(wèi)星可以保證獲得三維空間坐標。

  2.2 有效數(shù)據(jù)提取和數(shù)據(jù)格式轉(zhuǎn)化

  有效數(shù)據(jù)的提取和數(shù)據(jù)格式轉(zhuǎn)化都是在回調(diào)函數(shù)中進行的[5]。eVC支持CString類型格式,由于定位信息格式固定,本文先利用mbstowcs函數(shù)將緩存中的字符型數(shù)據(jù)轉(zhuǎn)換為寬字符型,然后強制轉(zhuǎn)化為字符串類型。

  WCHAR wszbuf[512];

  mbstowcs(wszbuf,(char*)buf,strlen((char*)buf));字符串類型進行處理,然后利用Find函數(shù),搜索"$GPGGA",

  strRecv.Find(_T("$GPGGA"),1);

  state=strRecv.Mid(pos+37,1);

  得到GPS 質(zhì)量指示指標

  strSatelliteNum=strRecv.Mid(pos+39,1) ;

  int iSatelliteNum=atoi((LPSTR)(LPCTSTR)strSatelliteNum);

  當iSatelliteNum>3&& state = =‘1’時說明接收到的是有效數(shù)據(jù),可對strRecv中的數(shù)據(jù)進行提取,并賦給經(jīng)緯度和時間變量。

  strLatitude =strRecv.Mid(pos+16,8);

  strLongitude=strRecv. Mid(pos+27,9);

  double Longitude_new = (atof(strLongitude))/100;

  這樣將經(jīng)度緯度信息提取到GPS結(jié)構(gòu)數(shù)組中,后續(xù)的處理和高層決策可根據(jù)該結(jié)構(gòu)中存儲的數(shù)據(jù)作出相應的處理。

  3 程序運行結(jié)果分析

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

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

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


  
關(guān)鍵詞:GPS導航數(shù)據(jù)抽取的設計與研究

版權(quán)與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!