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