肖和鋒,李文華,雷佳千,詹煒
(長江大學 計算機科學學院,湖北 荊州 434000)
隨著物聯網技術的不斷發展和相關產業的不斷成熟,人們對物聯網設備的實時監測的需求與日俱增[1]。長江上下游的地勢起伏變化是比較大的,一般來說,船道的彎、窄、淺、險,導致航行困難,又因較多礁石分布在其中,所以安全航行對航標有著較高的依賴性[2]。航標是船舶的眼睛,航標的技術狀態直接關系到船舶的航行安全,所以航標的技術狀態牽系航道上每一艘船舶的安全[3]。有效監控航標的實時狀態,對船舶的安全通行至關重要。在航道交通業中應用物聯網技術是實現水上交通業數字化和智能化的重要手段,也是未來的發展趨勢[4]。要想更好地管理物聯網設備,勢必要打造一個健全的物聯網系統,于是基于Web開發物聯網應用系統的現實需求,以航標遙測遙控系統為例介紹物聯網應用系統開發的框架和方法。通用的物聯網系統由三部分構成,感知層、網絡層和應用層。本系統的感知層:為了實時監控航標燈的狀態,給航標安置有RTU 終端設備,采用自主可控的北斗定位技術實時定位航標位置;網絡層:使用Go 語言實現自主通信協議的通信服務;應用層:采用Go、Gin 等技術作為后端API 服務,采用Vue.js、Element-plus 等技術設計了前端,可通過Web 界面實時監測航標的實時狀態和對歷史狀態進行查詢、展示和管理,并支持數據的下載和航標報警及維護。系統編碼摒棄了集中式代碼復制粘貼式管理,而是采用git分布式代碼管理工具和CODING DevOps 代碼管理平臺管理代碼。本系統和大多數前后端分離系統不同的是,采用Go語言輕量化實現多平臺支持,實現了真正的跨平臺,而非Java語言借助龐大的虛擬機。
航標遙測遙控系統是依靠瀏覽器展現整個系統,數據由后端API服務提供支持,界面與通信服務實時保持通信,實時監控航標狀態。為滿足不同角色的航道管理部門人員對系統的使用,整個系統應具備完整、健全的分用戶航標監管和維護功能。
系統從使用者角度來看,可分為兩大類:一類是系統管理員,一類是系統使用員:局領導、監控值班員、航道處負責人、航道處航標員。系統管理員主要是管理整個系統的正常使用,如部門管理、菜單管理、用戶管理、海圖管理、字典管理、參數設置、通知公告和日志管理等。
系統使用人員,即是航道部門工作人員。從這些系統使用者可以看出,每個人對系統的關注點都不一樣。對于局領導,他主要是查看航標系統監控的大體情況,需要了解某航處或全航處的航標的運行統計信息,對全局的把控。從監控值班員來看,他需要定時動態監測某處航標的實時狀態信息,關注的是具體某處某個航標,根據航標報警狀況提交航標報警信息,交由后續的航標員處理。航道管理處負責人是某處航道的小隊長,負責管理他所管轄的航標并分配給具體的航標處置人員(航道處航標員),小隊長主要是看他管轄的航標信息和航標狀態,以及航標報警情況和航標維護完成度,此外還有該航處的航標統計相關數據。航標員,主要處理航標失常,根據系統上航標報警信息去處置航標;存在航標維護任務時,接收任務后參與現場維護工作,在系統上提交完成維護任務。
1.2.1 Go和Gin相關技術
Go 語言、Gin 框架、GORM、go-cache 和viper 等技術,Go語言是一門原生支持并發操作的跨平臺的輕量級語言,常被稱為“現代版C 語言”[5]。Gin 是輕量級、內存占用少、可擴展、路由組等功能于一身的Web 框架。GORM是一個對象映射框架,支持操作對象的模式CRUD操作MySQL數據庫,以及對象關聯模式和事務等支持。go-cache 是一個輕量級的內存緩存組件,進程內的緩存使用。viper是一個配置文件讀取組件,項目中使用yaml格式文件。
1.2.2 Vue和WebSocket相關技術
Vue 是一個易學易用、性能出色和適用場景豐富的Web 前端框架。Vue 結合Vue-Router、Axios、Element-plus、Pinia、Mitt、WebSocket和OL等技術構建強大的前端頁面。Vue-Router 屬于Vue 生態體系中的路由組件,用于創建單頁面應用。Axios 則是一個異步請求框架,用于和后端http 異步通信。Elementplus 是一個餓了么團隊提供的UI 框架,簡潔而美觀。Pinia 是一個前端存儲組件,用于存儲應用信息。Mitt是一個事件總線庫,用于Vue 中不同頁面之間的通信。WebSocket是一個不同于HTTP的應用層協議,用于和通信服務實時通信。OL庫則是OpenLayers,用于地圖顯示。
航標遙測遙控系統可由5 個部分組成,如圖1 所示,通信服務、Web前端服務和后端API 服務,此外系統地有效正確運行還離不開航標設備和數據庫。由航標設備上的終端設備發送航標實時狀態數據給通信服務程序,通信服務程序將航標狀態實時信息寫入數據庫,并按需通知Web 前端頁面,Web 前端頁面從后端API服務中獲取航標數據。

