鄭芒英 李昀
摘要:線損高低直接影響到電力企業(yè)的經(jīng)營(yíng)業(yè)績(jī),線損業(yè)務(wù)管理人員需每天關(guān)注線損異常情況,分析原因并根據(jù)線損異常天數(shù)閾值進(jìn)行提級(jí)通知,加強(qiáng)線損管理。強(qiáng)化線損管理是“全國(guó)最好2021”中的重點(diǎn)工作之一,加強(qiáng)線損異常閉環(huán)管控,通過(guò)研發(fā)機(jī)器人改變傳統(tǒng)人工統(tǒng)計(jì)模式,實(shí)現(xiàn)“機(jī)器代替人”的管理模式;關(guān)鍵技術(shù)自主可控,提高工作效率和質(zhì)量,使得數(shù)字技術(shù)與業(yè)務(wù)深度融合,助力企業(yè)數(shù)字化轉(zhuǎn)型。
關(guān)鍵詞:線損;RPA;異常;自動(dòng)
中圖分類號(hào):TP391.7? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ?文章編號(hào):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? 引? 言
線損異常是指線路、臺(tái)區(qū)線損率同比同期值或計(jì)劃值偏差過(guò)大,數(shù)值偏差超過(guò)正負(fù)1個(gè)百分點(diǎn)。由于抄表數(shù)據(jù)錯(cuò)誤、竊電或違約用電電量追補(bǔ)、計(jì)量裝置故障、高供低計(jì)用戶收變損、基礎(chǔ)檔案錯(cuò)誤、供電半徑過(guò)長(zhǎng)或線徑小、三相負(fù)荷不平衡等多種原因造成線損異常。以往的工作模式為員工登錄計(jì)量自動(dòng)化系統(tǒng)下載數(shù)據(jù)通過(guò)煩瑣的操作后,統(tǒng)計(jì)出異常的線損對(duì)象,最后通知相應(yīng)的供電所人員分析原因并進(jìn)行整改。該工作重復(fù)性高且容易出錯(cuò),并且需要投入大量的時(shí)間。如何將線損業(yè)務(wù)管理人員從這些煩瑣、重復(fù)的工作中解放出來(lái),提高工作效率,降低操作失誤率是目前線損異常管理工作需要思考的一個(gè)問(wèn)題。隨著“云大物移智”技術(shù)的發(fā)展,軟件機(jī)器人已經(jīng)在電力企業(yè)財(cái)務(wù)、人資、生產(chǎn)等業(yè)務(wù)領(lǐng)域進(jìn)行應(yīng)用并發(fā)揮作用,成效顯著。本課題通過(guò)研發(fā)軟件機(jī)器人進(jìn)行線損異常自動(dòng)統(tǒng)計(jì)、自動(dòng)告警等工作,采用新的工作模式,讓線損異常統(tǒng)計(jì)工作更高效,員工可以將更多的精力投放在線損異常原因分析及問(wèn)題整改中[1]。
1? 軟件機(jī)器人
RPA(Robotic Process Automation)為機(jī)器人流程自動(dòng)化軟件的縮寫[2]。軟件機(jī)器人(RPA)是基于計(jì)算機(jī)操作系統(tǒng)的工作桌面,自動(dòng)識(shí)別UI、自動(dòng)完成重復(fù)性工作的機(jī)器人。它是可以處理重復(fù)性工作的軟件程序,可以模擬手工作業(yè),通過(guò)模仿人機(jī)交互的方式,執(zhí)行一系列的工作流程。軟件機(jī)器人在用戶界面運(yùn)行而不受制于底層IT基礎(chǔ)設(shè)施全天候的工作,每個(gè)動(dòng)作都可追蹤,可以讓員工專注于更有增值潛力的任務(wù),并且可以跨系統(tǒng)跨應(yīng)用操作;軟件機(jī)器人具備億級(jí)數(shù)據(jù)讀取處理能力,可對(duì)數(shù)據(jù)表格的數(shù)據(jù)進(jìn)行條件過(guò)濾、合并、條件排序、列重命名、計(jì)算統(tǒng)計(jì)、處理,自動(dòng)生成數(shù)據(jù)表格等操作。
2? 線損異常統(tǒng)計(jì)步驟
根據(jù)計(jì)量自動(dòng)化系統(tǒng)線損報(bào)表,按照分區(qū)、分線、分臺(tái)區(qū)、日、月報(bào)表數(shù)據(jù),自動(dòng)計(jì)算分區(qū)、分線、分臺(tái)區(qū)異常線損的異常天數(shù),根據(jù)時(shí)間段生成相應(yīng)日、月報(bào)表。根據(jù)線損管理人員制定的異常天數(shù)的閾值,研發(fā)軟件機(jī)器人按照上述工作步驟逐項(xiàng)完成,通知相應(yīng)的線損業(yè)務(wù)人員進(jìn)行整改。
3? 設(shè)計(jì)思路
通過(guò)人工智能圖片識(shí)別技術(shù)、Python語(yǔ)言與軟件機(jī)器人自動(dòng)化技術(shù),研發(fā)線損異常統(tǒng)計(jì)軟件機(jī)器人。本課題使用RPA品牌是藝賽旗公司,版本號(hào)是10-1。如圖1所示,研發(fā)四個(gè)“機(jī)器人”,按照先后順序分工合作完成線損異常統(tǒng)計(jì)。首先設(shè)計(jì)軟件機(jī)器人的定時(shí)自動(dòng)登錄計(jì)量自動(dòng)化系統(tǒng)功能,根據(jù)指定系統(tǒng)菜單路徑、操作步驟,自動(dòng)獲取UI,自動(dòng)執(zhí)行線損管理人員原設(shè)的各項(xiàng)操作步驟;第二步是設(shè)計(jì)機(jī)器人的數(shù)據(jù)下載功能,自動(dòng)下載分區(qū)、分線、分臺(tái)區(qū)、日、月報(bào)表數(shù)據(jù)到指定存儲(chǔ)路徑;第三步是根據(jù)線損異常計(jì)算公式,運(yùn)用Python語(yǔ)言編輯設(shè)計(jì)機(jī)器人的自動(dòng)計(jì)算功能,自動(dòng)計(jì)算異常天數(shù)[3];第四步是根據(jù)線損管理人員預(yù)設(shè)異常天數(shù)的閾值,設(shè)計(jì)機(jī)器人的自動(dòng)催辦功能,根據(jù)分區(qū)、分線、分臺(tái)區(qū)對(duì)應(yīng)的責(zé)任人,自動(dòng)通過(guò)通信軟件發(fā)送固定模板到供電所人員進(jìn)行催辦。同時(shí)也可以根據(jù)異常天數(shù)的閾值,自動(dòng)提級(jí)通知到指定人員。
4? 機(jī)器人研發(fā)
在四個(gè)機(jī)器人中,自動(dòng)計(jì)算機(jī)器人是核心部分,關(guān)系到線損異常數(shù)據(jù)的準(zhǔn)確率和可信度,也是最為復(fù)雜、關(guān)鍵的環(huán)節(jié)。根據(jù)數(shù)據(jù)下載機(jī)器人獲取到的數(shù)據(jù)庫(kù)進(jìn)行讀取,按照分區(qū)、分線、分臺(tái)區(qū)線損異常三類數(shù)據(jù)進(jìn)行分類處理。在實(shí)際應(yīng)用中,可能會(huì)因?yàn)橛?jì)算機(jī)的無(wú)計(jì)劃停機(jī)、節(jié)假日、操作系統(tǒng)故障、機(jī)器人服務(wù)器故障等原因造成部分時(shí)段的機(jī)器人無(wú)法正常運(yùn)行,造成部分日期的線損異常數(shù)據(jù)無(wú)法自動(dòng)統(tǒng)計(jì),從而需要在自動(dòng)計(jì)算機(jī)器人中增加一個(gè)自檢機(jī)器人來(lái)檢查每日數(shù)據(jù)的獲取和統(tǒng)計(jì)是否正常,提高整個(gè)工作的嚴(yán)謹(jǐn)性和完整性。針對(duì)節(jié)假日期間無(wú)法遠(yuǎn)程監(jiān)控,程序員不在現(xiàn)場(chǎng)的情況,需要人為根據(jù)機(jī)器人故障原因判斷來(lái)執(zhí)行自檢機(jī)器人,從而達(dá)到每日的線損數(shù)據(jù)不缺不漏,這樣在最終計(jì)算線損異常天數(shù)才能準(zhǔn)確無(wú)誤。
圖2為自動(dòng)計(jì)算機(jī)器人系統(tǒng)截圖界面,其中分區(qū)線損異常數(shù)據(jù)處理部分代碼[4,5]為:
'''def main():
#25- 31、1-4號(hào)執(zhí)行月報(bào)表,其他時(shí)間執(zhí)行日?qǐng)?bào)表
if 5< datetime.datetime.now().day < 25:
rbb()
else:
ybb()
#月報(bào)表
def ybb():
#1、打開(kāi)excel表
#定義excel路徑
exlPath = "D:/Program Files/IS-RPA10/Project/線損分析/分區(qū)線損分析/分區(qū)線損月報(bào)表/"
#定義當(dāng)月報(bào)表變量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、數(shù)據(jù)插入至mysql
tabName = "fq_ybb"
uploadExcel(sheet,tabName,time_str)
print("數(shù)據(jù)插入",tabName)
#3、對(duì)月報(bào)表連續(xù)異常數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
#3.1分區(qū)月報(bào)表
#3.1.1執(zhí)行sql
sql = '''
select
a.日期,
a.上級(jí)單位,
a.供電單位,
a.線損率_含變損,
a.線損參考值
from? fq_ybb a
where? 線損率_含變損 not between(線損參考值 - 2) and (線損參考值+2)
and a.日期 = '%s'
order by a.上級(jí)單位,a.供電單位;
'''%(time_str)
ret = conn(sql)
#3.1.2獲取月報(bào)表異常區(qū)域
datalist = fqYbbTj(ret)
print("月報(bào)表異常區(qū)域:",len(datalist))
#4 保存分臺(tái)區(qū)日?qǐng)?bào)表異常明細(xì)
savePath = "D:/Program Files/IS-RPA10/Project/線損分析/分區(qū)線損分析/分區(qū)線損月報(bào)表/結(jié)果匯總/分區(qū)月報(bào)表匯總"+time_str+".xls"
sheetName = "分區(qū)異常線損明細(xì)"
saveData(datalist,sheetName,savePath)
dirDate = datetime.datetime.now().strftime("%Y%m%d")
desPath = r"\\**\線損異常清單"+"\\"+dirDate
shutil.copy(savePath,desPath)
#5 線損異常明細(xì)上傳至數(shù)據(jù)庫(kù)
tabName = "fq_ybb_mx"
insFqMx(datalist,tabName)
print("上傳完成")
#6 excel數(shù)據(jù)轉(zhuǎn)化為SQL
table_name = "***"
resTxtPath = r"D:\Program Files\IS-RPA10\Project\營(yíng)銷業(yè)務(wù)監(jiān)控\爬蟲數(shù)據(jù)寫入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("執(zhí)行日度報(bào)表數(shù)據(jù)")
#日?qǐng)?bào)表
def rbb():
#1、打開(kāi)excel表
exlPath = "D:/Program Files/IS-RPA10/Project/線損分析/分區(qū)線損分析/分區(qū)線損日?qǐng)?bào)表/"
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、數(shù)據(jù)插入至mysql
tabName = "fq_rbb"
uploadExcel(sheet,tabName,time_str)
print("數(shù)據(jù)插入",time_str,tabName)
#3、對(duì)日?qǐng)?bào)表連續(xù)異常數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
# 3.1高損數(shù)據(jù)
# 3.1.1執(zhí)行sql
sql = '''
select
a.上級(jí)單位,
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.上級(jí)單位, a.供電單位,a.日期 desc
'''
ret = conn(sql)
#3.1.2獲取連續(xù)異常臺(tái)區(qū)
datalist = fqTj(ret,curr_time)
print("日?qǐng)?bào)表連續(xù)異常臺(tái)區(qū)數(shù):",len(datalist))
#4 保存分臺(tái)區(qū)日?qǐng)?bào)表異常明細(xì)
savePath = "D:/Program Files/IS-RPA10/Project/線損分析/分區(qū)線損分析/分區(qū)線損日?qǐng)?bào)表/結(jié)果匯總/分區(qū)日?qǐng)?bào)表匯總"+time_str+".xls"
sheetName = "分區(qū)線損異常明細(xì)"
saveData(datalist,sheetName,savePath)
dirDate = datetime.datetime.now().strftime("%Y%m%d")
desPath = r"\線損異常清單"+"\\"+dirDate
shutil.copy(savePath,desPath)
print("保存完成")
#5 線損異常明細(xì)上傳至數(shù)據(jù)庫(kù)
tabName = "fq_rbb_mx"
insFqMx(datalist,tabName)
print("上傳明細(xì)完成")
#6 excel數(shù)據(jù)轉(zhuǎn)化為SQL
table_name = "***"
resTxtPath = r"D:\Program Files\IS-RPA10\Project\營(yíng)銷業(yè)務(wù)監(jiān)控\爬蟲數(shù)據(jù)寫入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("執(zhí)行月度報(bào)表數(shù)據(jù)")
# 中間省略 #
# 獲取主體
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("構(gòu)建SQL完成")
return insert_sql
#sql語(yǔ)句寫入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? 線損異常統(tǒng)計(jì)軟件機(jī)器人的效果分析
從數(shù)據(jù)下載到發(fā)送通知,完全由流程機(jī)器人定時(shí)執(zhí)行,無(wú)須人工干預(yù),釋放人力,減少多環(huán)節(jié)操作過(guò)程中出現(xiàn)的誤操作,確保數(shù)據(jù)準(zhǔn)確性。原模式最少需要人為手工操作每天一個(gè)小時(shí),現(xiàn)通過(guò)應(yīng)用統(tǒng)計(jì)軟件機(jī)器人,系統(tǒng)會(huì)在5分鐘之內(nèi)自動(dòng)完成全部操作,效率提升最少12倍以上。在后期業(yè)務(wù)過(guò)程中,可按照業(yè)務(wù)管理要求,自定義閾值獲取異常數(shù)據(jù),對(duì)于連續(xù)異常天數(shù)較多的線損異常對(duì)象,可以實(shí)現(xiàn)提級(jí)通知。采用“流程機(jī)器人”和圖片識(shí)別等新技術(shù),實(shí)現(xiàn)數(shù)字技術(shù)與業(yè)務(wù)深度融合。
6? 結(jié)? 論
通過(guò)線損異常統(tǒng)計(jì)軟件機(jī)器人研發(fā)及應(yīng)用,不但可以減輕基層人員的工作量,為基層真減負(fù)、減真負(fù),同時(shí)提高工作效率,減少因人為原因造成的錯(cuò)誤,提供數(shù)據(jù)準(zhǔn)確率,營(yíng)造濃厚的創(chuàng)新氛圍,達(dá)到提質(zhì)增效的目標(biāo),為企業(yè)發(fā)展賦能。并且,通過(guò)創(chuàng)新的線損異常統(tǒng)計(jì)模式,定位線損異常問(wèn)題,為用電客戶提供優(yōu)質(zhì)的用電服務(wù),使客戶更快用上電、用好電,讓客戶享受更快速更優(yōu)質(zhì)的服務(wù),提升電力企業(yè)數(shù)字化形象。
參考文獻(xiàn):
[1] 王永平.臺(tái)區(qū)線損管理與分析 [M].北京:中國(guó)電力出版社,2020:13-40.
[2] 褚瑞,袁志堅(jiān).機(jī)器人流程自動(dòng)化(RPA)UiBot開(kāi)發(fā)者認(rèn)證教程(上下冊(cè)) [M].北京:電子工業(yè)出版社,2020:10-30.
[3] 崔慶才.Python3網(wǎng)絡(luò)爬蟲開(kāi)發(fā)實(shí)戰(zhàn) [M].北京:人民郵電出版社,2019:77-435.
[4] 黃永祥.精通Python自動(dòng)化編程 [M].北京:機(jī)械工業(yè)出版社,2021:136-478.
[5] 韋世東.Python3網(wǎng)絡(luò)爬蟲寶典 [M].北京:電子工業(yè)出版社,2020:153-175.
作者簡(jiǎn)介:鄭芒英(1985—),女,漢族,廣東湛江人,副高級(jí)工程師,工程碩士,研究方向:信息系統(tǒng)開(kāi)發(fā)、數(shù)據(jù)管理;李昀(1985—),男,漢族,廣東湛江人,工程師,本科,研究方向:信息系統(tǒng)開(kāi)發(fā)、信息系統(tǒng)管理。