AIS 報文包含報頭、傳送電文所需語句總數、語句號、電文識別碼、信道、船舶信息、填充比特數和檢驗碼等部分。如下圖所示為AIS報文格式及示例
“!”表示暗碼報文標志;緊接着的五位字符為會話I,如“ AIVDM”說明是通過ⅤHF數據鏈路進行接收的所有的AS信息,其它的會話I還包括“AIVO、 AIACA、 AIABK”;當將一條長消息分成多條語句進行傳輸時,由第三項表明該消息具體由多少條語句組成,本例中就一條語句;第四項為語句序號,表示當前語句在語句序列中的位置;第五項為消息標識號,它標識該條語句的消息號,當僅一條語句時,該項不填;第六項指定了傳輸的頻道;第七項是按協議定義的封裝消息,如果消息是由多條語句組成,那么在解碼時需要將各條消息提取合並成個完整的消息碼文才能進行解碼;第八項是比特填充位數;第九項為校驗碼,是“*”前面所有字符異或的結果,十六進制表示,用於數據校驗。
其中第七項封裝消息的第一個字符說明了該報文的類型,報文類型不同,格式也不相同。在AIS中,常用的報文類型如表1所示4。
如船位報告1、2、3報文的Bit位分布如表2所示。無論哪一類報文,在解析過程中,前六項及第八項的內容可以直接提取,不需要任何轉換,第七項內容的提取才是整個解析過程中的難點。
1)對於包含相同信息的不同類型報文,相同信息在報文中的位置並不相同,從而導致解析過程中很多模塊難以重用。如報文1、2、3與報文18、19 中均含有船舶的經緯度信息,但經緯度信息在前三類中處於報文的第62到117位,而在后兩類則處於第58位到113位。
2)報文的解析主要是對Bit位的操作,整個過程中需多次移位、拼接,操作復雜繁瑣。在PC端解析AIS報文時,首先需將字符轉換為6 BitAscII 碼,然后對轉換后的6Bit進行拼接操作,形成一個新的字符串;最后再根據報文格式按照Bit位提取相應的信息;在提取過程中,還需要不斷移位、拼接等操作,整個過程較為繁瑣。
3)AS數據涉及的類型較少,只包括整數和字符兩種類型。而對於經緯度航速等浮點數類型的信息,也是通過整數類型轉換得到。這在一定程度上也減小了AIS報文解析的復雜度。