鄭芒英 李昀


摘要:線損高低直接影響到電力企業的經營業績,線損業務管理人員需每天關注線損異常情況,分析原因并根據線損異常天數閾值進行提級通知,加強線損管理。強化線損管理是“全國最好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—),男,漢族,廣東湛江人,工程師,本科,研究方向:信息系統開發、信息系統管理。