李佑群,向道豪,丁德紅
(1.國網湖南省力有限公司常德供電分公司,常德415000;2.湖南文理學院,常德415000)
隨著二維碼的普及與廣泛應用,日常生活中隨處都是可見的二維碼,二維碼以其簡單高效的信息攜帶功能深受人們的青睞。
縱觀二維碼發展歷史,二維碼最初便是用來存儲貨物信息、標記信息,由于二維碼攜帶信息的方便性,并且移動二維碼掃描技術的成熟,二維碼已經廣泛應用于移動支付,廣告引流等領域。那么,二維碼在設備管理領域中的應用如何呢?在設備管理中目前主要有以下管理方式:
(1)手工紙質記錄,管理巡視麻煩,人力成本大,記錄不規范。
(2)一維碼設備管理,攜帶少量信息,可以掃描識別,但無糾錯機制,容易無法識別。
(3)RFID 電子標簽管理,可讀可寫,存儲信息量大,但在金屬材質下較難使用,且造價為普通條碼標簽幾十倍,在大規模設備管理中難以使用。
(4)二維碼標簽管理,攜帶信息較多,存儲信息量介于電子標簽和一維碼之間,有糾錯機制,使用場景全面。
通過4 種方式對比分析可知,手工記錄和一維碼無法完成越來越多的管理需求和更多的場景。而RFID 和二維碼比較具有競爭性,但RFID 因價格高在大規模設備管理中是很難應用,而且因為信息可寫入,其安全性有一定隱患,并且需要專屬設備支持,在電力設備的復雜電磁環境下更難以使用。二維碼因為標簽是只讀的,也存在一定的安全隱患問題,要實現安全的二維碼信息存儲有兩種方式[1]:①只存儲設備的不敏感信息,查詢的時候進行加密處理。②對二維碼信息進行編碼重組,使用對稱加密算法進行加密內容。只有使用與加密時相同的密鑰才能解析二維碼內容,根據兩種方法比較,我們的設備是實時更新的,所以第一種方法更適用于本系統。我們將設備ID 嵌入到二維碼中,通過加密通道,將信息通過Web 平臺關聯到數據庫進行數據更新操作,而二維碼只要簡單存儲設備ID編碼即可。根據《湖南電網實物ID 建設及應用》[2],我們應該使設備ID 滿足以下特點:設備ID 唯一,所有設備擁有一個唯一的編碼;ID 碼不宜過長。雖然已有很多二維碼設備管理軟件,但我們發現用二維碼和Web平臺相結合來管理設備的這種架構還是比較少,相比之下,我們通過Web 平臺可以實現的功能有以下:
(1)統一的安全查詢接口,數據更加安全
(2)遠程巡視,只要手機有網,便可完成巡視。
(3)導入導出方便,通過用戶認證,可在多個設備導入導出。
鑒于上,我們得出使用二維碼具有攜帶量少、信息準確方便的特點,加上軟件系統實時高效的特點。我們可以預見將二維碼技術應用到電力設備管理上將使設備管理水平提高,更加科學和高效。本文主要介紹基于二維碼的電力設備管理與巡檢系統的實現。
電力公司的設備管理中,由于設備種類眾多,設備狀態多樣,設備數量大。在實際巡視過程中,采用人工紙質模式不能適應高效的管理模式。根據實際場景的要求,我們對系統提出了五個功能需求。
(1)設備的狀態及屬性管理,使用二維碼為設備提供準確唯一標記,掌握設備異動動向;
(2)根據準入系統、i6000、桌管系統的要求,建立完善的設備信息庫;
(3)根據信息系統運行要求,建立標準規范的巡視模板,并可持續修改。歷史巡視記錄實時上傳,通過后臺或App 可以實時查看;
(4)根據信息設備運行要求,建立設備狀態評估模塊,通過本系統可以查詢當前屬性狀態,對兩個系統的設備進行統計,實現對設備狀態的評估;
(5)與i6000、準入系統數據庫融合,便于數據導入和后期數據維護。
二維碼為什么可以作為設備標簽?二維條碼/二維碼(2-Dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的;通過圖像輸入設備或光電掃描設備自動識讀以實現信息自動處理。
二維碼有很多種,例如QR、PDF417、DM 等。我們現在最常用的是日本發明的QRCode 碼,這是一個經典的二維碼結構圖,之所以二維碼很容易掃描,其實在于它本身有一個容錯度,只要關鍵點沒破壞就很容易掃出來。

圖1 二維碼結構
生成一個二維碼流程通常是[3]:數據編碼、糾錯編碼、填充數據和糾錯碼字、填充尋像圖形、分隔符、矯正圖形與碼字、掩膜、生成版本信息和格式信息。
本系統二維碼標簽生成步驟:
二維碼生成過程復雜,而現在已經有很多廠商提供了開源的二維碼生成和解析工具。在本系統中我們使用Google 提供的ZXing 二維碼工具來實現生成二維碼標簽,具體生成步驟如下:
(1)利用本系統開發的Web 管理后臺來生成打印二維碼標簽所需的數據源文件(Excel)。
(2)利用標簽打印機提供的標簽格式編排軟件來進行標簽排版,并設置數據源為第一步生成的數據源文件。
(3)根據打印機型號選擇驅動,并安裝在桌面系統上。
(4)利用標簽編排軟件的批量打印功能即可完成二維碼標簽的批量生成。
數據庫選擇MySQL,Web 服務使用Spring MVC 框架進行開發,App 使用Android 平臺開發。
Web 后臺服務使用模型-視圖-控制器(Model-View-Controller,MVC)設計模式[4]進行設計與實現。Spring 框架提供了Spring MVC 來實現對MVC 模式的支持,這使我們更專注于業務邏輯,我們根據對分發器進行自定義設計,包括可配置的處理器映射、視圖解析、本地化、主題解析等。在通信過程中我們采用Spring 提供的AOP(Aspect Oriented Programming)功能做安全控制,防止數據被非法獲取。
MySQL 作為輕量級數據庫相比DB2、Oracle 等具有部署靈活即時使用特點。
Web 管理頁面采用前端顯示采用HTML+CSS+JavaScript 技術,而在Spring 中HTML 頁面則由JSP(Java Server Pages)構成,實現良好的顯示效果,其主要包含的功能有:數據融合,以Excel 的形式導入導出。
移動App 使用Android 平臺開發,通過Android 平臺我們可以使盡量多的用戶能使用App 來減少巡視需要的成本。并且對于服務器與App 的通信方面我們以標準的RESTful API 形式接口與服務器通信交換數據,一方面它使我們前后端數據交接變得更加容易,另一方面,以后對程序的擴展和維護也變得更加簡單。

圖2 系統模塊圖
分析了電力設備中使用的數據我們發現,使用中的設備指標屬性由于設備類型的差異,導致各種設備的衡量屬性也比較大。在這種情況下我們就不能直接使用傳統的設備屬性同一張表來記錄數據。在本系統中,我們將設備類型抽象出來作為一個單獨實體,一個設備類型決定屬性的多少,這樣便可實現設備屬性的差異化。然后一個數據項同時屬于一個設備和一個屬性,只需要進行簡單的關聯操作我們就可以進行數據的查詢。
然后就是設備巡視的部分,設備巡視單獨作為一個實體用于方便用戶查詢對設備的更改情況。用戶在巡視對設備進行維護的同時創建一個巡視記錄。同時為了方便數據查詢和安全控制,我們用設備類型、設備屬性、設備、設備數據這四個基本表創建一個可以顯示設備詳細信息的視圖以達到數據查詢簡化和安全控制的目的,圖3 為數據庫設計ER 圖。

圖3 數據庫ER圖
后端使用Spring MVC 框架,在這個框架中我們可以快速實現我們的業務邏輯。在Spring MVC 框架中我們將實現分為三層既視圖-控制器-模型三部分。如圖3 所示。這里的視圖層就是前端頁面HTML、CSS、JavaScript 組成。然后控制器就是在Java 代碼中帶有@Controller 標記的類以及方法。而模型在本系統中主要就是數據對應的Java Bean 以及對數據庫的操作。圖4 為后端服務工作流程,當請求是Web 用戶發起時,將包含圖中整個工作流程。而移動端發起數據請求時,則不會包含視圖渲染這一步驟,這時會直接通過消息轉換器(Message Converter)將請求轉換為JSON 格式數據并發送給客戶端。接口設計根據RESTful/HTTP 規范[5]設計,以利于雙方更容易實現通信。
移動App 是巡視工具的實現。我們通過ZXing 實現二維碼掃描功能。ZXing 是谷歌提供的一個開源解析二維碼的一個工具包。通過對配置,我們可以很快用上ZXing 的二維碼掃描功能。界面設計采用流行的ViewPager+Tabsegment 模式,可以很方便的實現功能選擇和切換。4 個fragment 功能頁分別是設備掃描修改、巡視歷史記錄、設備統計信息和用戶個人信息的修改。數據存儲分在線和手機緩存結合方式,當手機無法與服務器連接時,我們也可以通過App 本地緩存查看我們巡視過的歷史記錄,其他功能則必須App 連接服務器才能使用,以下是App 界面效果圖。

圖4 后臺服務工作流程

圖5 數據管理頁面
后端管理采用H5 頁面,用左收縮菜單選擇操作,也同時便于功能的增加,左右分別為兩個容器,目前可支持的操作有數據導入導出,二維碼表的生成。
本系統完成后,應該部署在具有SSL 證書的服務器上,從而實現HTTPS 加密通道通信,但這依然不是萬全之策,依然有很多破解手段。為了有更安全的保護措施以及更廣泛的使用場景(即使在HTTP 協議下),本系統設計了一層加密保護層,加密App 向服務器發送的數據,具體實現如下。

圖6 App界面效果
(1)數據接口簽名驗證,對App 發往服務器的數據請求內容與當前時間戳以及加密密鑰混合成一個字符串。然后計算該混合字符串的MD5 值。將數據內容與計算出來的MD5 一起發往服務器。服務器接收到請求后,同樣根據數據內容和時間戳以及加密密鑰計算出一個MD5 值,若計算出的MD5 值與接收到的MD5 值相同,則驗證通過,若MD5 值不同或沒有則該數據很有可能是被篡改過的數據,服務器返回簽名錯誤,這樣可以使我們的數據遭到篡改的可能大大降低。
(2)數據內容加密,雖然使用方法(1)可以使數據不會被篡改,但同樣存在著接口內容暴露的風險,接口數據被收集。因此我們對接口發送的數據進行一次加密,即使數據被截取,依然無法得到數據內容。具體采用的算法為DES 加密算法。這是一種對稱加密算法,發送方通過密鑰進行加密,接收方通過相同的密鑰解密就可以查看明文。
數據接收時,我們利用Spring MVC 提供的面向切面編程(AOP)方法可以很方便地完成安全驗證工作。其具體實現是,定義過濾器過濾來自App 的請求,并對請求數據流重新封裝(為了避免攔截器使用數據流后控制器獲取不到數據)。定義攔截器攔截來自App 的數據,檢查MD5 簽名值是否正確,如果正確放行,否則返回簽名錯誤。定義消息轉換器,解密DES 加密后的數據內容并且去掉簽名值等安全驗證字段,數據會傳送給控制器,如果解密失敗則返回解密錯誤信息。這樣做好處很明顯,我們可以方便控制安全請求,并且不會干擾到具體的業務邏輯。圖7 是系統安全控制流程。
本文設計了基于Spring MVC 架構的二維碼設備管理系統,開發環境為Idea、Android Studio,使用Java實現主要代碼。存儲數據庫使用MySQL,Web 服務系統使用Apache Tomcat 9.0 作為載體。該二維碼設備管理系統打破了傳統手工記錄設備情況的模式,提高了工作效率,并且會大大改善數據出錯的情況,使設備管理更加科學和有效。根據陳瑪玲在《電力設備巡視中的問題分析和策略》中列出的電力設備巡視的四大問題[6],我們要用更先進的方式來驅動解決這些問題。相比傳統模式,優勢很明顯,基于此我們開發出的這套設備巡視系統,可以為同行提供參考與借鑒,要實現更加全面和功能更加完善的設備管理系統,我們只是剛剛開始。

圖7 App安全控制流程