李 冬 ,殷 紅 ,王 丹 ,2,林 濤 ,3
(1.中海油天津化工研究設計院有限公司,天津300131;2.河北工業(yè)大學 計算機科學與軟件學院,天津 300130;3.河北工業(yè)大學 控制科學與工程學院,天津 300130)
防爆電氣設備[1-2]作為廣泛應用于海上石油平臺爆炸危險場所的電氣設備,其正確的設計、選型和安裝是保障設備性能發(fā)揮的基礎,是確保海洋石油開發(fā)安全生產的重要環(huán)節(jié)。由于防爆設備的分類多,產生問題的種類多,問題的復雜程度不一,傳統(tǒng)的設備檢查在處理問題的速度以及高效性上已經越來越不能滿足人們的需要。
本文針對現(xiàn)有防爆設備紙質巡檢方式繁瑣、復雜的問題,設計了一種用于Android平臺的方便、快捷的防爆設備智能管理系統(tǒng)。該系統(tǒng)由用于現(xiàn)場信息采集、檢查和維護的防爆移動終端和進行數(shù)據(jù)分析和處理的監(jiān)控中心組成。實現(xiàn)了設備信息采集、狀態(tài)檢測,完成故障診斷與維護記錄。而要實現(xiàn)現(xiàn)場采集數(shù)據(jù)與服務器數(shù)據(jù)的同步是該系統(tǒng)的重要環(huán)節(jié)。
防爆設備智能管理系統(tǒng)移動端是運行在Android平臺上的系統(tǒng)[3]。移動設備硬件資源有限,這就要求在進行系統(tǒng)設計時不僅要考慮到系統(tǒng)的性能問題,還要考慮系統(tǒng)的內存容量問題。以一個大型的石油開采的國家企業(yè)為例,一個企業(yè)下邊會有多個集團公司,每個集團公司下邊有多個子公司,每個子公司下邊會有多個生產設施,每個生產設施中有上百臺防爆設備需要管理。針對系統(tǒng)巨大的數(shù)據(jù)量必須給出相應的解決方案,否則系統(tǒng)很有可能因為內存不足而癱瘓。根據(jù)實際考察發(fā)現(xiàn),不同防爆區(qū)域的防爆設備的種類有很大差異,那么防爆設備智能管理系統(tǒng)的數(shù)據(jù)就可以以單個防爆區(qū)域為界,保證系統(tǒng)只應用于當前防爆區(qū)域,系統(tǒng)中所存儲的知識庫中包含1個公司信息,這樣就大大減少了系統(tǒng)的數(shù)據(jù)量級,保證了系統(tǒng)的內存使用率。
雖然Android平臺的防爆設備智能管理系統(tǒng)的數(shù)據(jù)級是以防爆區(qū)域為單位的,但是又要做到對多個防爆區(qū)域的整體把控,可以將移動終端數(shù)據(jù)經過Socket通信同步到區(qū)域的服務端,再對區(qū)域的服務端進行整合,從而達到對多個防爆區(qū)域把控的目的。考慮到防爆設備的無網絡工作環(huán)境,設計數(shù)據(jù)同步模塊進行移動終端與服務端的數(shù)據(jù)通信。將所采集到的設備的基本信息和狀態(tài)信息的數(shù)據(jù),以及設備維護記錄的數(shù)據(jù)同步到區(qū)域數(shù)據(jù)庫中,區(qū)域數(shù)據(jù)庫再與公司總數(shù)據(jù)庫通信,保證公司對所有區(qū)域防爆設備的運行狀況進行整體把控。
上述設計1個防爆移動終端只應用于1個防爆區(qū)域,只存儲1個公司的知識庫。這樣移動終端上的規(guī)則庫相較于PC機端的規(guī)則庫不甚全面。因此在對特定故障設備進行診斷時如果沒有得到相應的診斷結果,則可以通過在線幫助模塊,通過上位機進行更為詳細的故障診斷。當操作員在為故障設備進行整修時,盡管系統(tǒng)給出了專家意見,但是在操作中可能存在各種各樣的執(zhí)行問題,這時操作員就可以通過在線幫助模塊的在線客服向專家求助,根據(jù)專家指導解決當前故障。
JSON(Java script object notation)是一種輕量級的數(shù)據(jù)交換格式,具有良好的可讀性、可擴展性、簡單規(guī)范性、編碼解碼比較簡單等優(yōu)點,其結構分為2種,組合2種結構就可以形成復雜的數(shù)據(jù)結構[4]。其結構如下:
對象對象在JSON中表示為“{}”括起來的內容,數(shù)據(jù)結構為{key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,易于理解,取值方法為“對象.key”獲取屬性值,這個屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
數(shù)組數(shù)組在JSON中是中括號“[]”括起來的內容, 數(shù)據(jù)結構為["device","problem","photo",...],取值使用索引獲取,字段值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。
JSON有豐富的編碼和解碼工具,比較常用的有Gson和JSONObject。Android SDK中提供的org.json包中的JSONObject類庫作為解析工具時是通過對key索引的查找來找到JSON key對應的value值,然后創(chuàng)建一個變量用于保存解析結果即可。JSONObject提供2種方法來讀取,在開發(fā)者確定key必定存在的時候使用 JSONObject.getString(String name)方法來讀取即可,在key不確定情況下需要使用 jsonObject.optString(String name)來取值,追蹤optString(String name)方法源碼可看出,在其未找到這個key時,會默認給予一個空字符串作為返回值。
但是,防爆設備智能管理系統(tǒng)在與服務端進行通信時,傳輸?shù)臄?shù)據(jù)是整個防爆區(qū)域的數(shù)據(jù),數(shù)據(jù)量較大,這時候JSONObject的劣勢就被明顯擴大化,在開發(fā)時間、容錯、擴展及版本迭代等方面都存在問題,因此使用谷歌提供的Gson工具類來解析對象,Gson采用反射原理,反射找出所有變量,然后對應上JSON所需要的key,尋找key的過程是不需要開發(fā)人員參與的,這樣不僅精簡了代碼,也提高了系統(tǒng)的性能。
JSON封裝的實現(xiàn)方案是一個逆向的過程,通過JSONObject方式所調用的方法為jsonObject.put(String name,boolean value) 來添加一個 key&value,而Gson則直接轉換實體對象,所調用方法為gson.toJson(Object src)。兩者都可達到封裝 JSON 數(shù)據(jù)的目的。org.json包中提供toJSONString()方法,可以查看JSON的字符串結構。
本文的設備信息數(shù)據(jù)的JSON結構如下:

