盧 冶, 徐 明, 蘇 勇
(江蘇科技大學(xué) 電氣與信息工程學(xué)院,江蘇 張家港 215600)
伴隨農(nóng)村地區(qū)經(jīng)濟(jì)、文化的不斷發(fā)展,農(nóng)村環(huán)境中的污染因素逐年增多。農(nóng)村環(huán)境連片整治是指,以解決區(qū)域性突出環(huán)境問題為目的,對地域空間上相對聚集在一起的多個村莊實施同步、集中整治,使環(huán)境問題得到有效解決的治理方式。開展農(nóng)村環(huán)境連片整治,既是實施城鄉(xiāng)發(fā)展一體化戰(zhàn)略、全面提升城鄉(xiāng)建設(shè)水平的重要舉措,也是推進(jìn)生態(tài)文明建設(shè)的重要載體。對于改善農(nóng)民生產(chǎn)生活條件,優(yōu)化農(nóng)村環(huán)境面貌,提升農(nóng)村環(huán)境質(zhì)量有著十分重要的作用。
為了使農(nóng)村環(huán)境連片整治工作出成效、上水平,需要根據(jù)各地農(nóng)村的環(huán)境監(jiān)測數(shù)據(jù),確保農(nóng)村水環(huán)境質(zhì)量的提高。以某公司在無錫市管轄的100多處農(nóng)村污水處理站為例,地理位置分散,擔(dān)負(fù)著農(nóng)村污水處理的重要任務(wù)。為了適應(yīng)污水處理的信息化發(fā)展趨勢,提高現(xiàn)場人員的管理水平和工作效率,必須構(gòu)建一套適合分散型污水處理站信息管理及生產(chǎn)運(yùn)行的自動化、精確化、智能化的整體解決方案:① 對現(xiàn)場設(shè)備實施遠(yuǎn)程監(jiān)控,根據(jù)采集的實時數(shù)據(jù)實現(xiàn)對系統(tǒng)水泵和風(fēng)機(jī)的遠(yuǎn)程智能控制;② 將每日運(yùn)行參數(shù)發(fā)送到管理平臺上,并根據(jù)日、月、年查詢運(yùn)行設(shè)備的歷史日志,超出閾值會報警,并及時發(fā)送到相關(guān)責(zé)任人的手機(jī)上;③ 統(tǒng)計各污水處理站現(xiàn)場設(shè)備的運(yùn)行時間和故障原因,并將故障信息及時發(fā)送到管理平臺和相關(guān)責(zé)任人的手機(jī)上。
面對分散的組織架構(gòu)和特定的運(yùn)行模式,本文在 Spring[1]和Hibernate[2]框架的基礎(chǔ)上,結(jié)合新一代的Java Web應(yīng)用技術(shù)標(biāo)準(zhǔn)——JSF[3-4],采用基于B/S結(jié)構(gòu)的多層架構(gòu)設(shè)計思想,設(shè)計并開發(fā)了農(nóng)村環(huán)境連片整治長效管理感知平臺(以下簡稱“長效管理感知平臺”),實現(xiàn)了農(nóng)村水務(wù)管理工作從傳統(tǒng)手工模式向計算機(jī)管理模式的轉(zhuǎn)變。
由圖1看出,各污水處理站的現(xiàn)場設(shè)備上安裝的傳感器構(gòu)成了長效管理感知平臺的感知層,以實現(xiàn)污水處理過程中對監(jiān)測指標(biāo)的全面感知?;贕PRS[5]的傳輸層保證了采集數(shù)據(jù)的可靠傳輸。感知層采集的數(shù)據(jù)經(jīng)過傳輸層傳輸?shù)酵ㄐ欧?wù)器并存儲到數(shù)據(jù)庫服務(wù)器上。本文所做的工作就是基于前端采集的數(shù)據(jù)進(jìn)行處理和統(tǒng)計、判斷設(shè)備是否正常運(yùn)轉(zhuǎn),并根據(jù)結(jié)果對現(xiàn)場設(shè)備實施智能控制,以及相關(guān)報警和故障信息的傳達(dá)。
圖1 感知平臺的系統(tǒng)架構(gòu)
長效管理感知平臺分為7個功能模塊:系統(tǒng)管理、數(shù)據(jù)通信、檢測控制、故障處理、數(shù)據(jù)報表和短信發(fā)送。
(1) 數(shù)據(jù)通信模塊。主要完成各項感知數(shù)據(jù)的接收、解析和發(fā)送,為智能化、信息化管理提供科學(xué)數(shù)據(jù)。具體任務(wù)包括通信設(shè)置、報文設(shè)置、數(shù)據(jù)接收和指令發(fā)送。通過設(shè)置GPRS通信參數(shù),連接GPRS網(wǎng)絡(luò);設(shè)置與污水站設(shè)備通信的數(shù)據(jù)報文格式,接收從污水站發(fā)送過來的數(shù)據(jù)包,并解析報文將數(shù)據(jù)存入數(shù)據(jù)庫中,還可以將設(shè)備開啟與關(guān)閉的控制指令回傳。目前,總共 5 個監(jiān)測指標(biāo),包括:進(jìn)出水溫T(℃)、pH值、氧化還原電位ORP(V)、液位計值LS、溶解氧DO(mg/L),并要求預(yù)留接口采集進(jìn)出污水化學(xué)需氧量COD(mg/L)和氨氮NH4-N(mg/L)。
(2) 檢測控制模塊。包括實時監(jiān)控和站點監(jiān)控功能。實時監(jiān)控基于Google地圖[6]顯示所轄區(qū)縣各污水站的運(yùn)行狀況,綠色標(biāo)記表示正常運(yùn)行,紅色標(biāo)記表示停止運(yùn)行,黃色標(biāo)記表示待修狀態(tài)。站點監(jiān)控對前端采集的數(shù)據(jù)進(jìn)行處理和統(tǒng)計、判斷設(shè)備是否正常運(yùn)轉(zhuǎn),并根據(jù)結(jié)果對現(xiàn)場設(shè)備進(jìn)行智能控制?,F(xiàn)場設(shè)備包括:① 人工格柵,清理時間的設(shè)置、自動提示及報警;② 調(diào)節(jié)池,根據(jù)液位計值的高低自動或手動啟動和停止污水提升泵;根據(jù)液位計值的持續(xù)時間和設(shè)備狀態(tài)自動報警;③ 厭氧池中安放有ORP、pH和溫度三類傳感器,根據(jù)設(shè)定的取值范圍自動報警及人工解除,如果1小時后還未恢復(fù)至正常值范圍則重復(fù)報警;④ 接觸氧化池,射流曝氣機(jī)的開閉可以根據(jù)時間或者溶解氧濃度進(jìn)行控制,并依據(jù)溶解氧濃度的取值范圍自動報警及人工解除;⑤ 沉淀池,根據(jù)時間自動或者手動地控制污泥回流泵的啟動和停止;⑥ 所有動力設(shè)備的報警,需要指明具體的報警設(shè)備,其中電流過載也視為報警。
(3) 故障處理模塊。實現(xiàn)設(shè)備運(yùn)行參數(shù)、水質(zhì)采樣數(shù)據(jù)等生產(chǎn)異?;蚬收系奶崾?、預(yù)警,記錄故障處理方案及處理結(jié)果并輸出故障日志。
(4) 數(shù)據(jù)報表模塊。統(tǒng)計水質(zhì)監(jiān)測數(shù)據(jù)、故障信息、處理信息、以及設(shè)備的運(yùn)行時間等。
(5) 系統(tǒng)管理模塊。包括權(quán)限管理和系統(tǒng)配置兩個功能。權(quán)限管理實現(xiàn)了對于整個感知平臺用戶的動態(tài)管理,并且為指定用戶分配指定的角色,以實現(xiàn)不同用戶對于系統(tǒng)不同模塊的不同操作,并最終通過JSF相關(guān)組件以樹型結(jié)構(gòu)呈現(xiàn)不同用戶可操縱的菜單。系統(tǒng)配置則包括污水站點設(shè)置、管理員設(shè)置、以及顯示設(shè)置等。
(6) 短信發(fā)送模塊。完成故障信息的通知,并提供已發(fā)送信息的明細(xì)查詢。
從技術(shù)架構(gòu)來說,長效管理感知平臺以Spring和Hibernate框架為基礎(chǔ),采用了基于B/S結(jié)構(gòu)的多層架構(gòu)設(shè)計思想,結(jié)合新一代的Java Web應(yīng)用技術(shù)標(biāo)準(zhǔn)——JSF,把系統(tǒng)實現(xiàn)為頁面表示層、控制層、業(yè)務(wù)層、數(shù)據(jù)訪問層和數(shù)據(jù)持久層5個層次,Web服務(wù)器為Tomcat。
JSF[3]全稱JavaServer Faces,是新一代的Java Web應(yīng)用技術(shù)標(biāo)準(zhǔn),它吸收了很多Java Servlet、JavaServer Pages(JSP)以及其他的Web應(yīng)用框架的特性。JSF為Web應(yīng)用開發(fā)定義了一個事件驅(qū)動的、基于組件的模型。
JSF試圖從網(wǎng)頁設(shè)計人員、應(yīng)用程序設(shè)計人員、組件開發(fā)人員等不同角度為應(yīng)用提供解決方案,讓不同的角色分工可以彼此合作又不互相干擾[7]。從網(wǎng)頁設(shè)計人員的角度看,JSF像是提供了一套新版本的HTML標(biāo)簽,但它是動態(tài)的,可以與后端的動態(tài)程序結(jié)合,而不需要理會后端的動態(tài)部分,甚至不需要使用JSTL標(biāo)簽也可以動態(tài)地呈現(xiàn)內(nèi)容。從應(yīng)用程序設(shè)計人員的角度看,JSF提供了一個與傳統(tǒng)應(yīng)用程序開發(fā)相類似的模型,基于事件驅(qū)動而不必關(guān)心HTTP的處理細(xì)節(jié)。還可以直接在集成開發(fā)環(huán)境上拖拽組件,設(shè)定組件的屬性,甚至還為程序設(shè)計人員處理了組件與字符串不匹配的轉(zhuǎn)換問題。從UI組件開發(fā)人員的角度看,他們可以設(shè)計通用的UI組件,只要定義好相關(guān)的屬性選項,就不用再受到網(wǎng)頁設(shè)計人員或應(yīng)用程序設(shè)計人員的干擾,從而提高了開發(fā)效率。
JSF、Spring與Hibernate有各自的優(yōu)點與不足,將這三個框架有效整合在一起,能夠有效搭建三層或多層系統(tǒng),保證了清晰的職責(zé)劃分以及可維護(hù)性和可擴(kuò)展性[8]。
長效管理感知平臺劃分為:頁面表示層、業(yè)務(wù)層、數(shù)據(jù)訪問層和數(shù)據(jù)持久層,控制層貫穿于整個應(yīng)用。頁面表示層基于前端采集的實時數(shù)據(jù),經(jīng)過報文轉(zhuǎn)換并以Web頁面的形式呈現(xiàn);同時還實現(xiàn)了頁面導(dǎo)航和數(shù)據(jù)驗證等功能。JSF非常適合基于MVC的表示層架構(gòu),它為行為和表示之間提供了清晰的分離[9]。業(yè)務(wù)層從頁面表示層接受請求,集中處理大部分業(yè)務(wù)邏輯,并作為訪問數(shù)據(jù)層的中介。數(shù)據(jù)訪問層使用DAO設(shè)計模式定義平臺各個模塊的業(yè)務(wù)接口,并定義它的實現(xiàn)類DAOImpl,通過DAO和對應(yīng)模塊的域?qū)ο?,對?shù)據(jù)庫數(shù)據(jù)進(jìn)行增刪改查操作。該模式不僅將前端技術(shù)與后端技術(shù)完全分離,還能夠保證源碼簡練和完全面向?qū)ο箫L(fēng)格。數(shù)據(jù)持久層使用Hibernate框架。Hibernate是一個面向Java環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具[10],其特點是輕量級封裝,避免引入過多復(fù)雜的問題,調(diào)試容易[11]等。在程序中Hibernate充分利用提供的O/R映射功能,通過具體類與數(shù)據(jù)庫進(jìn)行交互。
Spring是服務(wù)于所有層面的應(yīng)用程序,提供了Bean的配置基礎(chǔ)、AOP的支持、JDBC提取框架、抽象事務(wù)支持等,還有效地組織了系統(tǒng)中的中間層對象,消除了組件對象創(chuàng)建與使用耦合緊密的問題。在系統(tǒng)的多層訪問控制邏輯架構(gòu)當(dāng)中,業(yè)務(wù)處理流程和數(shù)據(jù)流程如圖2所示。
圖2 業(yè)務(wù)處理流程和數(shù)據(jù)流程
Google 地圖[6](Google Maps),前稱Google Local,是Google公司向全球提供的電子地圖服務(wù),包括局部詳細(xì)的衛(wèi)星照片。它提供三種視圖:① 矢量地圖(傳統(tǒng)地圖),可提供政區(qū)和交通以及商業(yè)信息;② 不同分辨率的衛(wèi)星照片(俯視圖或45°圖像,跟Google地球上的衛(wèi)星照片基本一樣);③ 地形圖,可以用以顯示地形和等高線。
Google Maps API是Google公司自己推出的編程API,允許對Google Maps感興趣的任何程序設(shè)計人員自行開發(fā)基于Google Maps的服務(wù)。該API提供了大量實用工具用以處理地圖,并通過各種服務(wù)向地圖添加內(nèi)容,可以在此基礎(chǔ)上創(chuàng)建功能全面的地圖應(yīng)用程序[12]。目前,Google Maps API的最新版本是V3,可以免費使用,并且不需要注冊Google Maps API Key。
系統(tǒng)是在JavaEE平臺上開發(fā),采用MyEclipse[13]為開發(fā)工具,SQL Server 2005為數(shù)據(jù)庫,Tomcat為Web服務(wù)器。Web頁面結(jié)合JSF框架實現(xiàn),同時集成Spring和Hibernate框架對長效管理感知平臺進(jìn)行組件化和層次化設(shè)計和開發(fā)。
實時監(jiān)控服務(wù)是基于Google Maps API實現(xiàn)的。頁面顯示無錫市周邊區(qū)縣地圖,圖中標(biāo)記所管轄的各農(nóng)村污水站,標(biāo)記使用的是標(biāo)準(zhǔn)圖標(biāo),其中綠色表示正常運(yùn)行,紅色表示停止運(yùn)行,黃色表示待修狀態(tài)。
為了更好地讓用戶體驗,我們采用Ajax[14]技術(shù)從后臺數(shù)據(jù)庫讀取數(shù)據(jù),然后實時地顯示在地圖上。Ajax的工作原理相當(dāng)于在客戶端和服務(wù)器之間加了一個Ajax引擎。這樣,并不是所有的請求都會提交給服務(wù)器。只有確實需要從服務(wù)器端讀取新數(shù)據(jù)時才會由客戶端通過JavaScript調(diào)用Ajax引擎向服務(wù)器端發(fā)起HTTP請求[15]。由于它并不等待請求的響應(yīng),所以仍然可以繼續(xù)瀏覽或交互。
信息窗口中顯示當(dāng)前污水站的設(shè)備運(yùn)行狀態(tài)和檢測指標(biāo)。目前,動力設(shè)備是指曝氣機(jī)、污水泵和回流泵。檢測指標(biāo)包括進(jìn)出水溫、pH、ORP、LS和DO。如果站點被標(biāo)記成黃色,那么表示它的某個檢測指標(biāo)超出了閾值,而且該指標(biāo)值將以橙色字體顯示。同時,信息窗口還提供了設(shè)備運(yùn)行記錄和檢測數(shù)據(jù)歷史記錄的鏈接。為了便于今后擴(kuò)展,動力設(shè)備和檢測指標(biāo)分別預(yù)留50%的空間。實時監(jiān)控畫面如圖3所示。
圖3 實時監(jiān)控畫面
站點監(jiān)控服務(wù)顯示某個污水站的詳細(xì)信息,包括水質(zhì)信息、設(shè)備狀態(tài)等,同時還能夠?qū)ΜF(xiàn)場設(shè)備實施智能控制。如圖4所示,頁面提供區(qū)縣和它所管轄的站點選擇,同樣基于Ajax技術(shù)從后臺數(shù)據(jù)庫讀取實時檢測數(shù)據(jù)。
圖4 站點監(jiān)控畫面
除了顯示上述實時數(shù)據(jù)以外,還以表格的形式顯示設(shè)備的當(dāng)前狀態(tài)和檢測數(shù)據(jù)的儀表取值范圍。人工格柵以天為單位提示上次確認(rèn)的時間。如果延遲一天未確認(rèn)清理,會呈現(xiàn)報警狀態(tài),經(jīng)過人工確認(rèn)后通過解除報警按鈕取消報警。其它動力設(shè)備的處理同上。同時,為了增加動態(tài)測量值的曲線顯示,引入了 Ajax前端框架Ext-JS[16]。Ext-JS最杰出之處在于,它開發(fā)了一系列非常簡單易用的控件及組件,只需要使用這些組件就能夠?qū)崿F(xiàn)豐富多彩的UI開發(fā)。
上述所有數(shù)據(jù)的顯示和智能控制都離不開數(shù)據(jù)通信模塊。它通過預(yù)先設(shè)置GPRS通信參數(shù)、數(shù)據(jù)報文格式,經(jīng)過GPRS網(wǎng)絡(luò),接收從污水站傳送過來的數(shù)據(jù)包,并解析報文存入數(shù)據(jù)庫,同時根據(jù)操作員動作指令向污水站發(fā)送動力設(shè)備開啟與關(guān)閉的控制指令。
本文針對農(nóng)村環(huán)境連片整治過程中污水處理信息化發(fā)展趨勢中亟須解決的問題和水務(wù)管理工作的特殊要求,設(shè)計并實現(xiàn)了基于JSF、Spring和Hibernate的農(nóng)村環(huán)境連片整治長效管理感知平臺。其優(yōu)點在于JSF良好的組件化設(shè)計提升了Web界面品質(zhì)和開發(fā)效率;基于GPRS的數(shù)據(jù)接收和發(fā)送,以及短信發(fā)送模塊,實現(xiàn)了對現(xiàn)場設(shè)備的智能化控制。這些系統(tǒng)特點為農(nóng)村水務(wù)管理工作進(jìn)入新的層次、推動江蘇省農(nóng)村環(huán)境連片整治工作出成效奠定了基礎(chǔ)。
[1] Craig Walls, Ryan Breidenbach. Spring in Action中文版[M]. 2版.北京: 人民郵電出版社, 2008.
[2] 孫衛(wèi)琴. 精通 Hibernate:Java對象持久化技術(shù)[M]. 2版.北京:電子工業(yè)出版社, 2010.
[3] JSF[EB/OL]. http://zh.wikipedia.org/wiki/JSF, 2013-03-10.
[4] 徐明華. 精通JSF:基于 EJB、Hibernate、Spring整合開發(fā)與項目實踐[M]. 北京: 人民郵電出版社, 2009.
[5] GPRS[EB/OL]. http://baike.baidu.com/view/1307.htm, 2013-03-08.
[6] Google地圖[EB/OL]. http://zh.wikipedia.org/wiki/Google地圖, 2013-03-09.
[7] JSF入門系列教程:JSF是什么[EB/OL]. http://blog.csdn.net/nuoyan666/article/details/5106336, 2009-12-30.
[8] 高 瞻, 鎖志海. 基于JSF和Hibernate的科研管理信息系統(tǒng)設(shè)計[J]. 現(xiàn)代電子技術(shù), 2009, 32(18): 98-101.
GAO Zhan, SUO Zhi-hai. Design of Research Management Information System Based on JSF and Hibernate[J]. Modern Electronics Technique, 2009, 32(18): 98-101.
[9] 董海燕, 王衛(wèi)東. 基于JSF、Spring和Hibernate的技術(shù)資料綜合管理系統(tǒng)設(shè)計[J]. 計算機(jī)應(yīng)用與軟件, 2012, 29(5): 212-214.
DONG Hai-yan, WANG Wei-dong. Design of Comprehensive Technical Information Management System Based on JSF, Spring and Hibernate[J]. Computer Applications and Software, 2012, 29(5): 212-214.
[10] 呂雪澄, 周書民. 基于ExtJS技術(shù)與SSH框架的后臺數(shù)據(jù)導(dǎo)出Excel[J]. 電腦編程技巧與維護(hù), 2011(10): 45-47.
Lü Xue-cheng, ZHOU Shu-min. Export Background Data to Excel Based on ExtJS Technology and SSH Framework[J]. Computer Programming Skills and Maintenance, 2011(10): 45-47.
[11] 衛(wèi) 軍, 夏慧軍, 孟臘春, 等. ExtJS Web應(yīng)用程序開發(fā)指南[M]. 北京: 機(jī)械工程出版社, 2009.
[12] 張曉煜, 李 向. 一種基于Google Maps的土地利用信息發(fā)布平臺[J]. 計算機(jī)與數(shù)字工程, 2012, 40(10): 146-149.
ZHANG Xiao-yu, LI Xiang. Information System of Land Utilization Based on Google Maps[J]. Computer and Digital Engineering, 2012, 40(10): 146-149.
[13] 張 俐, 張維璽. 基于B/S的實驗室信息系統(tǒng)的分析與設(shè)計[J]. 實驗室研究與探索, 2012, 31(5): 80-83.
ZHANG Li, ZHANG Wei-xi. Analysis and Design of a Laboratory Information Management System Based on B/S[J]. Research and Exploration in Laboratory, 2012, 31(5): 80-83.
[14] 陳 華. Ajax從入門到精通[M]. 北京: 清華大學(xué)出版社, 2008.
[15] 余建潮, 汪進(jìn)前, 葉秉良, 等. 基于Ajax的實驗室安全知識培訓(xùn)系統(tǒng)研發(fā)[J]. 實驗室研究與探索, 2012, 31(2): 195-197.
YU Jian-chao, Wang Jin-qian, YE Bing-liang,etal. Development of College Laboratory Safety Knowledge Training System Based on Ajax[J]. Research and Exploration in Laboratory, 2012, 31(2): 195-197.
[16] Ext-JS[EB/OL]. http://baike.baidu.com/view/1350145.htm, 2013-02-28.