0、 引言
隨著天然氣的使用變得越來越廣泛,由于天然氣使用不當而引起的事故頻發。據統計,城市燃氣已經成為僅次于交通、火災和建筑事故之后的主要事故來源。只有對天然氣的使用進行實時有效的監控才能較好地防止事故的發生。目前在我國市面上已經較大范圍的使用了天然氣報警器,可以對天然氣濃度進行監控,并在濃度異常時發出蜂鳴聲報警。
不過這種報警器在使用上還存在一定的局限性,只能運行在天然氣使用現場,不便于工作人員的實時監控;其次蜂鳴式報警很難引起工作人員的注意,從而錯過了最佳的處理時機。國外的天然氣監測產品大多針對工業級應用,尺寸較大,成本較高。
北京市政府在前幾年頒布的《北京市燃氣事故應急預案》中指出,要建立“統一指揮、屬地管理、以人為本、專業處置、增強意識、預防為主”的燃氣突發事件應急體系,全面提高應對燃氣突發事件的能力,希望對其管轄范圍內的所有天然氣使用節點(例如餐館、居民樓等)進行實時的監控,能夠第一時間發現天然氣濃度異常,從而統一指揮,專業處置來有效預防事故的發生,減少事故帶來的損失。
基于以上需求,本文提出了基于 CS 架構的天然氣遠程監控系統。主要目標就是將分散在各個使用現場的報警器采集的數據集中到一個遠程監控中心(例如政府部門、小區管理處等)。遠程監控中心對所有節點的數據進行統一的監控,如有異常發生立即報警,提醒工作人員采取相應的措施,從而達到防止事故發生的效果。
1、 系統設計目標
整個系統主要分為兩個部分,第一部分是運行在分散的監控節點處(例如餐館)的報警器以及客戶端軟件;第二部分是運行在管理部門(例如政府相關部門)的遠程監控端軟件。本文將主要介紹遠程監控端軟件。
系統各部分功能如下:報警器,它被安裝在遠離工作人員工作的單獨的天然氣存放地點,因此需要定期采集天然氣存放現場的燃氣濃度、室內溫度等數據,并將數據打包傳送到客戶端軟件上(該軟件可以安裝在工作人員辦公的地方)??蛻舳塑浖诮邮盏綀缶鞯臄祿笤偻ㄟ^網絡將數據傳輸到遠程的中心監控平臺。系統結構圖如圖 1 所示。
2、 遠程監控中心功能模塊設計
通過對天然氣遠程監控中心的需求分析,系統主要分為以下幾個功能模塊:數據接收與存儲、節點實時監控、監控節點管理、節點異常報警、預案提取以及系統設置等。系統具體功能模塊設計如圖 2 所示:
2.1 數據接收與存儲
此模塊主要負責對各個天然氣使用節點傳輸來的數據進行接收與存儲。每個監控節點會將節點名稱、溫度、濃度三個數據打包成具有特定格式的字符串,并定時(例如間隔 5 秒發送一組數據)將數據發送給遠程監控中心。成功接收數據后,系統對數據進行拆包并解析出傳輸節點的名稱,節點當前的溫度數據、濃度數據,再進一步將數據按照規則存儲到相應的文件中進行保存。由于數據量十分龐大,為了便于有效的保存和查找數據,系統按照日期每日創建新文件夾,并且為每個節點創建單獨的文本文檔來保存一天內接收到的該節點的數據。
2.2 節點實時監控
此模塊為用戶提供可視化的對節點實時監控功能。系統接收到節點傳輸的數據是以文本形式保存,無法直觀的展現,因此在節點實時監控模塊,用戶可以選擇查看節點的動態數據曲線,實時繪制節點數據,更加直觀。除了以動態曲線外,還提供了現場圖像查看功能。用戶可以隨時向客戶端發送指令獲取節點的現場監控圖像,并將實時圖像與原始正常圖像進行對比顯示,作為判斷節點是否異常的依據。
2.3 監控節點管理
系統還為工作人員提供了對節點信息的管理功能。每個節點將包含節點名稱、節點聯系人信息、節點所屬區域等基本信息,并存入數據庫中。其中節點名稱用以唯一標識一個節點;節點聯系人信息將包含節點安全負責人姓名、電話等,便于出現異常時的緊急聯系;而節點所屬區域信息是為了將節點進行地域上的分組,方便管理。工作人員可以根據需要增加新節點,修改節點信息,刪除節點,導出節點信息等。
2.4 節點異常報警
該模塊是系統中最重要的功能部分。系統在接收數據后還會對數據進行安全性判定,判斷該節點此時傳輸的數據是否存在異常(異常一共分為三個等級,等級一為普通異常,等級三為嚴重異常)。如果出現異常,會彈出提示框提醒用戶注意,并且自動生成節點的數據曲線和提取節點的現場圖像,方便用戶查看。
2.5 預案管理
預案是指根據評估分析或經驗,對潛在的或可能發生的突發事件的類別和影響程度而事先制定的應急處置方案。本系統的主要目標就是提前預防事故的發生,因此處理預案也變得尤為重要,預案的內容主要是針對報警節點而采取措施的信息。
如果某節點出現了相應等級的異常,系統會根據節點的等級自動提取對應的處理預案,提醒用戶按照預案進行相應的操作,防止事態惡化。例如某節點處于二級報警時,此時情況比較嚴重,預案會提醒工作人員撥打該節點安全責任人的電話,對節點環境進行勘察,采取正確的應對措施。預案內容可以根據地方政策等因素進行變更,為具有一定權限的用戶提供了預案修改功能。
2.6 系統設置
系統會設置一些報警閾值,例如天然氣濃度閾值、溫度閾值等,將每次接收到節點上傳的數據和系統設置的閾值進行比較,如果大于或者等于閾值設定數值就會產生報警。為了達到提前預防的效果,提供了三級閾值設定功能。級別越高表示異常越嚴重。系統安全設置部分就是為用戶提供個性化的閾值設置。用戶可以根據實際情況,在指定范圍內選取某個數值作為閾值報警值,該值會保存到數據庫中,作為數據檢測的比較值。除了安全設置外還提供例如路徑修改,頁面顏色修改等其他設置功能。
2.7 附加功能
附加功能模塊是為了讓用戶有更好的體驗而設置的,例如郵件工具,用戶可以在系統中向各個節點的聯系郵箱發送通知、資料等,方便快捷。
3、 系統實時性研究
3.1 線程池的引入
由于客戶端監控節點數量龐大,遠程監控端軟件面臨的連接請求繁重,次數統計如表 1 所示。為了保證對請求處理的實時性,必須采用多線程并發編程機制。
線程完成任務的時間包括三部分,創建時間(T1)、任務執行時間(T2)和銷毀時間(T3)。如果為每個任務創建新線程,那么當任務數量龐大時,系統花費在線程創建和銷毀上的時間將是不容小覷的,這會給系統帶來較大的處理延時。使用線程池可以緩解這樣的情況。圖 2 展示了為所有新任務創建新線程所用的時間與使用線程池來完成任務所用時間的比較圖。從圖中可以看出,當連接請求達到 105次的時候,多線程時間消耗為使用線程池所消耗時間的 10 倍左右。因此,采用線程池并發編程可以提高線程的重用性,減少不斷創建和銷毀線程帶來的開銷,在一定程度上提高系統的實時性。
3.2 線程池調度策略
系統為了處理請求,為每次連接分配一個任務線程,然而遠程監控軟件可能同時接收到較多的請求,加上線程池中存活線程數量有限,不能同時處理所有的請求,這些請求會在有空閑線程時隨機執行。當客戶端節點的請求長時間不能被處理時,數據異??赡苷谶@段時間里發生,導致系統無法準確的監測到數據異常,降低了系統的可靠性。為了改善這種狀況,我們設計了一個基于 priorityBlockingQueue(優先級阻塞隊列)的線程優先級調度策略來確??蛻舳税l送的請求在安全時間間隔內被系統處理。
系統接收連接請求,會根據 socket 對象以及請求客戶端最后一次被接收到數據的時間與當前時間差得到的優先級來創建一個任務(task),如果線程池中沒有空閑線程,即 runningThread數量等于 threadNum 時,將 task 加入 priorityBlockingQueue 中進行排隊等待;如果線程池中有一定數量的空閑線程,就從任務隊列中為空閑線程分配任務對象來執行。請求處理函數偽代碼如圖 3 所示:
為了比較線程池一般的調度算法與基于優先級阻塞隊列的調度算法在處理異常數據的實時性,我們設計了模擬實驗,實驗中假設客戶端以一定概率發送異常數據,如果異常數據在 20s內沒有被處理,就認為是異常數據處理遺漏現象,在現實中可能就會帶來災難事故。
對比數據如圖 4 所示,橫軸表示客戶端傳輸數據中異常數據的比率(excpRate = excp(異常數據量)/ allData(數據量)),縱軸表示系統的異常遺漏率(missRage =1- excpRec(接收到的異常數據量)/ excp(異常數據量))。由圖可知,當客戶端傳輸的異常數據比率在0.4%時,兩個算法的遺漏比率分別為0.086%和 0.038%,一般調度方法遺漏率是優先調度算法的兩倍左右。并且隨著異常數據率越大,倍數關系越大??梢娂尤雰炏日{度算法后可以有效降低異常遺漏率,提高系統的實時性和可靠性。
4、 系統安全性研究
4.1 權限設置與日志記錄
在客戶端軟件和遠程監控端軟件中分配了管理員和普通用戶兩種角色。普通用戶只可以查看監控數據,不能對系統的任何信息進行修改。管理員用戶擁有最高權限,這樣可以防止系統信息被肆意修改。日志記錄是在一些重要操作中記錄下操作用戶、操作時間和具體操作。當系統運行出現異常時,日志記錄文件有助于維護和調試。
4.2 數據有效性驗證
系統中的數據有效性驗證主要分為以下幾類:
數據完整性驗證:確保提交信息中特定的字段區域不能為空,以免在數據存儲進數據庫時發生錯誤。
數據唯一性驗證:對數據庫中唯一標示符所對應的字段進行唯一性驗證,避免插入數據庫時出現冗余異常。
數據格式正確性驗證:對特定信息格式的數據進行的驗證,例如郵件數據,電話號碼數據等。通過與相應的正則表達式匹配,判斷數據格式是否正確。
4.3 數據加密
系統中的數據主要通過兩種形式存儲:MySQL 數據庫以及文本。
數據庫數據加密:數據庫數據在插入和讀取時,分別調用MySQL 自帶的 ENCODE 和 DECODE 函數,對數據進行簡單加密和解密。沒有正確秘鑰時,查詢的數據將是亂碼。
文本數據加密:文本數據存儲的主要內容是溫度濃度數據以一定格式組成的字符串,因此選取了簡單對稱加密的 DES 算法,加密和解密使用共同的秘鑰。
5、 結束語
本系統經過測試,能夠正常的運行,實現了方便實用的設計目標,提供了多層次監控報警的功能。通過本系統,用戶可以在遠端對分散在不同地點的天然氣使用現場進行實時的監控,同時根據需要查看各個節點的數據曲線等。出現異常時,從報警器端到遠程監控軟件端都會產生報警,提醒用戶注意,此時用戶可以根據報警的級別采取相應的應對措施,從而盡早發現問題解決問題。
除了滿足功能上的需求外,系統也采用線程池、優先級調度算法、數據加密等方法來提高系統在實時性和安全性。在開發過程中,為增加新功能預留接口,便于系統的升級與維護。
參考文獻:
[1] 鄭敏 . 基于 Web 的氣象系統信息網絡遠程監控研究 [J]. 軟件,2012,33(6):131-132.
[2] 高鵬,蘇志遠 . 基于物聯網的遠程監控系統 [J].軟件,2012,33(12):74-77.
[3] 陳建峰 , 許豪杰 , 戴松世等 . 基于 C/S 多層結構的核磁共振成像設備遠程監控系統 [J]. 計算機應用 ,2011,31:3429-3933.
[4] 楊開杰 , 劉秋菊 , 徐汀榮 . 線程池的多線程并發控制技術研究 [J]. 計算機應用與軟件 , 2010,27\\(1\\):168-170,179.
[5] 路勇 . Java 多線程同步問題分析 [J]. 軟件,2012,33(4):31-33.
[6] 王溪波 , 于洋 , 于戈 . 基于優先級的 Java 線程喚醒機制研究與實現 [J]. 沈陽建筑大學學報 ,2008,24\\(2\\):328-331.
[7] 劉芳 . 一種數據庫加密系統的設計與實現 [J]. 軟件,2012,33(11):97-98.
[8] 張清華 , 鄧亞平 . 基于一種 DES 算法改進體制的研究 [J]. 計算機應用與軟件 , 2003,08:13-15.