移動終端與服務端通信時,任務的執(zhí)行速度受網絡環(huán)境以及數(shù)據(jù)量大小等多種因素影響。Android應用中如果一個界面超過5 s沒有響應就會出現(xiàn)ANR錯誤。為了避免ANR錯誤,本文的數(shù)據(jù)通信采用異步請求方式處理,移動終端發(fā)送上傳或下載數(shù)據(jù)請求后,由異步線程在后臺進行執(zhí)行,不會影響系統(tǒng)本身的使用,當服務端有數(shù)據(jù)返回時,采用回調方式進行處理。移動終端上傳數(shù)據(jù)時網絡請求異步線程流程如圖1所示。

圖1 移動終端上傳數(shù)據(jù)網絡請求異步線程流程Fig.1 Flow chart of mobile terminal upload data network request asynchronous thread
移動終端與服務端進行通信,上傳的數(shù)據(jù)主要包括設備基本信息、設備問題信息、設備維護記錄信息、照片信息等。移動終端向服務端上傳數(shù)據(jù)時,連接成功建立后,首先向服務端發(fā)送上傳數(shù)據(jù)標志,表明此次連接的目的。之后對將要上傳的數(shù)據(jù)進行JSON封裝,將封裝完成的數(shù)據(jù)發(fā)送給服務端。數(shù)據(jù)發(fā)送完成后,移動終端向服務端發(fā)送上傳完成的信號,等待服務端響應。若移動終端收到服務端接收完成的信號,提示上傳成功,關閉Socket連接,此次數(shù)據(jù)上傳服務結束。若6 s后仍未收到服務端接收成功的信號,則提示上傳失敗,關閉Socket連接,服務結束[5]。移動終端上傳數(shù)據(jù)的流程如圖2所示。

