張亞寧,劉春光,吳詩帆
(92124 部隊,遼寧 大連 116023)
在海上靶場進(jìn)行武器試驗的過程中,艦船自動識別系統(tǒng)(AIS)可以協(xié)助安控人員進(jìn)行海上目標(biāo)識別,尤其是對目標(biāo)飛行器雷達(dá)鎖定漁船、商船等非靶目標(biāo)進(jìn)行及時有效的安控尤為重要。AIS 報文一般采取可見字符的方式進(jìn)行傳輸,接收機收到報文后需按照ITU-1371-4 協(xié)議進(jìn)行解析,解析之后的數(shù)據(jù)才能供作業(yè)人員使用。目前市面上商用的AIS 解析軟件較多,可以實現(xiàn)報文解析、艦船信息顯示等功能,但此類軟件一般不具備直接兼容安控顯示軟件的功能。本文基于MFC 平臺設(shè)計了AIS 報文解析軟件,實現(xiàn)了將AIS信息融入安控顯示軟件的功能。
AIS 報文解析軟件的信號流程如圖1所示,首先啟動AIS 報文接收線程,實時接收報文數(shù)據(jù);然后進(jìn)行報文內(nèi)容的判定,對其中的AIS 報文進(jìn)行解析(對非AIS 報文不做處理);最后將解析之后的報文結(jié)果以安控顯示軟件的格式進(jìn)行打包發(fā)送,使AIS 信息在安控顯示軟件上實時顯示。
圖1 AIS 報文解析軟件信號流程
本文基于MFC 平臺設(shè)計AIS 解析軟件,程序界面如圖2所示,界面分為數(shù)據(jù)接收區(qū)、監(jiān)視區(qū)、接收設(shè)置區(qū)、記錄區(qū)、發(fā)送區(qū)五個區(qū)域。“數(shù)據(jù)接收區(qū)”用于實時顯示接收的AIS 原始報文和解析之后的艦船信息;“監(jiān)視區(qū)”對解析軟件的工作情況進(jìn)行監(jiān)視,主要顯示解析報文狀態(tài)、數(shù)量等內(nèi)容;“接收設(shè)置區(qū)”設(shè)置本地接收AIS 報文的IP地址、端口信息、組播地址等信息;“記錄區(qū)”以新建文本的方式保存接收到的AIS 原始報文和解析之后的結(jié)果,可以通過按鍵的方式選擇是否保存;“發(fā)送區(qū)”設(shè)置發(fā)送目的端的IP 地址和端口,進(jìn)而將解析之后的結(jié)果實時發(fā)送至安控顯示工作站。
圖2 AIS 解析軟件程序界面
為了實現(xiàn)AIS 報文接收功能,需要正確加載套接字庫,創(chuàng)建套接字,綁定接收端口,啟動接收線程等步驟,關(guān)鍵代碼為:
WSAStartup(MAKEWORD(2,2),&wsaData);// 加載套接字庫
m_RecvSocket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);//創(chuàng)建套接字
bind(m_RecvSocket,(SOCKADDR*)&addrSock,sizeof(SO CKADDR));//綁定端口
WSARecvFrom(m_RecvSocket,&wsabufRcev,1,&dwread,&dwflag,(SOCKADDR*)&addr_from,&len0,NULL,NULL));//實時接收
考慮到不同計算機的IP 地址不同,利用本軟件綁定地址信息時支持配置文件讀取和手動更改兩種方式,軟件啟動后直接從配置文件讀取IP、端口、組播信息至“接收設(shè)置區(qū)”并進(jìn)行顯示,如果綁定端口情況臨時有變可以在“接收設(shè)置區(qū)”手動更改,然后點擊“綁定”按鍵進(jìn)行最終綁定。
AIS 報文共有27 類(ID 號為1~27),不同類別的報文可以提供艦船標(biāo)識碼MMSI、經(jīng)度L、緯度B、航向COG、航速SOG、船名NAME、呼號CALL、艦船尺寸等信息。鑒于安控顯示軟件只需顯示艦船標(biāo)識碼、位置和航行狀態(tài),故僅需解析包含識別碼MMSI、經(jīng)度L、緯度B、航向COG、航速SOG 等信息的5 類報文,分別為:1 類、2 類、3 類、18 類、19 類,對于其他類型的報文不做解析,減少了數(shù)據(jù)處理量,提高了報文解析效率。
在有效性的判定上,AIS 報文采取幀頭識別的方式進(jìn)行判定,即收到的報文以“!AIVDM”“!AIVDO”“!AIVDM”等字符開頭;在報文類別(ID 號)的判定上,采取提取報文數(shù)據(jù)段首字符的方式進(jìn)行判定,僅解析上面提到的5 類報文。
篩選出需要解析的報文后,按照ITU-1371-4 協(xié)議對數(shù)據(jù)段內(nèi)容進(jìn)行解析,有關(guān)報文解析的方法參考本文作者曾發(fā)表的文獻(xiàn)——一種AIS 報文解析方法,此文獻(xiàn)中論述了AIS 報文解析的詳細(xì)過程。在本文中,將此解析方法封裝成函數(shù)使用,代碼為:
bool OnDecodeAIS(char *p,int len,AisData &AisResult);
在此函數(shù)中p 為AIS 報文數(shù)據(jù)段的字符串指針,len 為數(shù)據(jù)段字符串長度,AisResult 為解析之后的結(jié)果,是此函數(shù)的輸出變量,其類型為自定義AisData 結(jié)構(gòu)類型,AisData結(jié)構(gòu)定義為:
AIS 報文解碼成功后,需要按照安控顯示軟件所提供的數(shù)據(jù)接口類型進(jìn)行打包封裝,此數(shù)據(jù)接口類型為AIS_MAdd結(jié)構(gòu),要求連續(xù)方式對齊。具體代碼為:
在AIS_MAdd 結(jié)構(gòu)變量中,除了5 類艦船信息,還包含包頭、包尾和操作類別3 個變量,所以還需要對以上變量進(jìn)行賦值,具體代碼為:
通過以上方式完成解析結(jié)果的數(shù)據(jù)封包。
發(fā)送目的端的地址信息通過讀取配置文件在“發(fā)送區(qū)”窗口顯示。數(shù)據(jù)打包結(jié)束之后,構(gòu)造發(fā)送結(jié)構(gòu)變量并進(jìn)行數(shù)據(jù)發(fā)送,具體代碼為:
本程序界面的“數(shù)據(jù)接收區(qū)”實時顯示最新一條AIS 報文和解析結(jié)果,為了實現(xiàn)對整個解析過程數(shù)據(jù)的監(jiān)視,在“記錄區(qū)”增加“按鍵”實現(xiàn)記錄報文信息和解析結(jié)果,文件以時間命名,以文本方式保存。
此外,本程序還設(shè)計了“監(jiān)測區(qū)”,用于對程序運行狀態(tài)、解析報文數(shù)量、記錄開啟情況等進(jìn)行實時監(jiān)視,極大地方便了程序操管。
本程序設(shè)計完成后,通過在機房實時接收大連旅順某海域的AIS 信息進(jìn)行了軟件測試,測試過程中首先通過“綁定”按鍵正確設(shè)置接收端口,然后通過“運行”按鍵啟動解析程序,程序運行過程中依次啟動數(shù)據(jù)記錄功能,測試結(jié)果如圖3、圖4、圖5所示。從這三個圖中可以看出,本程序不僅可以實時顯示接收報文信息、報文解析結(jié)果,還可以對解析情況進(jìn)行實時監(jiān)視。程序運行結(jié)束后,生成了AIS 報文記錄文件和解析結(jié)果記錄文件,文件信息如圖6、圖7所示。最后對本軟件的轉(zhuǎn)發(fā)功能進(jìn)行了測試,測試結(jié)果如圖8所示,由安控顯示軟件可知本程序可實時將AIS 解析結(jié)果發(fā)送至安控顯示軟件進(jìn)行顯示,實現(xiàn)了與安控軟件的融合,可以實時為安控顯示軟件提供海面艦船信息。
圖3 AIS 解析軟件測試結(jié)果
圖4 AIS 解析軟件測試結(jié)果“顯示區(qū)”放大圖
圖5 AIS 解析軟件測試結(jié)果“監(jiān)視區(qū)”放大圖
圖6 AIS 解析軟件原始報文記錄
圖7 AIS 解析軟件解析結(jié)果記錄
圖8 解析結(jié)果在安控顯示軟件上的顯示效果
本文基于安控顯示軟件實時顯示海上艦船信息的需求,利用MFC 平臺從界面設(shè)計、報文接收、報文判定、報文解析、報文記錄、解析結(jié)果發(fā)送等環(huán)節(jié)詳細(xì)論述了本文AIS 服務(wù)器軟件的設(shè)計流程,最后通過實際環(huán)境中的測試得出本文軟件實現(xiàn)了上述功能,可以實時為安控顯示軟件提供AIS 信息,為安控人員順利完成海上目標(biāo)飛行器安控任務(wù)提供了參考,具有一定的工程應(yīng)用價值。