圖1 系統結構圖
航標遙測遙控系統的功能主要涉及七大模塊,如圖2所示。現在簡單介紹如下:

圖2 系統功能結構圖
數據大屏主要是美觀展示,以圖表展示當前系統中航標的總量、航標工作狀態、航標失常、航標維護和航標年度失常統計,以列表流動式展示各航道處航標失常和航標維護信息條目等。
動態監測是本系統最為復雜的一塊,集成了其他模塊的功能。這一塊以地圖為載體顯示航道上的航標,航道上的每一處航標都清晰可見,可以點擊查看航標的實時狀態和航標信息,支持定位搜索航標等功能。
航標管理包括四個子模塊,分別是:實時狀態、歷史狀態、航標定義和終端列表。實時狀態,可以按航標處、航標類型等參數搜索航標的實時狀態信息。歷史狀態,根據歷史時間范圍查看某個航標的狀態信息。航標定義、添加、刪除和修改航標基本數據。終端列表,查看所有在用終端設備的情況,以及終端歷史狀況等。
航標報警包括當前報警、未處置報警和報警歷史三個模塊。當前報警,由監測人員上報報警后,方可在此處按航標處、航標名稱等條件搜索到各個航標的報警情況。未處置報警,單獨成立一塊,方便查找待處理的航標,并及時對報警航標做出處置。報警歷史,查看航標歷史報警信息等。
航標維護包括三個子模塊,分別是接收任務、完成任務和維護歷史。航標員在接收任務頁面接收待維修航標的任務,待現場維修任務完成后,再在完成任務頁面上報任務完成情況,涉及上傳視頻或圖片等信息。航標員可以按時間范圍查看維護歷史信息等。
分析統計,就是各種信息的統計報表輸出,包括:航標基本信息、航標失常、同期間航標失常對比、航標失常周期環比、航標維護、同期間航標維護對比和航標維護周期環比等。
系統管理主要輔助系統運行的,包括部門管理、菜單管理、用戶管理、海圖管理、字典管理、參數設置、通知公告和日志管理等。
由于系統功能模塊較多,受篇幅限制,這里僅對部分模塊簡單描述。
如圖3所示,項目開發時,使用git初始化項目,默認存在一個主分支(master) ,表示項目的最終產品。根據開發的需要,需要創建更多的分支。從上到下,由三部分組成:主分支、開發分支和功能分支,它們就像是三條流水線。在主分支的基礎上,建立出開發分支,項目開發完成后,將開發分支合并到主分支上。當出現新的功能需求時,在開發分支上建立功能分支,功能分支上的功能完成后合并到開發分支,最后一起合并到主分支。

圖3 git工作流圖
如圖4 所示,用戶進入系統,先選擇航標管理菜單,再選擇實時狀態子項。在此頁面,用戶可以按航標處、航標名稱、航標類型為搜索條件查詢航標實時狀態數據和導出航標實時狀態數據,實時狀態數據包括:航標號、航標名稱、航標類型、工作狀態、燈光狀態等。此外,頁面還展示了航標狀態統計信息,包括目前在用航標總數,航標在線、通信失常、燈光失常、標志失常、標位失常和參數失常數量。表格中的每一行數據都支持查看航標的明細狀態信息以及歷史航標狀態信息,以及通過控制可以實時操控航標。當頁面收到來自通信服務發送的航標狀態更新時,自動更新頁面數據。

圖4 實時狀態圖
如圖5所示,系統部署階段,建立了一個私有云環境,將系統的不同組成部分放置在這個網絡中的不同主機上,用戶通過開放的一個節點固定訪問系統內的資源。

圖5 系統部署圖
本文提出了一種開發物聯網系統的解決方案,采用了Go 1.18作為后端開發語言,使用MySQL 8.0作為數據庫和Vue 3 作為前端,根據航道相關部門對航標遙測遙控管理的實際情況,結合業務流程,確定了前后端分離的系統框架,對功能模塊、數據庫進行了深入分析與研究,切實完成了系統設計、代碼編寫、測試和部署,使用現代主流的git 分布式代碼托管方式,與項目組分工完成系統實現。