APP下载

基于Bit Fields的AIS报文解析及实现*

2014-07-11王步云

舰船电子工程 2014年7期
关键词:字符字节报文

方 兴 王步云

(91550部队 大连 116023)

1 引言

船载自动识别系统(Automatic Identification System,AIS)是一种新型的海上辅助助航系统及设备,具有船只识别、目标追踪、碰撞规避等诸多功能,目前已成为船舶交通管理、保障航行安全的重要工具[1]。AIS报文是AIS网络中交换和传输的数据单位,它包含了将要发送的完整的船舶数据信息。而报文解析则是将接收到报文转换成船舶信息的过程,是实现AIS广泛应用的基础。

AIS报文主要可分为明码和暗码两类。明码以“$”开头,主要用于传递传感器信息,包括UTC时间、地理位置等[2]。明码的所有字符均为ASCII文本字符,可以直接提取报文信息。明码的每条语句不能超过82个ASCII字符,如果超过82个字符,就需要采用暗码传输。

暗码以“!”开头,能够传递船舶以及基站的各类信息。暗码采用一定的方式对Bit位进行压缩,实现了无线电文的封装,节省了传输带宽,提高了传输效率。暗码不仅能够传送格式不确定的信息,而且还能将内容较长的信息分段传送。AIS报文的传输以暗码居多。

然而由于暗码在传输之前进行了压缩,因此在终端上解析时,需要进行解压缩,首先依据6Bit位表将ASCII字符转换为中6Bit的二进制数据,并进行拼接;然后依据报文格式分解二进制数据;最后通过整合将二进制数据转换成相关信息。从整个过程可以看出,暗码的解析需要以Bit位为单位进行多次转换,实现较为复杂。

Bit Fields是C语言提供的一种对Bit位进行操作的方法,针对AIS暗码报文解析的特点,本文提出一种基于Bit Fields的暗码报文解析的新方法,通过对Bit Fields结构的定义,省去中间的转换环节,直接对各Bit位进行操作后即可得到相关信息,具备实现简单、解析高效等特点,具有良好的实用价值。

2 AIS报文格式及解析特点

2.1 AIS报文

暗码包含报头、传送电文所需语句总数、语句号、电文识别码、信道、船舶信息、填充比特数和检验码等部分。如图1所示为AIS暗码报文格式及示例。

图1 暗码报文格式及示例

“!”表示暗码报文标志;紧接着的五位字符为会话ID,如“AIVDM”说明是通过VHF数据链路进行接收的所有的AIS信息,其它的会话ID还包括“AIVDO、AIACA、AIABK”[3];当将一条长消息分成多条语句进行传输时,由第三项表明该消息具体由多少条语句组成,本例中就一条语句;第四项为语句序号,表示当前语句在语句序列中的位置;第五项为消息标识号,它标识该条语句的消息号,当仅一条语句时,该项不填;第六项指定了传输的频道;第七项是按协议定义的封装消息,如果消息是由多条语句组成,那么在解码时需要将各条消息提取合并成一个完整的消息码文才能进行解码;第八项是比特填充位数;第九项为校验码,是“*”前面所有字符异或的结果,十六进制表示,用于数据校验。

表1 AIS中常用的报文类型

其中第七项封装消息的第一个字符说明了该报文的类型,报文类型不同,格式也不相同。在AIS中,常用的报文类型如表1所示[4]。

[5]列出了每种报文中Bit的具体分布,如船位报告1、2、3报文的Bit位分布如表2所示。无论哪一类报文,在解析过程中,前六项及第八项的内容可以直接提取,不需要任何转换,第七项内容的提取才是整个解析过程中的难点。

表2 船位报告1、2、3报文的Bit位分布

2.2 AIS报文的解析特点

1)对于包含相同信息的不同类型报文,相同信息在报文中的位置并不相同,从而导致解析过程中很多模块难以重用。如报文1、2、3与报文18、19中均含有船舶的经纬度信息,但经纬度信息在前三类中处于报文的第62到117位,而在后两类则处于第58位到113位。

2)报文的解析主要是对Bit位的操作,整个过程中需多次移位、拼接,操作复杂繁琐。在PC端解析AIS报文时,首先需将字符转换为6BitASCII码,然后对转换后的6Bit进行拼接操作,形成一个新的字符串;最后再根据报文格式按照Bit位提取相应的信息;在提取过程中,还需要不断移位、拼接等操作,整个过程较为繁琐。

3)AIS数据涉及的类型较少,只包括整数和字符两种类型。而对于经纬度、航速等浮点数类型的信息,也是通过整数类型转换得到。这在一定程度上也减小了AIS报文解析的复杂度。

3 Bit Fields在AIS数据解析中的应用

3.1 Bit Fields的概念和用法

Bit Fields是C语言提供的一种对Bit位进行操作的方法。所谓Bit Fields就是把一个字节中的二进制位划分为不同的区域,每个域占用不同的Bit位并且有一个域名,允许在程序中按照域名进行操作,这样就可以把不同的变量用一个字节的二进制位域表示。采用这种定义方式节省了存储空间,处理较为简便。

Bit Fields的定义与结构的定义相仿,其形式为

上述位域中,Data1结构共占两个字节16位,其中a占6位,b占2位,c占8位。

对于位域的使用,有如下几点需要注意:

1)一个位域必须存储在同一个字节中,不能跨两个字节,如果一个字节所剩空间不够存放另一位域时,应从下一字节起开始存放该位域,剩余空间应作为空域。如:

2)每一个位域的长度不能超过前面所指定类型的长度,否则无效。如:

3)由于在PC中字节序是从左至右,而位序则是从右至左的,因此位域结构在内存中的存放有其特殊性。位域定义的先后次序也将影响该位域在内存中存放的位置。以Data2为例,其存放如表3所示。

