文獻標識碼: A
文章編號: 0258-7998(2014)01-0137-04
Android是一個開放性的開發(fā)平臺,由Google公司和開放手機聯(lián)盟開發(fā),基于Linux的自由及開放源代碼的操作系統(tǒng)[1],。主要應用于移動設備,,如智能手機和平板電腦。Android的系統(tǒng)架構主要分為應用程序層,、應用程序框架層,、系統(tǒng)運行庫層和Linux內核層。
水產(chǎn)物聯(lián)服務系統(tǒng)AITSS(Aquaculture Internet Things Service System)是一個面向水產(chǎn)養(yǎng)殖行業(yè),,應用現(xiàn)代物聯(lián)技術[2]集成行業(yè)業(yè)務處理應用系統(tǒng)的服務平臺,。系統(tǒng)采用自然語言與計算機語言相融合的方法,使用豐富的命令集(管理命令,、用戶命令,、開發(fā)命令和短信命令),實現(xiàn)人-物-物之間的信息交流,。系統(tǒng)的語音,、視頻、短信、傳感,、監(jiān)控等服務不受硬件,、通信協(xié)議及方式的限制,集成的行業(yè)業(yè)務處理應用系統(tǒng)運行穩(wěn)定,、維護簡單,、更新方便、擴展靈活,。
本文基于Android平臺,,設計并開發(fā)了水產(chǎn)物聯(lián)服務系統(tǒng)Android手機客戶端(AITSS for Android),將在線監(jiān)測,、遠程控制,、設備遠程維護等功能集成于本應用軟件。
1 系統(tǒng)設計
根據(jù)用戶需求,,系統(tǒng)能夠完成在線監(jiān)測,、遠程控制、設備管理,、參數(shù)設置,、外觀選擇等功能。系統(tǒng)功能結構如圖1所示,。
(1)在線監(jiān)測:在線監(jiān)測主要完成系統(tǒng)中所有管理區(qū)監(jiān)測設備(傳感器)的管理操作,,包括設備開啟或關閉、查看設備運行狀態(tài),、監(jiān)測指標及監(jiān)測值等,。
(2)遠程控制:遠程控制主要完成系統(tǒng)中所有管理區(qū)控制設備(控制器)的管理操作,包括設備的開啟或關閉,、查看設備運行狀態(tài),、設定控制設備的工作方式(控制模式)等。
(3)設備管理:設備管理主要完成水產(chǎn)物聯(lián)服務系統(tǒng)支持的系統(tǒng)成員的管理操作,,主要包括系統(tǒng)成員的添加,、刪除、查詢,、系統(tǒng)作業(yè)的配置等,。
(4)參數(shù)設置:參數(shù)設置主要完成服務器地址、端口號和系統(tǒng)刷新頻率的設置,。
(5)外觀選擇:用于為用戶提供個性化的系統(tǒng)界面配色方案和外觀選擇。
2 開發(fā)環(huán)境
水產(chǎn)物聯(lián)服務系統(tǒng)的服務器操作系統(tǒng)使用FreeBSD進行系統(tǒng)管理,,使用MySQL 5.0數(shù)據(jù)庫進行數(shù)據(jù)和配置的存儲,。手機客戶端與AITSS交互流程如圖2所示。
在安裝有Windows操作系統(tǒng)的PC機進行Android開發(fā)環(huán)境的搭建[1],需要Oracle公司的Java SE JDK和Java運行環(huán)境(Java Runtime Environment),,Eclipse IDE和Android SDK,。
開發(fā)環(huán)境如下:
JAVA SE JDK:Java version 1.7.0_25;Java SE Runtime Envitonment <build 1.7.0_25-b16>,。
Eclipse IDE:Eclipse Java IDE for Web Developers. Indigo Service Release 2,。
Android SDK:Android 2.3.3(API 10)。
3 系統(tǒng)實現(xiàn)
3.1 網(wǎng)絡連接
使用Android3.0及以上版本訪問WebService會出現(xiàn)android.os.NetworkOnMainThreadException的問題[3],通過在Activity類添加onCreate( )方法中添加Strict代碼解決,。核心代碼如下:
//解決Android3.0以上版本的Socket連接問題
StrictMode.setThreadPolicy(new StrictMode
.Threadpolicy.builder().detectDiskReads()
.detectDiskWrites().detectDiskNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode
.VmPolicy.builder().detectLeakedSqlLite
Objects().penaltyLog().penaltyDeath()
.build());
3.2 在線監(jiān)測
實現(xiàn)在線監(jiān)測功能需要解決監(jiān)測設備獲取,、監(jiān)測數(shù)據(jù)獲取和繪制監(jiān)測曲線等系統(tǒng)需求。
3.2.1 獲取監(jiān)測設備
本程序在單獨線程中獲取水產(chǎn)物聯(lián)服務系統(tǒng),服務器端已完成配置的監(jiān)測地點和監(jiān)測設備詳情,。根據(jù)Socket的返回值使用Android提供的ListView()組件顯示獲取到的信息,。在處理Socket時,使用singleton模式[4](單例模式)獲取SocketHelper,,代碼如下:
syncharonized(synObj){
if(socketHelper == null) {
socketHelper = new SocketHelper(context);
}
}
根據(jù)Socket返回值顯示加載有監(jiān)測地點和設備信息的彈出窗口popupwindow時,,需要將其setFocusable屬性設置為true,否則無法獲取到彈出窗口里的焦點,,由此導致彈出窗口中可能存在輸入框等控件無法輸入,。
3.2.2 獲取監(jiān)測數(shù)據(jù)
傳感設備監(jiān)測到的環(huán)境數(shù)據(jù)會通過數(shù)傳設備實時傳輸并儲存在服務器端。在使用手機客戶端進行在線監(jiān)測時,,需要使用monitorDataHandler( )方法對服務器端的數(shù)據(jù)進行實時獲取,,代碼如下:
//獲取每行監(jiān)測數(shù)據(jù)(格式為373737:34.44[時間整數(shù):監(jiān)測數(shù)據(jù)值])
String[] md = infos[i].split(Constants
.Command.COMMAND_SEPARATOR);
if (“”.equals(md[0].trim()))
continue;
date = MathHelper.getLong(md[0],0) * 1000;
value = MathHelper.round(Float.valueOf(md[1]),3);
series.addData(date,value);
實時獲取到的監(jiān)測數(shù)據(jù)將在監(jiān)測顯示容器TextView( )組件中進行顯示和實時更新。
3.2.3 監(jiān)測曲線繪制
為便于用戶查看一定時間段內的監(jiān)測指標變化趨勢,,設計開發(fā)了監(jiān)測曲線繪制功能,。
監(jiān)測曲線的橫軸為實時時間參數(shù),表示服務器端獲取到該監(jiān)測值的時間點,,橫軸刻度根據(jù)時間變化實時更新,,監(jiān)測曲線的為使用監(jiān)測值,表示對應時間點的監(jiān)測指標值,;縱軸使用動態(tài)坐標,,根據(jù)當前數(shù)據(jù)的最大最小值進行自動調節(jié),并在最大最小值相等時根據(jù)數(shù)據(jù)精度進行上下縮放,。
使用Android提供的TextView( )組件作為曲線顯示容器,,定義并使用drawLine(Canvas canvas)函數(shù)進行曲線繪制,關鍵代碼如下:
canvas.drawPoint(mChartRect.left,mChart.bottom - y0,this.mSeriesPaint);
canvas.drawLine(mChartRect.left + x0 *
mXSrawUnit, mChartRect.bottom - y0,
mChartRect.left+x1* mXDrawUnit,
mChartRect.bottom-y1, mSeriesPaint);
3.3 遠程控制
遠程控制主要對用于水產(chǎn)養(yǎng)殖生產(chǎn)的自動化設備進行遠程控制,。設備控制模式根據(jù)生產(chǎn)需要分為人工控制,、定時控制和自動控制三種。
3.3.1 選擇控制模式
系統(tǒng)根據(jù)用戶的需要,,設計開發(fā)了三種控制模式:(1)人工模式,,滿足用戶隨時隨地控制設備的需求,;(2)定時模式,通過設置時間隊列,,滿足設備定時控制,;(3)自動模式,結合水產(chǎn)養(yǎng)殖專家系統(tǒng),,進行智能化決策及設備控制,。在遠程控制界面,選擇不同控制模式,,顯示不同視圖View( ),。選擇人工模式時,切換控制模式顯示視圖的代碼如下:
case R.id.chkManualControl:
startContent.setVisibility(Constants.Visibility.GONE);
endContent.setVisibility(Constants.Visibility.GONE);
break;
3.3.2 獲取設備狀態(tài)
準確獲取設備當前狀態(tài)是進行設備遠程控制的重要前提,。本程序定義設備狀態(tài)變量devState為一個可進行滑動操作的SlipButton對象[5],。賦值代碼為:
devState=(SlipButton)findViewById
(R.id.devstate)
獲取設備狀態(tài)代碼如下:
float open = MathHelper.getFloat(dev[1],0);
devState.setCheck(open>0);
paraZone.setVisibility(Constants.Visibility.VISIBLE);
3.3.3 定時控制
定時本文控制的原理是用戶根據(jù)需要自主設定改變控制設備狀態(tài)的起止時間點。如當前增氧機狀態(tài)為開啟,,用戶可以根據(jù)需要,,設定在某一時間點將增氧機狀態(tài)更改為關閉,并在另一時間點再次開啟增氧機,。關鍵代碼為:
String mode= oprMode==0?”auto”:(devdate
.isChecked()?”on”:”off”)
try{
String b= startTime.getText().toString();
long beginTime =DateHelper.convert2long(b,
“yyyy-MM-dd HH:mm”);
begin =(int)(beginTime- currentTime);
}
4 試驗與結果分析
使用設計并開發(fā)的客戶端程序,,進行基于Android平臺的水產(chǎn)物聯(lián)服務系統(tǒng)的應用試驗。本實例使用安裝有Android4.0.3版本的手機,,在CDMA2000的3G網(wǎng)絡環(huán)境進行,。
軟件使用流程為:打開應用程序,輸入用戶名和密碼,,以默認服務器地址和端口號登錄,;手機根據(jù)用戶的手勢指令將信息發(fā)送到服務器,并將解析后的信息及時回送到手機端,,經(jīng)應用程序處理后顯示在手機上,。用戶可以實時管理監(jiān)測設備,查看實時監(jiān)測數(shù)據(jù)和指標變化曲線,;通過遠程控制命令進行設備的人工開啟和關閉,、定時開啟和關閉,也可連接到專家系統(tǒng)使用自動智能控制模式[6],。系統(tǒng)應用實例如圖3,、圖4所示。
程序的開發(fā)和應用實驗證明,,客戶端軟件能夠完成與服務器端水產(chǎn)物聯(lián)服務系統(tǒng)的交互,,實現(xiàn)水產(chǎn)養(yǎng)殖環(huán)境的在線監(jiān)測和水產(chǎn)養(yǎng)殖生產(chǎn)設備的遠程控制。由于Android平臺對硬件配置的適應性和平臺的開放性,,用戶可以將已有視頻監(jiān)控設備移植到客戶端中,,實現(xiàn)真正的實時在線監(jiān)控[7],。基于Android平臺的客戶端程序易于獲取,,通過網(wǎng)絡即可方便地下載安裝,享受物聯(lián)服務,。
本文基于Android平臺,,結合水產(chǎn)養(yǎng)殖行業(yè)所需的環(huán)境監(jiān)測指標和生產(chǎn)設備,設計開發(fā)了一個開放式的智能手機客戶端平臺,。該客戶端平臺與物聯(lián)服務系統(tǒng)服務器進行交互,,起到信息展示和發(fā)布的作用,而信息的處理和存儲皆由物聯(lián)服務系統(tǒng)完成,。還可以根據(jù)用戶的不同需求配置不同的傳感監(jiān)測設備和控制設備,,將該客戶端應用于其他行業(yè), 設計出適用于各個領域的物聯(lián)服務系統(tǒng),。
此方案可以有效降低系統(tǒng)開發(fā)成本,,延長系統(tǒng)存活周期,具有靈活,、高效,、可擴展的特性,應用前景較好,。
參考文獻
[1] JACKSON W. Android apps for absolute beginners[M]. New York City:Apress,2011.
[2] 孫其博,劉杰,黎羴,等. 物聯(lián)網(wǎng):概念,、架構與關鍵技術研究綜述[J].北京郵電大學學報,2010,33(3):1-9.
[3] 鄧蕊.基于Android的視頻監(jiān)控的研究與實現(xiàn)[D].西安:西安電子科技大學,2012.
[4] SHALLOWAY A, TROTT J R.設計模式解析[M].徐言聲譯.北京:人民郵電出版社,2006.
[5] 鄭云卿,黃琦.基于Android平臺的軟件自動化監(jiān)控工具的設計開發(fā)[J].計算機應用與軟件,2013,30(2):235-238.
[6] 江燕良.基于Android智能終端的遠程控制系統(tǒng)[J].電子技術應用,2012,38(8):129-132.
[7] 李昂,宋海聲,蘇小蕓. 基于Android的視頻監(jiān)控系統(tǒng)設計與實現(xiàn)[J].電子技術應用,2012,38(7):138-143.