王自強
(上海理工大學機械工程學院,上海 200093)
近年來,水處理問題已經成為我國環保領域的熱點問題之一。目前很多位于二三線城市的水處理企業仍然采用傳統的工作模式,工人師傅需要每天定時定點進行水質檢測、開泵加藥、設備維護等工作,由此造成了企業管理成本高、工作效率低等問題。
為了解決上述問題,筆者針對江蘇某水處理企業設計了一套循環水處理系統。該系統采用Quartz實現設備定時任務的調度,采用Websocket 實現設備遠程控制和實時數據的傳輸,采用ActiveMQ 實現本地應用間的異步通信。另外,本系統主要以React 作為Web 前端開發框架,后臺部分主要使用Django 框架進行搭建,使用MySQL 和InfluxDB 數據庫進行數據持久化,使用Qt框架進行人機交互界面的開發,實現了設備定時控制、水質數據實時監測、水質數據圖表化、水質異常警告等功能。測試與應用結果表明,反饋效果較好。
通過與企業管理人員和工人代表的交流討論,以及在企業生產實地進行走訪調研后,將企業訴求總結為水質監測、設備控制和設備監控三大核心需求,具體需求詳情如圖1所示。

圖1 用例圖
為了降低企業及企業下屬客戶的管理成本,提高用戶在使用本系統過程中的可靠性和安全性,將管理和安全需求總結為:固定資產管理、賬戶管理和權限配置三個部分,需求說明如表1所示。

表1 管理和安全需求說明
根據前述六大需求,筆者將系統分為運維、基本信息、固定資產、賬戶與權限四大模塊進行模塊化設計。下面,針對于這四大模塊進行介紹。
運維模塊主要由設備監控、設備控制、設備維護以及水質監測四大子模塊組成,如圖2所示。

圖2 運維模塊圖
如圖3 所示,區別于之前工人需要去設備上挨個讀取水質數據,用戶在設備詳情頁面就可以輕松讀取到當前的實時水質數據。通過選擇設備上已配置的傳感器,就可以將所選時間段內的傳感器數據以圖表的形式在頁面上顯示,也可以將所選時段的數據以Excel文件的形式下載到本地。另外,當水質數據超過閾值時,系統會以水質警告的方式在頁面和設備上對用戶給予提醒。

圖3 設備詳情頁面
設備控制模塊是本系統的重要子模塊之一,它主要包含設備遠程控制和設備操作日志查看兩大功能。用戶在進入設備詳情頁面后,可以在頁面上遠程控制設備,也可以配置定時任務,實現設備的自動化運行。另外,通過頁面上的設備使用日志選項,設備負責人可以清楚地看到設備操作歷史和配置人,方便檢查工作執行情況,以及意外情況下的責任追查。
基本信息模塊主要由客戶信息和設備信息兩大子模塊組成。客戶信息模塊主要用于對購買或租用企業設備的客戶信息進行維護,企業可以在基本信息模塊下的客戶信息頁面對客戶信息進行維護。設備信息模塊主要用于對企業設備的管理,主要包含設備信息查看、設備調撥和設備報廢等功能。
固定資產模塊主要用于對企業設備的配置、調撥及報廢流程進行跟蹤與記錄,能夠讓企業對其所擁有的設備資產現狀有直觀的了解。用戶可以在頁面側邊欄的固定資產模塊下選擇查看設備的配置、調撥和報廢記錄。
賬戶與權限模塊主要分為賬戶管理和角色權限兩個子模塊。賬戶管理模塊主要包含賬戶創建、賬戶信息維護以及賬戶權限配置三大功能。系統管理員可以在賬戶管理頁面為不同職位的員工選擇對應的角色并創建對應的賬號,也可以為已有賬號進行信息更新和角色更換,實現了賬號權限可配置。角色權限模塊主要服務于企業管理員,管理員可以通過該模塊創建不同的角色,并給不同的角色配置不同的權限。
系統的網頁前端部分主要使用React 框架進行搭建,React 框架通過虛擬DOM 技術的使用,減少與DOM之間的交互,具有速度快、性能好等優點。同時,虛擬DOM 技術能夠有效解決跨瀏覽兼容問題,開發人員在開發過程中可以使用模塊化的UI 組件來提高代碼的復用率,并使程序具有較好的可維護性。
本系統后臺部分使用Django 框架進行搭建,Django 框架是一款基于Python 語言編寫,使用MTV架構的開源Web 應用框架。在MTV 架構中,M 代表模型層,負責處理業務對象和數據庫表之間的映射關系,T 代表模板層,主要負責將頁面展示給用戶;V 代表視圖層,是模型層與模板層之間的橋梁。
與之前水質監測員需要到現場進行數據采集不同,用戶使用本系統可以直觀地在頁面上獲取實時的水質數據。傳感器在測得水質數據后,設備端將實時數據通過Websocket 發送至服務器,以此實現水質數據的實時監測。為了防止Websocket 連接中斷,在相應的程序中加入心跳機制,將傳感器所測得的數據以心跳包的形式發送給服務器,這樣即實現了水質數據實時監測的功能,也防止了因連接中斷而產生系統問題。另外,當傳感器檢測到水質異常時,設備端會發送水質異常信息至服務器,用戶在網頁端和設備人機交互界面上就能看到系統所發出的警報信息,提醒用戶及時處理。
用戶在設備詳情頁面可以通過選擇設備上配置的不同傳感器查看所選時間范圍內水質數據圖表,也可以通過鼠標點擊獲取圖標上任一時間點的數據信息。該功能使用戶可以便捷地查看當前水質的變化趨勢,及時進行加藥防止水質出現異常。在本系統中,主要使用InfluxDB數據庫進行水質數據的存儲。InfluxDB作為一款被廣泛使用的高性能時序型數據庫,因其具有高性能的寫入、沒有其他依賴、查詢效率高、能自動處理過期數據等優點,常被用于涉及大量時間戳數據的后端存儲。
通過設備端的人機交互界面或是網頁端頁面,用戶只需要登錄具有權限的賬號并確定設備處于正確的運行模式,就可以非常便捷地完成定時任務的創建,其流程如圖4 所示。在定時任務配置中,使用了ActiveMQ 中間件實現了設備端應用與本地Java 服務之間的異步通信。ActiveMQ 是Apache 開發的一款消息中間件,是JMS 規范的具體實現,具有適應性強、速度快、支持多種語言編寫等諸多優點。本系統中,使用了點對點的消息模式,通過在不同客戶端建立隊列,實現了Java 客戶端與C++設備端之間的異步消息通信。同時,未被消費者接收到的消息會存儲于ActiveMQ 服務器之中,等待對應的消費者上線接收,解決了異常情況下的消息丟失問題。

