劉賦山,郭承軍,賈振東
(電子科技大學 電子科學技術研究院,四川 成都 611731)
?
一種新的NMEA0183協議解析方法實現
劉賦山,郭承軍,賈振東
(電子科技大學 電子科學技術研究院,四川 成都 611731)
NMEA0183 協議解析模塊是導航系統中至關重要的軟件模塊,該模塊的健壯性和高效性直接關系到整個導航系統的性能。為了能及時并高效解析NMEA數據流,分開處理NMEA數據流解析與數據顯示,降低解析模塊與顯示模塊的耦合性,提出一種基于正則表達式和MVC架構的NMEA0183協議解析方法。整個解析模塊可分為四個階段,原始NMEA數據流存儲,NMEA數據流高效解析,NMEA數據校驗,NMEA數據顯示。目前該方法已應用到GPS 導航產品中,實測表明,該解析模塊高效可靠,數據流解析顯示實時性好。
GPS;NMEA0813;解析;正則表達式;MVC
伴隨著導航技術的發展與應用,我國很多領域的生產力水平得到提高,人們的生活也更方便,對我國科技的進步和國力的壯大有著重大的意義。GPS衛星導航系統是目前全球內使用最廣泛的全球定位系統,其中GPS模塊通過空間部分提供的信息計算出自己當前的位置速度等信息,然后通過這些信息用NMEA0813協議封裝,并通過串口發送給數據處理中心進行處理[1]。數據處理中心的最主要的任務就是保證處理由GPS模塊發送過來的數據的可靠性、高有效性。但如今有部分產品需要保證正確高效解析NMEA數據的同時又要保證數據顯示的實時性[2],本文運用了正則表達式與MVC架構相結合的方式,實現了一種高效穩定又保證一定實時性數據顯示的方法。
1.1 NMEA0183協議簡介
NMEA0183 協議是由美國國家海洋電子協會開發、維護并發布的標準,用于航海遠洋時使用的電子儀器之間的通信[4]。目前大部分GPS 接收設備都遵循這一標準。 該接口協議定義了在波特率為4 800 的串口數據總線上傳輸的電器信號需求、數據傳輸協議和時間,以及詳細的句型格式。 NMEA0183 協議的數據以“句子”為單位進行發送,每個“句子”的結構如圖1 所示。 假如數據域中的某個值無效,該值將被簡單的忽略,但對應的仍需發送。
1.2 正則表達式簡介
正則表達式被作為用來描述其稱之為“正則集的代數”的一種表達式,因而采用了“正則表達式”這個術語[6]。正則表達式在基于文本的編輯器和搜索工具中占據著一個非常重要的地位,它是對字符串操作的一種邏輯公式,是用事先定義好的一些特定字符及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
給定一個正則表達式和另一個字符串,可以達到如下的目的:
1) 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”);
2) 可以通過正則表達式,從字符串中獲取想要的特定部分。
正則表達式的特點是:
1) 靈活性、邏輯性和功能性非常強;
2) 可以迅速地用極簡單的方式達到字符串的復雜控制。
1.3 MVC架構簡介
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯[7]。MVC被獨特的發展起來用于映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中,能有效保證輸出的實時性和減輕代碼之間的干擾性。
視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則而不會彼此之間產生干擾性,數據的顯示和數據的接收存儲是異步執行的,程序能夠在接收的同時能顯示數據,顯示數據的同時還在接收下一個數據。圖2為MVC架構示意圖。
Model與View之間并不直接通信,它們直接與Controller進行通信,Controller負責將讀取到的數據解析好放入對應的Model中,從Model中獲取數據并進一步解析后顯示在View上。
1.4 可行性分析
NMEA0183中的數據也是字符串形式存儲,正則表達式就是針對各種字符串形式的數據進行高效穩定解析的方法。NMEA0183中有幾種不同格式的數據存儲語句,相對應的可以用幾種形式的Model進行分開存儲。NMEA0183數據處理后信息顯示需要保證良好的實時性[3],使用MVC架構進行程序設計能將數據的解析存儲于數據實時顯示相分離,兩者異步執行,能很好的保證數據信息顯示的實時性。因此,可以利用正則表達解析加MVC架構對NMEA0183協議進行有效解析的同時保證數據信息顯示的實時性。
2.1 數據格式分析
在NMEA0183中有六種不同的輸出協議的格式。主要分析GGA和RMC兩種格式的數據。$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18 為GGA格式的數據樣例,該數據以$GPGGA開頭,以
2.2 GGA格式數據解析部分代碼實現
NMEAText=”'$GPGGA,235949.042,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*45
$GPGLL,0000.0000,N,00000.0000,E,235949.042,V,N*47
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,140209,,,N*7E
$GPVTG,,T,,M,,N,,K,N*2
”'
pattern=re.compile(r'$GPGGA.*')
match=pattern.match(NMEAText)
if match:
print match.group()
數據在傳輸的過程中可能出現各種各樣的錯誤導致傳輸的數據錯誤,為了確保所采集的GPS數據的可靠性,必須進行檢驗和的計算與比較[5]。在每條NMEA0183協議格式數據的最后有個數據校驗和hh為’$’和’*’之間的所有字符按位異或的結果,并將其高4位和低4位各用一個十六進制數(字母大寫)表示出來。為此,需要進一步編寫代碼去校驗數據的正確性。以下為校驗和正確性檢測代碼實現。
def transSum(checkSum):
numberCollection='0123456789ABCDEFG
HIJKLMNOPQRSTUVWXYZ'
high=checkSum[0]
low=checkSum[1]
return numberCollection.index(high)* 16+numberCollection.index(low)
testString=′GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,140209,,,N′
result=′7E′
count=0
for char in testString:
count^=ord(char)
if transSum(result)==count:
print ′Yes:the data is right′
else:
print ′Error: wrong data′
3.1 MVC架構設計
MVC架構分三個部分:Model, Controller, View, 六種NMEA0183數據格式對應六種Model,Model用來對NMEA格式數據進行分類存儲和提供View顯示的數據的來源。Controller用來區分不同NMEA格式數據和監聽Model數據的變化并將其顯示到View上面。View用來實時顯示Controller傳遞過來的數據。因為通過串口接收的NMEA0183數據流中各個格式的數據順序并沒有規律,根據不同數據格式將數據存儲于對應的Model中并利用Controller去監聽各個Model的變化,然后顯示到各個View上去。
3.2 實時顯示數據
在程序中可根據需求選擇實時查看NMEA中不同格式的數據,不同格式的數據有不同的視圖對應。圖3為實時解析并顯示的數據視圖。
可對GPS報文文件進行一次掃描,也可通過串口傳輸報文數據并實時解析并顯示。在對GPS報文文件進行一次性掃描的模式下,有著較高的解析效率,用該程序解析了一個包含5000條GPS報文的文件并未發現任何錯誤,該程序能很好的應對需要一次性掃描大量GPS報文的情況。而在實時解析顯示模式下,也有著十分良好的實時顯示性,但相比一次性掃描模式的解析錯誤率較高。
本文針對NMEA0183協議的特點,采用正則表達式的匹配技術進行高效解析,應用了MVC架構設計提高數據顯示實時性,實測表明該方法穩定高效,可根據不同場景需要切換不同模式處理數據,良好應對不同場景的需要。本文對其他字符協議報文解析并需要實時顯示的設計具有一定的參考意義。
[1] 李長真.GPS 全球定位系統[J].現代物理知識,2000,12(C00):90292.
[2] JAMES BAO-YEN TSUI. GPS軟件接收機基礎[M]. 2版. 北京: 電子工業出版社, 2008: 68-76.
[3] 張文軍.GPS與嵌入式系統軟硬件接口及導航信息提取軟件[J].計算機工程,2005,31 (18):2102212.
[4] The National Marine Electronics Association.NMEA 0183 standard for interfacing marine electronic devices [EB/OL]. 1998-03-30. http://www.nmea.org/.
[5] 曹婷婷,高玉.GPS中NMEA-0183協議的應用[J].電子工程師,2006,32(10):8-11.
[6] LIGER F,QUEEN C M,WILTON P. C#字符串和正則表達式參考手冊[M].劉樂亭,譯.北京:清華大學出版,2003.
[7] 王映輝,王英杰,王彥君,等.基于MVC的軟件界面體系結構研究與實現[J].計算機應用研究,2004(9):188-190.
A New Method of NMEA0813 Protocol Parsing
LIU Fushan,GUO Chengjun,JIA Zhendong
(UniversityofElectronicScienceandTechnologyofChina,Chengdu611731,China)
NMEA0183 protocol parsing module is crucial in a navigation system software module, the module of the robustness and efficiency is directly related to the performance of the whole navigation system. In order to timely and effective resolution NMEA data flow, separate processing NMEA data flow analysis and data display, reduce the coupling of parsing module and display module, put forward a kind of based on regular expressions, and based on the MVC architecture of NMEA0183 protocol parsing methods.The whole parsing module can be divided into four stages, the original NMEA data stream storage, NMEA data flow efficient parsing, NMEA data validation, NMEA data show.At present the method has been applied to the GPS navigation products, the measured show that the analytical module, high efficiency and reliable data flow analysis showed good real-time.
GPS; NMEA0183; parsing; Regular expressions; MVC
10.13442/j.gnss.1008-9268.2017.01.014
2016-08-26
P228.4
A
1008-9268(2017)01-0070-04
劉賦山 (1992-),男,碩士生,研究方向為衛星導航技術。
郭承軍 (1985-),男,博士生,研究方向為GNSS互換性與泛在位置服務、新時空體系、完好性及增強系統。
賈振東 (1993-),男,碩士生,研究方向為衛星導航技術。
聯系人: 劉賦山 E-mail:fsliu33@163.com