趙振龍
(遼寧省水利水電勘測設計研究院有限責任公司,遼寧 沈陽 110006)
工程安全監測作為工程管理工作的耳目,有助于及早發現工程中可能存在的問題與隱患,保障水工建筑物持久安全的運行。對安全監測數據進行科學的整編分析,不僅可以使運行人員及時掌握工程的運行狀態,而且對工程的安全預報、預警安全狀態估都起到重要支撐作用。某省重點輸供水工程由水源工程和輸水工程兩部分組成。安全監測儀器設施裝與工程主體建筑施工同步進行。監測對象涵蓋有壓/無壓隧洞、壓力管線、取水口、調壓井、鎮支墩、高邊坡、各類閥井等要素。由于工程分4個分段建設,各分段都建設了獨立的安全監測系統且互不兼容,故工程運行期需將4個分段的安全監測數據進行統一數據整編與分析,下面將結合實際項目,論述長距離調水工程安全監測數據整編技術。
當下安全監測數據整編與分析工作很依賴信息化技術及系統提供商。由于系統提供商專業技術能力不足,其整編與分析往往存在深度不夠、針對性差等問題。傳統設計單位雖然專業分析能力強,但由于工程設計人員信息化技術欠缺,面對海量數據,往往束手無策。
本次數據整編與分析工作由具有豐富工程設計經驗及軟件開發技術的一線工作人員負責,以解決上述矛盾。在整編過程中發現如下實際問題。
(1)由于工程安全監測系統根據工程進度分4段進行建設,各段工程特點不同、監測對象不同,系統交付進度不統一,導致如下問題:安全監測數據較為分散;安全監測數據記錄方式各異,例如數據庫、Excel文件、報告等;各系統數據庫表單結構差異大,例如命名方式、單位、Excel數據格式樣式等。
(2)安全監測儀器數量及種類多,導致數據處理量大,具統計監測數據總條目高達3000多萬。
(3)部分儀器采集頻次過高,單儀器數據條目數可達百萬,導致原有安全監測系統監測過程線生成時會系統崩潰;大量儀器上傳Null值,導致安全監測過程線生成出現故障。
(4)數據庫儀器表單、監測數據表單、安全監測通水驗收報告在儀器個數上存在出入,個別名稱存在差異。
(5)水位、流量采集時間不統一,不利于日后水位流量關系分析。
綜上,同時考慮傳統Excel方式處理海量數據效率低下問題,本次數據整編采用數據庫及部分數據治理相關技術。為方便分析階段儀器信息查詢、過程線查詢、水位分析、糙率分析、安全評估等相關工作的進行,在完成數據整編處理的同時需對監測數據進行可視化。
為減少技術棧、精簡人員投入、降低學習成本、提升效率,本次整編主要基于單一語言JavaScript展開。數據處理采用數據庫+NodeJS,可視化系統后端采用Postgres+NodeJS+express框架,可視化系統前端框架主要采用Vue+element-plus框架,具體數據整編技術框架如圖1所示。

圖1 數據整編技術框架
本次整編通過6個維度考量監測儀器運行狀態,并按段整理成表格存入數據庫。6個維度分別為監測儀器信息統計表、監測儀器末端時間統計表、儀器在線率統計表、Null值表、儀器超量程統計表、特征值統計表。
考慮部分安全監測儀器采集頻次過高,單儀器數據條目數可達十幾萬~上百萬,為方便可視化系統生成過程線,對監測數據進行了抽稀。為了提高抽稀數據的代表性,抽稀原則為按天抽稀,并提取每天最大值及最小值,生成監測數據簡化表,并存儲入庫。
本次數據整編,部分工程段有較為完善的水位流量監測數據,為了解水位與流量的對應關系,便于日后的糙率分析,本次整編提取提取每日12∶00時刻的水位與流量數據并建表入庫。鑒于水位與流量監測儀器數據上傳時間不統一,大量數據上傳時刻并不嚴格卡在12∶00,本次數據提取采樣區間為11∶50—12∶10,以區間內的平均值代表12∶00時刻的水位與流量數據。
各類表單含義如下。
(1)監測儀器信息表(DmList)。各類監測儀器相關信息的統計表,包括段、采集站、斷面、儀器名稱、儀器類型、量程等相關信息,其中IsNoData列表征整編起始時間后該儀器是否有數據,為TRUE表征為無數據。
(2)斷面信息表(DmInfo)。各個監測斷面的相關信息的統計表。包括監測斷面安裝圖(記錄url地址數組),斷面地質信息。
(3)監測儀器末端時間統計表(LastDateList)。儀器最后一次上傳數據時間的統計表。
(4)儀器在線率統計表(RadioList)。整編時間內儀器在線率的統計表,其中Ratio1列表示儀器在整個整編時間區間內儀器在線天數占比,Ratio2表示整編開始時間至儀器最后一次上傳數據時間區間內在線天數占比。
(5)Null值表(NullList)。整編時間內儀器上傳空數據的次數的統計表。
(6)儀器超量程統計表(OverRangeList)。整編時間內儀器上傳超儀器量程數據的次數的統計表。
(7)特征值統計表(TeZhengZhiList)。整編時間內儀器各類特征值表,包括平均值、最大值、最小值、方差。
(8)監測數據按天簡化表(JianceDataSimplify)。整編時間內儀器每天上傳數據的最大值與最小值統計表。
(9)水位流量數據表(waterList)。提取有數據的水位與流量數據,每日12∶00∶00時刻的水位、流量等數據的表格。
儀器最后一次上傳數據時間遠小于或大于整編末尾時間、儀器上傳Null次數過多、儀器上傳超量程數據過多、儀器在線天數過低均為可能存在問題的儀器。
對于有安全監測系統,并有安全監測數據庫的監測段直接拷貝完整數據庫文件進行入庫。
對于提供海量Excel數據的監測段,需將Excel數據導入數據庫中,然后進行提取分析。
導入數據庫生成的字段名及格式如圖2所示。