圖4 定時任務創建流程
為了實現設備定時任務調度,設備開機時會自動運行集成了Quartz 框架以及ActiveMQ 中間件的本地Java 服務。Quartz 是一款由Java 語言編寫的開源任務框架,其框架的主要核心分為調度器(Scheduler)、任務(Job)和觸發器(Trigger)三大核心組件。在任務注冊過程中,首先會創建觸發器對象Trigger。之后根據實際需求,選擇相應的任務類創建Job 對象并為Trigger 對象和Job 對象設置相關屬性,最后通過調度器Scheduler完成任務注冊流程。在任務執行流程中,一但到達預先設定的時間,調度器就會調用觸發器,觸發器會調用任務注冊的Job對象,并自動執行Job對象中的相應方法,實現任務執行自動化。
智慧循環水處理硬件系統主要模塊包括:RK3288開發板,傳感器模塊,繼電器模塊,上位機監測控制模塊等。RK3288 開發板是嵌入式系統的關鍵,主要使用Linux+Qt 來完成主要功能的開發。本系統使用Qt上位機進行人機交互界面設計,通過串口與傳感器進行通信,實現數據的采集,并將采集的數據保存到數據庫,進行部分數據的展示以及完成相應的泵操作。傳感器模塊主要通過RS485 串口與上位機進行通訊。另外,為了保證測量的準確性,需要通過標定來對傳感器進行校正。為了實現泵的控制,因此采用了繼電器模塊,通過多路的繼電器對多個泵進行控制,通過發送指令來控制繼電器的開閉來實現不同泵的開關。上位機監控頁面可以顯示實時的數據,每隔一段時間對獲取的實時數據進行保存,并且用曲線來顯示水質數據的變化趨勢。
在本系統中,使用了很多的用電設備,而且不同設備所使用的電源有所差異,因此配備了多個開關電源,此外泵的接線需要形成一個完整的回路。其實際電路連接如圖5所示。

圖5 實際電路連接
本系統需要實現較好的人機交互,支持觸控等操作。在Qt中提供了強大的信號和槽,用來實現信息之間的交互,本系統使用了Qt Widget 的編程方式來實現所有的功能,使用Qt 的版本為5.9.2。因為需要跨平臺也就是在Linux 下編寫代碼,最后運行的平臺為ARM Linux。由于RK3288 上處理器各方面參數都不如本地參數快,編譯速度很慢,因此選擇在本地使用交叉編譯工具鏈進行編譯,然后移植到RK3288,提高了移植的速度,減少了不必要的時間等待。
本系統設計的主界面如圖6所示。在左邊顯示了整個需要監測的區域,有酸堿度、濁度、ORP、電導率、腐蝕率、溫度。右邊主要是泵的管理模塊,可以實時查看每個泵的狀態并手動切換泵的運行模式。此外,右下角的液位計模塊還可以實時顯示藥液余量,判斷是否需要補充。

圖6 主頁面
針對傳統水處理企業管理成本高、工作效率低等問題,基于嵌入式和Web 技術開發設計了具有運維模塊、固定資產模塊、基本信息模塊和賬戶與權限模塊四大功能模塊的智慧循環水處理系統,實現了實時水質監測、異常水質警報、設備自動控制等功能。整體系統部署上線后運行穩定,達到了預期目標,滿足了水處理企業的基本需求,推進了企業的數字化。下一步考慮在設備數量較多的情況下,通過引入快速排序算法,加快設備對象的搜索速度,進一步完善本系統功能。