劉賦山,郭承軍,賈振東
(電子科技大學(xué) 電子科學(xué)技術(shù)研究院,四川 成都 611731)
?
一種新的NMEA0183協(xié)議解析方法實(shí)現(xiàn)
劉賦山,郭承軍,賈振東
(電子科技大學(xué) 電子科學(xué)技術(shù)研究院,四川 成都 611731)
NMEA0183 協(xié)議解析模塊是導(dǎo)航系統(tǒng)中至關(guān)重要的軟件模塊,該模塊的健壯性和高效性直接關(guān)系到整個(gè)導(dǎo)航系統(tǒng)的性能。為了能及時(shí)并高效解析NMEA數(shù)據(jù)流,分開(kāi)處理NMEA數(shù)據(jù)流解析與數(shù)據(jù)顯示,降低解析模塊與顯示模塊的耦合性,提出一種基于正則表達(dá)式和MVC架構(gòu)的NMEA0183協(xié)議解析方法。整個(gè)解析模塊可分為四個(gè)階段,原始NMEA數(shù)據(jù)流存儲(chǔ),NMEA數(shù)據(jù)流高效解析,NMEA數(shù)據(jù)校驗(yàn),NMEA數(shù)據(jù)顯示。目前該方法已應(yīng)用到GPS 導(dǎo)航產(chǎn)品中,實(shí)測(cè)表明,該解析模塊高效可靠,數(shù)據(jù)流解析顯示實(shí)時(shí)性好。
GPS;NMEA0813;解析;正則表達(dá)式;MVC
伴隨著導(dǎo)航技術(shù)的發(fā)展與應(yīng)用,我國(guó)很多領(lǐng)域的生產(chǎn)力水平得到提高,人們的生活也更方便,對(duì)我國(guó)科技的進(jìn)步和國(guó)力的壯大有著重大的意義。GPS衛(wèi)星導(dǎo)航系統(tǒng)是目前全球內(nèi)使用最廣泛的全球定位系統(tǒng),其中GPS模塊通過(guò)空間部分提供的信息計(jì)算出自己當(dāng)前的位置速度等信息,然后通過(guò)這些信息用NMEA0813協(xié)議封裝,并通過(guò)串口發(fā)送給數(shù)據(jù)處理中心進(jìn)行處理[1]。數(shù)據(jù)處理中心的最主要的任務(wù)就是保證處理由GPS模塊發(fā)送過(guò)來(lái)的數(shù)據(jù)的可靠性、高有效性。但如今有部分產(chǎn)品需要保證正確高效解析NMEA數(shù)據(jù)的同時(shí)又要保證數(shù)據(jù)顯示的實(shí)時(shí)性[2],本文運(yùn)用了正則表達(dá)式與MVC架構(gòu)相結(jié)合的方式,實(shí)現(xiàn)了一種高效穩(wěn)定又保證一定實(shí)時(shí)性數(shù)據(jù)顯示的方法。
1.1 NMEA0183協(xié)議簡(jiǎn)介
NMEA0183 協(xié)議是由美國(guó)國(guó)家海洋電子協(xié)會(huì)開(kāi)發(fā)、維護(hù)并發(fā)布的標(biāo)準(zhǔn),用于航海遠(yuǎn)洋時(shí)使用的電子儀器之間的通信[4]。目前大部分GPS 接收設(shè)備都遵循這一標(biāo)準(zhǔn)。 該接口協(xié)議定義了在波特率為4 800 的串口數(shù)據(jù)總線上傳輸?shù)碾娖餍盘?hào)需求、數(shù)據(jù)傳輸協(xié)議和時(shí)間,以及詳細(xì)的句型格式。 NMEA0183 協(xié)議的數(shù)據(jù)以“句子”為單位進(jìn)行發(fā)送,每個(gè)“句子”的結(jié)構(gòu)如圖1 所示。 假如數(shù)據(jù)域中的某個(gè)值無(wú)效,該值將被簡(jiǎn)單的忽略,但對(duì)應(yīng)的仍需發(fā)送。
1.2 正則表達(dá)式簡(jiǎn)介
正則表達(dá)式被作為用來(lái)描述其稱之為“正則集的代數(shù)”的一種表達(dá)式,因而采用了“正則表達(dá)式”這個(gè)術(shù)語(yǔ)[6]。正則表達(dá)式在基于文本的編輯器和搜索工具中占據(jù)著一個(gè)非常重要的地位,它是對(duì)字符串操作的一種邏輯公式,是用事先定義好的一些特定字符及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。
給定一個(gè)正則表達(dá)式和另一個(gè)字符串,可以達(dá)到如下的目的:
1) 給定的字符串是否符合正則表達(dá)式的過(guò)濾邏輯(稱作“匹配”);
2) 可以通過(guò)正則表達(dá)式,從字符串中獲取想要的特定部分。
正則表達(dá)式的特點(diǎn)是:
1) 靈活性、邏輯性和功能性非常強(qiáng);
2) 可以迅速地用極簡(jiǎn)單的方式達(dá)到字符串的復(fù)雜控制。
1.3 MVC架構(gòu)簡(jiǎn)介
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯[7]。MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中,能有效保證輸出的實(shí)時(shí)性和減輕代碼之間的干擾性。
視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)MVC的模型層即可。因?yàn)槟P团c控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則而不會(huì)彼此之間產(chǎn)生干擾性,數(shù)據(jù)的顯示和數(shù)據(jù)的接收存儲(chǔ)是異步執(zhí)行的,程序能夠在接收的同時(shí)能顯示數(shù)據(jù),顯示數(shù)據(jù)的同時(shí)還在接收下一個(gè)數(shù)據(jù)。圖2為MVC架構(gòu)示意圖。
Model與View之間并不直接通信,它們直接與Controller進(jìn)行通信,Controller負(fù)責(zé)將讀取到的數(shù)據(jù)解析好放入對(duì)應(yīng)的Model中,從Model中獲取數(shù)據(jù)并進(jìn)一步解析后顯示在View上。
1.4 可行性分析
NMEA0183中的數(shù)據(jù)也是字符串形式存儲(chǔ),正則表達(dá)式就是針對(duì)各種字符串形式的數(shù)據(jù)進(jìn)行高效穩(wěn)定解析的方法。NMEA0183中有幾種不同格式的數(shù)據(jù)存儲(chǔ)語(yǔ)句,相對(duì)應(yīng)的可以用幾種形式的Model進(jìn)行分開(kāi)存儲(chǔ)。NMEA0183數(shù)據(jù)處理后信息顯示需要保證良好的實(shí)時(shí)性[3],使用MVC架構(gòu)進(jìn)行程序設(shè)計(jì)能將數(shù)據(jù)的解析存儲(chǔ)于數(shù)據(jù)實(shí)時(shí)顯示相分離,兩者異步執(zhí)行,能很好的保證數(shù)據(jù)信息顯示的實(shí)時(shí)性。因此,可以利用正則表達(dá)解析加MVC架構(gòu)對(duì)NMEA0183協(xié)議進(jìn)行有效解析的同時(shí)保證數(shù)據(jù)信息顯示的實(shí)時(shí)性。
2.1 數(shù)據(jù)格式分析
在NMEA0183中有六種不同的輸出協(xié)議的格式。主要分析GGA和RMC兩種格式的數(shù)據(jù)?!鏕PGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18 為GGA格式的數(shù)據(jù)樣例,該數(shù)據(jù)以$GPGGA開(kāi)頭,以
2.2 GGA格式數(shù)據(jù)解析部分代碼實(shí)現(xiàn)
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()
數(shù)據(jù)在傳輸?shù)倪^(guò)程中可能出現(xiàn)各種各樣的錯(cuò)誤導(dǎo)致傳輸?shù)臄?shù)據(jù)錯(cuò)誤,為了確保所采集的GPS數(shù)據(jù)的可靠性,必須進(jìn)行檢驗(yàn)和的計(jì)算與比較[5]。在每條NMEA0183協(xié)議格式數(shù)據(jù)的最后有個(gè)數(shù)據(jù)校驗(yàn)和hh為’$’和’*’之間的所有字符按位異或的結(jié)果,并將其高4位和低4位各用一個(gè)十六進(jìn)制數(shù)(字母大寫)表示出來(lái)。為此,需要進(jìn)一步編寫代碼去校驗(yàn)數(shù)據(jù)的正確性。以下為校驗(yàn)和正確性檢測(cè)代碼實(shí)現(xiàn)。
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架構(gòu)設(shè)計(jì)
MVC架構(gòu)分三個(gè)部分:Model, Controller, View, 六種NMEA0183數(shù)據(jù)格式對(duì)應(yīng)六種Model,Model用來(lái)對(duì)NMEA格式數(shù)據(jù)進(jìn)行分類存儲(chǔ)和提供View顯示的數(shù)據(jù)的來(lái)源。Controller用來(lái)區(qū)分不同NMEA格式數(shù)據(jù)和監(jiān)聽(tīng)Model數(shù)據(jù)的變化并將其顯示到View上面。View用來(lái)實(shí)時(shí)顯示Controller傳遞過(guò)來(lái)的數(shù)據(jù)。因?yàn)橥ㄟ^(guò)串口接收的NMEA0183數(shù)據(jù)流中各個(gè)格式的數(shù)據(jù)順序并沒(méi)有規(guī)律,根據(jù)不同數(shù)據(jù)格式將數(shù)據(jù)存儲(chǔ)于對(duì)應(yīng)的Model中并利用Controller去監(jiān)聽(tīng)各個(gè)Model的變化,然后顯示到各個(gè)View上去。
3.2 實(shí)時(shí)顯示數(shù)據(jù)
在程序中可根據(jù)需求選擇實(shí)時(shí)查看NMEA中不同格式的數(shù)據(jù),不同格式的數(shù)據(jù)有不同的視圖對(duì)應(yīng)。圖3為實(shí)時(shí)解析并顯示的數(shù)據(jù)視圖。
可對(duì)GPS報(bào)文文件進(jìn)行一次掃描,也可通過(guò)串口傳輸報(bào)文數(shù)據(jù)并實(shí)時(shí)解析并顯示。在對(duì)GPS報(bào)文文件進(jìn)行一次性掃描的模式下,有著較高的解析效率,用該程序解析了一個(gè)包含5000條GPS報(bào)文的文件并未發(fā)現(xiàn)任何錯(cuò)誤,該程序能很好的應(yīng)對(duì)需要一次性掃描大量GPS報(bào)文的情況。而在實(shí)時(shí)解析顯示模式下,也有著十分良好的實(shí)時(shí)顯示性,但相比一次性掃描模式的解析錯(cuò)誤率較高。
本文針對(duì)NMEA0183協(xié)議的特點(diǎn),采用正則表達(dá)式的匹配技術(shù)進(jìn)行高效解析,應(yīng)用了MVC架構(gòu)設(shè)計(jì)提高數(shù)據(jù)顯示實(shí)時(shí)性,實(shí)測(cè)表明該方法穩(wěn)定高效,可根據(jù)不同場(chǎng)景需要切換不同模式處理數(shù)據(jù),良好應(yīng)對(duì)不同場(chǎng)景的需要。本文對(duì)其他字符協(xié)議報(bào)文解析并需要實(shí)時(shí)顯示的設(shè)計(jì)具有一定的參考意義。
[1] 李長(zhǎng)真.GPS 全球定位系統(tǒng)[J].現(xiàn)代物理知識(shí),2000,12(C00):90292.
[2] JAMES BAO-YEN TSUI. GPS軟件接收機(jī)基礎(chǔ)[M]. 2版. 北京: 電子工業(yè)出版社, 2008: 68-76.
[3] 張文軍.GPS與嵌入式系統(tǒng)軟硬件接口及導(dǎo)航信息提取軟件[J].計(jì)算機(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協(xié)議的應(yīng)用[J].電子工程師,2006,32(10):8-11.
[6] LIGER F,QUEEN C M,WILTON P. C#字符串和正則表達(dá)式參考手冊(cè)[M].劉樂(lè)亭,譯.北京:清華大學(xué)出版,2003.
[7] 王映輝,王英杰,王彥君,等.基于MVC的軟件界面體系結(jié)構(gòu)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,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-),男,碩士生,研究方向?yàn)樾l(wèi)星導(dǎo)航技術(shù)。
郭承軍 (1985-),男,博士生,研究方向?yàn)镚NSS互換性與泛在位置服務(wù)、新時(shí)空體系、完好性及增強(qiáng)系統(tǒng)。
賈振東 (1993-),男,碩士生,研究方向?yàn)樾l(wèi)星導(dǎo)航技術(shù)。
聯(lián)系人: 劉賦山 E-mail:fsliu33@163.com