圖2 移動終端上傳數(shù)據(jù)的流程Fig.2 Flow chart of mobile terminal of upload data
移動終端與服務端進行通信,下載的數(shù)據(jù)主要包括設備基本信息、設備問題信息、國標信息、設備維護記錄信息等。移動終端下載數(shù)據(jù)時,連接建立成功后移動終端向服務端發(fā)送下載數(shù)據(jù)標志,之后等待服務端的數(shù)據(jù)。若接收到服務端數(shù)據(jù),則對數(shù)據(jù)進行JSON解析,之后存入本地SQLite數(shù)據(jù)庫中[6]。當收到服務端發(fā)出的傳輸完成的信號,向服務端發(fā)送接收完成的信號,提示下載成功,關閉Socket連接,此次下載數(shù)據(jù)服務結束。若超過規(guī)定時間6 s后仍未收到服務端的響應,說明網絡環(huán)境較差,或者服務端出現(xiàn)故障,則提示下載失敗,關閉Socket連接,服務結束。移動終端下載數(shù)據(jù)的流程如圖3所示。
移動終端上傳數(shù)據(jù)完成之后系統(tǒng)要自動清除已經上傳完畢的設備信息、診斷記錄以及相應的照片。下次設備檢查之前,再使用下載功能,從區(qū)域數(shù)據(jù)庫同步防爆區(qū)域的設備基本信息,以及歷史的問題記錄。

圖3 移動終端下載數(shù)據(jù)的流程Fig.3 Flow chart of mobile terminal of download data
接口IDbBase負責系統(tǒng)與數(shù)據(jù)庫的交互,DbBase類具體實現(xiàn)了IDbBase接口。移動終端在上傳成功后,在回調函數(shù)中調用DbBase中的刪除數(shù)據(jù)庫中數(shù)據(jù)的方法,deleteDevice()清空設備信息表,deleteProblem()清空設備問題表,deleteRecord()清空設備記錄表,deletePhoto()清空照片信息表等。在清空照片信息表之前,調用deletefile()方法,根據(jù)表中記錄的照片地址,刪除已經成功上傳的SD卡中的照片。
系統(tǒng)采用基于TCP協(xié)議的Socket通信進行移動終端與服務端通信。在進行文件傳輸時,為了保證服務器能提供高效、穩(wěn)定的服務,服務端必須建立Buffer池處理傳輸時的流文件,防止內存碎片。
由于系統(tǒng)需要對維護整修后的設備進行拍照記錄維護結果。那么在平均每個區(qū)域百臺設備的情況下,如果對30%的設備進行了拍照結果記錄,那這個內存占用量也是相當巨大。因此不僅要對拍照后的照片進行壓縮,保存為bitmap格式,也要定期將照片上傳到服務端存儲,然后清除已上傳的照片,降低系統(tǒng)內存溢出的風險。
在對設備進行檢查的過程中,采用的是防爆設備檢查的國家標準,為了保證設備檢查的正確性、規(guī)范性,必須不定時更新相關的設備檢查國家標準。因此數(shù)據(jù)同步模塊還要實現(xiàn)對防爆設備檢查的國家標準的實時更新。
移動終端向服務端傳輸設備維護記錄的照片時,是以文件的形式進行傳輸?shù)摹姆斩送阶钚碌膰鴺藭r,也是以文件的形式傳輸?shù)摹N募淖x取方式大致分為2種,流和BASE64。本文采用流方式讀取。因為移動終端的內存有限,文件采用寫入的方式存放在存儲空間,為避免發(fā)生內存溢出,流文件每次讀取的大小都固定為10 kb,每次讀取之后就寫入存儲空間,當數(shù)據(jù)總長和讀取總長一致就代表文件下載成功。因此進行文件傳輸時,要先傳輸文件的大小,接收之后方可進行大小比對,判斷文件是否成功接收。相比于讀取,上傳則較為復雜,文件上傳一般是使用流文件。而單文件和多文件實際步驟上差別不大,正如文件讀取一樣,文件上傳通過寫入流到網絡請求中再提交到服務端即可。
服務端接收數(shù)據(jù)時,連接建立成功并收到移動終端的上傳數(shù)據(jù)請求標志后,服務端等待接收移動終端數(shù)據(jù)。服務端收到移動終端數(shù)據(jù)后,對收到的數(shù)據(jù)進行JSON解析,并將解析后的數(shù)據(jù)存入數(shù)據(jù)庫中。若服務端收到移動終端的上傳完成的信號,則向移動終端發(fā)送接收完成的信號,關閉Socket連接服務結束。若超過規(guī)定時間6 s后仍未收到移動終端的響應,說明網絡環(huán)境較差,或者移動終端出現(xiàn)故障,則接收失敗,關閉 Socket連接,服務結束。服務端接收數(shù)據(jù)的流程如圖4所示。
服務端發(fā)送數(shù)據(jù)時,連接建立成功并收到移動終端下載數(shù)據(jù)請求標志后,服務端從區(qū)域數(shù)據(jù)庫中查找數(shù)據(jù),并封裝成JSON格式,發(fā)送給移動終端。服務端發(fā)送完數(shù)據(jù)后,向移動終端發(fā)出傳輸完成的信號,等待移動終端響應。若收到移動終端接收完成的信號后,發(fā)送成功,關閉Socket連接,服務結束。若超過規(guī)定時間6 s后仍未收到移動終端的響應,說明網絡環(huán)境較差,或者移動終端出現(xiàn)故障,則發(fā)送失敗,關閉Socket連接,服務結束。服務端發(fā)送數(shù)據(jù)的流程如圖5所示。

