电力企业线损异常统计软件机器人研发及应用
2021-10-16郑芒英李昀
郑芒英 李昀
摘要:线损高低直接影响到电力企业的经营业绩,线损业务管理人员需每天关注线损异常情况,分析原因并根据线损异常天数阈值进行提级通知,加强线损管理。强化线损管理是“全国最好2021”中的重点工作之一,加强线损异常闭环管控,通过研发机器人改变传统人工统计模式,实现“机器代替人”的管理模式;关键技术自主可控,提高工作效率和质量,使得数字技术与业务深度融合,助力企业数字化转型。
关键词:线损;RPA;异常;自动
中图分类号:TP391.7 文献标识码:A 文章编号:2096-4706(2021)07-0110-04
Development and Application of Software Robot for Power Enterprise Line
Loss Abnormal Statistics
ZHENG Mangying,LI Yun
(Zhanjiang Power Supply Bureau of Guangdong Power Grid Corporation,Zhanjiang 524005,China)
Abstract:The level of line loss has a direct impact on the operating performance of electric power enterprises. Line loss business managers need to pay attention to the line loss abnormal situation every day,analyze reason and provide upgrade notifications based on the abnormal line loss days threshold to strengthen line loss management. Strengthening line loss management is one of the key tasks in the “National best 2021”. We should strengthen the closed-loop management and control of abnormal line loss,change the traditional manual statistical mode through the research and development of robots,and realize the management mode of “machine replacing human”. The key technologies can be controlled independently,improve the work efficiency and quality,make the digital technology and business deeply integrated,and help the enterprise in digital transformation.
Keywords:line loss;RPA;abnormal;automatic
收稿日期:2021-03-13
0 引 言
線损异常是指线路、台区线损率同比同期值或计划值偏差过大,数值偏差超过正负1个百分点。由于抄表数据错误、窃电或违约用电电量追补、计量装置故障、高供低计用户收变损、基础档案错误、供电半径过长或线径小、三相负荷不平衡等多种原因造成线损异常。以往的工作模式为员工登录计量自动化系统下载数据通过烦琐的操作后,统计出异常的线损对象,最后通知相应的供电所人员分析原因并进行整改。该工作重复性高且容易出错,并且需要投入大量的时间。如何将线损业务管理人员从这些烦琐、重复的工作中解放出来,提高工作效率,降低操作失误率是目前线损异常管理工作需要思考的一个问题。随着“云大物移智”技术的发展,软件机器人已经在电力企业财务、人资、生产等业务领域进行应用并发挥作用,成效显著。本课题通过研发软件机器人进行线损异常自动统计、自动告警等工作,采用新的工作模式,让线损异常统计工作更高效,员工可以将更多的精力投放在线损异常原因分析及问题整改中[1]。
1 软件机器人
RPA(Robotic Process Automation)为机器人流程自动化软件的缩写[2]。软件机器人(RPA)是基于计算机操作系统的工作桌面,自动识别UI、自动完成重复性工作的机器人。它是可以处理重复性工作的软件程序,可以模拟手工作业,通过模仿人机交互的方式,执行一系列的工作流程。软件机器人在用户界面运行而不受制于底层IT基础设施全天候的工作,每个动作都可追踪,可以让员工专注于更有增值潜力的任务,并且可以跨系统跨应用操作;软件机器人具备亿级数据读取处理能力,可对数据表格的数据进行条件过滤、合并、条件排序、列重命名、计算统计、处理,自动生成数据表格等操作。
2 线损异常统计步骤
根据计量自动化系统线损报表,按照分区、分线、分台区、日、月报表数据,自动计算分区、分线、分台区异常线损的异常天数,根据时间段生成相应日、月报表。根据线损管理人员制定的异常天数的阈值,研发软件机器人按照上述工作步骤逐项完成,通知相应的线损业务人员进行整改。
3 设计思路
通过人工智能图片识别技术、Python语言与软件机器人自动化技术,研发线损异常统计软件机器人。本课题使用RPA品牌是艺赛旗公司,版本号是10-1。如图1所示,研发四个“机器人”,按照先后顺序分工合作完成线损异常统计。首先设计软件机器人的定时自动登录计量自动化系统功能,根据指定系统菜单路径、操作步骤,自动获取UI,自动执行线损管理人员原设的各项操作步骤;第二步是设计机器人的数据下载功能,自动下载分区、分线、分台区、日、月报表数据到指定存储路径;第三步是根据线损异常计算公式,运用Python语言编辑设计机器人的自动计算功能,自动计算异常天数[3];第四步是根据线损管理人员预设异常天数的阈值,设计机器人的自动催办功能,根据分区、分线、分台区对应的责任人,自动通过通信软件发送固定模板到供电所人员进行催办。同时也可以根据异常天数的阈值,自动提级通知到指定人员。
4 机器人研发
在四个机器人中,自动计算机器人是核心部分,关系到线损异常数据的准确率和可信度,也是最为复杂、关键的环节。根据数据下载机器人获取到的数据库进行读取,按照分区、分线、分台区线损异常三类数据进行分类处理。在实际应用中,可能会因为计算机的无计划停机、节假日、操作系统故障、机器人服务器故障等原因造成部分时段的机器人无法正常运行,造成部分日期的线损异常数据无法自动统计,从而需要在自动计算机器人中增加一个自检机器人来检查每日数据的获取和统计是否正常,提高整个工作的严谨性和完整性。针对节假日期间无法远程监控,程序员不在现场的情况,需要人为根据机器人故障原因判断来执行自检机器人,从而达到每日的线损数据不缺不漏,这样在最终计算线损异常天数才能准确无误。
图2为自动计算机器人系统截图界面,其中分区线损异常数据处理部分代码[4,5]为:
'''def main():
#25- 31、1-4号执行月报表,其他时间执行日报表
if 5< datetime.datetime.now().day < 25:
rbb()
else:
ybb()
#月报表
def ybb():
#1、打开excel表
#定义excel路径
exlPath = "D:/Program Files/IS-RPA10/Project/线损分析/分区线损分析/分区线损月报表/"
#定义当月报表变量time_str
bb_month = datetime.datetime.now().month
if (datetime.datetime.now().day < 25):
month_str = (datetime.datetime.now()+relativedelta (months=-1)).strftime("%Y-%m")
else:
month_str = str(datetime.datetime.now().year)+"-"+str(bb_month).zfill(2)
time_str = month_str
sheet = openExcel(exlPath,time_str)
print("成功獲取ybb")
#2、数据插入至mysql
tabName = "fq_ybb"
uploadExcel(sheet,tabName,time_str)
print("数据插入",tabName)
#3、对月报表连续异常数据进行统计
#3.1分区月报表
#3.1.1执行sql
sql = '''
select
a.日期,
a.上级单位,
a.供电单位,
a.线损率_含变损,
a.线损参考值
from fq_ybb a
where 线损率_含变损 not between(线损参考值 - 2) and (线损参考值+2)
and a.日期 = '%s'
order by a.上级单位,a.供电单位;
'''%(time_str)
ret = conn(sql)
#3.1.2获取月报表异常区域
datalist = fqYbbTj(ret)
print("月报表异常区域:",len(datalist))
#4 保存分台区日报表异常明细
savePath = "D:/Program Files/IS-RPA10/Project/线损分析/分区线损分析/分区线损月报表/结果汇总/分区月报表汇总"+time_str+".xls"
sheetName = "分区异常线损明细"
saveData(datalist,sheetName,savePath)
dirDate = datetime.datetime.now().strftime("%Y%m%d")
desPath = r"\\**\线损异常清单"+"\\"+dirDate
shutil.copy(savePath,desPath)
#5 线损异常明细上传至数据库
tabName = "fq_ybb_mx"
insFqMx(datalist,tabName)
print("上传完成")
#6 excel数据转化为SQL
table_name = "***"
resTxtPath = r"D:\Program Files\IS-RPA10\Project\营销业务监控\爬虫数据写入Edata/"+ time_str +".txt"
if datetime.datetime.now().day > 25 or datetime.datetime.now().day <6:
insert_sql= Get_InsetSQLByExcel(savePath,table_name)
writeToTxt(insert_sql,resTxtPath,table_name)
else:
print("执行日度报表数据")
#日报表
def rbb():
#1、打开excel表
exlPath = "D:/Program Files/IS-RPA10/Project/线损分析/分区线损分析/分区线损日报表/"
curr_time = datetime.datetime.now()+datetime.timedelta(days=-3)
time_str = curr_time.strftime("%Y-%m-%d")
sheet = openExcel(exlPath,time_str)
print("成功获取rbb")
#2、数据插入至mysql
tabName = "fq_rbb"
uploadExcel(sheet,tabName,time_str)
print("数据插入",time_str,tabName)
#3、对日报表连续异常数据进行统计
# 3.1高损数据
# 3.1.1执行sql
sql = '''
select
a.上级单位,
a.供电单位,
if(线损率_含变损 between (线损参考值 - 2) and (线损参考值+2), 0, 1),
a.线损率_含变损,
a.线损参考值,
a.日期
from fq_rbb a
where date_format(curdate(),'%Y-%m') = date_format(a.日期,'%Y-%m')
order by a.上级单位, a.供电单位,a.日期 desc
'''
ret = conn(sql)
#3.1.2获取连续异常台区
datalist = fqTj(ret,curr_time)
print("日报表连续异常台区数:",len(datalist))
#4 保存分台区日报表异常明细
savePath = "D:/Program Files/IS-RPA10/Project/线损分析/分区线损分析/分区线损日报表/结果汇总/分区日报表汇总"+time_str+".xls"
sheetName = "分区线损异常明细"
saveData(datalist,sheetName,savePath)
dirDate = datetime.datetime.now().strftime("%Y%m%d")
desPath = r"\线损异常清单"+"\\"+dirDate
shutil.copy(savePath,desPath)
print("保存完成")
#5 线损异常明细上传至数据库
tabName = "fq_rbb_mx"
insFqMx(datalist,tabName)
print("上传明细完成")
#6 excel数据转化为SQL
table_name = "***"
resTxtPath = r"D:\Program Files\IS-RPA10\Project\营销业务监控\爬虫数据写入Edata/"+ datetime.datetime.now().strftime("%Y-%m-%d") +".txt"
if 5< datetime.datetime.now().day < 26:
insert_sql = Get_InsetSQLByExcel(savePath,table_name)
writeToTxt(insert_sql,resTxtPath,table_name)
else:
print("執行月度报表数据")
# 中间省略 #
# 获取主体
context = ""
for c in range(1, sheet.nrows):
row = sheet.row(c)
context = context + "("
# 拼接
for r in range(0, len(row)):
if r == (len(row) - 1):
context = context + "'" + str(row[r].value) + "'),\n"
else:
context = context + "'" + str(row[r].value) + "',"
context = context + ")"
context = context[0:-2]
context += "; \n"
insert_sql = "insert into " + table_name + sql_header + " values" + context
insert_sql = insert_sql[0:-4]
insert_sql += "; \n"
print("构建SQL完成")
return insert_sql
#sql語句写入TXT文件
def writeToTxt(insert_sql,resTxtPath,table_name):
file = open(resTxtPath,'a')
file.write("\ndelete from "+ table_name +";\n" + insert_sql )
if __name__ == "__main__":
main()
5 线损异常统计软件机器人的效果分析
从数据下载到发送通知,完全由流程机器人定时执行,无须人工干预,释放人力,减少多环节操作过程中出现的误操作,确保数据准确性。原模式最少需要人为手工操作每天一个小时,现通过应用统计软件机器人,系统会在5分钟之内自动完成全部操作,效率提升最少12倍以上。在后期业务过程中,可按照业务管理要求,自定义阈值获取异常数据,对于连续异常天数较多的线损异常对象,可以实现提级通知。采用“流程机器人”和图片识别等新技术,实现数字技术与业务深度融合。
6 结 论
通过线损异常统计软件机器人研发及应用,不但可以减轻基层人员的工作量,为基层真减负、减真负,同时提高工作效率,减少因人为原因造成的错误,提供数据准确率,营造浓厚的创新氛围,达到提质增效的目标,为企业发展赋能。并且,通过创新的线损异常统计模式,定位线损异常问题,为用电客户提供优质的用电服务,使客户更快用上电、用好电,让客户享受更快速更优质的服务,提升电力企业数字化形象。
参考文献:
[1] 王永平.台区线损管理与分析 [M].北京:中国电力出版社,2020:13-40.
[2] 褚瑞,袁志坚.机器人流程自动化(RPA)UiBot开发者认证教程(上下册) [M].北京:电子工业出版社,2020:10-30.
[3] 崔庆才.Python3网络爬虫开发实战 [M].北京:人民邮电出版社,2019:77-435.
[4] 黄永祥.精通Python自动化编程 [M].北京:机械工业出版社,2021:136-478.
[5] 韦世东.Python3网络爬虫宝典 [M].北京:电子工业出版社,2020:153-175.
作者简介:郑芒英(1985—),女,汉族,广东湛江人,副高级工程师,工程硕士,研究方向:信息系统开发、数据管理;李昀(1985—),男,汉族,广东湛江人,工程师,本科,研究方向:信息系统开发、信息系统管理。