GPSGPZDA數據解析C語言_第1頁
GPSGPZDA數據解析C語言_第2頁
GPSGPZDA數據解析C語言_第3頁
GPSGPZDA數據解析C語言_第4頁
GPSGPZDA數據解析C語言_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、摘要GPS(Global Positioning System)可說是目前最熱門、最受人矚目的一項科技。簡單的說,GPS是利用位于地球同步軌道上的同步衛星,以其相對位置的關系,來測出精確的位置,事實上,接收機往往可以鎖住4顆以上的衛星,這時,接收機可按衛星的星座分布分成若干組,每組4顆,然后通過算法挑選出誤差最小的一組用作定位,從而提高精度。GPS除了可作為精確的定位工具之外,同時也可以用作精密的測量工具。在進行大范圍、大面積的地面測量時,往往受限于地球本身的弧度與測量儀器的精密程度,甚至于當時的天候狀況或測量人員本身的許多因素,導致測量的結果產生或多或少的誤差。倘若利用GPS來作為測量工具,

2、由于人造衛星高懸于地表上空,受地表彎曲弧度的影響相對減少。透過GPS與GIS的結合,更可以讓我們更快速、精確地處理所需的資料。發明準確的計時工具之后的短時間內,沒有人會想象得到有了準確的時間會帶來改變世界的沖擊,影響了我們的生活,新興的產品和服務產業都由其引發。GPS對精確的位置就有如時鐘對精確的時間一樣,因此其得到大范圍使用。由于GPS定位需要非常精確的時間,每顆GPS衛星上都有精密的原子鐘,所以發送的信號可以附帶精確的時間信息。對于接收機也就有一定要求,GPS衛星接收機種類很多,根據型號分為測地型、全站型、定時型、手持型、集成型;根據用途分為車載式、船載式、機載式、星載式、彈載式。 隨著通

3、信技術的迅速發展,為適應社會的需求,滿足用戶的需要,必須提高軟件開發水平,近些年隨著嵌入式操作系統的興起,嵌入式終端與GPS的結合更加完善了GPS的可視性、功能性和操作性,使GPS的泛用性得到增強,用戶的數量增多使功能需求越來越復雜,其中就有部分用戶對時間精度要求較高,需要專門的語句格式來解析,這也是GPZDA得到應用并推廣的原因之一。無論是生活還是軍事,GPS全球衛星定位系統都已經成為最重要的定位系統。它的信號所包含的信息中有位置信號和時間信號,NMEA-0183協議的其他語句格式解析可以為用戶指明自己的所處方位,時間信息卻不是很準確。用戶所需要的除了準確的位置信息,還有收到信號時的準確時間

4、。GPZDA是NMEA0183協議中專門為解析時間準備的編碼,比NMEA0183協議中的其他語句格式更加精確,因此其專用性受到用戶認可。經過20余年的實踐證明,GPS系統是一個高精度、全天候和全球性的無線電導航、定位和定時的多功能系統。 GPS技術已經發展成為多領域、多模式、多用途、多機型的國際性高新技術產業。關鍵字:GPS 0183協議 GPZDA目 錄圖索引1前言2第一章GPS原理3第二章0183協議簡介42.1編譯技術的簡介42.2語法格式42.3協議類型4信息源5查詢5屬性52.4 GPZDA語句格式5第三章方案設計63.1總程序83.2程序運行截圖11設計中遇到的問題及解決方案14心

5、得體會15參考文獻16圖索引圖1 GPS衛星環繞圖3圖2 NMEA-0183協議框架4圖3 編譯過程流程圖4圖4 主流程圖7圖5 解析子流程圖8圖6 程序運行截圖112圖7 程序運行截圖212圖8 程序運行截圖313圖 9 程序運行截圖413圖10 程序運行截圖514前言 GPS全球衛星定位系統是目前世界上應用最廣的定位系統,其準確性與可靠性都是首屈一指,由于GPS技術所具有的全天候、高精度和自動測量的特點,作為先進的測量手段和新的生產力,已經融入了國民經濟建設、國防建設和社會發展的各個應用領域。GPS的信號不僅能傳輸三維位置和三維速度,還能傳輸時間信號,它的衛星系統是在地面監測站的監控下進行

