Android开发技术在无人值守遥测站中的应用研究
2016-01-26于兴晗侯煜盖优普郭易
于兴晗,侯煜,盖优普,郭易
(中国水利水电科学研究院,北京 100044)
于兴晗,侯煜,盖优普,郭易
(中国水利水电科学研究院,北京 100044)
摘要:Android是一种基于Linux的开放源代码的操作系统,主要用于移动设备,由Google公司和开放手机联盟领导及开发。通过实例,详细描述Android开发技术在新型无人值守遥测站上的应用研究。对于其中的关键实现技术,给出了Java源代码。通过研究,实现了一个可以在装有Android系统的无人值守遥测站上运行的App。
关键词:Android;无人值守遥测站;App;Java
引言
自2008年10月,第一部Android智能手机发布以来,Android系统逐渐扩展到平板电脑及其他很多领域,如电视、数码相机、游戏机等。目前,在水情测报领域,我国自主开发的无人值守遥测站仍以单片机为主,开发模式也还是使用基于C语言的单流程结构,所有的工作流程都是通过单一程序实现的,代码可读性差,很难实施团队开发,不利于技术的推广。国内基于嵌入式操作系统的无人值守遥测站还处于起步阶段,一些重大项目,如《长江三峡水利枢纽梯级水库调度自动化系统屏山—寸滩区间水情遥测系统》项目中使用的嵌入式遥测站就是由美国Sutron公司开发的嵌入式数据采集器Xpert和Xlite。国内嵌入式开发技术还是处于起点低、基数小、资源少和技术落后的状态。
水情测报领域的无人值守遥测站,是一种先进的水情信息实时收集处理系统,也是一项现代化的、非工程性的防洪措施,应用通信、遥测和计算技术来完成江河、水库、流域内的降雨量、水位和流量等数据的实时收集和处理,以实现防洪、供水、发电等优化调度,提高防洪能力及水资源利用水平[2]。因此,通信作为无人值守遥测站和中心站联系的主要手段,其稳定性和工作效率是设计无人值守遥测站重点考虑的问题。
本文通过对Android系统的几项关键技术进行分析,结合无人值守遥测站的工作流程,在Android 4.0基础上设计并实现出一款高效和实用的App,为Android开发技术在水利行业应用提供了依据。
1研究概况
1.1Android开发技术简介
在快速发展的移动开发领域,Android的发展较为迅速。Android系统正以其开放性(开发的平台允许任何移动终端厂商加入到Android联盟中来)、丰富的硬件(越来越多的硬件产品支持)、方便开发(Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰)和Google应用(Android手机平台可以无缝结合一些优秀的Google服务,如地图、邮件、搜索等)的特点吸引越来越多的嵌入式开发者加入其中。
Android开发技术是以应用其4大开发组件为主,4大组件为:活动、服务、广播接收器、内容提供商。
1.2设计结构
根据Android开发技术的特点,结合水情测报领域无人值守遥测站的工作过程,App设计结构如图1所示。
图1 App结构图
其中各层的细节如表1所列。
表1 各层详细内容
在整个App设计中,只有应用层是与水情测报领域无人值守遥测站的工作业务相关,因此这一部分的设计对专业的要求也比较高,应能以提高用户体验为主。其中Web发布和email通信都是作为数据库应用的扩展功能而存在,不再单独设计。
2实现
在本文中,由于篇幅有限,只针对关键技术实现的关键节点给出源代码,列出的所有代码均是在开发环境eclipse-java-luna-SR1+ADT23.0.4下编译完成的,而且均在实际无人值守遥测站硬件上运行测试过。
2.1App主视图
App主视图采用“图标+标题”的表格形式实现,使用户可以直接快速定位并启动应用App模块。本文设计并实现的App界面视图如图2所示。
图2 App主视图
其中,界面UI元素定义如表2所列,应用App定义如表3所列,启动相应App使用长击动作。
表2 界面UI元素定义
表3 应用App定义
本系统中,所有的应用App设计都包含3部分:UI视图设计(用于与用户交互,与具体专业业务相关)、启动代码(用于和驱动层的连接,提供给驱动层使用的接口函数)和配置信息存储(调用驱动层存储配置信息函数来实现)。
2.2数据库
传统的无人值守遥测站将现场采集的数据以二进制自定义格式的形式按顺序存储在本地,一般不存在单独的数据管理,功能单一、效率不高。
在App设计中,为了提高数据管理效率,增加高级数据管理功能,使用了一款轻型的遵守ACID关系型的数据库,即Android的SQLite。
数据库显示视图略——编者注,为了使数据显示美观,使用随机变换的字体颜色,且相邻行的颜色不完全相同,凸显数据元素,使用户一目了然(注:字体颜色的区分可以参见网络版)。
数据库实现的代码主要包含3部分:显示视图、数据访问接口和配置信息存储。本文在视图处理上采用了与App主界面相同的处理办法,即使用Activity的派生类来实现;为实现逐行显示的效果,使用了Android提供的ListView组件,对每行元素的单元格分别逐个处理显示(内容和颜色)。数据访问接口代码则是通过派生Android SQLiteOpenHelper类实现的。
2.3JavaMail
由于Android系统是由Google公司领导开发的,因此在有些功能实现上具有明显的倾向性,如Android系统自带的邮件系统只支持Google公司的Gmail系统,在国内使用会受到明显的限制,为了支持国内的邮件系统,本文使用了由Sun公司发布的用于处理Email的API(JavaMail),来实现一些常用的电子邮件应用。JavaMail结构图略——编者注。
JavaMail通过SMTP Server进行邮件的发送,用户只需要根据 JavaMail 定义的接口实现自己的 Provider,即可实现对不同协议Store邮件的收取。
通过JavaMail实现的数据分享功能执行结果略——编者注。其中0000 0000为无人值守遥测站的站号,邮件内容为分享的数据。
2.4Web发布
Web服务器是可以为向其发出请求的浏览器提供文档的程序,主要功能是提供网上信息浏览服务。本文在App中,使用Android的内置服务功能实现了Http Web服务器功能,可以将选定的数据发布到固定IP上,其他处在同一局域网内的设备(如电脑、手机、iPad和PC机等)可以通过浏览器浏览数据。本文提供的代码仅支持微软IE和360浏览器。
2.4.1工作流程
Web服务器的工作流程如图3所示。
图3 Web服务器工作流程
其中,监视端口要使用Android Service的派生类,TCP连接和会话线程使用的是Thread的派生类,对端口的访问使用Android的ServerSocket和Socket类。
2.4.2视图
图4 Web Server启动界面
启动Web分享数据功能后,弹出视图如图4所示。单击启动按钮,可将选定的数据发布到地址http://192.168.2.114:8080,其中IP地址为遥测站的默认地址,在WiFi连接的时候不可设置,端口号可以修改。
本界面的视图使用的是Android提供的AlertDialog类自定义的显示视图,单击启动按钮后将启动Web Server服务线程,在后台监视8080端口,当接收到请求数据访问时,启动数据发布线程将数据发布到端口。这时,若通过IE或者360浏览器访问http://192.168.2.114:8080时,在浏览器界面上将会显示分享的数据,显示结果略——编者注。
2.5通信服务
本文通信任务大部分是使用Android系统本身提供的通信服务实现的,如发送短信使用的是Android提供的SmsManager服务,接收短信使用Android的BroadcastReceiver服务,网络使用WIFI_SERVICE服务等。针对这些常用的通信服务,Android系统都做了代码优化,开发者只需编写少量的代码即可实现高效的通信功能。为便于读者理解,本文给出了实现手机对无人值守遥测站控制的典型的短信接收服务的关键代码。
//注册短信广播
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
IntentFilterfilter = new IntentFilter(SMS_RECEIVED);
BroadcastReceiverreceiver = new SMSReceive();
registerReceiver(receiver, filter);
只需将这段代码放在onCreate()函数中,即可实现对短信的监控。其中SMSReceive为BroadcastReceiver的派生类,用于对系统所接收信息进行处理。本文代码运行结果如图5所示。其中(+86 136-0117-5481)为无人值守遥测站的手机号,123456为遥测站密码,vd为招测当前数据命令;后续的为遥测站返回数据,其中00000000为站号,后面为数据采集时间、传感器名和数据的当前值。
图5 手机招测执行结果
2.6数据图表
为了增强系统的实用性,提高数据处理效率,在App设计时增加了数据分析图表功能,使用的是一个Android系统上制作图表的框架achartengine图表引擎实现,目前它支持如下的图表类型:line chart(折线图)、area chart(面积图、分区图、对比图)、scatter chart(散点图)、time chart(时间图/进度表)、bar chart(条形图/柱状图)、pie chart(饼图)、bubble chart(气泡图)、doughnut chart(圆环图)、range (high-low) bar chart(范围条形图)、dial chart/gauge(拨号盘/压力表) 、combined (any combination of line, cubic line, scatter, bar, range bar, bubble) chart(组合图)、cubic line chart(立方折线图)。
上述所有支持的图表类型都可以包含多个系列,支持水平(默认)或垂直方式展示图表,并且支持许多其他的自定义功能。所有图表都可以建立为一个view,也可以建立为一个用于启动activity的intent。这个模型和绘图过程的代码进行了很好的优化处理,可以处理和显示值的数量非常大。本文通过图表框架achartengine实现的饼状图如图6所示。
图6 饼状视图
结语
本文所开发出的App不但实现了无人值守遥测站的基本功能(包括现场数据的采集、存储和发送),而且使用Android系统提供的软件资源,将一些复杂的实用功能(如与智能手机互联、WiFi通信、Web发布和数据图表等)也在App中得到了实现。本次App的开发研究,将用户体验首次引入无人值守遥测站的设计中。
随着通信技术更新换代的周期越来越短,支持新通信技术的无人值守遥测站也会不断更新。而作为以通信技术为核心的嵌入式操作系统Android就非常适合应用到水情测报领域的无人值守遥测站,并且随着应用Android系统的设备越来越多,其资源也会越来越丰富。
将Android系统加入无人值守遥测站,还会为无人值守遥测站带来新的研究方向,如消息推送、云中心、WiFi热点、WiFi Direct、Webkit、GIS和云存储等,极大地丰富了无人值守遥测站的功能。
参考文献
[1] 软件开发技术联盟.Android开发实践[M].北京:清华大学出版社,2013.
[2] 于兴晗,胡宇丰,郭易,等.CE数据采集器设计和开发实例[M].北京:中国水利水电出版社,2014.
[3] 孙增义,吴跃.水情自动测报技术基础及其应用[M].北京:中国水利水电出版社,1999.
[4] 毛学工,安波,蹇德平,等.雅砻江流域梯级电站水情自动测报系统[M].北京:中国水利水电出版社,2012.
于兴晗(工程师),长期从事32位嵌入式数据采集系统研究。
Yu Xinghan,Hou Yu,Gai Youpu,Guo Yi
(China Water Conservancy and Hydropower Research Institute,Beijing 100044,China)
Abstract:Android is an operating system of free and opening source codes based on Linux,which mainly is used in mobile devices.It is leaded and developed by Google company and the open handset alliance.In this paper,the application of Android technology in the novel unattended telemetry station is introduced.The Java source codes of the key technology are given.Through this study,an App running on the telemetering station is achieved,which installs Android system.
Key words:Android;unattended telemetry station;App;Java
收稿日期:(责任编辑:薛士然2015-07-09)
中图分类号:TP316
文献标识码:A