方 昱
(商洛水文水資源勘測中心,陜西 商洛 726000)
日、旬、月平均流量信息報送是水情工作的重要任務(wù)之一。平均流量數(shù)據(jù)不能直接獲取,需要通過計算獲得。傳統(tǒng)的計算方法是對一日不同時間觀測的水位對應(yīng)的流量采用算術(shù)平均法或面積包圍法進行計算得到日平均流量。進入汛期,人工觀測水位次數(shù)增加,特別是洪水期,水位變化起伏大,觀測數(shù)據(jù)要反映洪水變化過程,因觀測時距不等使用面積包圍法計算比較繁瑣,用時長、時效性差,計算過程中易出現(xiàn)錯誤,數(shù)據(jù)準(zhǔn)確性難保證。同時,對于水位漲落急劇的河流,人工觀測的水位計算出來的平均流量未必能夠真實反映河流的實際平均流量。
隨著水文自動化監(jiān)測設(shè)施的建成,水位觀測實現(xiàn)24 小時自動化在線監(jiān)測。水位自動采集、自動傳輸、自動入庫、自動檢索,時效性強、質(zhì)量高,為水文自動化打下基礎(chǔ)。水位自動采集數(shù)據(jù)密集,能真實反映河道洪水變化過程。利用入庫流量數(shù)據(jù),進行平均流量的自動計算,能確保時效性和準(zhǔn)確性,同時解放人力,提高測驗?zāi)芰ΑMㄟ^發(fā)揮現(xiàn)代科技的強大功能,可為水文工作帶來更加便捷的數(shù)據(jù)處理和信息提升技術(shù)。
在此背景下,本文通過在商洛水文中心從事水情工作的實踐,應(yīng)用Python、pymssql、JSON、SQL Server 等相關(guān)技術(shù),開發(fā)設(shè)計編寫日、旬、月平均流量的自動計算報送系統(tǒng)。
Python 是一門比較流行的編程語言,它提供了高效的數(shù)據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊?。使用Python3.7 版本可以兼容win7 及以上的系統(tǒng)和Windowsserver2008 及以上的系統(tǒng)。
pymssql 是一種SQL Server 的簡化數(shù)據(jù)庫接口,用于為Python 提供與SQL Server 連接的接口。使用該接口即可直接訪問SQL Server 數(shù)據(jù)庫,對數(shù)據(jù)庫中的數(shù)據(jù)進行查詢、修改等操作。
JSON 是JavaScript Object Notation 的簡稱,是一種輕量級的數(shù)據(jù)交互格式。使用JSON 格式的文件來存儲本系統(tǒng)所需要的相關(guān)數(shù)據(jù)可以避免使用文本文件存儲數(shù)據(jù)時由于空行或其他原因引發(fā)的一些未知錯誤。
SQL Server 數(shù)據(jù)庫是Microsoft 開發(fā)設(shè)計的一個關(guān)系數(shù)據(jù)庫智能管理系統(tǒng)(RDBMS),現(xiàn)在是全世界主流數(shù)據(jù)庫之一,它具備方便使用、可伸縮性好、相關(guān)軟件集成程度高等優(yōu)勢。
由于商洛水文水資源勘測中心所使用的數(shù)據(jù)庫本身就為SQL Server,故本次開發(fā)直接針對SQL Server 數(shù)據(jù)庫進行開發(fā)。
通過對平均流量的計算方法及工作要求的分析,開發(fā)設(shè)計了能夠?qū)崿F(xiàn)該工作的相關(guān)功能,包括:①定時觸發(fā)功能;②逐日平均流量計算功能;③旬、月平均流量計算功能;④自動報送平均流量入庫功能。
平均流量報送工作為每日8 時,要實現(xiàn)自動化計算并報送,系統(tǒng)就必須能夠根據(jù)時間自動觸發(fā)相關(guān)操作。該功能會不斷監(jiān)視系統(tǒng)的當(dāng)前時間,當(dāng)時間到達8 時整的時候,自動觸發(fā)計算及報送功能。
該功能為系統(tǒng)核心功能。該功能會直接從水情實時信息數(shù)據(jù)庫中讀取對應(yīng)測站在對應(yīng)時間段內(nèi)的流量數(shù)據(jù),然后計算出日平均流量?!端馁Y料整編規(guī)范》(SL/T 247-2020)中要求以面積包圍法求得的日平均流量作為標(biāo)準(zhǔn)值,因此本系統(tǒng)使用面積包圍法進行計算(見圖1),公式如下:
圖1 面積包圍法計算示意圖
式中:Q為日平均流量,m3/s;a、b、c…n為觀測時距,h;Q0、Q1、Q2…Qn為相應(yīng)時刻的瞬時流量,m3/s。
我看到一個忙碌的身影,抵達古樟后,他就和幾位攝影家一起,一直在順光與逆光等諸多因素中糾結(jié),想要為這次詩會找一個最佳的背景。
當(dāng)無0 時或24 時的瞬時流量時,應(yīng)根據(jù)前后相鄰流量直線插補求得。
水位及流量數(shù)據(jù)在進入水情實時數(shù)據(jù)庫之前由信息平臺對異常數(shù)據(jù)進行篩查,本系統(tǒng)只對數(shù)據(jù)完整性進行檢查。使用面積包圍法進行日平均流量計算時,需要有0 時和24 時的流量數(shù)據(jù),系統(tǒng)在讀取流量數(shù)據(jù)后,會自動檢查是否包含這兩個數(shù)據(jù)。如果讀取到的數(shù)據(jù)中沒有包含這兩個數(shù)據(jù),那么系統(tǒng)會讀取前一天的最后一條數(shù)據(jù)和計算當(dāng)日的第一條數(shù)據(jù)通過內(nèi)插法計算出0 時的流量數(shù)據(jù);讀取后一天的第一條數(shù)據(jù)和當(dāng)日計算時間的最后一條數(shù)據(jù)通過內(nèi)插法計算出24 時的流量數(shù)據(jù)。在數(shù)據(jù)通過完整性檢查后,系統(tǒng)會使用面積包圍法計算當(dāng)日的日平均流量。
《水文資料整編規(guī)范》中規(guī)定月平均流量以月內(nèi)各日日平均值的總數(shù)除以該月的日數(shù)得之。因此,程序會在每月的1 日、11 日、21 日8 時,先計算前一天的日平均流量,然后從數(shù)據(jù)庫中讀取對應(yīng)旬的每日日平均流量,最后使用算術(shù)平均法計算得到旬平均流量。在1 日8 時還會讀取上一月所有的日平均流量通過算數(shù)平均法計算得到上一月的月平均流量。
通過一系列計算后得到的平均流量數(shù)據(jù),系統(tǒng)會通過測站編碼、標(biāo)志時間和統(tǒng)計時段標(biāo)志來查詢該條流量數(shù)據(jù)是否已經(jīng)存在,若已經(jīng)存在則會取消插入;若對應(yīng)數(shù)據(jù)不存在,則會將平均流量信息插入到對應(yīng)的數(shù)據(jù)庫表中,達到自動報送的目的。這樣做是為了避免當(dāng)自動檢測設(shè)備出現(xiàn)故障時,人工錄入的數(shù)據(jù)被覆蓋的問題。
系統(tǒng)讀取的流量數(shù)據(jù)水情表為根據(jù)《實時雨水情數(shù)據(jù)庫表結(jié)構(gòu)與標(biāo)識符標(biāo)準(zhǔn)》(SL 323-2011)中河道水情表ST_RIVER_R 所建,見表1。
表1 河道水情表ST_RIVER_R 表結(jié)構(gòu)
系統(tǒng)在進行計算時,只需要讀取該表中的測站編碼STCD、時間TM 和流量Q 這三個字段即可進行日平均流量的計算。
系統(tǒng)報送平均流量的表為根據(jù)《實時雨水情數(shù)據(jù)庫表結(jié)構(gòu)與標(biāo)識符標(biāo)準(zhǔn)》(SL 323-2011)中河道水情多日均值表ST_RVAV_R 所建,見表2。
表2 河道水情多日均值表ST_RVAV_R 表結(jié)構(gòu)
系統(tǒng)在寫入數(shù)據(jù)時會寫入測站編碼STCD、標(biāo)志時間IDTM、統(tǒng)計時段標(biāo)志STTDRCD 和平均流量AVQ 這四個字段,平均水位AVZ 由于沒有下達任務(wù),所以沒有寫入實時數(shù)據(jù)庫。其中,統(tǒng)計時段標(biāo)志STTDRCD 是根據(jù)規(guī)范中所規(guī)定的對應(yīng)編碼,在寫入對應(yīng)時段統(tǒng)計類型的數(shù)據(jù)時寫入對應(yīng)的代碼。例如:日均流量的STTDRCD 代碼為1,旬均流量為4,月均流量為5。統(tǒng)計時段長及其代碼見表3。
表3 統(tǒng)計時段長及其代碼
圖2 系統(tǒng)JSON 格式配置文件
本系統(tǒng)的測站列表、報訊曲線以及數(shù)據(jù)庫相關(guān)配置信息均通過JSON 格式的文件來存儲,測站列表中前一個為測站編碼后一個為測站名稱,系統(tǒng)在計算時通過讀取配置中的測站編碼,然后到數(shù)據(jù)庫中查詢該站當(dāng)日計算所需要的水位信息。數(shù)據(jù)庫的相關(guān)配置也是寫在JSON 格式的文件中,此處不再羅列。系統(tǒng)界面見圖3。
圖3 系統(tǒng)運行界面
右上角時間為系統(tǒng)當(dāng)前時間,中間為系統(tǒng)日志,系統(tǒng)的每一次寫入或取消操作均會顯示在系統(tǒng)日志上,方便值班人員進行查看對比。當(dāng)系統(tǒng)遇到錯誤時,例如:流量數(shù)據(jù)已存在取消插入時,會用紅色字體醒目標(biāo)出進行提示,時間、測站信息、正常入庫的水位與流量等信息則會以藍(lán)色字體標(biāo)出。每一條信息都會標(biāo)注出時間戳,方便值班人員檢查系統(tǒng)時間是否有問題。
計算過程及報送過程全部在后臺進行,啟動系統(tǒng)時會直接執(zhí)行一次所有測站的前一日平均流量的計算及入庫操作,之后會在每日的8 時整自動觸發(fā)一次,不需要人工操作。值班人員只需要每日8 時后通過數(shù)據(jù)庫查詢系統(tǒng)查看報送的流量是否在合理范圍內(nèi),并與人工上報的平均流量進行對照。
本文設(shè)計并實現(xiàn)了一個可以自動計算報送平均流量的系統(tǒng),與傳統(tǒng)人工觀測計算并報送數(shù)據(jù)的方法相比較,本系統(tǒng)在自動監(jiān)測設(shè)施的支持下,可以通過更加密集的河道水情信息觀測,使得所計算的平均水位能夠更加真實地反映河道的實際情況,使平均流量數(shù)據(jù)更加準(zhǔn)確。同時,系統(tǒng)自動計算速度快、耗時少、計算結(jié)果準(zhǔn)確,可以減輕基層水文測站的一部分工作量,提升工作效率,降低失誤率。因此,本文所開發(fā)的系統(tǒng)具有一定的實用價值。
目前本文所介紹的系統(tǒng)已經(jīng)在商洛水文水資源勘測中心開展試驗運行,后續(xù)將對試驗所得到的數(shù)據(jù)繼續(xù)進行對比分析,來進一步驗證本系統(tǒng)的相關(guān)計算數(shù)據(jù)是否符合要求。