圖2 數據入庫格式信息
以導入Excel數據為例,其中SensorCode為儀器編號,SensorName為儀器名稱,Time為儀器上傳數據時間,F1~F9為各儀器回傳的數據,如基本模數、基準溫度、靈敏度系數、測值等,不同類型儀器F1~F9的所代表的含義存在一定差異。本次數據導入工具為開源軟件DBeaver。
儀器信息表梳理是整編工作能否順利進行的重要前提,后續各儀器的數據整理都需要遍歷查詢儀器信息表。對于施工期監測或臨時監測等環節存在各段通水驗收報告中儀器個數和數據庫中的儀器個數不一致的情況,為保證整編儀器的唯一性,本工程整編以數據庫中監測數據表(存儲所有儀器監測數據的表單)中所包含的儀器數據為準。為保證表中各個字段內容、單位的準確性,表單內容需要與監測驗收報告、監測竣工圖等相互校對。
儀器信息表主要字段包括段(duan)、采集站(caijizhan)、斷面(duanmian)、儀器編號(sensorcode)、儀器名稱(sensorname)、斷面位置(location)、量程(range)、單位(unit)、與量程相關的結果在所有儀器上傳的數據表中的字段名(rangeres)、與監測值相關的結果在所有儀器上傳的數據表中的字段名(res)、整編時間段內儀器是否有數據(isnodata)等。
本表的梳理主要依靠人工完成。但對于表單isnodata字段內容需通過編寫代碼進行實現。示例代碼如下:
// 1 查詢數據庫中沒有數據的儀器
(async()=> {
await sql.connect(sqlConfig);
const result=await sql.query(
"select SensorCode from SensorDate sd group by SensorCode"
);
for(let item of result.recordset){
sql
.query(`select * from DmList where SensorCode='${item.SensorCode}`)
.then((res)=> {
if(!Object.values(res.recordset[0])[0]){
arr.push(item);
NoDataList.create(item);
}
});
}
})();
// 2 在DmList中標記哪些無數據
(async()=> {
await sql.connect(sqlConfig);
const result=await sql.query("select SensorCode from NoDataList");
for(let item of result.recordset){
await DmList.update(
{ IsNoData:"true" },
{ where:{ SensorCode:item.SensorCode } }
);
}
})();
斷面信息表主要整編各個監測斷面的相關信息。通過唯一的斷面號,實現與儀器信息表的關聯查詢。斷面信息表主要內容包括監測斷面安裝圖(記錄url地址數組)、斷面地質信息。
在整編完成儀器信息表的基礎上,將監測儀器末端時間統計表、儀器在線率統計表、Null值表、儀器超量程統計表、特征值統計表、儀器數據按天簡化表、水位流量數據表等整編入庫。整編主要通過編寫代碼進行實現,主要思路為循環嵌套。外部循環為遍歷儀器信息表(DmList),內部循環主要為遍歷每條監測數據,按各表不同要求對數據進行針對性處理提取。以儀器數據按天簡化表(JianceDataSimplify)為例,外部循環為遍歷儀器信息表(DmList)并按日期分組查詢儀器每天的最大值、最小值、日期,內部循環為補充每條查詢結果的儀器編號。示例代碼如下:
// 生成儀器數據按天簡化表
(async()=> {
await sql.connect(sqlConfig);
const res=await sql.query("SELECT * from DmList where IsNoData !='true’ ");
for(let item of res.recordset){
const res2=await sql.query(
`select YYYYMMDD,MAX(${item.Res})as MaxRes,min(${item.Res})as MinRes from JianCeData where SensorCode='${item.SensorCode}' group by YYYYMMDD`
);
let arr=[];
for(let item2 of res2.recordset){
let obj={…item2 };
obj.SensorCode=item.SensorCode;
arr.push(obj);
}
await JianCeDataSimplify.bulkCreate(arr);
}
})();
本次整編采用循環嵌套的處理方式,除JiancedataSimplify處理時間較長(約30min)左右,其余處理時間均在5min之內。
安全監測數據可視化系統后端采用Postgres+NodeJS+express框架,前端框架主要采用Vue+element-plus框架。頁面風格采用常見的開源后臺admin風格。
主要功能模塊包括工程概述、監測數據、系統管理三大模塊。
3.5.1 工程概述
通過頁面展示各段工程并進行簡要概述。
3.5.2 監測數據
本模塊主要包含各段特征值查詢、過程線查詢、水位分析3個模塊。
(1)特征值查詢。介紹各段的整編時間區間,并對監測儀器信息表、末端時間統計表、儀器在線率統計表、Null值表、儀器超量程統計表、儀器特征值表6類表單進行展示,并可按字段對表單進行升降序排序,同時可通過斷面信息表跳轉查看各個監測斷面的詳細安裝圖、地質信息等相關信息。如圖3所示。