表3 位域在内存中的存放示例

从表3中可以看出,位域a存放在第一个字节的低6位,第一个字节的高2位为空域;位域b则存放在第二个字节的低4位,位域c则存放在第二个字节的高4位。而位域a所占用的字节和位域b及c占用的字节则是从左至右的。

3.2 AIS解析中的Bit Fields的定义

由于AIS的报文信息是按照Bit位进行存储并传输的,因此非常适合采用Bit Fields的方式进行解析。通过位域结构的定义,可以省去大部分转换环节,直接提取船舶信息。主要方法是:针对每一类报文,定义一个位域结构并声明一个该结构的变量,然后将转换得到的6Bit流直接转换为该位域结构类型,这样就可以通过所定义的变量直接访问Bit流中信息,从而实现AIS报文的解析。在整个过程中,位域结构的定义就是重点。

以1、2、3类报文为例,报文中的每个字符经6Bit位转换后,不进行拼接,直接将有效的6Bit位放在一个字节的低6位,高2位填“0”。由此整个报文的Bit流在内存中按照表4存放。

表4 转换后的AIS信息在内存中存放

为了使类型转换后的Bit Fields结构变量能够与Bit流对应起来从而正确地提取船舶信息,可以如下定义位域结构:

在上述位域结构中,每一行对应一个8Bit位字节。按照表3的存放方式,为了除去无效的高2位,位域结构中每行的最后始终是两位空域,即每个字节的高两位无效;此外,由于位序从右至左,因此同一字节里定义不同的位域时需与报文格式的先后次序相反,如上述结构的第二行,应先定义报文格式后面的MMSI1,再定义格式前面的Repeat indicator(RPT);而对于在不同字节的信息,按照格式次序依次定义即可,如第三、四行,先定义MMSI的第5~10位,后定义第11~16位。最终该位域结构在内存中存放方式如表5所示。

表5 Msg123在内存中的存放

通过上述定义,整个位域结构正好与转换后的Bit流对应起来,下一步就可以直接通过位域结构变量提取船舶信息。

3.3 船舶信息的提取

第一步:确定收到的AIS报文ID。依据AIS格式特点,封装电文的第一个字符指定了该报文的ID,如图1中的“1”指明了该报文属于1类报文。获取报文ID主要是为了确定Bit流将要转换的位域结构类型。

第二步:类型转换。依据报文ID,将Bit流转换为对应的位域结构类型。仍以1、2、3类报文为例:

第三步:获得最终的船舶信息。通过类型转换后,就可以直接采用pMsg访问船舶信息。如船舶的ID:

而对于跨字节的数据,还需进行移位得到最终的信息。如MMSI号码,在报文中占用30位,在位域结构则跨6个字节,从高位到低位依次是MMSI1到MMSI6,采用移位的方式可得到最终信息:

其它信息均可按照上述方法获取,不再一一举例。

4 AIS数据解析实验

4.1 解析软件开发

本文在 Windows Xp Sp3操作系统上,采用Visual C++6.0平台开发解析软件并进行实验。解析软件包括数据接收、数据校验、数据转换、信息提取、信息显示等模块。

整个软件运行流程如图2所示:数据接收模块从外部接收到AIS语句后,数据校验模块则对AIS语句进行异或校验,对于采用多条语句传送的消息,还需检查该消息是否完整;确认校验无误及消息完整后,数据转换模块负责报文的6Bit位ASCII码字符转换、Bit Fields结构类型转换等一系列工作,最后信息提取模块依据报文格式,从Bit Fields结构变量中提取相对应的船舶信息并交由信息显示模块进行显示。

图2 软件运行流程

4.2 实验结果及结论

按照第二节所述方法,采用上述解析软件对图1中的示例报文进行解析,解析结果如表6所示。

表6 根据报文解析得到的信息(部分)

结果表明,采用基于Bit Fields方法能够实现AIS数据的正确解析,过程简单,逻辑清晰。

5 结语

AIS报文解析是实现AIS广泛应用的基础。针对AIS报文采用Bit流进行传输、存储的特点,结合C语言中对Bit位操作的Bit Fields方法,本文提出一种基于Bit Fields的AIS报文解析方法。该方法通过对Bit Fields的定义,省去中间复杂、繁琐的转换环节,直接对各Bit位进行操作后即可得到所需信息,提高了AIS报文解析效率,具有方法简单、逻辑清晰、解析高效等特点,对以后进一步开发ECDIS显示系统、航标系统以及船舶避碰专家系统等都具有借鉴意义。

参考文献

[1]初秀民,徐海潮,万剑,等.基于多线程的船载自动识别系统报文解析[J].中国航海,2011,34(2):19-23.

[2]江衍煊,张诗永,陈福金.利用AIS串口数据进行船舶避碰仿真[J].电脑与信息技术,2010,18(1):24-27.

[3]郭善宁,何祖军.基于VC++的AIS模拟器的设计与实现[J].舰船电子工程,2008,28(10):148-150.

[4]张文力.船载自动识别系统[M].大连:大连海事大学出版社,2004.

[5]RECOMMENDATION ITU-R M.1371-4*.Technical characteristics for an automatic identification system using time-division multiple access in the VHF maritime mobile band[R].International Telecommunication Union,2010:4.

猜你喜欢

字符字节报文
基于J1939 协议多包报文的时序研究及应用
No.8 字节跳动将推出独立出口电商APP
低轨星座短报文通信中的扩频信号二维快捕优化与实现
CTCS-2级报文数据管理需求分析和实现
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
浅析反驳类报文要点
No.10 “字节跳动手机”要来了?