程學俊 易廣軍 崔 沖
水電站工程安全監測多源數據集成技術研究
程學俊1易廣軍2崔沖2
(1.中國華能集團有限公司,北京 100031;2.中國電建集團西北勘測設計研究院有限公司,陜西 西安 710065)
隨著水電站智能化建設的深入開展,相關工程安全監測的自動化及工作性態監控成為重點工作之一,而實現工作性態監控的基礎是自動化數據的集成管理與分析。文章針對水電站自動化實施中數據來源多、存儲形式多樣、數據結構復雜的特點,給出了三個數據集成技術方案,研究對比了優缺點和適用場景。實際工程應用證明:靈活運用三個技術能夠快速滿足水電站智能化建設數據集成需求,使建設工作卓有成效。
水電站;安全監測;多源數據
水電是一種可再生清潔能源,是我國為優化能源結構大力開發的能源之一。為了安全高效地利用水電,水電站智能化建設日益受到重視,各種智能設備及其軟件系統陸續被部署,如在水電站安全監測方面,由不同公司采用不同軟硬件平臺和技術標準開發的眾多系統在新建或改造項目中應用。這些系統采集的數據以不同格式分散存儲于不同數據庫或磁盤文件中,形成了大量信息集合,獨立發揮著各自的作用。然而,受制于不同系統功能局限性,難以實時共享,形成了多源、離散的監測數據資源,矗立起一個個“數據煙囪”“信息孤島[1]”,逐漸成為水電站智能化建設的陣痛癥結。
從長遠發展來看,由于監測數據采集系統缺乏標準、規范的統一建模和數據結構定義,隨著監測儀器設備種類的增加,相應的專用采集系統也會持續增加,如近年廣泛使用的光纖光柵類儀器、柔性測斜儀、一體化氣象、一體化激光位移、智能外部變形測站等,均有專用的采集系統。因此,在業務應用中,數據的跨庫訪問是一大難題[2]:一方面,采集系統數據庫分而治之是現狀,也是業務需要,統一的數據標準尚未提出,有待進行深入梳理和探索;另一方面,一體的智能化管理與應用是目前的主要發展趨勢,迫切需要多源數據的集成——不僅能夠實現多源數據的有效整合,滿足智能化對基礎數據的需求,而且兼容現有的管理模式。
多源數據是指數據的結構、存取、形式不一樣的多個來源的數據,這里主要研究的是監測數據采集系統的數據源,如mysql、sqlserver、oracle、access和文本文件等。多源數據集成直接面向采集系統的原始數據或成果數據,將數據源中的數據復制到統一的數據源中,滿足數據共享、統一管理及分析決策的需要。
多源數據集成的關鍵是以統一的數據格式組織各類數據,屏蔽平臺、系統、環境、表現形式帶來的問題[3]。在實際的工程實踐中,主要使用數據庫同步、同步工具開發和服務接口開發三種方案進行集成。
工程安全監測數據庫同步常見的業務場景包括:將源數據庫表同步到目標數據庫;源數據庫表數據發生了增刪改,目標數據庫相關表增刪改對應數據;異地容災備份或雙主機備份的數據庫同步。
數據庫產品間的數據同步普遍存在一些痛點問題,如果解決不好,會影響數據同步的整體準確性和效果,以下針對不同情況給出了相應的解決方案。
(1)相同的數據表表結構。
因源表表結構與目的表結構相同,所以僅需要掌握表字段的類型并進行類型轉換,以解決類似Oracle的Number對應MySQL的數據類型的問題。同步任務開始前判斷目的表是否存在,若不存在,應依據源表表結構自動在目的庫創建出表,然后進行數據同步操作。提取源表的表結構,除了使用JDBC的Metadata接口外,更直接和準確的方式是查詢源庫的元信息表,比如對于Oracle數據庫可用以下查詢user_tab_columns表結構信息,將主鍵(包括聯合主鍵)、數據長度、精度、刻度、“是否為null”等信息一次性提取到位。對于MySQL也類似,可以從information_schema.columns元信息表提取。同步操作可以使用數據庫產品自帶的函數或工具實現。
(2)不同數據表表結構。
水電站安全監測數據由于來源多,源表表結構與目的表表結構往往差異很大,因此除了要掌握表字段的類型并進行類型轉換外,還要掌握表間字段的對應關系。
經綜合分析,可以將對應關系封裝為處理函數,在源數據庫系統中創建觸發器或設置定時作業計劃運行處理函數,實現數據的同步。
同步工具開發是基于對數據庫產品的連接,通過表間字段映射關系定時實現數據的增刪改操作同步,可根據需求支持access、sqlserver、mysql、oracle、db2、sybase等數據庫產品。通過配置需要進行同步的數據,增加快速事務處理能力,提供百萬級數據記錄的同步能力,一般功能包括:
(1)不同數據庫表之間數據的同步或增量同步功能;
(2)以任務(新增任務,刪除任務,修改任務)執行同步操作;
(3)同步任務的調度設置(立即執行,定時,或以固定時間間隔方式執行);
(4)同步執行報告查看;
(5)支持添加、修改、刪除記錄、執行存儲過程等操作。
同步工具一般可作為一個獨立的程序或服務運行,具有通用、穩定、可配置、可擴展的良好性能。比如在可配置性能方面,可采用文本或JSON文件配置。某監測數據庫的同步配置如下。
該配置項不僅明確了以測點編號對應關系同步數據,而且對于字段間的測值轉換公式、結果保留小數位數設計了配置項,能夠滿足大多數監測系統數據的同步需求。
基于服務的多源異構數據整合的思路是:不強求物理上的集中,而是保持企業數據的分布現狀,將各個系統的數據通過接口包裝成服務,注冊到企業服務總線,通過企業服務總線提供統一的數據服務,從而實現數據在邏輯上的整合。
企業服務總線需要進行頂層設計,對監測數據的集成有充分的設計考慮,否則在實施時容易妥協使用前兩種方案的混合形式,反而增加了系統的復雜性。
如表1所示,三個多源數據集成方案在實施前都需要明確源數據庫與目標數據庫的關系,深入掌握源數據的存儲方式、數據表結構、字段組成和表間關系等情況,一個數據源設計一套配置方案,也可綜合分析源數據庫,對差別較小的多源數據設計一套通用的配置方案。在具體實施時,三個方案都可以通過“變化數據捕獲CDC(Change Data Capture)”技術實現數據的抽取,提高處理效率。但是,CDC技術常用的方法如時間戳、快照、觸發器在進行同步操作時都會影響源數據系統的性能。在數據實時性要求較高的集成系統中,這種影響最小的是以觸發器方法為基礎的數據庫同步方案。這個方案僅在所關注的數據庫表發生變化時才啟動數據庫操作,不會產生多余的查詢操作。
從對源數據系統的侵入性來看,數據同步方案需要在數據庫系統中添加處理程序,有時甚至要在源數據庫系統中添加觸發器、存儲過程或作業,侵入性較強,相關供應商出于自身系統的穩定性或數據的安全性考慮,往往比較抵制該方案的實施。其它兩個方案僅需要提供數據庫訪問權限即可實施,對源數據系統的侵入性較弱。
從集成技術難易程度和開發周期來看,由于數據庫同步方案可以充分利用源數據系統的查詢處理功能,所以,需要掌握的技術難度較小,開發周期短。同步工具開發方案需要開發獨立的處理程序,技術難度次之,開發周期較短;服務接口開發方案需要針對不同的數據庫或文件開發查詢服務程序,然后發布服務供前端業務界面調用,技術難度最高。
從推廣應用角度來看,數據庫同步方案在部署時需要將程序分類嵌入源數據庫系統,異常調試依賴源數據庫系統功能,程序源碼容易被修改,版本不易控制,推廣應用性不好。通用、健壯的同步工具的部署和維護比較方便,可以根據目標數據庫靈活配置,運行后用戶無需過多干預,能夠實現自我健康檢查、自動重啟、異常提醒與統計分析等智能功能,推廣應用性好。服務接口在推廣應用時需要配備相應的前端程序。

