武學(xué)毅 劉 杰 張永嵩
(1.中國水利水電科學(xué)研究院,北京 100048;2.北京中水科工程集團(tuán)有限公司,北京 100048;3.內(nèi)蒙古自治區(qū)水利事業(yè)發(fā)展中心,內(nèi)蒙古 呼和浩特 010020;4.遼寧水利土木工程咨詢有限公司,遼寧 沈陽 110003)
全國共有水庫9.8萬座[1],其中小型水庫9.33萬座,小型水庫工程大壩變形監(jiān)測、滲流監(jiān)測、雨水情監(jiān)測覆蓋率低,自動化程度低,預(yù)警信息不暢,是當(dāng)前我國水利工程安全事故的主要隱患點(diǎn)[2]。目前,全國小型水庫信息化建設(shè)已有一定成效,但水平卻參差不齊,信息分散、資源整合不到位等現(xiàn)象仍較為普遍[3]。在小型水庫信息化平臺開發(fā)過程中,開發(fā)者通常面臨Web應(yīng)用擴(kuò)展開發(fā)困難、表單處理能力不足、數(shù)據(jù)庫開發(fā)要求較高等難題,這些問題同時(shí)導(dǎo)致系統(tǒng)運(yùn)行維護(hù)困難。如何便捷解決上述問題,提升小型水庫標(biāo)準(zhǔn)化、精細(xì)化和智慧化管理水平,為各級防汛減災(zāi)決策提供強(qiáng)有力的支撐[4],助力水庫矩陣管理,成為水利工程信息化系統(tǒng)開發(fā)需解決的一道難題。
Django框架是一個(gè)高級Python Web框架,其擁有自主管理后臺admin interface,自帶的ORM可以讓每條記錄都是一個(gè)對象,框架中的App可自由插拔[5],這些優(yōu)點(diǎn)將有利于解決水利工程信息化系統(tǒng)開發(fā)時(shí)遇到的困難。本文主要介紹基于Django框架的小型水庫雨量、水位、大壩滲壓等信息綜合展示平臺的研究與開發(fā)。
Python是現(xiàn)今世界上最受歡迎的語言之一,而Django則是基于Python的一個(gè)Web框架。目前全世界有超過8萬個(gè)網(wǎng)站采用Django架構(gòu)開發(fā)?;贒jango搭建的Web系統(tǒng)具備高速、高并發(fā)、高可擴(kuò)展性,能夠很好地處理海量的數(shù)據(jù)以及秒級多用戶交互。世界第二大搜索引擎YouTube采用Django處理高負(fù)載請求。Django具有優(yōu)秀的跨平臺能力,同樣的功能開發(fā)后,可以迅速地發(fā)布到各種移動端系統(tǒng)。Django框架后臺和客戶端是基于Python開發(fā)的,因此開發(fā)者能夠用Django快速增加諸如用戶歷史訪問、版本控制、多設(shè)備賬戶同步以及文件分享服務(wù)等功能。
Django采用了MTV(Model、Template and Views)的框架模式(見圖1)。Model負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫對象(ORM);Template負(fù)責(zé)如何把頁面展示給用戶;Views負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r(shí)候調(diào)用Model和Template。Django抽象集成了一般網(wǎng)頁開發(fā)的模式,只要建立項(xiàng)目,就會自動生成相關(guān)的文件以及配套設(shè)置,為搭建項(xiàng)目文件環(huán)境提供了快速的方式,減少重復(fù)代碼的使用,使開發(fā)者能夠?qū)W⒂谧约旱脑O(shè)計(jì)與實(shí)現(xiàn)[6]。
圖1 Django的MTV框架
基于Django的小水庫雨水工情一體化監(jiān)測平臺主要實(shí)現(xiàn)雨水情信息以及大壩安全監(jiān)測信息的收集、處理和展示功能。
雨水情信息包括數(shù)據(jù)查詢和圖形報(bào)表等功能,見圖2。主要實(shí)現(xiàn)對降雨量、庫水位、出入庫流量等數(shù)據(jù)的采集、整編分析、查詢和展示,以及過程線、柱狀圖、各時(shí)段報(bào)表的制作等,為洪水預(yù)報(bào)和科學(xué)調(diào)度等提供數(shù)據(jù)支持。
圖2 雨水情信息功能結(jié)構(gòu)
大壩安全監(jiān)測是掌控大壩運(yùn)行狀態(tài)的重要手段。安全監(jiān)測模塊包括數(shù)據(jù)查詢、圖形報(bào)表、報(bào)告生成等功能,大壩安全監(jiān)測信息功能結(jié)構(gòu)見圖3??蓪?shí)現(xiàn)對滲流壓力監(jiān)測數(shù)據(jù)的采集、整編、分析、查詢、下載和展示,以及自動生成安全監(jiān)測報(bào)告等,為大壩安全運(yùn)行提供支撐。
圖3 大壩安全監(jiān)測信息功能結(jié)構(gòu)
小水庫雨水工情一體化監(jiān)測平臺主要包括信息綜合展示模塊、后臺處理模塊、數(shù)據(jù)粗差處理模塊和滲壓分布展示模塊。
信息綜合展示主要是面向水庫運(yùn)行管理單位或防汛應(yīng)急管理相關(guān)單位提供水庫基礎(chǔ)信息和雨水工情監(jiān)測、預(yù)警信息,該模塊展示平臺見圖4。前端頁面中主要利用HTML、CSS和JS進(jìn)行設(shè)計(jì)樣式和可視化模塊布局,使用Ajax技術(shù)和Jason數(shù)據(jù)格式進(jìn)行前后端交互,通過Windows.setInterval()方法定時(shí)刷新頁面獲取最新監(jiān)測信息。Windows.setIntercal()函數(shù),主要功能為設(shè)置瀏覽器定時(shí)運(yùn)行函數(shù)代碼,比如設(shè)置瀏覽器多長時(shí)間按程序中的函數(shù)進(jìn)行一次計(jì)算。為明確本文平臺數(shù)據(jù)刷新時(shí)長采用的方法,此處指出采用的方法為“Windows.setIntercal()方法”。
圖4 雨水工情監(jiān)測信息綜合展示大屏界面
數(shù)據(jù)后臺主要通過Python語言進(jìn)行底層開發(fā),使用基于角色的權(quán)限管理模塊對用戶進(jìn)行分級管理,通過django-apscheduler模塊實(shí)現(xiàn)雨水情和大壩監(jiān)測數(shù)據(jù)的異步獲取,引入Python的Pandas庫,對監(jiān)測資料進(jìn)行數(shù)據(jù)分類、清洗、分析、異常判別、統(tǒng)計(jì)、預(yù)警和可視化輸出。完成開發(fā)后的監(jiān)測平臺數(shù)據(jù)管理頁面見圖5。Django框架自帶輕量級基于文件的數(shù)據(jù)庫SQLite,為了提高平臺的多用戶并發(fā)訪問性能,便于遠(yuǎn)程維護(hù)和數(shù)據(jù)庫備份,系統(tǒng)使用關(guān)系型數(shù)據(jù)庫MySQL進(jìn)行數(shù)據(jù)存儲,只需在Django的settings.py文件中設(shè)置ENGINE為django.db.backends.mysql即可實(shí)現(xiàn)數(shù)據(jù)庫引擎的切換。
圖5 監(jiān)測平臺后臺數(shù)據(jù)管理頁面
系統(tǒng)利用異常值統(tǒng)計(jì)檢驗(yàn)法進(jìn)行數(shù)據(jù)粗差處理。粗差的識別探測屬于數(shù)據(jù)異常檢測范疇[7],現(xiàn)有研究發(fā)現(xiàn)大壩安全監(jiān)測數(shù)據(jù)一般遵從正態(tài)分布特征[8],在統(tǒng)計(jì)學(xué)中,標(biāo)準(zhǔn)偏差σ是衡量一組測值的變化量或離散度的量度,μ是正態(tài)分布的位置參數(shù),描述正態(tài)分布的集中趨勢位置(見圖6)。某時(shí)刻測值落在(μ-3σ,μ+3σ)以外的概率小于千分之三。因此將每個(gè)測點(diǎn)的歷史數(shù)據(jù)樣本在正態(tài)分布以及小概率原理基礎(chǔ)上,按照3σ準(zhǔn)則[見式(1),xi在式(1)計(jì)算范圍內(nèi)為非異常值,否則判定為異常值]對數(shù)據(jù)異常點(diǎn)進(jìn)行判定。
圖6 數(shù)據(jù)樣本正態(tài)分布
[μ(xi-n,xi+n)-3σ(xi-n,xi+n)]≤xi≤
[μ(xi-n,xi+n)+3σ(xi-n,xi+n)]
(1)
式中xi——數(shù)據(jù)庫中某一物理量任一數(shù)據(jù);
μ(xi-n,xi+n)——數(shù)據(jù)序列f(xi-n,xi+n)樣本均數(shù),n取6;
σ(xi-n,xi+n)——數(shù)據(jù)序列f(xi-n,xi+n)標(biāo)準(zhǔn)差,n取6。
Echarts是一個(gè)使用JavaScript實(shí)現(xiàn)的開源可視化庫,底層依賴矢量圖形庫ZRender,提供直觀、交互豐富、可高度個(gè)性化定制的數(shù)據(jù)可視化圖表[9]。在大壩監(jiān)測斷面上展示滲壓分布需要開發(fā)者自定義編碼進(jìn)行繪制,包括大壩輪廓、設(shè)計(jì)水位、實(shí)際水位、測壓管輪廓、滲壓和浸潤線6個(gè)部分。
在繪制大壩剖面輪廓的時(shí)候,需要根據(jù)實(shí)際大壩圖紙的寬高,以及各關(guān)鍵點(diǎn)位的坐標(biāo)做數(shù)據(jù)的預(yù)處理。大壩高度、寬度及各關(guān)鍵點(diǎn)位坐標(biāo)計(jì)算完成后,以二維數(shù)組形式寫入series的data。
設(shè)計(jì)水位利用一條虛線繪制,起始點(diǎn)坐標(biāo)X=0,Y=設(shè)計(jì)水位,終點(diǎn)的橫坐標(biāo)X需要計(jì)算,計(jì)算方法是根據(jù)圖紙中的數(shù)據(jù)(按三角形處理)X=[(designFL-13.3)×33.9/13.3],Y=設(shè)計(jì)水位。并在虛線上用markpoint來標(biāo)識警示水位。實(shí)際水位使用類型為custom的填充模式,與大壩輪廓中type=‘line’的填充方式不同,這里包括了多邊形的繪制,關(guān)鍵之處為設(shè)置shape的points、return的編寫、data中3個(gè)點(diǎn)的坐標(biāo)計(jì)算。
測壓管的繪制方法同實(shí)際水位(圖7中的藍(lán)色部分)相同。該系統(tǒng)為了實(shí)現(xiàn)圖表顯示區(qū)可聯(lián)操作,各測壓管的滲壓水位為實(shí)測值,連成一條線就是大壩的浸潤線示意圖,這里設(shè)置smooth為0.4對曲線進(jìn)行了平滑處理。
圖7 大壩監(jiān)測斷面展示的滲壓分布、庫水位及浸潤線
內(nèi)蒙古扎敦水利樞紐是以一座以防洪、森林防火、供水為主,兼顧發(fā)電等綜合利用的工程。本文以扎敦水利樞紐工程監(jiān)測數(shù)據(jù)入庫、處理、整編、展示為工程案例,對平臺數(shù)據(jù)庫粗差處理、后臺管理、滲壓分布及綜合展示等功能進(jìn)行試驗(yàn)。
試驗(yàn)結(jié)果顯示,數(shù)據(jù)庫按算法設(shè)定的粗差處理原則,僅處理一個(gè)測點(diǎn)(數(shù)據(jù)2049條,錯(cuò)誤1條)準(zhǔn)確率在99.95%以上(見圖8),數(shù)據(jù)平臺反映時(shí)間為1ms,隨著處理數(shù)據(jù)量的增加,準(zhǔn)確率可進(jìn)一步提升(無異常監(jiān)測數(shù)據(jù)長序列過程線見圖9)。對于無浸潤線的混凝土重力壩,平臺內(nèi)實(shí)際水位處理算法可正常執(zhí)行,未報(bào)錯(cuò),滲壓分布展示模塊可以展示滲壓值,見圖10。采用基于Django框架的雨水工情監(jiān)測平臺,能準(zhǔn)確、高速處理監(jiān)測數(shù)據(jù),并動態(tài)展示數(shù)據(jù)成果。
圖8 有異常監(jiān)測數(shù)據(jù)長序列過程線
圖9 無異常監(jiān)測數(shù)據(jù)長序列過程線
圖10 平臺滲壓綜合展示界面
基于Django框架開發(fā)的雨水工情監(jiān)測平臺,可解決目前國內(nèi)小水庫雨水工情監(jiān)測平臺Web應(yīng)用擴(kuò)展開發(fā)困難、表單處理能力不足、數(shù)據(jù)庫開發(fā)要求較高等問題,實(shí)現(xiàn)小型水庫雨量、水位、大壩滲壓自動監(jiān)測和信息綜合展示功能。經(jīng)過工程數(shù)據(jù)驗(yàn)證,該平臺可靠、可高速運(yùn)行。目前研究開發(fā)的平臺在數(shù)據(jù)粗差處理算法方面還待進(jìn)一步優(yōu)化,還不具備孿生、預(yù)測功能,后續(xù)可在預(yù)測模型研究、搭建、平臺部署方面繼續(xù)發(fā)力。