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