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