6、工作的,衛星上的精密電子鐘經常與監測站校時,以保證時間信號的準確。因此,其時間信號也是GPS信號解析的一部分。全球定位系統由三部分構成:(1)地面控制部分,由主控站(負責管理、協調整個地面控制系統的 工作)、地面天線(在主控站的控制下,向衛星注入尋電文)、監測站(數據自動收集中心)和通訊輔助系統(數據傳輸)組成;(2)空間部分,由24顆衛星組成,分布在6個道平面上;(3)用戶裝置部分, 主要由GPS接收機和衛星天線組成。 全球定位系統的主要用途:(1)陸地應用,主要包括車輛導航、應急反應、大氣物理觀測、地球物理資源勘探、工程測量、變形監測、地殼運動監測、市政規劃控制等;(2)海洋應用,包括遠洋

7、船最佳航程航線測定、船只實時調度與導航、海洋救援、海洋探寶、水文地質測量以及海洋平臺定位、海平面升降監測等;(3)航空航天應用,包括飛機導航、航空遙感姿態控制、低軌衛星定軌、導彈制導、航空救援和載人航天器防護探測等。GPS的主要特點:(1)全天候;(2)全球覆蓋;(3)三維定速定時高精度;(4)快速省時高效率;(5)應用廣泛多功能。NMEA-0183是美國國家海洋電子協會為海用電子設備制定的標準格式。目前業已成了GPS導航設備統一的RTCM標準協議。大多數常見的GPS接收機、GPS數據處理軟件、導航軟件都遵守或者至少兼容這個協議。GPS接收機根據NMEA-0183協議的標準規范,將位置、速度等

8、信息通過串口傳送到PC機、PDA等設備。NMEA通訊協議所規定的通訊語句都是以ASCII碼為基礎的,NMEA-0183協議語句的數據格式如下:“$”為語句起始標志;“,”為域分隔符;“*”為校驗和識別符,其后面的兩位數為校驗和,代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個字符);“/”為終止符,所有的語句必須以它來結束,也就是ASCII字符的“回車”(十六進制的0D)和“換行”(十六進制的0A)。NMEA-0183協議包括GPGGA,GPRMC,GPGSA,GPGSV,GPZDA等語句格式,其中GPZDA的功能就是解析衛星信號中的時間信息,將其信號序列變為非專業人員可讀取的文字。

9、通過這次課程設計我們可以了解,如何用GPZDA解析GPS的時間信號,在計算機上輸出普通用戶所能理解的語句,讓用戶能夠在時間信息這方面更加精確地得到信息,給用戶提供更可靠的更高水準的服務。第一章GPS原理GPS全球衛星定位系統由21顆工作衛星和3顆備用衛星組成。它們分布在6個等間距的軌道平面上,每個軌道面上有4顆工作衛星。GPS能覆蓋全球,能夠連續、實時、隱蔽地定位,一次定位時間僅幾秒到十幾秒,用戶不發射任何電磁信號,只要接受衛星導航信號即可定位,所以可全天候晝夜作業。 GPS的衛星系統對于地面觀測者來說,每天將提前4分鐘見到同一顆GPS衛星位于地平線以上的衛星顆數隨著時間和地點的不同而不同,最

10、少可見到4顆,最多可見到11顆。地面設備監控衛星上的各種設備是否工作正常,以及衛星是否一直沿著預定軌道運行。除此之外,使用者接收機能夠捕獲到按一定衛星高度截止角所選擇的待測衛星的信號,并跟蹤這些衛星的運行,對所接收到的GPS信號進行變換、放大和處理,以便測量出GPS信號從衛星到接收機天線的傳播時間,解譯出GPS衛星所發送的導航電文,實時地圖1 GPS衛星環繞圖計算出測站的三維位置,三維速度和時間。GPS通過掌握衛星的位置,測定所在地點與衛星之間的距離,運用數學計算測得測站的三維位置,另外,接收機往往可以鎖住4顆以上的衛星,收到四顆則加上高程值這時,接收機可按衛星的星座分布分成若干組,每組4顆,

11、然后通過算法挑選出誤差最小的一組用作定位,從而提高精度。要了解衛星所處的準確位置,需要優化設計衛星運行軌道,并且,地面監測站要連續不斷監測衛星的運行狀態,適時發送控制指令,使衛星保持在正確的運行軌道。每顆GPS衛星上都裝置有十分精密的電子鐘,并由監測站經常進行校準。衛星除了發送定位導航信息,也能發送時間信息,GPS接收機收到信息后就能對時間進行校準。所以,GPS接收機除了能準確定位之外,還可產生精確的時間信息。第二章0183協議簡介NMEA0183通信方式是由美國國家海洋電子協會開發、維護并發布的標準,目前大多數GPS接收設備都遵循這一標準,該接口協議定義了在波特率4800的串口數據總線上傳輸

