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