吳海輝
摘 要:本文介紹了一個(gè)試驗(yàn)數(shù)據(jù)備份整理系統(tǒng),描述了系統(tǒng)的原理,構(gòu)成和用途。該系統(tǒng)主要用于電氣試驗(yàn)數(shù)據(jù)的收集備份,也為進(jìn)一步的整理和分析數(shù)據(jù)提供了方便。
關(guān)鍵詞:電氣試驗(yàn);數(shù)據(jù);Python sqlite
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
預(yù)防性試驗(yàn)是電氣設(shè)備診斷的重要手段。周期性的預(yù)防性試驗(yàn)產(chǎn)生大量的試驗(yàn)數(shù)據(jù)。為了便于數(shù)據(jù)的比較分析,需要對(duì)大量的試驗(yàn)數(shù)據(jù)進(jìn)行儲(chǔ)存和整理。當(dāng)前,試驗(yàn)數(shù)據(jù)主要儲(chǔ)存于企業(yè)級(jí)數(shù)據(jù)系統(tǒng)中,即由企業(yè)建立專門的試驗(yàn)數(shù)據(jù)存儲(chǔ)系統(tǒng),數(shù)據(jù)儲(chǔ)存在后臺(tái)數(shù)據(jù)庫中,試驗(yàn)人員使用專門界面登錄系統(tǒng),錄入或者查閱試驗(yàn)數(shù)據(jù)。由于系統(tǒng)開發(fā)和運(yùn)維方面存在著不足,試驗(yàn)人員往往難以調(diào)閱試驗(yàn)數(shù)據(jù)來進(jìn)行綜合分析。另外,由于試驗(yàn)數(shù)據(jù)是集中儲(chǔ)存的,當(dāng)系統(tǒng)故障或者網(wǎng)絡(luò)中斷時(shí),試驗(yàn)數(shù)據(jù)就不能錄入和讀取。所以,在企業(yè)級(jí)的試驗(yàn)儲(chǔ)存系統(tǒng)之外,試驗(yàn)人員還需要另外一套本地化的數(shù)據(jù)備份整理系統(tǒng)作為補(bǔ)充。
本文作者使用Python語言和sqlite數(shù)據(jù)庫開發(fā)了一套試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)。該系統(tǒng)自動(dòng)從企業(yè)級(jí)數(shù)據(jù)系統(tǒng)收集實(shí)驗(yàn)數(shù)據(jù)并儲(chǔ)存進(jìn)本地的數(shù)據(jù)庫中。
1 企業(yè)級(jí)數(shù)據(jù)系統(tǒng)試驗(yàn)數(shù)據(jù)的構(gòu)成
目前,筆者供職的廣東電網(wǎng)公司的企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上的試驗(yàn)數(shù)據(jù)是以單個(gè)試驗(yàn)報(bào)告的形式錄入和展示的。一個(gè)試驗(yàn)報(bào)告既包含試驗(yàn)時(shí)間,氣溫等試驗(yàn)信息,也包含試驗(yàn)數(shù)據(jù)。試驗(yàn)信息被包含在JSON格式的數(shù)據(jù)包里面,數(shù)據(jù)高度格式化,可以統(tǒng)一處理。試驗(yàn)數(shù)據(jù)被包含在HTML格式的數(shù)據(jù)包里面的,形式多變,因而需要對(duì)每一種試驗(yàn)報(bào)告單獨(dú)處理。
企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上的每一個(gè)試驗(yàn)報(bào)告都有唯一的一個(gè)身份編號(hào)(id),是一個(gè)32位的十六進(jìn)制整數(shù)。Id自報(bào)告創(chuàng)建時(shí)起就存在。不論試驗(yàn)報(bào)告經(jīng)過哪一個(gè)節(jié)點(diǎn),id都是不變的。企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上的一個(gè)試驗(yàn)報(bào)告都會(huì)依次經(jīng)歷創(chuàng)建,審核,審批三個(gè)時(shí)間節(jié)點(diǎn)。每一個(gè)試驗(yàn)報(bào)告都有一個(gè)流程號(hào),可能的取值是0,1和2,分別代表報(bào)告處于已創(chuàng)建,已審核和已審批三個(gè)階段。
企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上有一個(gè)報(bào)告列表,也使用JSON協(xié)議。列表上包括了每一個(gè)報(bào)告的id,流程號(hào),計(jì)劃編號(hào),試驗(yàn)班組等信息。
2 試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)的工作原理和模塊構(gòu)成
試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)由多個(gè)模塊構(gòu)成。這些模塊可分為主控模塊,接口模塊,網(wǎng)頁數(shù)據(jù)處理模塊。試驗(yàn)數(shù)據(jù)存放在一個(gè)名為Data.db的sqlite數(shù)據(jù)庫文件中。另外有系統(tǒng)日志存放在一個(gè)名為Work.db的sqlite數(shù)據(jù)庫文件中。
2.1 系統(tǒng)工作原理與主控模塊
試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)包含有一個(gè)主控模塊,腳本文件名為Main Control.py。主控模塊可由操作系統(tǒng)定時(shí)啟動(dòng),亦可人工啟動(dòng)。啟動(dòng)后,主控模塊首先加載各個(gè)接口模塊。然后登陸企業(yè)級(jí)數(shù)據(jù)系統(tǒng),并獲取報(bào)告列表。然后依次讀出列表中每一個(gè)報(bào)告的信息,包括報(bào)告的名稱,創(chuàng)建班組,計(jì)劃編號(hào),id和流程號(hào)。通過id和流程號(hào)在日志中查找處理記錄。如果在日志中找到成功處理或跳過的記錄,就讀出列表中下一個(gè)報(bào)告的信息。如果在日志中沒有找到這樣的記錄,通過報(bào)告名稱查找對(duì)應(yīng)的網(wǎng)頁數(shù)據(jù)處理模塊來處理此報(bào)告。網(wǎng)頁數(shù)據(jù)處理模塊若成功將試驗(yàn)信息和數(shù)據(jù)寫入數(shù)據(jù)庫,則返回成功的信息;若試驗(yàn)數(shù)據(jù)缺失,則將試驗(yàn)信息寫入數(shù)據(jù)庫無意義,此時(shí)網(wǎng)頁數(shù)據(jù)處理模塊返回跳過的信息,提示試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)以后忽略此報(bào)告;若是其他的原因?qū)е聦懭霐?shù)據(jù)庫失敗,則網(wǎng)頁數(shù)據(jù)處理模塊返回失敗的信息。待網(wǎng)頁處理模塊返回信息后,主控模塊就將報(bào)告處理的結(jié)果(成功,失敗或者跳過)寫入日志,隨后讀出列表中下一個(gè)報(bào)告的信息。如此循環(huán)往復(fù),直至整個(gè)報(bào)告列表被遍歷。最后,主控模塊關(guān)閉Data.db文件和Work.db文件并退出。至此試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)的一次工作完成。
2.2 接口模塊
接口模塊主要有四個(gè),分別為超級(jí)接口,企業(yè)系統(tǒng)接口,試驗(yàn)數(shù)據(jù)庫接口和日志數(shù)據(jù)庫接口。
2.2.1 超級(jí)接口
超級(jí)接口的腳本文件名為Super Base Interface.py,包含了Super Base Interface類。當(dāng)這個(gè)類實(shí)例化時(shí),它會(huì)從一個(gè)名為作業(yè)表單處理器表.xlsx的Excel文件讀取試驗(yàn)報(bào)告與處理模塊的對(duì)應(yīng)表,并通過Get Handler Name方法返回給調(diào)用它的主控模塊。此外,主控模塊首先加載超級(jí)接口模塊,所以它可以作為未來程序擴(kuò)展的掛載點(diǎn),并因此得名超級(jí)接口。
2.2.2 企業(yè)系統(tǒng)接口
企業(yè)系統(tǒng)接口的腳本文件名為PSystem4A Interface.py。本模塊中,通過PSystem4A Interface類封裝了登錄企業(yè)級(jí)數(shù)據(jù)系統(tǒng)和從這個(gè)系統(tǒng)中獲取網(wǎng)頁的功能。調(diào)用此類中的Single Login方法并提供賬號(hào)和密碼參數(shù)就可以登錄系統(tǒng)。調(diào)用POST方法就可以向企業(yè)級(jí)數(shù)據(jù)系統(tǒng)的服務(wù)器進(jìn)行POST詢問。調(diào)用GET方法就可以向企業(yè)級(jí)數(shù)據(jù)系統(tǒng)的服務(wù)器進(jìn)行GET詢問。GetIndex Json方法返回從企業(yè)級(jí)數(shù)據(jù)系統(tǒng)獲得的JSON格式的報(bào)告列表。
2.2.3 試驗(yàn)數(shù)據(jù)庫接口
試驗(yàn)數(shù)據(jù)接口模塊的腳本文件名為Data DB Interface.py。內(nèi)含Data DB Interface類,封裝了對(duì)Data.db數(shù)據(jù)庫的操作。此類中提供了WriteDict方法,可以把一個(gè)字典對(duì)象寫入由參數(shù)指定的數(shù)據(jù)表中。
2.2.4 日志數(shù)據(jù)庫接口
日志數(shù)據(jù)接口模塊的腳本文件名為Work Db Interface.py。內(nèi)含Work Db Interface類,封裝了對(duì)Work.db數(shù)據(jù)庫的操作。此類中提供了Set Log方法,可以寫入一條日志。同時(shí)提供了Check Code方法供主控模塊調(diào)用,用以在日志中查找成功或者跳過記錄。
2.3 網(wǎng)頁數(shù)據(jù)處理模塊
網(wǎng)頁數(shù)據(jù)處理模塊目前有25個(gè),各負(fù)責(zé)處理一種試驗(yàn)報(bào)告。每一個(gè)網(wǎng)頁數(shù)據(jù)處理模塊都會(huì)加載企業(yè)系統(tǒng)接口模塊和數(shù)據(jù)庫接口模塊。網(wǎng)頁數(shù)據(jù)處理模塊中的同名類(例如,PD10CBCHandler中的PD10CBCHandler類)提供兩個(gè)公共方法,Load Data和Write Data。Load Data方法從企業(yè)級(jí)數(shù)據(jù)系統(tǒng)中獲取試驗(yàn)信息和數(shù)據(jù),并存入類成員中。Write Data方法把試驗(yàn)信息和數(shù)據(jù)寫入試驗(yàn)數(shù)據(jù)庫Data.db中對(duì)應(yīng)的數(shù)據(jù)表。
2.4 試驗(yàn)數(shù)據(jù)的儲(chǔ)存
試驗(yàn)數(shù)據(jù)儲(chǔ)存在sqlite數(shù)據(jù)庫文件Data.db中。數(shù)據(jù)庫中包含了多個(gè)數(shù)據(jù)表,每個(gè)數(shù)據(jù)表記一種試驗(yàn)報(bào)告的信息和數(shù)據(jù)。數(shù)據(jù)表的一條記錄包含了時(shí)間戳,試驗(yàn)時(shí)間、地點(diǎn)等信息和試驗(yàn)數(shù)據(jù)。時(shí)間戳是數(shù)據(jù)表的主鍵。
3 試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)的應(yīng)用
試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)的首要用途是試驗(yàn)數(shù)據(jù)的備份。如前所述,當(dāng)前試驗(yàn)數(shù)據(jù)主要是集中儲(chǔ)存于企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上。當(dāng)網(wǎng)絡(luò)出現(xiàn)故障,試驗(yàn)數(shù)據(jù)就不能被人讀取和使用。如果數(shù)據(jù)系統(tǒng)發(fā)生故障,甚至有丟失試驗(yàn)數(shù)據(jù)的風(fēng)險(xiǎn)。筆者開發(fā)的試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)可以運(yùn)行于試驗(yàn)人員的個(gè)人電腦上,自動(dòng)對(duì)數(shù)據(jù)進(jìn)行備份,實(shí)現(xiàn)分散儲(chǔ)存。當(dāng)企業(yè)級(jí)數(shù)據(jù)系統(tǒng)無法訪問時(shí),試驗(yàn)人員可以到本人計(jì)算機(jī)上的Data.db數(shù)據(jù)庫里調(diào)出試驗(yàn)數(shù)據(jù)使用。由于數(shù)據(jù)統(tǒng)一來源于企業(yè)級(jí)數(shù)據(jù)系統(tǒng),因而保證了數(shù)據(jù)的一致性。所以,筆者開發(fā)的試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)是企業(yè)級(jí)數(shù)據(jù)系統(tǒng)的有力補(bǔ)充。
其次,試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)還方便了試驗(yàn)數(shù)據(jù)的整理和分析。因?yàn)槠髽I(yè)級(jí)數(shù)據(jù)系統(tǒng)要保證安全,不會(huì)對(duì)普通用戶開放數(shù)據(jù)庫接口,所以,試驗(yàn)數(shù)據(jù)的讀取只能通過一定的界面進(jìn)行,如筆者所用的企業(yè)級(jí)資產(chǎn)管理系統(tǒng)就是通過網(wǎng)頁來展現(xiàn)試驗(yàn)數(shù)據(jù)的。這樣就限制了對(duì)試驗(yàn)數(shù)據(jù)的綜合分析。例如,如果試驗(yàn)人員需要統(tǒng)計(jì)某型110kV電容式套管的介損試驗(yàn)數(shù)據(jù)來作為參考,就只能先查找設(shè)備臺(tái)賬,找出該型套管的安裝位置,然后在企業(yè)級(jí)數(shù)據(jù)系統(tǒng)上按變電站查找套管試驗(yàn)報(bào)告,再逐一打開報(bào)告網(wǎng)頁,記錄數(shù)據(jù)。試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)給試驗(yàn)人員提供了一個(gè)可供自己支配的數(shù)據(jù)庫,只需一個(gè)查詢語句就可以找出上述數(shù)據(jù)。此外,筆者也寫了一個(gè)Python腳本Db2xlsx.py,可以將Data.db數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)出到一個(gè)Excel文檔上面,更加方便了數(shù)據(jù)的整理和分析。
將來,試驗(yàn)數(shù)據(jù)備份整理系統(tǒng)收集的數(shù)據(jù)還可以用于對(duì)電氣設(shè)備基于統(tǒng)計(jì)的健康評(píng)估,使每個(gè)電氣試驗(yàn)人員都邁入到大數(shù)據(jù)時(shí)代。
參考文獻(xiàn)
[1] Python學(xué)習(xí)手冊[M].北京:機(jī)械工業(yè)出版社,2011.
[2] Python核心編程[M]. 北京:人民郵電出版社,2008.
[3] SQLite權(quán)威指南(第二版)[M]. 北京:電子工業(yè)出版社,2012.
[4] 圖解HTTP[M].北京:人民郵電出版社,2014.
[5] The JSON Data Interchange Format[Z]. ECMA-404 1st Edition/October 2013.