一种新的NMEA0183协议解析方法实现
2017-05-16刘赋山郭承军贾振东
刘赋山,郭承军,贾振东
(电子科技大学 电子科学技术研究院,四川 成都 611731)
一种新的NMEA0183协议解析方法实现
刘赋山,郭承军,贾振东
(电子科技大学 电子科学技术研究院,四川 成都 611731)
NMEA0183 协议解析模块是导航系统中至关重要的软件模块,该模块的健壮性和高效性直接关系到整个导航系统的性能。为了能及时并高效解析NMEA数据流,分开处理NMEA数据流解析与数据显示,降低解析模块与显示模块的耦合性,提出一种基于正则表达式和MVC架构的NMEA0183协议解析方法。整个解析模块可分为四个阶段,原始NMEA数据流存储,NMEA数据流高效解析,NMEA数据校验,NMEA数据显示。目前该方法已应用到GPS 导航产品中,实测表明,该解析模块高效可靠,数据流解析显示实时性好。
GPS;NMEA0813;解析;正则表达式;MVC
0 引 言
伴随着导航技术的发展与应用,我国很多领域的生产力水平得到提高,人们的生活也更方便,对我国科技的进步和国力的壮大有着重大的意义。GPS卫星导航系统是目前全球内使用最广泛的全球定位系统,其中GPS模块通过空间部分提供的信息计算出自己当前的位置速度等信息,然后通过这些信息用NMEA0813协议封装,并通过串口发送给数据处理中心进行处理[1]。数据处理中心的最主要的任务就是保证处理由GPS模块发送过来的数据的可靠性、高有效性。但如今有部分产品需要保证正确高效解析NMEA数据的同时又要保证数据显示的实时性[2],本文运用了正则表达式与MVC架构相结合的方式,实现了一种高效稳定又保证一定实时性数据显示的方法。
1 可行性分析
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 利用正则表达式解析数据
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()
3 数据正确性检测
数据在传输的过程中可能出现各种各样的错误导致传输的数据错误,为了确保所采集的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为实时解析并显示的数据视图。
4 性能分析与测试
可对GPS报文文件进行一次扫描,也可通过串口传输报文数据并实时解析并显示。在对GPS报文文件进行一次性扫描的模式下,有着较高的解析效率,用该程序解析了一个包含5000条GPS报文的文件并未发现任何错误,该程序能很好的应对需要一次性扫描大量GPS报文的情况。而在实时解析显示模式下,也有着十分良好的实时显示性,但相比一次性扫描模式的解析错误率较高。
5 结束语
本文针对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