王自強
(上海理工大學(xué)機械工程學(xué)院,上海 200093)
近年來,水處理問題已經(jīng)成為我國環(huán)保領(lǐng)域的熱點問題之一。目前很多位于二三線城市的水處理企業(yè)仍然采用傳統(tǒng)的工作模式,工人師傅需要每天定時定點進行水質(zhì)檢測、開泵加藥、設(shè)備維護等工作,由此造成了企業(yè)管理成本高、工作效率低等問題。
為了解決上述問題,筆者針對江蘇某水處理企業(yè)設(shè)計了一套循環(huán)水處理系統(tǒng)。該系統(tǒng)采用Quartz實現(xiàn)設(shè)備定時任務(wù)的調(diào)度,采用Websocket 實現(xiàn)設(shè)備遠程控制和實時數(shù)據(jù)的傳輸,采用ActiveMQ 實現(xiàn)本地應(yīng)用間的異步通信。另外,本系統(tǒng)主要以React 作為Web 前端開發(fā)框架,后臺部分主要使用Django 框架進行搭建,使用MySQL 和InfluxDB 數(shù)據(jù)庫進行數(shù)據(jù)持久化,使用Qt框架進行人機交互界面的開發(fā),實現(xiàn)了設(shè)備定時控制、水質(zhì)數(shù)據(jù)實時監(jiān)測、水質(zhì)數(shù)據(jù)圖表化、水質(zhì)異常警告等功能。測試與應(yīng)用結(jié)果表明,反饋效果較好。
通過與企業(yè)管理人員和工人代表的交流討論,以及在企業(yè)生產(chǎn)實地進行走訪調(diào)研后,將企業(yè)訴求總結(jié)為水質(zhì)監(jiān)測、設(shè)備控制和設(shè)備監(jiān)控三大核心需求,具體需求詳情如圖1所示。
圖1 用例圖
為了降低企業(yè)及企業(yè)下屬客戶的管理成本,提高用戶在使用本系統(tǒng)過程中的可靠性和安全性,將管理和安全需求總結(jié)為:固定資產(chǎn)管理、賬戶管理和權(quán)限配置三個部分,需求說明如表1所示。
表1 管理和安全需求說明
根據(jù)前述六大需求,筆者將系統(tǒng)分為運維、基本信息、固定資產(chǎn)、賬戶與權(quán)限四大模塊進行模塊化設(shè)計。下面,針對于這四大模塊進行介紹。
運維模塊主要由設(shè)備監(jiān)控、設(shè)備控制、設(shè)備維護以及水質(zhì)監(jiān)測四大子模塊組成,如圖2所示。
圖2 運維模塊圖
如圖3 所示,區(qū)別于之前工人需要去設(shè)備上挨個讀取水質(zhì)數(shù)據(jù),用戶在設(shè)備詳情頁面就可以輕松讀取到當(dāng)前的實時水質(zhì)數(shù)據(jù)。通過選擇設(shè)備上已配置的傳感器,就可以將所選時間段內(nèi)的傳感器數(shù)據(jù)以圖表的形式在頁面上顯示,也可以將所選時段的數(shù)據(jù)以Excel文件的形式下載到本地。另外,當(dāng)水質(zhì)數(shù)據(jù)超過閾值時,系統(tǒng)會以水質(zhì)警告的方式在頁面和設(shè)備上對用戶給予提醒。
圖3 設(shè)備詳情頁面
設(shè)備控制模塊是本系統(tǒng)的重要子模塊之一,它主要包含設(shè)備遠程控制和設(shè)備操作日志查看兩大功能。用戶在進入設(shè)備詳情頁面后,可以在頁面上遠程控制設(shè)備,也可以配置定時任務(wù),實現(xiàn)設(shè)備的自動化運行。另外,通過頁面上的設(shè)備使用日志選項,設(shè)備負責(zé)人可以清楚地看到設(shè)備操作歷史和配置人,方便檢查工作執(zhí)行情況,以及意外情況下的責(zé)任追查。
基本信息模塊主要由客戶信息和設(shè)備信息兩大子模塊組成??蛻粜畔⒛K主要用于對購買或租用企業(yè)設(shè)備的客戶信息進行維護,企業(yè)可以在基本信息模塊下的客戶信息頁面對客戶信息進行維護。設(shè)備信息模塊主要用于對企業(yè)設(shè)備的管理,主要包含設(shè)備信息查看、設(shè)備調(diào)撥和設(shè)備報廢等功能。
固定資產(chǎn)模塊主要用于對企業(yè)設(shè)備的配置、調(diào)撥及報廢流程進行跟蹤與記錄,能夠讓企業(yè)對其所擁有的設(shè)備資產(chǎn)現(xiàn)狀有直觀的了解。用戶可以在頁面?zhèn)冗厵诘墓潭ㄙY產(chǎn)模塊下選擇查看設(shè)備的配置、調(diào)撥和報廢記錄。
賬戶與權(quán)限模塊主要分為賬戶管理和角色權(quán)限兩個子模塊。賬戶管理模塊主要包含賬戶創(chuàng)建、賬戶信息維護以及賬戶權(quán)限配置三大功能。系統(tǒng)管理員可以在賬戶管理頁面為不同職位的員工選擇對應(yīng)的角色并創(chuàng)建對應(yīng)的賬號,也可以為已有賬號進行信息更新和角色更換,實現(xiàn)了賬號權(quán)限可配置。角色權(quán)限模塊主要服務(wù)于企業(yè)管理員,管理員可以通過該模塊創(chuàng)建不同的角色,并給不同的角色配置不同的權(quán)限。
系統(tǒng)的網(wǎng)頁前端部分主要使用React 框架進行搭建,React 框架通過虛擬DOM 技術(shù)的使用,減少與DOM之間的交互,具有速度快、性能好等優(yōu)點。同時,虛擬DOM 技術(shù)能夠有效解決跨瀏覽兼容問題,開發(fā)人員在開發(fā)過程中可以使用模塊化的UI 組件來提高代碼的復(fù)用率,并使程序具有較好的可維護性。
本系統(tǒng)后臺部分使用Django 框架進行搭建,Django 框架是一款基于Python 語言編寫,使用MTV架構(gòu)的開源Web 應(yīng)用框架。在MTV 架構(gòu)中,M 代表模型層,負責(zé)處理業(yè)務(wù)對象和數(shù)據(jù)庫表之間的映射關(guān)系,T 代表模板層,主要負責(zé)將頁面展示給用戶;V 代表視圖層,是模型層與模板層之間的橋梁。
與之前水質(zhì)監(jiān)測員需要到現(xiàn)場進行數(shù)據(jù)采集不同,用戶使用本系統(tǒng)可以直觀地在頁面上獲取實時的水質(zhì)數(shù)據(jù)。傳感器在測得水質(zhì)數(shù)據(jù)后,設(shè)備端將實時數(shù)據(jù)通過Websocket 發(fā)送至服務(wù)器,以此實現(xiàn)水質(zhì)數(shù)據(jù)的實時監(jiān)測。為了防止Websocket 連接中斷,在相應(yīng)的程序中加入心跳機制,將傳感器所測得的數(shù)據(jù)以心跳包的形式發(fā)送給服務(wù)器,這樣即實現(xiàn)了水質(zhì)數(shù)據(jù)實時監(jiān)測的功能,也防止了因連接中斷而產(chǎn)生系統(tǒng)問題。另外,當(dāng)傳感器檢測到水質(zhì)異常時,設(shè)備端會發(fā)送水質(zhì)異常信息至服務(wù)器,用戶在網(wǎng)頁端和設(shè)備人機交互界面上就能看到系統(tǒng)所發(fā)出的警報信息,提醒用戶及時處理。
用戶在設(shè)備詳情頁面可以通過選擇設(shè)備上配置的不同傳感器查看所選時間范圍內(nèi)水質(zhì)數(shù)據(jù)圖表,也可以通過鼠標(biāo)點擊獲取圖標(biāo)上任一時間點的數(shù)據(jù)信息。該功能使用戶可以便捷地查看當(dāng)前水質(zhì)的變化趨勢,及時進行加藥防止水質(zhì)出現(xiàn)異常。在本系統(tǒng)中,主要使用InfluxDB數(shù)據(jù)庫進行水質(zhì)數(shù)據(jù)的存儲。InfluxDB作為一款被廣泛使用的高性能時序型數(shù)據(jù)庫,因其具有高性能的寫入、沒有其他依賴、查詢效率高、能自動處理過期數(shù)據(jù)等優(yōu)點,常被用于涉及大量時間戳數(shù)據(jù)的后端存儲。
通過設(shè)備端的人機交互界面或是網(wǎng)頁端頁面,用戶只需要登錄具有權(quán)限的賬號并確定設(shè)備處于正確的運行模式,就可以非常便捷地完成定時任務(wù)的創(chuàng)建,其流程如圖4 所示。在定時任務(wù)配置中,使用了ActiveMQ 中間件實現(xiàn)了設(shè)備端應(yīng)用與本地Java 服務(wù)之間的異步通信。ActiveMQ 是Apache 開發(fā)的一款消息中間件,是JMS 規(guī)范的具體實現(xiàn),具有適應(yīng)性強、速度快、支持多種語言編寫等諸多優(yōu)點。本系統(tǒng)中,使用了點對點的消息模式,通過在不同客戶端建立隊列,實現(xiàn)了Java 客戶端與C++設(shè)備端之間的異步消息通信。同時,未被消費者接收到的消息會存儲于ActiveMQ 服務(wù)器之中,等待對應(yīng)的消費者上線接收,解決了異常情況下的消息丟失問題。
圖4 定時任務(wù)創(chuàng)建流程
為了實現(xiàn)設(shè)備定時任務(wù)調(diào)度,設(shè)備開機時會自動運行集成了Quartz 框架以及ActiveMQ 中間件的本地Java 服務(wù)。Quartz 是一款由Java 語言編寫的開源任務(wù)框架,其框架的主要核心分為調(diào)度器(Scheduler)、任務(wù)(Job)和觸發(fā)器(Trigger)三大核心組件。在任務(wù)注冊過程中,首先會創(chuàng)建觸發(fā)器對象Trigger。之后根據(jù)實際需求,選擇相應(yīng)的任務(wù)類創(chuàng)建Job 對象并為Trigger 對象和Job 對象設(shè)置相關(guān)屬性,最后通過調(diào)度器Scheduler完成任務(wù)注冊流程。在任務(wù)執(zhí)行流程中,一但到達預(yù)先設(shè)定的時間,調(diào)度器就會調(diào)用觸發(fā)器,觸發(fā)器會調(diào)用任務(wù)注冊的Job對象,并自動執(zhí)行Job對象中的相應(yīng)方法,實現(xiàn)任務(wù)執(zhí)行自動化。
智慧循環(huán)水處理硬件系統(tǒng)主要模塊包括:RK3288開發(fā)板,傳感器模塊,繼電器模塊,上位機監(jiān)測控制模塊等。RK3288 開發(fā)板是嵌入式系統(tǒng)的關(guān)鍵,主要使用Linux+Qt 來完成主要功能的開發(fā)。本系統(tǒng)使用Qt上位機進行人機交互界面設(shè)計,通過串口與傳感器進行通信,實現(xiàn)數(shù)據(jù)的采集,并將采集的數(shù)據(jù)保存到數(shù)據(jù)庫,進行部分數(shù)據(jù)的展示以及完成相應(yīng)的泵操作。傳感器模塊主要通過RS485 串口與上位機進行通訊。另外,為了保證測量的準確性,需要通過標(biāo)定來對傳感器進行校正。為了實現(xiàn)泵的控制,因此采用了繼電器模塊,通過多路的繼電器對多個泵進行控制,通過發(fā)送指令來控制繼電器的開閉來實現(xiàn)不同泵的開關(guān)。上位機監(jiān)控頁面可以顯示實時的數(shù)據(jù),每隔一段時間對獲取的實時數(shù)據(jù)進行保存,并且用曲線來顯示水質(zhì)數(shù)據(jù)的變化趨勢。
在本系統(tǒng)中,使用了很多的用電設(shè)備,而且不同設(shè)備所使用的電源有所差異,因此配備了多個開關(guān)電源,此外泵的接線需要形成一個完整的回路。其實際電路連接如圖5所示。
圖5 實際電路連接
本系統(tǒng)需要實現(xiàn)較好的人機交互,支持觸控等操作。在Qt中提供了強大的信號和槽,用來實現(xiàn)信息之間的交互,本系統(tǒng)使用了Qt Widget 的編程方式來實現(xiàn)所有的功能,使用Qt 的版本為5.9.2。因為需要跨平臺也就是在Linux 下編寫代碼,最后運行的平臺為ARM Linux。由于RK3288 上處理器各方面參數(shù)都不如本地參數(shù)快,編譯速度很慢,因此選擇在本地使用交叉編譯工具鏈進行編譯,然后移植到RK3288,提高了移植的速度,減少了不必要的時間等待。
本系統(tǒng)設(shè)計的主界面如圖6所示。在左邊顯示了整個需要監(jiān)測的區(qū)域,有酸堿度、濁度、ORP、電導(dǎo)率、腐蝕率、溫度。右邊主要是泵的管理模塊,可以實時查看每個泵的狀態(tài)并手動切換泵的運行模式。此外,右下角的液位計模塊還可以實時顯示藥液余量,判斷是否需要補充。
圖6 主頁面
針對傳統(tǒng)水處理企業(yè)管理成本高、工作效率低等問題,基于嵌入式和Web 技術(shù)開發(fā)設(shè)計了具有運維模塊、固定資產(chǎn)模塊、基本信息模塊和賬戶與權(quán)限模塊四大功能模塊的智慧循環(huán)水處理系統(tǒng),實現(xiàn)了實時水質(zhì)監(jiān)測、異常水質(zhì)警報、設(shè)備自動控制等功能。整體系統(tǒng)部署上線后運行穩(wěn)定,達到了預(yù)期目標(biāo),滿足了水處理企業(yè)的基本需求,推進了企業(yè)的數(shù)字化。下一步考慮在設(shè)備數(shù)量較多的情況下,通過引入快速排序算法,加快設(shè)備對象的搜索速度,進一步完善本系統(tǒng)功能。