基于Django的小水库雨水工情一体化监测平台研究与开发
2024-05-15武学毅张永嵩
武学毅 刘 杰 张永嵩
(1.中国水利水电科学研究院,北京 100048;2.北京中水科工程集团有限公司,北京 100048;3.内蒙古自治区水利事业发展中心,内蒙古 呼和浩特 010020;4.辽宁水利土木工程咨询有限公司,辽宁 沈阳 110003)
全国共有水库9.8万座[1],其中小型水库9.33万座,小型水库工程大坝变形监测、渗流监测、雨水情监测覆盖率低,自动化程度低,预警信息不畅,是当前我国水利工程安全事故的主要隐患点[2]。目前,全国小型水库信息化建设已有一定成效,但水平却参差不齐,信息分散、资源整合不到位等现象仍较为普遍[3]。在小型水库信息化平台开发过程中,开发者通常面临Web应用扩展开发困难、表单处理能力不足、数据库开发要求较高等难题,这些问题同时导致系统运行维护困难。如何便捷解决上述问题,提升小型水库标准化、精细化和智慧化管理水平,为各级防汛减灾决策提供强有力的支撑[4],助力水库矩阵管理,成为水利工程信息化系统开发需解决的一道难题。
Django框架是一个高级Python Web框架,其拥有自主管理后台admin interface,自带的ORM可以让每条记录都是一个对象,框架中的App可自由插拔[5],这些优点将有利于解决水利工程信息化系统开发时遇到的困难。本文主要介绍基于Django框架的小型水库雨量、水位、大坝渗压等信息综合展示平台的研究与开发。
1 系统设计
1.1 系统架构技术
Python是现今世界上最受欢迎的语言之一,而Django则是基于Python的一个Web框架。目前全世界有超过8万个网站采用Django架构开发。基于Django搭建的Web系统具备高速、高并发、高可扩展性,能够很好地处理海量的数据以及秒级多用户交互。世界第二大搜索引擎YouTube采用Django处理高负载请求。Django具有优秀的跨平台能力,同样的功能开发后,可以迅速地发布到各种移动端系统。Django框架后台和客户端是基于Python开发的,因此开发者能够用Django快速增加诸如用户历史访问、版本控制、多设备账户同步以及文件分享服务等功能。
Django采用了MTV(Model、Template and Views)的框架模式(见图1)。Model负责业务对象与数据库对象(ORM);Template负责如何把页面展示给用户;Views负责业务逻辑,并在适当的时候调用Model和Template。Django抽象集成了一般网页开发的模式,只要建立项目,就会自动生成相关的文件以及配套设置,为搭建项目文件环境提供了快速的方式,减少重复代码的使用,使开发者能够专注于自己的设计与实现[6]。
图1 Django的MTV框架
1.2 功能描述
基于Django的小水库雨水工情一体化监测平台主要实现雨水情信息以及大坝安全监测信息的收集、处理和展示功能。
雨水情信息包括数据查询和图形报表等功能,见图2。主要实现对降雨量、库水位、出入库流量等数据的采集、整编分析、查询和展示,以及过程线、柱状图、各时段报表的制作等,为洪水预报和科学调度等提供数据支持。
图2 雨水情信息功能结构
大坝安全监测是掌控大坝运行状态的重要手段。安全监测模块包括数据查询、图形报表、报告生成等功能,大坝安全监测信息功能结构见图3。可实现对渗流压力监测数据的采集、整编、分析、查询、下载和展示,以及自动生成安全监测报告等,为大坝安全运行提供支撑。
图3 大坝安全监测信息功能结构
2 功能研发和实现
小水库雨水工情一体化监测平台主要包括信息综合展示模块、后台处理模块、数据粗差处理模块和渗压分布展示模块。
2.1 综合展示模块
信息综合展示主要是面向水库运行管理单位或防汛应急管理相关单位提供水库基础信息和雨水工情监测、预警信息,该模块展示平台见图4。前端页面中主要利用HTML、CSS和JS进行设计样式和可视化模块布局,使用Ajax技术和Jason数据格式进行前后端交互,通过Windows.setInterval()方法定时刷新页面获取最新监测信息。Windows.setIntercal()函数,主要功能为设置浏览器定时运行函数代码,比如设置浏览器多长时间按程序中的函数进行一次计算。为明确本文平台数据刷新时长采用的方法,此处指出采用的方法为“Windows.setIntercal()方法”。
图4 雨水工情监测信息综合展示大屏界面
2.2 后台管理模块
数据后台主要通过Python语言进行底层开发,使用基于角色的权限管理模块对用户进行分级管理,通过django-apscheduler模块实现雨水情和大坝监测数据的异步获取,引入Python的Pandas库,对监测资料进行数据分类、清洗、分析、异常判别、统计、预警和可视化输出。完成开发后的监测平台数据管理页面见图5。Django框架自带轻量级基于文件的数据库SQLite,为了提高平台的多用户并发访问性能,便于远程维护和数据库备份,系统使用关系型数据库MySQL进行数据存储,只需在Django的settings.py文件中设置ENGINE为django.db.backends.mysql即可实现数据库引擎的切换。
图5 监测平台后台数据管理页面
2.3 数据粗差处理模块
系统利用异常值统计检验法进行数据粗差处理。粗差的识别探测属于数据异常检测范畴[7],现有研究发现大坝安全监测数据一般遵从正态分布特征[8],在统计学中,标准偏差σ是衡量一组测值的变化量或离散度的量度,μ是正态分布的位置参数,描述正态分布的集中趋势位置(见图6)。某时刻测值落在(μ-3σ,μ+3σ)以外的概率小于千分之三。因此将每个测点的历史数据样本在正态分布以及小概率原理基础上,按照3σ准则[见式(1),xi在式(1)计算范围内为非异常值,否则判定为异常值]对数据异常点进行判定。
图6 数据样本正态分布
[μ(xi-n,xi+n)-3σ(xi-n,xi+n)]≤xi≤
[μ(xi-n,xi+n)+3σ(xi-n,xi+n)]
(1)
式中xi——数据库中某一物理量任一数据;
μ(xi-n,xi+n)——数据序列f(xi-n,xi+n)样本均数,n取6;
σ(xi-n,xi+n)——数据序列f(xi-n,xi+n)标准差,n取6。
2.4 渗压分布展示模块
Echarts是一个使用JavaScript实现的开源可视化库,底层依赖矢量图形库ZRender,提供直观、交互丰富、可高度个性化定制的数据可视化图表[9]。在大坝监测断面上展示渗压分布需要开发者自定义编码进行绘制,包括大坝轮廓、设计水位、实际水位、测压管轮廓、渗压和浸润线6个部分。
在绘制大坝剖面轮廓的时候,需要根据实际大坝图纸的宽高,以及各关键点位的坐标做数据的预处理。大坝高度、宽度及各关键点位坐标计算完成后,以二维数组形式写入series的data。
设计水位利用一条虚线绘制,起始点坐标X=0,Y=设计水位,终点的横坐标X需要计算,计算方法是根据图纸中的数据(按三角形处理)X=[(designFL-13.3)×33.9/13.3],Y=设计水位。并在虚线上用markpoint来标识警示水位。实际水位使用类型为custom的填充模式,与大坝轮廓中type=‘line’的填充方式不同,这里包括了多边形的绘制,关键之处为设置shape的points、return的编写、data中3个点的坐标计算。
测压管的绘制方法同实际水位(图7中的蓝色部分)相同。该系统为了实现图表显示区可联操作,各测压管的渗压水位为实测值,连成一条线就是大坝的浸润线示意图,这里设置smooth为0.4对曲线进行了平滑处理。
图7 大坝监测断面展示的渗压分布、库水位及浸润线
3 工程应用实例
内蒙古扎敦水利枢纽是以一座以防洪、森林防火、供水为主,兼顾发电等综合利用的工程。本文以扎敦水利枢纽工程监测数据入库、处理、整编、展示为工程案例,对平台数据库粗差处理、后台管理、渗压分布及综合展示等功能进行试验。
试验结果显示,数据库按算法设定的粗差处理原则,仅处理一个测点(数据2049条,错误1条)准确率在99.95%以上(见图8),数据平台反映时间为1ms,随着处理数据量的增加,准确率可进一步提升(无异常监测数据长序列过程线见图9)。对于无浸润线的混凝土重力坝,平台内实际水位处理算法可正常执行,未报错,渗压分布展示模块可以展示渗压值,见图10。采用基于Django框架的雨水工情监测平台,能准确、高速处理监测数据,并动态展示数据成果。
图8 有异常监测数据长序列过程线
图9 无异常监测数据长序列过程线
图10 平台渗压综合展示界面
4 结 语
基于Django框架开发的雨水工情监测平台,可解决目前国内小水库雨水工情监测平台Web应用扩展开发困难、表单处理能力不足、数据库开发要求较高等问题,实现小型水库雨量、水位、大坝渗压自动监测和信息综合展示功能。经过工程数据验证,该平台可靠、可高速运行。目前研究开发的平台在数据粗差处理算法方面还待进一步优化,还不具备孪生、预测功能,后续可在预测模型研究、搭建、平台部署方面继续发力。