赵振龙
(辽宁省水利水电勘测设计研究院有限责任公司,辽宁 沈阳 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)后期可将不同的安全监测系统数据库进行统一打通,开发定时整编工具,定时对安全监测数据库数据进行自动整理整编。