王淑春,陆志云
(江西赣能股份有限公司居龙潭水电厂,江西 赣州 341000)
生产报表是水电厂生产信息即时整理和分析数据的信息管理系统的重要组成部分,有效的生产报表对安全生产工作发挥着重要的决策和指导作用。计算机管理生产报表的主要优点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,通过修改格式就可以得到各种形式的报表,系统管理灵活方便。
居龙潭水电厂信息管理系统(以下简称:MIS)在开发投入时,也设计了生产报表模块。但由于设计者对现场需求了解不足,设计出来的报表软件脱离实际应用;另外,随着生产管理水平的提高,对生产数据报表的要求也相应提高。非计算机专业人员无法对其进行相应的管理,导致在试用一段时间后,就放弃了使用。EXCEL、WORD等主流办公软件虽然可以做出复杂的报表格式,但是普通用户无法动态地加载数据,存在数据容易丢失、管理权限无法分配、数据无法在线共享展示、容易产生多处报表、容错率低等问题,也无法满足生产报表系统的需求。根据居龙潭水电厂多年的生产工作经验,以及对多个电厂的考察,以上问题也是众多水电厂共同面对的难题。设计一款符合实际、好用且适应新需求的生产数据报表模块就迫在眉睫。经过调查分析、针对居龙潭水电厂生产需要,设计开发了一套适用于中小型水电厂的生产报表系统。
水电厂生产报表常用的主要包括电量计算、水情统计、可调小时、电量数据分析、水能利用效率统计分析等。运行值班人员根据表计、监控系统、水情系统的显示值以及机组、设备的运行状态,将所需数据录入至报表系统,报表系统按照一定的变比、算法、格式对数据进行处理,将有效的数据保存在服务器数据库中。运行及其他人员可通过系统查询功能查询相关数据,生成相应的日报表、月报表和年报表并进行打印。还可以对数据进行分析,指导水库调度和机组经济运行[1]。
管理员可根据机组设备的改造和变化,对报表字段、人员名册进行更新。如:居龙潭水电厂2013年110kV居韩线线路改造后,报表需新增居韩线电量数据。
简单、清晰的界面设计,人性化的设计理念,方便运行人员的数据录入,较好的数据容错能力减少了数据的错误。
系统构架包括电量计算、水情统计和可调小时三个基础模块及其对应的报表功能,后台管理模块包括字段管理、数据变比以及人员管理[2]。
设计概图如图1所示:
图1 设计概图
2.2.1数据库的逻辑结构设计[3]
DL(电量)
DLJS(电量基数)
DLBB(电量变比)
SQ(水情统计)
KT(可调小时)
YXname(人员名单)
2.2.2基础模块界面的设计
1)电量计算是指运行人员日常抄录机组、线路、主变及厂用变等关口电度表当日读数后,与前一日电度表基数进行对比,其差值与电度表电压互感器和电流互感器变比的乘积即为该关口处当日的电量数。值班人员每日零点进行一次抄录,录入的电度表读数保存为后一天的电量基数存入数据库的DLJS表中,并默认为电度表当日读数。电度表基数默认为电量关口表的前一天的读数。当该电度表进行校验后读数归零时,录入的电量基数也需要相应的进行清零。在输入的过程中系统根据变比自动计算出设备日电量并显示,运行人员录入后进行保存,如图2所示。
界面初始化时,根据需要录入的数据遍历读取数据库数据,形成表格的方式进行输入。
核心代码如下:
namers.Open"select name from dl,conn//根据日期遍历数据及名称
for(i=1;i<=dlrs.length ;i++)
{var newTd0=newTr.insertCell();
var newTd1=newTr.insertCell();
var newTd2=newTr.insertCell();}//输出至表格相应的位置
图2 电量计算初始化界面
通过JS脚本进行数据容错,如电量为负数或数据格式错误,保存数据时,通过简单的JS脚本判断,界面弹出警告窗口如图3所示:
图3 数据容错提示框
2)水情统计是运行人员根据水情系统的数据和机组的基本运行状态,将有关数据保存在数据库中,界面设计如图4所示。核心代码如下:
sqrs.Open"select*fromsql where dldate=#"&today&"#",conn//根据日期遍历数据及名称
for(i=1;i<=sqrs.length ;i++)
{var newTd0=newTr.insertCell();//输出至表格相应的位置
var newTd1=newTr.insertCell();}
图4 水情统计初始化界面
3)可调小时模块用于运行人员记录机组的开停机和备用时间,根据所记录的时间段计算出各机组的发电时长、检修时长和备用时长。
记录时间的格式通过JS脚本的格式化处理,再计算出需要的时长,并设置全天运行、备用或者检修状态的快速选择键,方便录入,如图5所示。
核心代码如下:
$(document).ready(function(){
$("#yx1").click(function(){//置全天运行、备用或者检修状态的快速选择键
for(i=1;i<9;i++){document.getElementById("1yk"+i+"").value=""}
document.getElementById("1yk1").value="00:00"
document.getElementById("1yj1").value="24:00"});
//全天多态情况下手动输入时间处理
for(i=1;i<9;i++){//时段字符的容错及格式化处理
if(!document.getElementById("1yk"+i+"").value)continue;
document.getElementById("1yk"+i+"").value=document.getElementById("1yk"+i+"").value.replace(".",":")}//时间格式可使用“.”符号,方便输入;
h=Math.floor(arr/60);m=arr%60
if(Math.floor(arr/60)<10){h="0"+Math.floor(arr/60)}//时间型转换成直观的浮点型表现形式
图5 可调小时初始化界面
2.2.3生成报表功能的实现
根据日期选择需要的数据,通过系统的换算显示在报表上。报表具有显示查询日期的机组、线路和变压器的日、月、年以及长年累积汇总电量或时间的功能。用户使用scriptx插件进行报表的快捷打印。部分核心代码如下:
yue=left(request.form("theday"),7)//按月度检索数据
nian=left(request.form("theday"),4)/按年度检索数据
rs.Open sql="select sum(F1YG),from DL where DateDL like'"&yue&"%'and id<=(select id from dl where datedl='"&js&"')",conn//月总电量
rs.Open sql="select sum(F1YG),from DL where DateDL like'"&nian&"%'and id<=(select id from dl where datedl='"&js&"')",conn//年总电量
打印报表格式如图6所示:
图6 报表生成界面
2.2.4数据分析的实现
基于数据库的查询功能,ichartjs组件利用HTML5 canvas完成图形绘折线图工作。用户根据时间范围和所需查询的数据,快速得到所需数据的折线图,直观地得出数据的变化曲线。
折线图查询界面如图7所示:
图7 数据趋势折线图
2.3.1人员权限管理
管理人员根据人员变动情况,更新人员信息表,如图8所示。
核心代码如下:
rs.Open.sql="inset into YXname(YXname,Authority,YXid,password)VALUES('"&name&",”&authority&”,””&id&””,”&password&”')",conn//添加人员信息
rs.Open.sql="updateYXnameYXname(YX-name, Authority, YXid, password)VALUES('"&name&",”&authority&”,””&id&””,”&password&”')",conn//修改人员信息
rs.Open.sql="DELETE from YXname WHERE YXname="&name&",conn//删除人员
图8 人员管理界面
2.3.2电量计算字段的更新
字段的修改与删减主要针对电厂更新机组、设备和线路等电量数据,相应的修改录入、输出格式。更新后的字段可以在界面直接显示并进行数据的录入、输出,字段更新后录入界面自动读取该数据,报表的设计需要对代码进行简单地修改重新布局。增加字段界面如图9所示。
图9 字段管理界面
1)经过长期的测试和不断的优化改进,水电厂通用性生产报表系统已经在居龙潭水电厂得到了充分的应用,在该电厂的生产管理工作中起着重要的作用。对其他中小型电厂有一定的借鉴作用。
2)水电厂通用型生产报表系统减少了运行人员的工作量,系统管理员无需编程基础即可对系统进行实时在线管理,其他人员可通过客户端浏览器查询所需数据,数据共享方便,存储安全可靠。
3)在研发的过程中,笔者对多个水电厂的需求进行了分析研究,其基础模块能满足一般水电厂的生产需要,独立的开发和简单的代码使得系统的移植以及拓展模块的二次开发变得简单,无需搭建复杂的配置环境。