費曉昕,吳述園,朱紅生,馬志堅,唐 萌
(1.中冶華天工程技術有限公司,安徽 馬鞍山 243005;2.南京理工大學自動化學院)
水是生命之源,是人類自身生存和人類社會發展不可或缺的資源。我國重視對水資源的保護,在針對河流、湖泊的日常水質檢測方面,通過獲取水質數據、對數據的匯總分析來制定治理方案。
傳統的水質信息獲取方法有人工取樣、浮標定點檢測和遠程遙測等方式。人工取樣方式費時費力,受天氣影響很大,往往還需將樣本帶回實驗室檢測,時效性差,數據管理與跟蹤也有難度;浮標定點檢測方式可長時間連續地對特定區域進行檢測,但靈活性差、系統建造性價比不高;遠程遙測方式智能化程度高,但測量精度不高,檢測結果方差偏大,可信度偏低。
針對以上難題,本課題組在自主構建的無人船平臺上搭載多種水質檢測傳感器,實現靈活的自主航行和水質檢測,針對可航行水域,基于Qt 5.12.1 設計了一款無人船水質檢測系統的上位機軟件,軟件可以與無人船進行遠程無線通訊,實時獲取無人船坐標信息,實時接收無人船搭載的傳感器信息,并能夠對歷史水質信息進行顯示、保存和查閱等操作。方便環境保護工作人員對不便于人工取樣的水域進行檢測,并能夠實時獲取目標檢測點水質信息,根據歷史水質信息進行數據的分析、評估以便確定污染源,針對相關污染水域制定治理方案。經過實驗測試,本軟件與無人船之間通訊狀況良好,界面簡潔易于操作,人機交互性好,具有很好的應用前景。
無人船選用單體式結構,材質由韌性優良的塑料制成,方便后期開模加裝傳感器。根據水質檢測種類的需要,為船體加裝溫度傳感器、溶解氧傳感器、化學需氧量傳感器和氨氮傳感器四種傳感器,無人船主要設備清單、性能指標和船體示意圖如表1、表2 和圖1所示。

圖1 船體示意圖

表1 設備清單

表2 無人船性能指標
Qt 是由挪威的奇趣科技軟件公司于1991 年開發的基于圖形用戶界面應用程序框架,其跨平臺性好且具有很強的擴展性。Qt 是面向對象來進行程序的編寫,Qt 自帶的編譯器Qt Creater 提供了三個基類:QMainWindow、QWidget 和QDialog,所有子類都從這三個基類繼承而來。Qt 的核心機制是信號和槽,對象的內部狀態改變,會向其所連接的槽發射信號,從而調用槽函數,實現所需功能。
本文基于現有的無人船為對象,以Qt作為設計工具,在Windows 系統下開發設計程序。該上位機軟件主要實現以下功能:
⑴上位機與無人船之間通訊功能的實現;
⑵無人船坐標的實時地圖顯示;
⑶無人船采集的水質信息實時傳輸和顯示;
⑷水質信息的保存和歷史水質信息的查閱。
上位機軟件的總體結構如圖2所示。

圖2 上位機軟件總體結構圖
基于中興MF79U模塊,利用FRP反向代理和組網技術搭建無人船和上位機軟件間的通訊網絡。通過建立socket套接字來進行數據的發送和接收。
當無人船與上位機軟件通信連接時,先使用FRP軟件工具進行內網穿透,獲得可以直連的IP 地址。然后使用TCP/IP協議通信,按IP地址與軟件端口號組成的socket 套接字發送數據。通信子系統連接框架如圖3所示。

圖3 通信子系統框架圖
無人船航行到指定水域檢測點時,傳感器開始采集數據并將采集到的數據發送到上位機端。此時上位機在設置好的Qt程序中遠程接收、解析數據并進行實時的顯示。
上位機軟件由軟件界面、通訊和數據庫等模塊共同構成,采用低耦合、高內聚的設計思想,設計軟件界面簡介美觀,人機交互性強。
上位機軟件由水質信息顯示界面、歷史信息顯示界面、航跡顯示界面組成。其中水質信息顯示界面包含功能區和檢測信息顯示界面等;歷史信息顯示界面包含檢測線路的命名、保存等;航跡顯示界面由百度地圖和無人船航行坐標點等構成。主界面如圖4所示。

圖4 主界面設計圖
百度地圖是由百度公司開發,集智能定位、導航、路徑規劃、實時路況顯示等功能為一體的新一代AI地圖。百度地圖開發工具包提供了一套免費應用程序接口方便開發者在網頁中構建各式各樣的特色地圖。Qt 中也提供了QtWebEngine Widgets 控件實現Web功能,在百度注冊賬號,然后將獲取的密鑰配置在Qt程序中,在上位機軟件界面端添加百度地圖。無人船的經緯度坐標通過通訊網絡傳送給上位機,上位機對經緯度坐標進行解析,解析后通過構建Json 數組傳值的方式將無人船的經緯度坐標傳遞給前端接口,關聯相關檢測點,最后將經緯度坐標顯示在地圖上。顯示效果如圖5所示。

圖5 百度地圖坐標點顯示
無人船采集的水質信息需要根據檢測點分時、分類保存,并能夠滿足軟件使用者隨時隨地對歷史信息進行查看的需求。本節基于以上幾點設想搭建了數據庫,并通過ECharts 動態顯示數據庫數據,從而提高了數據的可讀性。
MySQL是一個基于關系的數據庫管理系統,可以將不同數據分類保存在預設的不同表中,MySQL數據庫體積小且運行速度快,其開源的特性降低了開發成本,因此本設計基于MySQL 設計了數據庫。檢測信息的存儲可以在數據庫中設計三張表分別保存檢測線路、檢測線路對應的檢測點,以及檢測點對應的水質信息,如圖6 所示,三張表之間使用外鍵相連,可以實現快速保存和查詢數據。根據船體檢測點、日期和搭載傳感器的種類等設計每張表內容,詳情如圖7所示。

圖6 數據庫頁表設計

圖7 數據庫頁表內容
根據上位機軟件的設計可知,通過Qt功能模塊連接部署在云服務器中MySQL 數據庫,檢測線路完成后,將水質檢測信息按照檢測線路保存至MySQL 數據庫。Qt 中提供了QtSql 模塊操作數據庫,QtSql 模塊主要由用戶接口層、SQL 接口層、驅動層三部分組成,如表3所示。

表3 QtSql模塊組成
數據庫模塊通過驅動層和接口層提供的接口連接部署在云端服務器上的MySQL 數據庫。通過實例化QSqlDatabase 類的對象,然后設置MySQL 用戶名、密碼和IP 地址,連接云服務器上的數據庫。連接完成后可以使用QSqlQuery 類對檢測線路進行增、刪、查、改等管理操作,檢測線路管理如圖8所示。

圖8 檢測線路管理
為了滿足數據的直觀、可視化且易讀的需求,軟件使用基于JavaScript 開發的開源可視化庫ECharts。在Qt 前端頁面
使用script 標簽引入ECharts 依賴庫,在繪制圖表前準備一個DOM 容器,然后對圖表實例進行初始化,從云端服務器中取出數據庫中的數據并構建Json數組,最終通過AJax解析并在上位機動態的顯示,效果如圖9所示。
圖9 水質數據圖
通過對比傳統水資源保護手段優缺點,根據復雜水域水質檢測應用場景的需求,本文基于Qt框架設計了一款適配無人船的水質檢測系統的上位機軟件,實現了遠程通訊、數據解析、數據保存、歷史信息查閱和動態顯示等功能,為河流、湖泊水質檢測、勘探提供了新的解決方案,具有很高的應用價值。