表1 方案對比表
某水電站安全監測工程采用GNSS、測量機器人、靜力水準、谷幅弦線、大壩倒垂等監測系統進行自動化監測,來實現安全管理“風險識別自動化、決策管理智能化”。為提高應急響應能力,需要對各系統的采集數據進行集中統一管理。
經分析,5套采集系統用了三種數據庫產品,各數據表結構均不相同,其中測量機器人、靜力水準和大壩倒垂系統均用的是sqlserver;GNSS系統數據庫為access;谷幅弦線系統數據庫為mysql;測量機器人和大壩倒垂系統為多主鍵,需要聯合多表查詢關鍵數據,如表2所示。

表2 系統存儲的數據庫類型表
該工程分三個階段開展了相關集成工作。
第一階段,為了快速滿足集成要求,決定采用數據庫同步方式進行集成,兩周內完成,其主要技術路線如下。
(1)集成數據庫采用多數采集系統使用的sqlserver作為集成存儲數據庫。
(2)采用sqlserver的鏈接服務器連接各系統數據庫。
鏈接服務器可以對 OLE DB 數據源進行分布式查詢,并且可以聯接來自多個數據源的表進行查詢。
在查詢編輯器中,輸入以下 Transact-SQL 命令鏈接到實例:
//建立與GNSS系統的access數據庫鏈接
EXEC sp_addlinkedserver --添加鏈接服務器
@server = N'MYA', --鏈接服務器名稱
@provider=N'Microsoft.ACE.OLEDB.16.0', --源數據庫提供程序為Access
@datasrc=N'C: est.accdb' –源數據
GO
//建立與測量機器人、靜力水準、大壩倒垂系統的sqlserver數據庫的鏈接,以大壩倒垂系統為例
EXEC sp_addlinkedserver --添加鏈接服務器
@server = N'LSdamsafety2017', --鏈接服務器名稱
@provider=N'SQLNCLI', --源數據庫提供程序為sqlserver
@datasrc=N'localhost' –源數據庫服務器,可以為IP地址
GO
//建立與谷幅弦線mysql數據庫的鏈接
EXEC sp_addlinkedserver --添加鏈接服務器
@server = N'LSznygfjc' , --鏈接服務器名稱
@provider=N'MSDASQL', --源數據庫提供程序為mysql
@datasrc=N'ooznygfjc', --源數據庫DNS名稱
@provstr=N'DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;DATABASE=znygfjc;UID=root;PORT=3306;' --源數據庫庫鏈接字符串,包括服務器地址、數據庫名稱、用戶名、端口
(3)創建存儲過程。
為每個系統創建一個存儲過程,以便定時任務可執行,以大壩倒垂系統為例:
CREATE PROCEDURE FetchDataChuiXian
@dt nvarchar(max)='2021-5-1',@valueTableName varchar(max)='VALUE_112200012',
@nTotal int out,
@nAdded int out
AS
BEGIN
SET NOCOUNT ON;
declare @query nvarchar(max)='select CODE_ID,WATCH_ TIME, COMP4,COMP6 from openquery (LSdamsafety2017, '+''''+'select * from [nzxDamsafety2017].[dbo]. ['+@valueTableName+'] where WATCH_TIME>'''''+@dt+''''''')'
declare @point nvarchar(10),@epoch datetime,@MX float,@MY float
declare @id int,@num int
CREATE TABLE #Tzhineng(point nvarchar(10),epoch datetime,MX float,MY float);
INSERT INTO #Tzhineng EXEC(@query);
--測值臨時表
CREATE TABLE #TobservationalDatasTemp(surveypointid int,observationaldate datetime)
INSERT INTO #TobservationalDatasTemp EXEC('select surveypointid,observationaldate from tobservationaldatas where observationaldate>''' +@dt+'''');
----定義動態游標
declare @sql nvarchar(max) = 'declare abc CURSOR for select * from #Tzhineng'
----創建動態游標
EXEC(@sql)
----打開游標
OPEN abc
set @nAdded=0
set @nTotal=0
FETCH NEXT FROM abc INTO @point,@epoch,@MX, @MY
WHILE @@fetch_status = 0
begin
--select @st_nm,@point,@epoch,@MX,@MY
--從配置表查找對應測點編號
select @id=( select id from surveypointPark where point=@point)
--查找是否已存在相同日期的記錄
select @num=(select COUNT(*) from #TobservationalDatasTemp where surveypointid=@id and observationaldate=@epoch)
if @id is not null and @num=0
begin
insert into PB.TObservationalDatas(observationalDate, surveypointid,creationTime,isdeleted,F1,F2)values(@epoch,@id,GETDATE(),0,@MX,@MY)
set @nAdded=@nAdded+1
end
set @nTotal=@nTotal+1
FETCH NEXT FROM abc INTO @point,@epoch,@MX, @MY
end
----清除游標
CLOSE abc
DEALLOCATE abc
----清除臨時表
DROP TABLE #Tzhineng
drop Table #TobservationalDatasTemp
END
GO
(4)定時任務。
在sqlserver管理->維護計劃中新建維護計劃,順序執行為各系統創建的存儲過程,即可完成數據的同步。
第二階段,為了減少對源數據庫的侵入性,開發同步工具替代數據庫同步方法。各系統運行穩定后,一月內完成。主界面和配置界面的設計可見圖1、圖2設計,其中,主界面列出了同步任務,每個任務都可以通過設置的交互完成。

圖1 同步工具主界面設計參考

圖2 同步工具配置界面設計參考
第三階段,封裝接口,與已有壩群監控系統聯調,提供統一的數據服務,一月內完成,如圖3所示,是部分服務接口。

圖3 服務接口列表示例
近年來,隨著水利工程補短板、水利行業強監的全面落實,水電站安全監測的智能化發展步伐加快,越來越多的水電站開始進行自動化、智能化的改造,在實施過程中,不僅要謹慎處理原有系統的數據集成問題,還要統籌做好新系統的頂層設計,合理解決數據來源多、存儲形式多樣、數據結構復雜等問題,靈活運用三個數據集成技術方案,能夠快速滿足水電站智能化建設數據集成需求,使建設工作卓有成效。
[1] 馮漢夫,石爽,馬琴,等. 智能化水電站建設的思考[J].水電與抽水蓄能,2010,34(6): 1-4.
[2] 張文,陳雅莉,徐小迪,等. 水利數據多庫智能整合機制研究與應用[J]. 水利信息化,2018(6): 21-26.
[3] 王罡,劉敬文,李國鵬. 基于多源異構數據融合的綜合管廊電力艙系統保護[J]. 電力系統保護與控制,2021,49(7): 103-109.
Research on Multi-Source Data Integration Technology for Safety Monitoring of Hydropower Station Projects
With the in-depth development of intelligent construction of hydropower station, the automation of safety monitoring and working performance monitoring of related projects have become one of the key tasks, and the basis of realizing working performance monitoring is the integrated management and analysis of automatic data. Aiming at the characteristics of multiple data sources, various storage forms, and complex data structure in the implementation of hydropower station automation, three data integration technical schemes are given, the advantages and disadvantages and applicable scenarios are studied and compared. The practical engineering application shows that the flexible application of the three technologies can quickly meet the needs of intelligent construction data integration of hydropower station and make the construction work fruitful.
hydropower station; safety monitoring; multi-source data
TV7
A
1008-1151(2022)01-0001-04
2021-11-12
程學俊(1980-),男,中國華能集團有限公司規劃部基建管理處副處長,高級工程師,從事水利水電工程、新能源、清潔能源基本建設管理。