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