12、的電器信號需求、數據傳輸協議和時間以及詳細的句型格式,以“句子”為單位進行發送。假如數據域中的某個值無效,該值將被簡單的忽略,但對應的“,”仍需發送。 圖2 NMEA-0183協議框架圖3 編譯過程流程圖2.1編譯技術的簡介編譯過程主要分為四個階段,分別是詞法分析、語法分析、語義分析和代碼生成。第一個階段是詞法分析,它是從左到右一個字符一個字符的讀取源程序并對字符進行掃描和分解,從而識別一個一個單詞。第二個階段是語法分析,它是在詞法分析的基礎上將一個一個的單詞組成各類語法短語,如“程序”、“語句”、“表達式”等。第三個階段是語義分析,它的任務是審查源程序有無語義上的錯誤并且為代碼收集類型信息。

13、最后一個階段是代碼生成,它是在語法分析和語義分析的基礎上生成最終的目標程序。 2.2語法格式NMEA 0183的信息格式一般如下所示: $aaaaa,df1,df2,.CRLF所有的信息由$開始,以換行結束,緊跟著$后的五個字符解釋了信息的基本類型,多個參數之間用逗號隔開。2.3協議類型NMEA0183中有以下三種基本的協議類型:信息源信息源的標準格式為:$ttsss,df1,df2,.CRLF在緊隨$后的兩個字符是用來識別作為信息內容識別碼的后面三個字符,信息識別碼定義了保留的數據區,在NMEA0183的標準下,每個類型的數據區的信息內容是符合標準的。例如:$HCHDM,238,MCRLF。

14、其中“HC”信息源是一個磁性的羅盤,“HDM”是表明后面的代表磁性的船首向航向,238是船首向航向的值,M則表示船首向航向值的磁性。查詢查詢的標準格式為:$ttllQ,sss,CRLF前面兩個字符表示請求者的信息源的識別碼,后面兩個字符是被查詢設備的識別碼,最后一個字符說明這是一個查詢的信息。緊跟著的字符(SSS)包含了三個字的被查詢內容的記憶信息。例如: $CCGPQ,ZDACRLF “CC”說明計算機正從“GP”這個設備查詢ZDA中的內容。GPS將會每隔1秒發送內容直到有新的請求。屬性這是一種使用沒有在標準下預定義的特殊內容的方法。它通常的格式為:$PmmmA,df1,df2,.,CRLF

15、P說明是屬性內容,mmm定義為廠商信息代碼,A(A-Z)表明信息類型。NMEA-0183協議定義的語句非常的多,主要有$GPGLL、 $GPGGA、$GPVTG、$GPZDA等。因為本次課題我們需要使用GPS-GPZDA進行數據解析所以我們只介紹GPZDA標準格式的樣式。2.4 GPZDA語句格式UTC時間/日期及本地時區偏移量$GPZDA, <1>,<2>,<3>,<4>,*<5>CRLF<1> UTC時間,格式hhmmss.ss(前導位數不足則補0)。<2> UTC日期,01到31(前導位數不足則補0)。&

16、lt;3> UTC月份,01到12(前導位數不足則補0)。<4> UTC年,格式yyyy。<5> 校驗和。第三章方案設計編程的主要思想:由于GPZDA的形式是:$GPZDA,hhmmss,XX,XX,XXXX,*hh,所以,我們學習老師的課件及上課的內容從而確定編程的主線:通過對逗號的掃描來確定每一段的解析數據,需要進一步解析的就再次解析,從而最終解析出所有我們需要的數據。具體的程序流程圖如下,由主流程圖和子流程圖組成。圖4 主流程圖對程序流程圖的說明主流程圖:通過對switch(n)語句中的n的值的輸入選擇:n=0,打開文件a,并準備解析其中的數據;n=1,打開

17、文件b,并準備解析其中的數據;n=2,手動輸入數據,并準備對數據的解析。若輸入n為以上其它值,那么會出現報錯并提示用戶重新輸入n的值。其中打開文件部分,若失敗則會顯示Not Open。接著將數據放入到數組中然后進行解析,解析結果輸出并保存到文件c中。然后將數組中的數據全部清零,再次詢問用戶是否繼續解析數據,若是則輸入0,否就是輸入0以外的其它的值,從而結束程序。子流程圖:采用順序結構,依次解析出,時分秒,年,月,日,最后將時分秒進一步解析,從而解析出最終單個的顯示結果,最后輸出的時候按照年月日時分秒的順序顯示即可。注:主子流程圖均采用Visio軟件繪制 圖5 解析子流程圖3.1總程序#incl

