文献标识码: 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.