余 夢(mèng),李慧敏
(東華大學(xué) 機(jī)械工程學(xué)院,上海 201620)
近年來,隨著社會(huì)的發(fā)展,科技的進(jìn)步,人們的生活質(zhì)量有了很大提升,大型超市日益增多,市場(chǎng)上對(duì)于制冷壓縮機(jī)的需求量也逐漸增加。為了提高服務(wù)質(zhì)量,冷鏈節(jié)能設(shè)備企業(yè)逐漸開始重視對(duì)制冷壓縮機(jī)運(yùn)行情況的監(jiān)測(cè)。
傳統(tǒng)的監(jiān)測(cè)方式主要依靠技術(shù)人員親臨現(xiàn)場(chǎng),對(duì)制冷壓縮機(jī)的運(yùn)行參數(shù)進(jìn)行采集,然而這種人工監(jiān)測(cè)的方式已經(jīng)不能滿足現(xiàn)代企業(yè)的需求。同時(shí),企業(yè)的設(shè)備維護(hù)人員在現(xiàn)場(chǎng)進(jìn)行調(diào)試時(shí),無(wú)法方便、有效地查看設(shè)備運(yùn)行情況。對(duì)此,有必要開發(fā)設(shè)計(jì)一種基于移動(dòng)終端的無(wú)線數(shù)據(jù)監(jiān)測(cè)系統(tǒng)。該系統(tǒng)不僅能移動(dòng)、便攜地實(shí)現(xiàn)各項(xiàng)數(shù)據(jù)的監(jiān)測(cè),減少監(jiān)測(cè)人員的工作量,而且便于對(duì)分散的超市冷鏈系統(tǒng)實(shí)現(xiàn)集中化管理,并能及時(shí)預(yù)警,提高系統(tǒng)的安全性。
在移動(dòng)終端普及度極高的今天,手機(jī)或平板電腦上網(wǎng)已經(jīng)成為人們生活的一部分。Android由于其開源、市場(chǎng)占有率高等優(yōu)勢(shì)成為移動(dòng)端軟件開發(fā)的熱門平臺(tái)[1]。在此,利用Android平臺(tái)推出的SDK,藍(lán)牙傳輸技術(shù)、Tomcat服務(wù)器和SQL Server數(shù)據(jù)庫(kù),進(jìn)行超市冷鏈設(shè)備數(shù)據(jù)監(jiān)測(cè)系統(tǒng)的開發(fā),實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程監(jiān)控、信息管理和藍(lán)牙現(xiàn)場(chǎng)調(diào)試等功能。
圖 1 超市冷鏈設(shè)備數(shù)據(jù)監(jiān)測(cè)系統(tǒng)總體架構(gòu)Fig.1 Overall structure of supermarket cold chain equipment data monitoring system
圖3 各模塊界面Fig.3 Interface of each module
基于Android的超市冷鏈設(shè)備數(shù)據(jù)監(jiān)測(cè)系統(tǒng)總體架如圖1所示。該系統(tǒng)由4部分構(gòu)成:Android移動(dòng)終端、現(xiàn)場(chǎng)藍(lán)牙傳輸模塊、Tomcat服務(wù)器和SQL Server數(shù)據(jù)庫(kù)。
現(xiàn)場(chǎng)調(diào)試模式下,Android移動(dòng)終端通過調(diào)用藍(lán)牙串口,與現(xiàn)場(chǎng)藍(lán)牙模塊進(jìn)行配對(duì),使用Socket連接來進(jìn)行數(shù)據(jù)傳輸,主要用于維護(hù)人員進(jìn)行現(xiàn)場(chǎng)調(diào)試,也可實(shí)現(xiàn)監(jiān)測(cè)人員由無(wú)線網(wǎng)絡(luò)切換為藍(lán)牙進(jìn)行現(xiàn)場(chǎng)實(shí)時(shí)監(jiān)測(cè)。
遠(yuǎn)程監(jiān)控模式下,系統(tǒng)采用C/S架構(gòu),Android移動(dòng)終端通過HTTP協(xié)議和服務(wù)器進(jìn)行通信,Tomcat服務(wù)器通過JDBC——一種用于執(zhí)行SQL語(yǔ)句的Java API——連接數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改等操作[2],SQL Server數(shù)據(jù)庫(kù)存儲(chǔ)著從下位機(jī)發(fā)送來的超市冷鏈設(shè)備各項(xiàng)數(shù)據(jù)和用戶信息。當(dāng)用戶遠(yuǎn)程手持Android移動(dòng)終端,通過前臺(tái)APP進(jìn)行相關(guān)操作,移動(dòng)終端便可通過HTTP協(xié)議與后臺(tái)服務(wù)器建立連接,連接建立后前臺(tái)發(fā)送請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求,通過JDBC對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改等操作,并返回相關(guān)數(shù)據(jù)到前臺(tái)移動(dòng)終端,將結(jié)果顯示在APP界面上。
該監(jiān)測(cè)系統(tǒng)前臺(tái)客戶端共有10大模塊,如圖2所示。
前臺(tái)客戶端的信息管理、實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)、現(xiàn)場(chǎng)藍(lán)牙實(shí)時(shí)數(shù)據(jù)、硬件調(diào)試等模塊的界面如圖3所示。
客戶端應(yīng)用程序啟動(dòng)后,顯示用戶登錄界面,當(dāng)用戶輸入正確的用戶名和密碼后,即可進(jìn)入主界面。該界面有門店選擇模塊、用戶管理模塊和現(xiàn)場(chǎng)藍(lán)牙調(diào)試模塊可供選擇。在門店選擇界面中,當(dāng)用戶選擇了城市之后,可看到該城市的所有門店,此時(shí)用戶可通過點(diǎn)擊任意門店,進(jìn)入相應(yīng)門店的實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)模塊和歷史數(shù)據(jù)查詢模塊。在其實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)模塊中,用戶可監(jiān)測(cè)到壓力值、電能值、開關(guān)、繼電器和報(bào)警燈的實(shí)時(shí)數(shù)據(jù)與狀態(tài);在歷史數(shù)據(jù)查詢模塊中,用戶還可以通過選擇日期和器件來查看該元器件當(dāng)日的所有歷史數(shù)據(jù)。
在用戶管理界面中,用戶可進(jìn)行注冊(cè)用戶和查詢用戶信息的操作。在注冊(cè)用戶界面,管理人員可以注冊(cè)新員工(或門店)的姓名(門店名稱)、部門(門店地址)、電話、郵箱、賬戶、密碼等信息,提交之后存儲(chǔ)到數(shù)據(jù)庫(kù)中;在信息查詢界面,企業(yè)管理人員可以查詢所有員工和門店的相關(guān)信息。
在現(xiàn)場(chǎng)藍(lán)牙調(diào)試模塊中,用戶可以打開藍(lán)牙,選擇掃描到的附近藍(lán)牙設(shè)備進(jìn)行配對(duì)。配對(duì)成功后,用戶可以進(jìn)入該藍(lán)牙設(shè)備所在的超市門店實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)界面和硬件調(diào)試界面。在實(shí)時(shí)數(shù)據(jù)監(jiān)測(cè)界面中,用戶可以下拉刷新界面,監(jiān)測(cè)到當(dāng)前現(xiàn)場(chǎng)設(shè)備的最新實(shí)時(shí)數(shù)據(jù),便于設(shè)備維護(hù)人員了解設(shè)備的運(yùn)行情況;在硬件調(diào)試界面,維護(hù)人員可以通過藍(lán)牙來設(shè)置硬件的各項(xiàng)參數(shù)。同時(shí),現(xiàn)場(chǎng)用戶可將界面跳轉(zhuǎn)至藍(lán)牙調(diào)試模塊界面,進(jìn)行配對(duì)連接,配對(duì)成功后,數(shù)據(jù)傳輸方式由無(wú)線網(wǎng)絡(luò)傳輸轉(zhuǎn)換為藍(lán)牙傳輸,用戶可以監(jiān)測(cè)到當(dāng)下實(shí)時(shí)的數(shù)據(jù),減少了遠(yuǎn)程監(jiān)控模式下由于時(shí)間差導(dǎo)致的數(shù)據(jù)誤差。
圖4 遠(yuǎn)程監(jiān)控流程Fig.4 Remote monitoring flow chart
遠(yuǎn)程監(jiān)控的流程如圖4所示。前臺(tái)客戶端的任意遠(yuǎn)程監(jiān)控activity打開后,先初始化控件,顯示界面布局。當(dāng)客戶端接收到點(diǎn)擊事件后,隨即向服務(wù)器端發(fā)送請(qǐng)求,如果請(qǐng)求成功則接收服務(wù)器端的響應(yīng),獲取到JSON格式的數(shù)據(jù),然后客戶端再解析JSON數(shù)據(jù),并將數(shù)據(jù)顯示在界面中;如果請(qǐng)求服務(wù)器失敗則回復(fù)客戶端請(qǐng)求失敗的信息,提醒用戶。
設(shè)計(jì)中,采用HTTP協(xié)議以實(shí)現(xiàn)Android客戶端與后臺(tái)服務(wù)器的通信,選用HttpURLConnection方式發(fā)送POST請(qǐng)求。具體步驟如下:
步驟1創(chuàng)建1個(gè)URL,知道連接服務(wù)器的地址。
步驟2 設(shè)置HTTP協(xié)議的內(nèi)容。
步驟3 使用流寫入內(nèi)容。
步驟4 獲取響應(yīng)的輸入流。
要使用Android客戶端的網(wǎng)絡(luò)功能,必須在AndroidManifest.xml文件中增加訪問互聯(lián)網(wǎng)的權(quán)限[3],其代碼如下:
由于Android程序不允許在主線程中訪問網(wǎng)絡(luò),所以必須開啟1個(gè)子線程,在子線程中實(shí)現(xiàn)客戶端與后臺(tái)的通信。開啟子線程的方法是:在主程序中創(chuàng)建Thread對(duì)象,然后調(diào)用Thread類的start方法啟動(dòng)。
系統(tǒng)后臺(tái)服務(wù)器的流程如圖5所示。服務(wù)器開啟后,等待前臺(tái)客戶端的連接,當(dāng)有請(qǐng)求到達(dá)后,服務(wù)器端設(shè)置編碼格式,接收用戶請(qǐng)求,隨即連接數(shù)據(jù)庫(kù),根據(jù)請(qǐng)求操作數(shù)據(jù)庫(kù),最后獲取數(shù)據(jù),響應(yīng)用戶請(qǐng)求。
圖5 后臺(tái)服務(wù)器流程Fig.5 Background server flow chart
系統(tǒng)選用Tomcat作為服務(wù)器,在eclipse軟件上進(jìn)行程序的編寫。服務(wù)器主要實(shí)現(xiàn)與客戶端的交互,以及對(duì)數(shù)據(jù)庫(kù)的增刪查改等操作。為了使與客戶端交互的數(shù)據(jù)傳輸效率更高,系統(tǒng)采用了JSON格式的數(shù)據(jù),Android提供JSON的API,故使用起來非常方便。
服務(wù)器程序包的構(gòu)成如下:①Dao包 對(duì)數(shù)據(jù)庫(kù)的操作類即增刪查改等;②DBUtil包 用于連接數(shù)據(jù)庫(kù);③entity包 封裝了數(shù)據(jù)表的實(shí)體類;④JsonUtil包 將數(shù)據(jù)轉(zhuǎn)換成JSON格式;⑤servlet包實(shí)現(xiàn)服務(wù)器與數(shù)據(jù)庫(kù)的交互;⑥D(zhuǎn)BConfig.Properties包含SQL Server數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)、數(shù)據(jù)庫(kù)URL、數(shù)據(jù)庫(kù)的用戶名和密碼。
服務(wù)器通過request.getParameter()獲取客戶端請(qǐng)求參數(shù),response.getOutputStream()響應(yīng)客戶端內(nèi)容。
連接數(shù)據(jù)庫(kù)的部分關(guān)鍵程序如下:
數(shù)據(jù)庫(kù)采用了Microsoft SQL Server 2008數(shù)據(jù)管理系統(tǒng),其主要功能是存儲(chǔ)并管理超市冷鏈設(shè)備遠(yuǎn)程實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的相關(guān)數(shù)據(jù)。根據(jù)功能需求,數(shù)據(jù)庫(kù)需要建立1張用戶信息表、1張城市門店表、n張門店數(shù)據(jù)表。用戶信息表包含了門店和員工的具體信息;城市門店表包含各個(gè)城市的所有門店;門店數(shù)據(jù)表則包含該門店冷鏈設(shè)備的所有監(jiān)測(cè)數(shù)據(jù)。
門店數(shù)據(jù)表的結(jié)構(gòu)見表1。
表1 門店數(shù)據(jù)表結(jié)構(gòu)Tab.1 Structure of store data
系統(tǒng)服務(wù)器應(yīng)用程序與后臺(tái)數(shù)據(jù)的鏈接采用JDBC接口。它由1組用Java語(yǔ)言編寫的類和接口組成,提供了標(biāo)準(zhǔn)API,可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL調(diào)用[5]。系統(tǒng)中DBUtil包用于連接數(shù)據(jù)庫(kù)。
現(xiàn)場(chǎng)藍(lán)牙監(jiān)控流程如圖6所示。進(jìn)入藍(lán)牙監(jiān)控界面后,先判斷移動(dòng)端藍(lán)牙是否開啟,如果沒有開啟則跳轉(zhuǎn)至打開藍(lán)牙;藍(lán)牙開啟后進(jìn)行搜索配對(duì),然后建立socket連接,如果連接失敗則顯示“連接失敗”以提醒用戶。如果連接成功則創(chuàng)建輸入流,進(jìn)行數(shù)據(jù)接收與解析,并顯示到用戶界面,同時(shí)創(chuàng)建輸出流,為需發(fā)送的數(shù)據(jù)創(chuàng)建數(shù)據(jù)格式,然后發(fā)送到后臺(tái)藍(lán)牙模塊中。當(dāng)用戶退出藍(lán)牙監(jiān)測(cè)界面時(shí),斷開socket連接。
圖6 現(xiàn)場(chǎng)藍(lán)牙監(jiān)控流程Fig.6 Field bluetooth monitoring flow chart
Android進(jìn)行藍(lán)牙開發(fā),必須在Android Manifest.xml文件中加入以下權(quán)限[4]:
基于Android的超市冷鏈設(shè)備數(shù)據(jù)監(jiān)測(cè)系統(tǒng),不僅能移動(dòng)、便攜地實(shí)現(xiàn)各項(xiàng)數(shù)據(jù)的采集監(jiān)測(cè),減少監(jiān)測(cè)人員的工作量,還能方便地對(duì)分散的超市冷鏈系統(tǒng)進(jìn)行集中化管理,且能夠及時(shí)預(yù)警,大大提高系統(tǒng)的安全性。相較于傳統(tǒng)現(xiàn)場(chǎng)監(jiān)測(cè)模式,移動(dòng)互聯(lián)網(wǎng)平臺(tái)下的數(shù)據(jù)監(jiān)測(cè)管理系統(tǒng),將使數(shù)據(jù)監(jiān)測(cè)變得更加便捷高效,同時(shí)利用無(wú)線藍(lán)牙通信技術(shù)進(jìn)行現(xiàn)場(chǎng)數(shù)據(jù)監(jiān)測(cè)會(huì)使維護(hù)人員更方便、有效地進(jìn)行設(shè)備的調(diào)試。
該系統(tǒng)客戶端遠(yuǎn)程監(jiān)測(cè)通過無(wú)線互聯(lián)網(wǎng)絡(luò),訪問系統(tǒng)Web服務(wù)器以獲取后臺(tái)數(shù)據(jù)信息,所采用的C/S結(jié)構(gòu)在較大程度上透明化數(shù)據(jù)的儲(chǔ)存管理功能,同時(shí)又降低了客戶端運(yùn)行負(fù)荷,減少對(duì)于本機(jī)資源的占用。短距離現(xiàn)場(chǎng)調(diào)試通過藍(lán)牙和現(xiàn)場(chǎng)藍(lán)牙模塊進(jìn)行數(shù)據(jù)通信,可以獲取當(dāng)下實(shí)時(shí)的數(shù)據(jù),減少了遠(yuǎn)程監(jiān)測(cè)由于時(shí)間差造成的數(shù)據(jù)誤差,極大地方便了維護(hù)人員的調(diào)試工作。系統(tǒng)運(yùn)行穩(wěn)定可靠,且不需高昂的建設(shè)和維護(hù)成本,非常適用于企業(yè)管理人員對(duì)于超市冷鏈設(shè)備數(shù)據(jù)的監(jiān)測(cè)和管理。
[1]孫麗娟.基于Android的物聯(lián)網(wǎng)數(shù)據(jù)采集監(jiān)測(cè)系統(tǒng)開發(fā)[D].南京:南京理工大學(xué),2016.
[2]劉勝前,陳立定.基于Android平臺(tái)的車輛導(dǎo)航系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化與儀表,2012,27(4):1-4.
[3]于嘯天.基于Android+Java EE的設(shè)備監(jiān)測(cè)和臺(tái)站設(shè)備信息管理系統(tǒng)[D].石家莊:河北師范大學(xué),2014.
[4]侯新琦,李佳.基于Android藍(lán)牙通訊的研究[J].電子世界,2012,34(11):84-85.
[5]宋恒力.基于Android平臺(tái)與Web服務(wù)器的課程管理信息系統(tǒng)[J].電子技術(shù),2014,43(12):59-63.