圖5 服務端發(fā)送數(shù)據(jù)的流程Fig.5 Flow chart of server sending data
數(shù)據(jù)同步模塊主要負責移動終端和服務端之間的數(shù)據(jù)通信。移動終端向服務端上傳新的設備基本信息、設備問題記錄、設備維護記錄等數(shù)據(jù),上傳成功后自動清空已經上傳完畢的診斷記錄以及相應的照片。移動終端從服務器下載防爆區(qū)域的設備基本信息,某一時間段的設備歷史問題記錄,以及最新的防爆設備檢查國家標準。
移動終端通過SocketActivity與服務端進行數(shù)據(jù)通信。首先SocketActivity提供IP地址和端口號調用異步請求類HttpSocketTask,發(fā)起Socket連接,并進行數(shù)據(jù)交互,之后SocketActivity中doSocket-Task()回調異步請求結果。進行數(shù)據(jù)交互時,需要與本地數(shù)據(jù)庫進行交互,IDbBase是負責程序與本地數(shù)據(jù)庫交互的接口,DbBase是接口的實現(xiàn)類。主要是對數(shù)據(jù)庫中的數(shù)據(jù)進行存儲、刪除和修改。移動終端與服務端通信的類圖如圖6所示。

圖6 移動終端與服務端通信類圖Fig.6 Mobile terminal and server communication class diagram
本文詳細闡述了移動終端和服務端的數(shù)據(jù)同步功能,分別確定了移動終端和服務端的數(shù)據(jù)傳輸流程,包括數(shù)據(jù)上傳和下載。數(shù)據(jù)傳輸實時、準確,保證了智能管理系統(tǒng)的可靠運行。該系統(tǒng)已成功應用于中海石油海南液化天然氣有限公司,目前系統(tǒng)運行正常。整個系統(tǒng)可推廣到爆炸危險場所防爆電氣設備管理中。
[1]國家安全生產監(jiān)督管理總局.危險場所電氣防爆安全規(guī)范:AQ3009-2007[S].北京:煤炭工業(yè)出版社,2008.
[2]國家質量技術監(jiān)督局.爆炸性氣體環(huán)境用電氣設備 第15部分:危險場所電氣安裝(煤礦除外):GB3836.15-2000[S].北京:中國標準出版社,2001.
[3]何玉輝,原建偉,王坤.基于Android平臺手工電弧焊工藝專家系統(tǒng)的研究與實現(xiàn)[J].熱加工工藝,2014,43(23):215-218.
[4]范會敏,陳棚,張萌.基于Android的故障診斷專家系統(tǒng)設計與實現(xiàn)[J].石油管材與儀器,2015,1(4):21-24.
[5]戴建國,賴軍臣.基于圖像規(guī)則與Android手機的棉花病蟲害診斷系統(tǒng)[J].農業(yè)機械學報,2015,46(1):35-44.
[6]高洪巖.Android學習精要[M].北京:清華大學出版社,2012.