方 昱
(商洛水文水資源勘測中心,陜西 商洛 726000)
日、旬、月平均流量信息報送是水情工作的重要任務之一。平均流量數據不能直接獲取,需要通過計算獲得。傳統的計算方法是對一日不同時間觀測的水位對應的流量采用算術平均法或面積包圍法進行計算得到日平均流量。進入汛期,人工觀測水位次數增加,特別是洪水期,水位變化起伏大,觀測數據要反映洪水變化過程,因觀測時距不等使用面積包圍法計算比較繁瑣,用時長、時效性差,計算過程中易出現錯誤,數據準確性難保證。同時,對于水位漲落急劇的河流,人工觀測的水位計算出來的平均流量未必能夠真實反映河流的實際平均流量。
隨著水文自動化監測設施的建成,水位觀測實現24 小時自動化在線監測。水位自動采集、自動傳輸、自動入庫、自動檢索,時效性強、質量高,為水文自動化打下基礎。水位自動采集數據密集,能真實反映河道洪水變化過程。利用入庫流量數據,進行平均流量的自動計算,能確保時效性和準確性,同時解放人力,提高測驗能力。通過發揮現代科技的強大功能,可為水文工作帶來更加便捷的數據處理和信息提升技術。
在此背景下,本文通過在商洛水文中心從事水情工作的實踐,應用Python、pymssql、JSON、SQL Server 等相關技術,開發設計編寫日、旬、月平均流量的自動計算報送系統。
Python 是一門比較流行的編程語言,它提供了高效的數據結構,還能簡單有效地面向對象編程。使用Python3.7 版本可以兼容win7 及以上的系統和Windowsserver2008 及以上的系統。
pymssql 是一種SQL Server 的簡化數據庫接口,用于為Python 提供與SQL Server 連接的接口。使用該接口即可直接訪問SQL Server 數據庫,對數據庫中的數據進行查詢、修改等操作。
JSON 是JavaScript Object Notation 的簡稱,是一種輕量級的數據交互格式。使用JSON 格式的文件來存儲本系統所需要的相關數據可以避免使用文本文件存儲數據時由于空行或其他原因引發的一些未知錯誤。
SQL Server 數據庫是Microsoft 開發設計的一個關系數據庫智能管理系統(RDBMS),現在是全世界主流數據庫之一,它具備方便使用、可伸縮性好、相關軟件集成程度高等優勢。
由于商洛水文水資源勘測中心所使用的數據庫本身就為SQL Server,故本次開發直接針對SQL Server 數據庫進行開發。
通過對平均流量的計算方法及工作要求的分析,開發設計了能夠實現該工作的相關功能,包括:①定時觸發功能;②逐日平均流量計算功能;③旬、月平均流量計算功能;④自動報送平均流量入庫功能。
平均流量報送工作為每日8 時,要實現自動化計算并報送,系統就必須能夠根據時間自動觸發相關操作。該功能會不斷監視系統的當前時間,當時間到達8 時整的時候,自動觸發計算及報送功能。
該功能為系統核心功能。該功能會直接從水情實時信息數據庫中讀取對應測站在對應時間段內的流量數據,然后計算出日平均流量。《水文資料整編規范》(SL/T 247-2020)中要求以面積包圍法求得的日平均流量作為標準值,因此本系統使用面積包圍法進行計算(見圖1),公式如下:

圖1 面積包圍法計算示意圖
式中:Q為日平均流量,m3/s;a、b、c…n為觀測時距,h;Q0、Q1、Q2…Qn為相應時刻的瞬時流量,m3/s。
我看到一個忙碌的身影,抵達古樟后,他就和幾位攝影家一起,一直在順光與逆光等諸多因素中糾結,想要為這次詩會找一個最佳的背景。
當無0 時或24 時的瞬時流量時,應根據前后相鄰流量直線插補求得。
水位及流量數據在進入水情實時數據庫之前由信息平臺對異常數據進行篩查,本系統只對數據完整性進行檢查。使用面積包圍法進行日平均流量計算時,需要有0 時和24 時的流量數據,系統在讀取流量數據后,會自動檢查是否包含這兩個數據。如果讀取到的數據中沒有包含這兩個數據,那么系統會讀取前一天的最后一條數據和計算當日的第一條數據通過內插法計算出0 時的流量數據;讀取后一天的第一條數據和當日計算時間的最后一條數據通過內插法計算出24 時的流量數據。在數據通過完整性檢查后,系統會使用面積包圍法計算當日的日平均流量。
《水文資料整編規范》中規定月平均流量以月內各日日平均值的總數除以該月的日數得之。因此,程序會在每月的1 日、11 日、21 日8 時,先計算前一天的日平均流量,然后從數據庫中讀取對應旬的每日日平均流量,最后使用算術平均法計算得到旬平均流量。在1 日8 時還會讀取上一月所有的日平均流量通過算數平均法計算得到上一月的月平均流量。
通過一系列計算后得到的平均流量數據,系統會通過測站編碼、標志時間和統計時段標志來查詢該條流量數據是否已經存在,若已經存在則會取消插入;若對應數據不存在,則會將平均流量信息插入到對應的數據庫表中,達到自動報送的目的。這樣做是為了避免當自動檢測設備出現故障時,人工錄入的數據被覆蓋的問題。
系統讀取的流量數據水情表為根據《實時雨水情數據庫表結構與標識符標準》(SL 323-2011)中河道水情表ST_RIVER_R 所建,見表1。

表1 河道水情表ST_RIVER_R 表結構
系統在進行計算時,只需要讀取該表中的測站編碼STCD、時間TM 和流量Q 這三個字段即可進行日平均流量的計算。
系統報送平均流量的表為根據《實時雨水情數據庫表結構與標識符標準》(SL 323-2011)中河道水情多日均值表ST_RVAV_R 所建,見表2。

表2 河道水情多日均值表ST_RVAV_R 表結構
系統在寫入數據時會寫入測站編碼STCD、標志時間IDTM、統計時段標志STTDRCD 和平均流量AVQ 這四個字段,平均水位AVZ 由于沒有下達任務,所以沒有寫入實時數據庫。其中,統計時段標志STTDRCD 是根據規范中所規定的對應編碼,在寫入對應時段統計類型的數據時寫入對應的代碼。例如:日均流量的STTDRCD 代碼為1,旬均流量為4,月均流量為5。統計時段長及其代碼見表3。

表3 統計時段長及其代碼

圖2 系統JSON 格式配置文件
本系統的測站列表、報訊曲線以及數據庫相關配置信息均通過JSON 格式的文件來存儲,測站列表中前一個為測站編碼后一個為測站名稱,系統在計算時通過讀取配置中的測站編碼,然后到數據庫中查詢該站當日計算所需要的水位信息。數據庫的相關配置也是寫在JSON 格式的文件中,此處不再羅列。系統界面見圖3。

圖3 系統運行界面
右上角時間為系統當前時間,中間為系統日志,系統的每一次寫入或取消操作均會顯示在系統日志上,方便值班人員進行查看對比。當系統遇到錯誤時,例如:流量數據已存在取消插入時,會用紅色字體醒目標出進行提示,時間、測站信息、正常入庫的水位與流量等信息則會以藍色字體標出。每一條信息都會標注出時間戳,方便值班人員檢查系統時間是否有問題。
計算過程及報送過程全部在后臺進行,啟動系統時會直接執行一次所有測站的前一日平均流量的計算及入庫操作,之后會在每日的8 時整自動觸發一次,不需要人工操作。值班人員只需要每日8 時后通過數據庫查詢系統查看報送的流量是否在合理范圍內,并與人工上報的平均流量進行對照。
本文設計并實現了一個可以自動計算報送平均流量的系統,與傳統人工觀測計算并報送數據的方法相比較,本系統在自動監測設施的支持下,可以通過更加密集的河道水情信息觀測,使得所計算的平均水位能夠更加真實地反映河道的實際情況,使平均流量數據更加準確。同時,系統自動計算速度快、耗時少、計算結果準確,可以減輕基層水文測站的一部分工作量,提升工作效率,降低失誤率。因此,本文所開發的系統具有一定的實用價值。
目前本文所介紹的系統已經在商洛水文水資源勘測中心開展試驗運行,后續將對試驗所得到的數據繼續進行對比分析,來進一步驗證本系統的相關計算數據是否符合要求。