18、ude <stdio.h>main() FILE *fp; char ch128='0' char ch110='0' char chday5='0' char chmonth5='0' char chyear5='0' char chhour5='0' char chmin5='0' char chsec8='0' char chsum10='0' char afterch128='0' int i,j,n,m; /*定義

19、并初始化一些數組,指針,整型變量等用于后續程序使用*/ printf("This program is finished by our team:nShenJianFeng WangTing HeXiaoTiannSongZhenZhong WuYunChao CaiQiWein"); printf("Finished Time: 2010-12-20 nn");HERE: printf("Welcome!Please input n (n=0 or 1 or2)n 0 means Open the File 'a.txt'n

20、1 means Open the File 'b.txt'n 2 means Manual Operation Input):"); scanf("%d",&n); while(n!=0&&n!=1&&n!=2) printf("Error!n Plaese input n again (n=0 or 1 or 2):"); scanf("%d",&n); switch(n) case(0): printf("Open the File 'a.

21、txt' and analysis: "); if(fp=fopen("a.txt","r")=NULL) printf("Not openn"); exit(0); fscanf(fp,"%s",&ch); printf("%sn",ch); fclose(fp); /*打開文件a并讀入需要解析的數據,并關閉文件*/ break; case(1): printf("Open the File 'b.txt' and analysis: &qu

22、ot;); if(fp=fopen("b.txt","r")=NULL) printf("Not openn"); exit(0); fscanf(fp,"%s",&ch); printf("%sn",ch); fclose(fp); /*打開文件b并讀入需要解析的數據,并關閉文件*/ break; case(2): printf("Please input the GPZDA data(such as:$GPZDA,hhmmss,XX,XX,XXXX,*hh):")

