李澤琦
(神華黃驊港務(wù)有限責(zé)任公司,河北 滄州 061113)
當(dāng)前,綠色發(fā)展理念已上升為國(guó)家發(fā)展的重大戰(zhàn)略。粉塵污染作為煤炭港口生產(chǎn)的主要污染源,是煤炭港口關(guān)注的重點(diǎn)。只有準(zhǔn)確掌握生產(chǎn)現(xiàn)場(chǎng)的粉塵污染情況,才能確定有效的污染治理方案,開(kāi)展有效的治理。為了準(zhǔn)確掌握生產(chǎn)現(xiàn)場(chǎng)的粉塵污染情況,需要在廠區(qū)架設(shè)粉塵監(jiān)測(cè)設(shè)備進(jìn)行粉塵污染程度監(jiān)測(cè)。并開(kāi)發(fā)一套在線粉塵監(jiān)測(cè)查詢系統(tǒng),專門(mén)用于采集對(duì)比分析廠區(qū)各個(gè)點(diǎn)位的粉塵監(jiān)測(cè)數(shù)據(jù)。
本系統(tǒng)的總體需求分為粉塵監(jiān)測(cè)數(shù)據(jù)的采集,粉塵監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)處理,粉塵監(jiān)測(cè)數(shù)據(jù)的統(tǒng)計(jì)查詢,粉塵監(jiān)測(cè)設(shè)備的管理,系統(tǒng)用戶權(quán)限的管理幾個(gè)方面,下面分別敘述每個(gè)方面的需求及設(shè)計(jì)思路。
粉塵監(jiān)測(cè)數(shù)據(jù)的采集是整個(gè)系統(tǒng)的最關(guān)鍵的部分。只有實(shí)現(xiàn)了對(duì)粉塵監(jiān)測(cè)數(shù)據(jù)有效及時(shí)的采集,才能夠滿足后續(xù)的其他需求。煤炭港口生產(chǎn)現(xiàn)場(chǎng)安裝的粉塵在線監(jiān)測(cè)設(shè)備全部都支持使用2G或4G移動(dòng)網(wǎng)絡(luò)傳輸粉塵監(jiān)測(cè)數(shù)據(jù)。由于使用移動(dòng)網(wǎng)絡(luò),在線粉塵監(jiān)測(cè)設(shè)備一般都沒(méi)有固定的IP地址,因此只能作為客戶端連接到在線粉塵監(jiān)測(cè)數(shù)據(jù)采集系統(tǒng),按照一定的頻率定時(shí)發(fā)送粉塵監(jiān)測(cè)數(shù)據(jù)。粉塵監(jiān)測(cè)采集系統(tǒng)需要監(jiān)聽(tīng)特定的端口接收粉塵監(jiān)測(cè)設(shè)備的連接,對(duì)粉塵監(jiān)測(cè)設(shè)備發(fā)送的數(shù)據(jù)進(jìn)行解碼。由于現(xiàn)場(chǎng)粉塵監(jiān)測(cè)設(shè)備發(fā)送數(shù)據(jù)的編碼方式不一樣,有的廠家的粉塵監(jiān)測(cè)設(shè)備使用的是廠家私有編碼,有的廠家的粉塵監(jiān)測(cè)設(shè)備使用的是通用的環(huán)保212協(xié)議編碼[1],因此粉塵監(jiān)測(cè)采集系統(tǒng)需要同時(shí)支持這兩種編碼方式。
粉塵監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)處理是整個(gè)系統(tǒng)最基礎(chǔ)的部分,只有將采集到的粉塵監(jiān)測(cè)數(shù)據(jù)進(jìn)行存儲(chǔ)并處理,才能為后續(xù)的查詢分析提供有效的支持?,F(xiàn)場(chǎng)安裝的粉塵在線監(jiān)測(cè)設(shè)備發(fā)送數(shù)據(jù)的周期不一樣,因此存儲(chǔ)系統(tǒng)應(yīng)該首先將采集到的原始數(shù)據(jù)進(jìn)行初步存儲(chǔ),再根據(jù)一定的時(shí)間周期通過(guò)原始數(shù)據(jù)計(jì)算平均值、最大值、最小值等數(shù)據(jù),并將計(jì)算的結(jié)果進(jìn)行存儲(chǔ),以滿足不同時(shí)間維度的查詢分析要求。
粉塵監(jiān)測(cè)數(shù)據(jù)的統(tǒng)計(jì)查詢是整個(gè)系統(tǒng)面向用戶的部分,用戶直接從該系統(tǒng)中查詢、對(duì)比、分析、導(dǎo)出粉塵在線監(jiān)測(cè)數(shù)據(jù)。因此,該系統(tǒng)應(yīng)靈活設(shè)計(jì),根據(jù)設(shè)備位置、監(jiān)測(cè)污染物類型、不同時(shí)間周期分別查詢對(duì)比分析。
粉塵監(jiān)測(cè)設(shè)備的管理及系統(tǒng)用戶權(quán)限的管理是整個(gè)系統(tǒng)的輔助支撐部分,若對(duì)粉塵監(jiān)測(cè)設(shè)備進(jìn)行采集,首先要在系統(tǒng)中錄入設(shè)備的信息,才能夠識(shí)別區(qū)分不同的粉塵監(jiān)測(cè)設(shè)備發(fā)送過(guò)來(lái)的粉塵監(jiān)測(cè)數(shù)據(jù)。同時(shí)還需要對(duì)各個(gè)粉塵監(jiān)測(cè)設(shè)備進(jìn)行管理,確定是否采集存儲(chǔ)某個(gè)設(shè)備發(fā)送過(guò)來(lái)的數(shù)據(jù)。系統(tǒng)用戶權(quán)限管理為每個(gè)登陸系統(tǒng)的用戶創(chuàng)建不同的權(quán)限,以保證粉塵監(jiān)測(cè)數(shù)據(jù)的訪問(wèn)安全性。
為了快速的實(shí)現(xiàn)粉塵監(jiān)測(cè)設(shè)備的數(shù)據(jù)采集和對(duì)比查詢,系統(tǒng)選用Java語(yǔ)言進(jìn)行系統(tǒng)開(kāi)發(fā),選用MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ),選用Tomcat作為Web應(yīng)用服務(wù)器,選用Spring框架進(jìn)行組件管理[2],選用Mina框架開(kāi)發(fā)網(wǎng)絡(luò)數(shù)據(jù)采集端[3],選用C3P0庫(kù)作為JDBC數(shù)據(jù)庫(kù)連接池,選用Quartz框架開(kāi)發(fā)定時(shí)任務(wù)調(diào)度功能[4]。
首先,根據(jù)系統(tǒng)的功能模塊創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)表結(jié)構(gòu)。
對(duì)于粉塵監(jiān)測(cè)數(shù)據(jù)采集模塊創(chuàng)建數(shù)據(jù)包表用于存儲(chǔ)從粉塵監(jiān)測(cè)設(shè)備采集到的數(shù)據(jù):其中包括一個(gè)ID字段作為每條數(shù)據(jù)的唯一標(biāo)識(shí),設(shè)備ID字段用于標(biāo)識(shí)所采集的粉塵監(jiān)測(cè)設(shè)備,粉塵濃度字段用于保存接收到的粉塵監(jiān)測(cè)濃度,接收時(shí)間字段用于保存粉塵監(jiān)測(cè)濃度對(duì)應(yīng)的接收時(shí)間,風(fēng)速、風(fēng)向、氣壓、溫度、濕度作為可選字段保存接收到的氣象數(shù)據(jù)。
對(duì)于粉塵監(jiān)測(cè)數(shù)據(jù)的存儲(chǔ)處理模塊創(chuàng)建平均數(shù)據(jù)表和定時(shí)任務(wù)表。平均數(shù)據(jù)表用于存儲(chǔ)按預(yù)定時(shí)間周期計(jì)算的粉塵濃度平均值:其中包括一個(gè)ID字段作為每條數(shù)據(jù)的唯一標(biāo)識(shí),設(shè)備ID字段用于標(biāo)識(shí)所平均計(jì)算的粉塵監(jiān)測(cè)設(shè)備,粉塵濃度平均值字段用于保存當(dāng)前時(shí)間段內(nèi)對(duì)應(yīng)設(shè)備的粉塵濃度平均值,粉塵濃度最大值和最小值字段用于保存相應(yīng)的最大值最小值,采樣個(gè)數(shù)字段用于保存當(dāng)前時(shí)段內(nèi)采集到的粉塵濃度數(shù)據(jù)的條數(shù),時(shí)間周期類型字段用于保存當(dāng)前記錄計(jì)算的時(shí)間周期類型(分別用不同的編碼標(biāo)識(shí)分鐘平均、小時(shí)平均、日平均),計(jì)算時(shí)間字段用于保存當(dāng)前數(shù)據(jù)的計(jì)算時(shí)間;定時(shí)任務(wù)表配合Quartz框架使用包含運(yùn)行定時(shí)任務(wù)所需的相應(yīng)配置信息。
對(duì)于粉塵監(jiān)測(cè)設(shè)備的管理及系統(tǒng)用戶權(quán)限的管理模塊創(chuàng)建用戶表、設(shè)備表、訪問(wèn)權(quán)限表、系統(tǒng)日志表。用戶表用于保存系統(tǒng)用戶的相關(guān)信息:其中包括一個(gè)ID字段作為每個(gè)用戶的唯一標(biāo)識(shí),用戶名字段作為用戶登錄的名稱,密碼字段作為用戶登錄的密碼,登錄時(shí)間字段保存用戶最近一次的登錄時(shí)間,是否在線字段保存用戶是否在線的狀態(tài);設(shè)備表存儲(chǔ)粉塵監(jiān)測(cè)設(shè)備的信息:其中包括一個(gè)ID字段作為唯一標(biāo)識(shí),設(shè)備編碼字段對(duì)應(yīng)設(shè)備發(fā)送數(shù)據(jù)時(shí)的編碼,設(shè)備是否可用字段代表設(shè)備發(fā)送的數(shù)據(jù)當(dāng)前是否采集存儲(chǔ);訪問(wèn)權(quán)限表用于保存每個(gè)用戶對(duì)于系統(tǒng)的訪問(wèn)權(quán)限:其中包括一個(gè)ID字段作為唯一標(biāo)識(shí),用戶ID字段包括對(duì)應(yīng)的用戶ID,設(shè)備ID標(biāo)識(shí)對(duì)應(yīng)的設(shè)備,權(quán)限字段表示對(duì)應(yīng)用戶是否有權(quán)限查看該設(shè)備數(shù)據(jù);系統(tǒng)日志表用于保存用戶訪問(wèn)日志:其中包括一個(gè)ID字段作為唯一標(biāo)識(shí),用戶ID字段表示對(duì)應(yīng)的用戶ID,記錄時(shí)間字段表示對(duì)應(yīng)日志的時(shí)間,操作類型字段表示用戶進(jìn)行的操作。
然后,使用相應(yīng)的框架實(shí)現(xiàn)系統(tǒng)的各個(gè)模塊。
使用Mina框架實(shí)現(xiàn)粉塵監(jiān)測(cè)數(shù)據(jù)采集模。首先,定義一個(gè)解碼器類實(shí)現(xiàn)ProtocolDecoder接口,在decode方法中對(duì)接收到的數(shù)據(jù)進(jìn)行解析,根據(jù)接收數(shù)據(jù)的包頭部信息區(qū)分設(shè)備使用的協(xié)議,根據(jù)不同的協(xié)議使用不同的算法對(duì)接收到的數(shù)據(jù)進(jìn)行相應(yīng)的解析,根據(jù)解析后的數(shù)據(jù)創(chuàng)建為一個(gè)Map對(duì)象。然后實(shí)現(xiàn)相應(yīng)的協(xié)議處理工廠類使用該解碼器類創(chuàng)建一個(gè)解碼器。最后實(shí)現(xiàn)協(xié)議適配器類繼承自IoHandlerAdapter類,實(shí)現(xiàn)其中的messageReceived方法,在這個(gè)方法中接收解碼器對(duì)象解碼后的Map對(duì)象,從中獲取設(shè)備編碼和對(duì)應(yīng)的粉塵濃度值,從設(shè)備表中查找判斷是否記錄該設(shè)備發(fā)送的數(shù)據(jù),如果是就將該條記錄保存到數(shù)據(jù)包表中,并將該條記錄緩存到內(nèi)存中以備查詢。
使用Quartz框架創(chuàng)建定時(shí)任務(wù),定時(shí)讀取數(shù)據(jù)包表中的數(shù)據(jù)根據(jù)定時(shí)任務(wù)表中的配置,定時(shí)計(jì)算粉塵監(jiān)測(cè)濃度平均值及最大最小值并將計(jì)算結(jié)果存儲(chǔ)到平均數(shù)據(jù)表中。
使用Java語(yǔ)言內(nèi)置的JAX-RS規(guī)范[5],定義幾個(gè)RESTful服務(wù)[6],分別用于接收用戶登錄、執(zhí)行用戶查詢、用戶管理、設(shè)備管理幾個(gè)功能。對(duì)于網(wǎng)頁(yè)端可以直接設(shè)計(jì)幾個(gè)靜態(tài)頁(yè)面,使用前端的腳本調(diào)用后端實(shí)現(xiàn)的服務(wù)實(shí)現(xiàn)用戶的登錄和信息的查詢?cè)O(shè)備的管理和用戶的管理。
為了系統(tǒng)的初次登陸和初始化,需要在數(shù)據(jù)表中創(chuàng)建一個(gè)超級(jí)用戶,默認(rèn)擁有所有權(quán)限。然后再通過(guò)超級(jí)用戶登錄系統(tǒng),創(chuàng)建系統(tǒng)的一般訪問(wèn)用戶,錄入系統(tǒng)初始采集的粉塵監(jiān)測(cè)設(shè)備的編碼信息,設(shè)置系統(tǒng)計(jì)算平均值和最大最小值的定時(shí)任務(wù)。
以上實(shí)現(xiàn)了一個(gè)最基本的在線粉塵監(jiān)測(cè)查詢系統(tǒng)。由于系統(tǒng)設(shè)計(jì)使用了模塊化松耦合的設(shè)計(jì),可以幾乎無(wú)限制的任意增加不同類型的粉塵監(jiān)測(cè)設(shè)備和各種分析查詢功能。同時(shí),由于系統(tǒng)的查詢接口使用RESTful服務(wù)定義,可以很方便的創(chuàng)建移動(dòng)客戶端對(duì)系統(tǒng)信息進(jìn)行查詢。因此,本系統(tǒng)具有很高的擴(kuò)展性,系統(tǒng)可以和其他信息系統(tǒng)方便的集成,提供的數(shù)據(jù)將成為煤炭港口的粉塵治理的重要依據(jù)。