圖3 特征值查詢頁面
(2)監測儀器過程線。點選各個監測儀器,提供多選功能,確認查看后可查看儀器整編時間區間內每日最大值過程線、最小值過程線,過程線可進行局部放大與縮小調節。如圖4所示。

圖4 過程線查詢頁面
(3)水位分析。本模塊對水位流量數據進行統計分析,為糙率分析提供必要支撐。①按時間查詢。列表展示每日固定同一時間區間內有流量與水位數據的時間表,點擊可查看本時間各個斷面的流量、水位與水深。②按斷面查詢。列表展示各個水位監測斷面,點擊可查看生成選擇斷面不同時間段的流量、水位、水深,并生成水位流量關系方程。如圖5所示。

圖5 按斷面查詢頁面
對整個工程安全監測數據及資料進行整編入庫,可在詳細分析安全監測數據前,快速掌握儀器的工作狀態,發現明顯異常現象,為安全監測系統的運維提供幫助。結合儀器實際運行狀態,總結如下幾點異常現象。
(1)安全監測儀器監測頻次不合理。儀器監測頻次過高,遠高于規范要求,大量儀器頻次為30min/次,個別達1min/次,致使監測數據表異常龐大,原有安全監測系統在查看過程線時系統崩潰。
(2)水位與流量監測數據上傳時間設置不合理。水位與流量監測數據上傳時間不一致,不利于總結水位流量關系及后期水力反演分析。
(3)隧洞段安全監測系統穩定性高于管線段。整體安全監測儀器安裝5~6a,無壓洞段安全監測儀器整編區間內有數據的儀器占比為100%,在線天數占比30%~70%;管線段整編區間內有數據的儀器占比為77%,在線天數占比僅為0%~20%的儀器高達55%。
(4)振弦式儀器穩定性高于光柵式。以管線段為例,光柵式儀器最后上傳數據時間多為2019年3—9月,振弦式儀器至今仍有數據上傳。主要考慮為二者安裝與維護的差異所導致。
(5)存在一定超量程的現象。以管線段為例,超量程儀器個數為34支,占比5.8%。其中個別為安裝環境與量程不匹配,其它需在后續數據分析階段重點關注。
(1)利用信息化技術,對整個工程的安全監測儀器進行統一整理入庫,并完成數據的可視化,可為后續的數據分析提供有力支撐。
(2)本次數據整編與分析人員為一線設計人員,綜合考慮數據整編分析及數據可視化相關工作所需的開發技術,整體采用基于JavaScript語言的前端框架。采用開源軟件及成熟的技術框架,可大大降低學習成本,提高工作效率。
(1)對于數據回傳異常的安全監測儀器進行及時處理,同時合理設置安全監測儀器的采集頻次及數據上傳時間。
(2)后期可將不同的安全監測系統數據庫進行統一打通,開發定時整編工具,定時對安全監測數據庫數據進行自動整理整編。