23、; scanf("%s",&ch); break; /*switch選擇語句用于實現a文件的打開,或b文件的打開,或手動輸入的選擇,不在選擇范圍內報錯*/ for(i=0;i<128;i+) afterchi-1=chi-1; if(chi!=','); else break; /*解析$GPZDA*/ for(i=i+1,j=0;i<128;i+) /*j清0是為了再次的循環(第二次亂碼的原因)*/ if(chi!=',') ch1j=chi; j+; else break; /*整體解析HHMMSS*/ for(i=i

24、+1,j=0;i<128;i+) if(chi!=',') chdayj=chi; j+; else break; /*解析日*/ for(i=i+1,j=0;i<128;i+) if(chi!=',') chmonthj=chi; j+; else break; /*解析月*/ for(i=i+1,j=0;i<128;i+) if(chi!=',') chyearj=chi; j+; else break; /*解析年*/ for(i=i+1,j=0;chi!='0'i+) if(chi!=','

25、;&&chi!='*') chsumj=chi; j+; /*解析校驗和*/ i=0; for(j=0;j<2;j+,i+) chhourj=ch1i; for(j=0;j<2;i+,j+) chminj=ch1i; for(j=0;j<5;i+,j+) chsecj=ch1i; /*進一步解析HHMMSS中的HH,MM,SS*/ fp=fopen("c.txt","a+"); fprintf(fp,"%srn 年%srn 月%srn 日%srn 時%srn 分%srn 秒%srn 校驗和:%s

26、rn",afterch,chyear,chmonth,chday,chhour,chmin,chsec,chsum); fclose(fp); /*將解析結果寫入追加型文件c中,并輸出*/ printf("%sn year:%sn month:%sn day:%sn hour:%sn min:%sn sec:%sn JYH:%sn",afterch,chyear,chmonth,chday,chhour,chmin,chsec,chsum); /*WIN-TC界面顯示輸出*/ memset(ch,'0',sizeof(ch); memset(ch1

27、,'0',sizeof(ch1); memset(chday,'0',sizeof(chday); memset(chmonth,'0',sizeof(chmonth); memset(chyear,'0',sizeof(chyear); memset(chhour,'0',sizeof(chhour); memset(chmin,'0',sizeof(chmin); memset(chsec,'0',sizeof(chsec); memset(chsum,'0',s

28、izeof(chsum); memset(afterch,'0',sizeof(afterch); /*清空所有的數組,以便再次解析不發生覆蓋*/ printf("Do you wana use again?n Please input 0(YES) or else(NO):"); scanf("%d",&m); if(m=0) goto HERE; else printf("Thanks for your using,BYE!"); /*if語句用于判斷是否需要再次的解析*/ getch();3.2程序運行截

29、圖圖6 程序運行截圖1上圖所示為:運行程序,出現如上圖所示的指引界面,前段為我們團隊的信息和完成時間,后段提示用戶需要輸入0,1,2其中之一來選擇打開文件a,或打開文件b,或手動輸入。圖7 程序運行截圖2上圖所示為:用戶在指引界面上輸入0,就打開文件a,并解析其中的內容,并且在解析完后顯示提示信息,再次輸入0或其他來表征是繼續還是結束程序。圖8 程序運行截圖3上圖所示為:在選擇是否繼續的時候輸入0,繼續。并再次輸入1來表示打開文件b,并解析其中的數據,同樣在解析完以后詢問用戶是否繼續。圖 9 程序運行截圖4上圖所示為:在選擇是否繼續的時候輸入0,繼續。并再次輸入2來表示手動輸入GPZDA解析數

30、據,并解析,同樣在解析完以后詢問用戶是否繼續,用戶按0以為的其他輸入,結束程序。圖10 程序運行截圖5設計中遇到的問題及解決方案編程中的點滴總結:問題:1. 文件打開失敗:由于文件的地址輸入有誤而導致的文件無法打開,最后修改了文件的地址,從而解決了打開失敗的問題。2. 文件打開卻無法讀入數據:由于使用了結構體函數fread,而此函數的使用格式及原則不是很熟悉,所以文件內的數據無法讀入,最后改用fscanf函數,從而數據讀入。3. 多次解析,后面解析的會覆蓋前次解析的數據:由于之前采用的文件寫入類型是w型的,自然會出現覆蓋現象,后改為a+的追加型,從而實現多次數據解析的保存到文件c中。4. 多次

31、數據解析出現錯誤:由于未加入清零程序,從而出現了后面的數據長度短于之前的長度而導致的后面解析的數據會殘留前次的部分數據,后加入memset清零函數從而解決了該問題。5. 程序出現解析亂碼:由于j每次使用前未重新賦值為0,導致數據存儲不是從數組的開始位置存儲而產生一些亂碼,后修改程序,j每次使用前均賦值為0,從而解決該問題。優化:1. 基本功能實現以后優化一:添加了歡迎界面以及一些指導用戶使用的提示性語句,方便用戶使用。2. 基本功能實現以后優化二:在switch語句前添加了報錯循環程序,使得用戶輸入n的值有誤時,能報錯并再次提示用戶輸入n(0,1,2之一)。3. 基本功能實現以后優化三:添加了

32、手動輸入功能,運用了選擇語句來實現并將手動的信息同步解析后信息輸出,從而實現手動解析。4. 基本功能實現以后優化四:添加了不同地址輸入數據解析的程序,從而不需要通過改變程序中文件的地址來實現不同地址的文件打開的功能。5. 基本功能實現以后優化五:在清零程序以后添加了循環語句,用以實現用戶多次解析數據的實現。收獲:1. 編程從出現的問題,到解決問題后達到較滿意的結果,其中都凝聚了我們全組人員的心血,一些編程的問題主要是由于c語言長時間不使用而導致一些指令語句的不熟悉以及格式的錯誤,而最后解決以后同時也加強了我們對于c語言的進一步了解和熟悉。2. 編程的優化過程中,我們在原有的基礎程序上,添加了一

33、些switch選擇語句,goto循環語句等用于實現不同地址文件讀入以及手動輸入,一些優化的程序雖然不難,但還是需要我們去用語句去實現,依舊鍛煉了我們的c語言功底。心得體會通過這次課程設計,加強了我們動手、思考和解決問題的能力。在整個設計過程中,經常會遇到這樣那樣的情況,就是心里老想著這樣的程序可以行得通,但實際編譯運行,總是實現不了,因此耗費在這方面的時間很多。做課程設計同時也是對課本知識的鞏固和加強,由于課本上知識太多,平時課間的學習并不能很好地理解和運用各個程序的功能,所以在這次課程設計過程中,我們了解了很多語句的功能,進行了實踐,并且對于其在編程中的使用有了更多的認識。我們在設計期間結合相關資料,以分組

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論