劉 詩,李煥奇,李振新
(國網(wǎng)吉林供電公司,吉林 吉林 132011)
在地區(qū)電網(wǎng)調(diào)度的日常工作中,夜間需要收集地區(qū)內(nèi)所轄發(fā)電廠和大用戶前一日相關調(diào)度數(shù)據(jù),并經(jīng)一系列計算后制作調(diào)度日報表進行上報和發(fā)布。這些調(diào)度數(shù)據(jù)既包括發(fā)電廠發(fā)電量、廠用電量、上網(wǎng)電量、負荷率、廠用率等,又包括大用戶用電量、自備電廠自發(fā)自用電量及水電廠的水文信息和地區(qū)間交換電量等信息。在傳統(tǒng)調(diào)度工作中,這些用于制作調(diào)度日報表的數(shù)據(jù)都是發(fā)電廠或大用戶監(jiān)控值班人員通過電話報送給調(diào)度,調(diào)度員通過手工記錄、整理與計算形成報表[1]。
近年來,隨著調(diào)度自動化水平不斷提高,已有大部分數(shù)據(jù)已實現(xiàn)自動采集到調(diào)度端[2-4],但由于設備老舊、資金不足等原因,仍有部分數(shù)據(jù)目前沒有合理可行的方案來實現(xiàn)自動采集,只能通過調(diào)度電話等方式進行人工報送,并手動錄入,使調(diào)度日報表不能實現(xiàn)完全自動生成等流程。為打通電網(wǎng)調(diào)度日報表全自動化的最后環(huán)節(jié),本文通過微信(或i國網(wǎng))報送固定格式鍵值對的方式,利用文字識別和機器人流程自動化技術開發(fā)了自動接收與整合程序,來實現(xiàn)完整調(diào)度日報表自動生成的流程。
自動接收與整合程序利用按鍵精靈2014制作,程序在安裝微信(或i國網(wǎng))PC版和WPS2019的Windows7或Windows10操作系統(tǒng)上調(diào)試。按鍵精靈是可以模擬鼠標和鍵盤動作的應用程序開發(fā)工具,通過編寫腳本,能讓開發(fā)的程序自動執(zhí)行預定的動作完成功能,且能編譯生成脫離開發(fā)環(huán)境運行的可執(zhí)行文件[5]。使用按鍵精靈調(diào)用大漠插件,可以實現(xiàn)圖片查找和文字識別;調(diào)用LazyOffice辦公插件,可以實現(xiàn)對WPS表格的各種自動操作。微信(或i國網(wǎng))PC版用于接收各發(fā)電廠和大用戶發(fā)送來的信息。WPS表格用于存儲接收的數(shù)據(jù)和設置信息。
本系統(tǒng)正常運行時屏幕局部效果如圖1所示。左側(cè)為PC版微信,右側(cè)為自動接收與整合程序的運行界面。當微信中有新的信息時,在頭像右上角會顯示1個內(nèi)含數(shù)字的紅色圓圈,程序按給定秒數(shù)循環(huán)自動查找圖片來發(fā)現(xiàn)這一信息,并通過OCR文字識別到該信息發(fā)送者,并遍歷設置表中的用戶數(shù)組逐一對比,判斷信息的發(fā)出者是否為本系統(tǒng)特定用戶。如果不是,便放過此信息;如果是,則通過一系列模擬鼠標鍵盤操作抓取這一信息,并將其按事先規(guī)定的字符分割后生成鍵值對。根據(jù)事先預定的一系列規(guī)則對信息格式及正確性進行邏輯驗證。如未通過驗證,則讓微信自動回復令其重報;如果通過驗證,則將該信息“值”進行編碼加密,利用LazyOffice辦公插件功能,將其存儲在“數(shù)據(jù)文件.xlsx”特定單元格中。當設置中的所有用戶當日全部發(fā)過信息并均正確接收后,程序自動將當日“數(shù)據(jù)文件.xlsx”轉(zhuǎn)換成“傳遞文件.dat”。最后將“傳遞文件.dat”拷貝到U盤。
圖1 系統(tǒng)運行情況
本系統(tǒng)在電腦硬盤中建有1個工作文件夾,文件夾名稱須與設置中“工作目錄”保持一致,文件夾中有3個文件,分別為設置文件.xlsx、數(shù)據(jù)文件.xlsx和傳遞文件.dat。設置文件中保存的是發(fā)電廠或大用戶群名、編號和運行狀態(tài),其編號指定了所報數(shù)據(jù)在數(shù)據(jù)文件表中存放行的位置。數(shù)據(jù)文件用于存放各發(fā)電廠或大用戶每日所報數(shù)據(jù)編碼后的密文。傳遞文件是由完整的數(shù)據(jù)文件轉(zhuǎn)換而成的用于在內(nèi)外網(wǎng)電腦間傳輸數(shù)據(jù)的純文本文件,是1個由二維數(shù)組轉(zhuǎn)換而來的密文Json字符串[6-7]。系統(tǒng)還設置1個用來保存程序中斷時各變量值的中斷數(shù)據(jù)保存文件,以使監(jiān)控程序再次啟動時進程能夠順利接續(xù)。
本系統(tǒng)包含系統(tǒng)設置、自動監(jiān)測與回復、啟動微信PC版、數(shù)據(jù)集中讀取、傳遞文件生成和傳遞文件拷入U盤等功能模塊。其中,設置模塊獨占選項卡的“設置”頁,其他5個功能模塊設計在選項卡的“應用”頁上,功能均可通過單選鈕和啟停按鈕啟動和停止,見圖1右側(cè)。自動監(jiān)測與回復模塊是本系統(tǒng)最主要的功能模塊,用于實現(xiàn)電網(wǎng)調(diào)度數(shù)據(jù)隨報隨收和自動整合;啟動微信PC版模塊用于自動啟動Windows版微信;數(shù)據(jù)集中讀取模塊用于實現(xiàn)數(shù)據(jù)的一次性全部讀取,即當自動監(jiān)測與回復模塊異常導致數(shù)據(jù)隨報隨收進程中斷或有遺漏時,可用其一次性將數(shù)據(jù)全部收集齊全;傳遞文件生成模塊用于將收集齊全的數(shù)據(jù)文件轉(zhuǎn)換成純文本的傳遞文件;傳遞文件拷入U盤模塊用于將傳遞文件自動拷貝到內(nèi)網(wǎng)U盤中。
設置頁面提供1個修改設置內(nèi)容的交互界面,不但能對工作目錄、日期變更點、監(jiān)測頻度、定時啟動時間、U盤信息及用戶群的存放區(qū)域等進行方便設置,還能對微信應用的安裝路徑以及是明文或密文存儲與傳遞數(shù)據(jù)進行設置。設置內(nèi)容保存在Config.W文件中,設置頁面及設置內(nèi)容如圖2所示。
圖2 系統(tǒng)設置頁面及設置內(nèi)容
按照設置文件中保存的發(fā)電廠或大用戶名稱,在微信應用里創(chuàng)建與之對應的微信群,并把調(diào)度報送數(shù)據(jù)的人全部設置為群員。原來每天報送習慣仍保留,但報送方式改為在微信群中發(fā)送信息。
發(fā)送信息的格式須分行排列,各行名稱與數(shù)值間用冒號分隔;首行為日期,日期為8位數(shù)字,作為信息的標識;其他各行為報送數(shù)據(jù)鍵值對。如測試用戶2022年8月18日電量為168 168 kWh,其在微信群中發(fā)送的信息應為
日期:20220818
電量:168168
又如測試電廠2022年9月28日發(fā)電:442 450 kWh;上網(wǎng):338 976 kWh;最大:21 000 kW;最小:15 930 kW;負荷率:87.78%,其在微信群中發(fā)送的信息應為
日期:20220928
發(fā)電:442450
上網(wǎng):338976
最大:21000
最小:15930
負荷率:87.78
在接收程序中,對日期標識進行多種容錯格式設置,當無法識別時,會自動向該群回復信息,令其重新報送。
程序開始后首先讀取中斷數(shù)據(jù)保存文件上次中斷時已報用戶名稱及中斷時刻,判斷當前距上次中斷時的時長,如果已超過8 h,則清空數(shù)據(jù)文件,按新的一天重新開始,否則接著上次斷點繼續(xù)運行。若按新的一天重新開始,則須用腳本先啟動微信(或i國網(wǎng))應用使其正常運行,并調(diào)整運行窗口大小和位置,為信息的正常監(jiān)測與接收做好準備,同時將隨報隨收程序運行窗口移動到屏幕右側(cè)。
如圖3所示,將新收信息群名識別、信息驗證和密文編碼與存儲3個子程序順序置于定時刷新的循環(huán)中,其刷新頻率可以設置,默認為20 s刷新一次,直至全部讀取完畢或人為終止才跳出循環(huán)。程序通過循環(huán)檢查聊天列表區(qū)域新出現(xiàn)的紅色圓圈圖片,得到微信新接收的信息,再用大漠OCR[8-9]識別群名序號,進而判斷出新收信息群名;若新收信息確為本系統(tǒng)用戶群所發(fā),則對最新新收信息進行驗證,若通過格式和邏輯驗證,則進行信息分割與解讀,否則自動回復驗證失敗并令其重發(fā)。對新收信息進行加密后保存,再向“運行信息”窗口輸出顯示本次讀取成功的數(shù)據(jù)和已成功讀取的群名集合及尚未報送信息的群名集合。
圖3 信息監(jiān)測與接收流程
本模塊的功能是在微信聊天列表區(qū)域發(fā)現(xiàn)新收信息,并識別發(fā)送該信息的群名編號,進而得知群名。具體實現(xiàn)方法是用循環(huán)等待圖片出現(xiàn)命令查找屏幕上聊天列表區(qū)域中的紅色圓圈圖片,找到后用大漠OCR命令識別該群名編號,進而得知該信息是否為本系統(tǒng)用戶所發(fā)。如果是本系統(tǒng)用戶所發(fā),則用大漠OCR命令識別所發(fā)信息的日期與目標日期進行對比,判斷該信息是否為目標信息,如果對比成功,則將該信息用行分隔符進行分割后,再用鍵值對分隔符分割,得到該信息的全部有效鍵值對。
本模塊的功能是在微信窗口的搜索欄中搜索發(fā)電廠或大用戶群名,從而在對話窗口中得到該群的近期對話信息進行讀取。模塊先根據(jù)設置得到要讀取數(shù)據(jù)的目標日期,再用大漠OCR命令識別信息的日期進行對比。若對比失敗,程序會自動回復,使該群重新發(fā)送;如果信息日期與目標日期一致,程序則模擬鼠標雙擊對話窗口中最新的目標日期,全選到目標文本;然后模擬復制粘貼剪貼板內(nèi)容,將目標文本賦值給1個變量,用行分隔符對其進行分割,再用鍵值對分隔符對分得的各行進行分割得到鍵值對,并將其“值”經(jīng)編碼函數(shù)運算進行加密,再將其寫入由群編號確定行位置的數(shù)據(jù)文件中,并將該群名標記為數(shù)據(jù)已讀取。
電網(wǎng)企業(yè)的信息外網(wǎng)和信息內(nèi)網(wǎng)間相互隔離,為保證數(shù)據(jù)安全且不帶病毒,本系統(tǒng)的數(shù)據(jù)傳遞采用KVM+企業(yè)內(nèi)網(wǎng)U盤為載體,用純文本密文傳遞文件為媒介的策略。對存儲在信息外網(wǎng)電腦上的數(shù)據(jù)文件設置密碼進行保護,并采用加密存儲機制,且傳遞文件采用純文本文件格式。
從設置文件中讀取日期變更時間變量的值,并與當前日期運算生成編碼密鑰;用LazyOffice辦公插件命令讀取數(shù)據(jù)文件中傳遞數(shù)據(jù)區(qū)域并將其轉(zhuǎn)換成二維數(shù)組;用事先做好的編碼函數(shù)遍歷該二維數(shù)組,并將其數(shù)值部分逐一轉(zhuǎn)換為ASCII碼后再與密鑰運算生成新的編碼[10];將其改寫為Json字符串后寫入傳遞文件;經(jīng)傳遞文件拷入U盤模塊自動將其拷貝到信息內(nèi)網(wǎng)電腦。
在企業(yè)信息內(nèi)網(wǎng)電腦上,首先從設置文件中讀取日期變更時間變量的值,并與當前日期運算生成解碼密鑰;其次將傳遞文件內(nèi)容賦值給字符串后進行分割得到二維數(shù)組;然后遍歷該二維數(shù)組并將其數(shù)值部分與解碼密鑰逐一運算,將ASCII碼轉(zhuǎn)換回數(shù)字;最后用LazyOffice辦公插件命令將解密后的二維數(shù)組寫入數(shù)據(jù)文件數(shù)據(jù)表的數(shù)據(jù)區(qū)域完成解碼。
本系統(tǒng)將地區(qū)電網(wǎng)調(diào)度傳統(tǒng)方式改為用微信(或i國網(wǎng))報送,并通過RPA程序自動隨時接收與整合的方式,實現(xiàn)調(diào)度零散數(shù)據(jù)隨報隨收的全自動化。地區(qū)電網(wǎng)調(diào)度員每個夜班減少接聽電話80多次,減少手工記錄數(shù)據(jù)260余條,既減少了基層員工的工作量,又提高了數(shù)據(jù)的準確性和調(diào)度日報的制作效率。