吳連港
(200082 上海市 上海理工大學(xué) 機(jī)械工程學(xué)院)
改革開放以來,我國經(jīng)濟(jì)發(fā)展很快,也不可避免地產(chǎn)生了一些污染問題,部分工廠亂排亂放,造成水質(zhì)污染,因此生態(tài)環(huán)境問題受到越來越多的關(guān)注[1]。本文設(shè)計了一個水質(zhì)檢測系統(tǒng),實(shí)時檢測各項(xiàng)指標(biāo),從而管理水污染問題。
水質(zhì)在線檢測系統(tǒng)是運(yùn)用現(xiàn)代傳感技術(shù)、自動測量技術(shù)、自動顯示技術(shù)組成的一個綜合性的在線自動檢測體系[2]。水質(zhì)在線檢測系統(tǒng)可盡早發(fā)現(xiàn)水質(zhì)的異常變化,為防止下游水質(zhì)污染迅速追蹤污染源,從而為減少水污染,改善大自然環(huán)境質(zhì)量和保護(hù)人類的生命安全[3]。
目前的水質(zhì)檢測系統(tǒng)大多采用Java 或LabVIEW 等實(shí)現(xiàn),導(dǎo)致開發(fā)的可移植性差,本文采用基于嵌入式Linux+Qt 的水質(zhì)檢測系統(tǒng)圖形用戶界面的設(shè)計與開發(fā)[4]。
上位機(jī)采用國產(chǎn)芯片瑞芯微RK3288 的Firefly 開源主板。Firefly-RK3288 是2014 年6 月中旬由國內(nèi)Firefly硬件團(tuán)隊(duì)推出的高性能開發(fā)板,使用瑞芯微最新RK3288 四核Cortex-A17 處理器,頻率最高可達(dá)1.8 GHz,支持Android 和Ubuntu雙系統(tǒng),類似產(chǎn)品有樹莓派,Cubieboard,pcDuino 等,F(xiàn)irefly-RK3288 可 用 作MiniPC(微型電腦主板),電視盒子,服務(wù)器,廣告機(jī),開發(fā)板[5]。下位機(jī)用于完成水質(zhì)各項(xiàng)重要數(shù)據(jù)的采集以及與上位機(jī)的通信。通過調(diào)用QSerialPort 模塊,可以實(shí)現(xiàn)上位機(jī)與下位機(jī)的RS485 串口通訊,并且發(fā)送的數(shù)據(jù)內(nèi)容符合MODBUS-RTU 協(xié)議,能夠極大保障發(fā)送與接收數(shù)據(jù)的準(zhǔn)確性和抗干擾能力。另外采用一個RS485 通訊的繼電器,Qt 的上位機(jī)界面通過按鍵槽函數(shù)向其發(fā)送報文,控制繼電器的啟停。硬件部分的整體組成邏輯圖如圖1 所示,上位機(jī)部分是運(yùn)行在Linux 系統(tǒng)的水質(zhì)檢測系統(tǒng),通過RS485 總線與擴(kuò)展板連接,擴(kuò)展板再與各個傳感器的電極變壓器的接線連接采集傳感器的電壓信號。
圖1 硬件組成邏輯圖Fig.1 Logic diagram of hardware composition
Qt 是一個跨平臺的C++應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI 程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt 是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展以及一些宏。Qt 很容易擴(kuò)展,并且允許真正地組件編程。作為嵌入式版本,Qt 被廣泛運(yùn)用于各類嵌入式產(chǎn)品和設(shè)備的開發(fā)[6]。水質(zhì)檢測系統(tǒng)的圖形用戶界面的開發(fā),主要運(yùn)用了QPushButton 控件、QLCDNumber 顯示控件、QTableView 控件、Line Edit 等其它控件。在Qt 中,通過按鈕信號與槽函數(shù)的通信和聯(lián)系,實(shí)現(xiàn)主界面與子界面的來回切換,還實(shí)現(xiàn)了自動檢測和關(guān)閉自動檢測以及繼電器的打開和關(guān)閉以及不同水質(zhì)數(shù)據(jù)折線圖的窗口切換等許多功能[7]。
打開自動檢測前,水質(zhì)檢測系統(tǒng)的圖形用戶界面設(shè)備文件節(jié)點(diǎn)找到對應(yīng)的USB 串口號,這里我們設(shè)置串口的波特率是9 600,數(shù)據(jù)位是8位,停止位是0 位,奇偶位是1。從而實(shí)現(xiàn)了LCD 控件上實(shí)時顯示各個傳感器采集的數(shù)據(jù)。
打開自動檢測后,為了滿足嵌入式上位機(jī)能延時自動向下位機(jī)發(fā)送報文,并要求傳感其開始采集水質(zhì)各項(xiàng)數(shù)據(jù)。但由于需要6 個傳感器同時采集,這就要調(diào)用QThread 模塊線程多任務(wù)進(jìn)行。
通過Linux 開發(fā)平臺上Qt 集成開發(fā)環(huán)境得到的圖形用戶界面如圖2 所示。
圖2 顯示畫面Fig.2 Display screen
首先使用Qt 設(shè)計器創(chuàng)建水質(zhì)檢測系統(tǒng)的主窗口,即Widget 類。在此基礎(chǔ)上,另外添加了3個QWidget 類和一個Qbjiect 類分別實(shí)現(xiàn)實(shí)時數(shù)據(jù)報表查看、歷史折線圖查看、打開攝像頭以及多任務(wù)線程功能。
類之間的調(diào)用與界面間的來回切換,并將這些功能串聯(lián)起來是整個界面設(shè)計的關(guān)鍵所在。在Widget 的頭文件中,include 被調(diào)用子窗體類的頭文件。在構(gòu)造函數(shù)中初始化子窗體類的對象名,在源程序中的按鈕函數(shù)中將其隱藏,在相應(yīng)的菜單按鈕clicked()信號對應(yīng)的槽函數(shù)中使子窗體顯示出來,實(shí)現(xiàn)了主窗體與子窗體的切換。代碼如表1 所示。
表1 界面間來回切換代碼Tab.1 Code to switch back and forth between interfaces
由于該水質(zhì)檢測系統(tǒng)要對檢測的數(shù)據(jù)進(jìn)行存儲等功能,并且SQLite 數(shù)據(jù)庫功能強(qiáng)大、接口簡單、速度快、體積小,非常適合嵌入式設(shè)備,所以這里采用了數(shù)據(jù)庫SQLite 來作為本地存儲[6]。
SQLite 數(shù)據(jù)庫擁有眾多優(yōu)點(diǎn),如管理簡單、操作方便、生成的數(shù)據(jù)庫文件可以在各個平臺無縫移植等,可以非常方便地以多種形式嵌入到其他應(yīng)用程序中,如靜態(tài)庫、動態(tài)庫且易于維護(hù)等。就可以為Qt 界面提供實(shí)時數(shù)據(jù)查看以及歷史數(shù)據(jù)的折線圖查看功能所需要的數(shù)據(jù),采用QTableView 以及QChartView 控件來分別顯示查看實(shí)時數(shù)據(jù)表格和歷史趨勢折線圖。
程序編寫好后,運(yùn)行編譯好的Qt 程序,部分測試結(jié)果如圖3—圖5 所示。
圖3 數(shù)據(jù)報表圖Fig.3 Data report diagram
圖4 pH 數(shù)據(jù)折線圖Fig.4 pH data line chart
圖5 溫度數(shù)據(jù)折線圖Fig.5 Line graph of temperature data
用折線圖查看歷史數(shù)據(jù)設(shè)計時,為了防止項(xiàng)目工程的冗余,故將6 個控件直接放在一個界面中,以便在同一個界面中切換查看。初始化默認(rèn)顯示為水質(zhì)pH 數(shù)據(jù)的折線圖。同時,為了能夠查看折線圖上的每個時間點(diǎn)對應(yīng)的數(shù)據(jù)值,并將時間與數(shù)據(jù)值都顯示在折線圖表的上方,采用支持hover 事件響應(yīng)并將其關(guān)聯(lián)到槽函數(shù),且寫出槽函數(shù)。
除此以外,為了防止采集了大量的數(shù)據(jù)后,折線圖會出現(xiàn)堆積現(xiàn)象,此時運(yùn)用QTimer 類啟動定時器定時,設(shè)置每2 s 鐘動態(tài)顯示折線圖的由左向右的移動。對于數(shù)據(jù)表格,由于采集大量的數(shù)據(jù),因此采用翻頁和跳轉(zhuǎn)到某一頁的操作來更有效地查看實(shí)時數(shù)據(jù)。
本文通過跨平臺的 Qt 開發(fā),并借助SQLite數(shù)據(jù)庫一起構(gòu)成一個水質(zhì)檢測系統(tǒng)。通過連接下位機(jī)的測試,該系統(tǒng)實(shí)現(xiàn)了實(shí)時顯示數(shù)據(jù)、實(shí)時查看采集的數(shù)據(jù)和歷史趨勢圖等功能,滿足了水質(zhì)檢測的設(shè)計要求,可靈活地應(yīng)用于各種水質(zhì)檢測。