文/薛雯 吳瑞祥 祁青青
船舶導航系統(tǒng)作為船舶航行信息的獲取和指導模塊,對船舶的航行安全有著重要意義。隨著導航、計算機、網(wǎng)絡、信息融合及地理信息系統(tǒng)等多學科的技術發(fā)展,船舶導航系統(tǒng)也出現(xiàn)了多種類型,如慣性導航系統(tǒng)、全球定位系統(tǒng)(GPS和北斗)、多普勒測速系統(tǒng)、無線電導航系統(tǒng)、數(shù)字導航雷達以及電子海圖顯示系統(tǒng)等。
本文基于組件技術構建了一個可擴展的船舶綜合導航系統(tǒng),可以接入多種信息源數(shù)據(jù),同時可以對功能進行模塊化開發(fā),如海圖量算、海圖標繪、航線設計、歷史航跡回放、信息查詢等,根據(jù)用戶需求開發(fā)多樣化的定制功能,并做到軟件功能的靈活配置。
基于組件的船舶導航系統(tǒng)主要由基礎平臺層、數(shù)據(jù)支撐層、中間層和應用層組成,基礎平臺層為系統(tǒng)提供必要的平臺支撐,包括操作系統(tǒng)、地理信息系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)等,數(shù)據(jù)支撐層提供接入的多種信息源數(shù)據(jù)。應用層包括主界面、海圖量算、海圖標繪、歷史航跡、航線設計、水文氣象等業(yè)務功能組件。中間層包括三個模塊,其中主控模塊是組件的管理器,動態(tài)加載功能組件,同時對組件進行注冊和管理。中間層接口負責封裝與基礎平臺層交互的接口,由此減少由平臺變更導致的業(yè)務功能代碼重構,提高代碼的可擴展性、可維護性和穩(wěn)定性。數(shù)據(jù)管理模塊負責管理船舶導航指揮所需的各種數(shù)據(jù),其中實時目標數(shù)據(jù)包括雷達探測的實時目標數(shù)據(jù)、北斗AIS船載一體機獲取的船舶信息等,靜態(tài)數(shù)據(jù)包括碼頭、錨地、航道、浮燈、警戒區(qū)、禁漁區(qū)、IPO點以及用戶標繪數(shù)據(jù)等。
框架是在基礎平臺層上開發(fā)的可獨立運行的程序,提供以電子海圖為基礎的二三維一體化顯示平臺??蚣芡ㄟ^主控模塊實現(xiàn)組件的加載和管理,為組件的功能實現(xiàn)提供圖形化顯示、數(shù)據(jù)支持和人機交互。
組件是系統(tǒng)功能實現(xiàn)的載體,包含一個工廠類組件及一個或多個功能組件,組件的工廠類組件為組件提供與框架交互的接口,是組件實例化的入口。工廠類組件接口包括初始化、釋放、獲取組件ID、獲取組件描述信息、獲取組件接口列表、獲取組件接口指針等。
功能組件包括命令組件、消息組件、工具組件、菜單組件等。命令組件的命令標識是唯一的,收到調用命令時,主控將根據(jù)命令標識發(fā)送給注冊該命令的組件進行處理。消息組件采用的是廣播機制,即發(fā)送消息時,所有組件都會收到消息。工具組件用于圖上操作管理,圖上操作具有排他性,組件A進行圖上操作時,其他組件將結束之前的圖上操作。菜單組件用于系統(tǒng)右鍵菜單的組合。
在保證組件間松耦合的前提下,系統(tǒng)提供了三種通信方式:
(1)組件間通過調用主控接口進行通信,組件A調用主控模塊的執(zhí)行命令接口intExecu teCommand(constQStringstrCommand,intiInput,QStringstrInput, void* pInput, void** pOutParam = 0),其中strCommand為命令ID,iInput、strInput和pInput為輸入?yún)?shù),pOutParam為輸出參數(shù),組件B接收到組件A發(fā)送的命令后,將執(zhí)行結果填入pOutParam,則組件A可獲取到執(zhí)行結果。
(2)組件間可以通過共享內存來實現(xiàn)數(shù)據(jù)交換,即多個組件通過訪問同一塊內存實現(xiàn)數(shù)據(jù)交換。系統(tǒng)的數(shù)據(jù)管理模塊可實現(xiàn)數(shù)據(jù)交換,數(shù)據(jù)管理模塊提供訂閱-發(fā)布機制,當某個組件修改數(shù)據(jù)后,發(fā)布數(shù)據(jù)變更事件,其他組件可以通過訂閱數(shù)據(jù)變更事件獲取數(shù)據(jù)變更消息,從而進行相應處理。
(3)組件間可通過接口調用進行數(shù)據(jù)交換。A組件將導出接口指針存入主控模塊,B組件通過接口ID獲取接口指針,通過接口調用實現(xiàn)數(shù)據(jù)交換。
系統(tǒng)的右鍵菜單只有一個,菜單功能可能來自一個組件也可能涉及多個組件。右鍵菜單項的生成首先需要指明操作對象,操作對象包括海圖、實時目標和標繪圖元等,不同組件針對相同操作對象的菜單才需要組合。
在配置文件中定義所有操作對象,當用戶按下右鍵后,主控模塊通過調用菜單組件的接口QList
船舶導航系統(tǒng)對于海上交通安全有著重要意義,相較于傳統(tǒng)船舶導航系統(tǒng)功能模塊不易維護和替換,基于組件技術的船舶綜合導航系統(tǒng),因其體系架構的獨立性,能夠快速響應需求的變化,縮短研發(fā)周期,在軟件發(fā)布后還可以靈活配置和完善已有功能。目前,該系統(tǒng)已在百余艘船舶上安裝試用,實踐證明,基于組件集成技術開發(fā)的船舶導航系統(tǒng)極大地提高了系統(tǒng)的可擴展性和可維護性。