您现在的位置:首页>供水技术>技术论文 > 正文内容

技术论文

供水调度系统Android客户端的开发实践

作者:陈冬雷 来源:广东水协网 发布时间:2013-04-09 点击数: 字号:【

  摘要:面对日益庞大的供水网络和复杂情况,供水调度需要能远程查询调度数据。由于智能手机已经相当普及,因此为远程查询提供了平台。在调度数据已经得到一定程度的集中和整合的情况下,采用Web Service技术将其有安全措施地通过网络发布到手机上,就可以辅助调度人员进行远程调度。本文根据在Android操作系统上编写供水调度系统数据查询及远程控制客户端应用程序的实践经验进行了介绍。

  关键词:供水调度,Android,数据客户端,Web Service

  一.引言

  随着供水调度的数据采集系统建设越来越完善,调度数据也越来越多。使用已经相当普及的智能手机来远程浏览这些数据已渐渐成为趋势。目前Android系统已经相当普及,发展也比较成熟,并且是一个开放性较强的系统,其开发成本相当低廉,甚至可以是免费的。进行Android的编程只需要掌握JAVA语言,相对来说也比较容易。因此我们在Android系统上开发了用于浏览调度数据的客户端,结合服务端的Web Service服务发布数据。本文拟对这一开发成果进行介绍。
程序开始时显示的界面以及主程序菜单如图1所示。其中主程序菜单根据业务的需要分为了三个部分,这三个部分可以通过手指在触摸屏上左右滑动来进行切换。


图1 开始画面和主程序菜单

  在程序结构上,我们采用了Web Service+数据库+客户端的方式来开发。其好处是不需要将数据库暴露在互联网公网上。为了不让Web Service过于庞大复杂,因此利用了已成功实施的数据整合成果,形成了数据集市。发布的数据从数据集市中提取。集市的数据库中存放的主要是原始数据,而在现场的供水调度业务中,除了直接查看原始数据,还需要根据业务逻辑来处理这些原始数据。因此在数据接口和集市之间建立业务逻辑层用于进行这样的处理,Web Service仅仅是将这些处理结果发布出来。这样,我们构建了如图2所示的一种四层结构。

实现远程数据访问的四层结构
图2 实现远程数据访问的四层结构

  Android编程访问Web Service接口已有一些成熟的开发包,我们采用的是免费的ksoap2开发包。

  二.系统功能

  1.水厂、加压站、原水所数据查看

  远程查看数据最主要的一项功能,通过手机浏览这些生产单位的当前实时数据以及历史数据。我们采用泵机开停状态使用动画,而其他模拟参数量数据采用数字表格形式,如图3中间所示,该图左侧显示的是通过菜单选择相应的生产单位,右侧是点击相应的模拟参数量行显示该参数在最近24小时内的变化曲线(该曲线采用Canvas类在视图中绘图)。


图3 通过菜单选择相应生产单位并查看实时数据

  在软件中点击如图3左侧图所示的右上角按钮就可以进入历史数据查询界面。如图4所示,设定好查询数据的条件后,点击确定就可以进入历史数据的显示界面。

生产部门数据的历史数据查询
图4 生产部门数据的历史数据查询

  泵机状态采用了动画的好处是比较形象不易引起误会:开机状态用绿色旋转并发光的动画表示;停机状态用红色不动的图像表示;通信失败、其他未知错误等用灰色不动的图像表示。如图3中间部分所示,05号机正在运行状态,其余泵机停机。

  2.管网数据查看

  管网数据的查看与厂站数据查看相似,但管网数据的分类更为细致,涉及不同的分区以及不同的参数类型,因此我们采用了界面菜单加弹出菜单结合的方式,如图5所示。

显示管网数据界面
图5 显示管网数据界面

  类似于厂站的数据显示,点击相应的行显示对应参数最近24小时的曲线。图5右侧显示数据界面中向左滑动可以看到当前数据的刷新时间。与图3右侧相似,点击相应的数据行可以显示其曲线。

  管网数据还可以采用地图的形式来展现,如图6所示。地图采用了BaiduMapAPI插件,需申请序列号。监测点的坐标位置预先设置在后台数据库中,发送参数值时同时附带监测点坐标。

在百度地图上加载监测点参数
图6 在百度地图上加载监测点参数

  对于特定的管网数据应用,还可以进一步进行查询,比如对于分区计量、大口径管道流量数据等,用独立的界面来显示,如图7所示。与直接显示的数据不同,这些流量的数据需要进行一定的处理,比如大口径表的原始数据是表头读数,那么累计流量就需要通过前后相减来得到,而分区计量则需要根据不同区域进行流量的统计后得到数据。表格界面中点击红色的按钮可以切换显示数据的日期。

针对特定主题的管网数据显示
图7 针对特定主题的管网数据显示

  3.工单记录查询

  厂站及管网工程、突发的爆漏事件对调度决策具有重大的影响,因此需要远程查询这些信息。默认打开显示当天所涉及的工程工单,爆漏工单数量较少,因此以不同级别的最近10条爆漏信息来显示,如图8所示。此界面下还可以查看历史数据。

工单记录显示界面
图8 工单记录显示界面

  4.每日生产情况总结

  调度数据每日用于产生生产报表,并且这些报表数据经过统计专业人员审核后记录到了数据库,因此这些数据也可以用于查询显示,如图9所示。类似地,点击红色的按钮可以按日期切换翻查前面日期的数据。由图中可以看出在春节期间水量先下降后逐渐上升的趋势。

每日生产情况总结的界面
图9 每日生产情况总结的界面

  这些报表数据相当的重要,因为我们可以用来作为预测供水量、电耗和成本的基础信息,并且将预测结果与实际结果进行比对。如图10所示的是采用时间序列方法对水量、电耗、成本进行预测的界面,曲线图中粉色线是预测数据曲线,绿色线是实际数据曲线。图10中的预测曲线是采用一阶差分指数平滑法来预测的供水电耗。

采用时间序列方法预测生产趋势
图10 采用时间序列方法预测生产趋势

  5.阀门及调整信息

  由于在调度现场经常需要调整阀门,因此阀门信息的查询也相当的重要。阀门的数量相当巨大,因此要进行手机上的显示,考虑到流量的限制因此采用了更为仔细的分类。对所属区域、阀门类型乃至管径进行分类,图11左一、左二两图就是显示了阀门分类条件的选择过程。由于数据库中还有阀门调整的历史信息,因此曾经调整过的阀门我们采用把该行的背景色设为绿色来标识,点击这些行就会弹出图11右一所示的阀门调整历史信息。

阀门显示信息界面
图11 阀门显示信息界面

  6.设备故障检测信息

  由于我们还建立了对采集系统设备的自动故障检测系统,因此检测的结果还可以通过手机显示,并且可以查询故障的历史信息。如图12所示。进行设备维护巡检时就可以参考这些信息来确定巡检路线。

设备故障检测系统的结果显示界面
图12 设备故障检测系统的结果显示界面

  三.经验与展望

  1.关于安全性

  对于远程发布数据的客户端,安全性是一个重要的指标。Web Service本身带有一定安全性,即使由程序扫描到了服务器IP及其端口的数据信息,即使已经知道这是Web Service,在调用接口方法时也需要输入密码参数才能有效传出数据。再退一步即使想绕过密码直接监听帧信息,我们在网络上传输的内容进行了加密,可以从一定程度上保障数据不外泄。

  值得注意的是,由于软件是存放在手机上,而手机容易失窃,这样同样会造成数据泄露。解决这一问题的最直接方法是每次打开软件都需要登录以进行身份验证。然而如果每次打开软件都需要登录是相当麻烦,因此要实现自动登录,也就是将登录信息存放在手机本地中加密存放起来。我们采用了一次验证多次登录的方式,即由客户端发送用户输入的认证码,认证码如果在服务端通过了,由服务端发送密码到客户端,客户端保存该密码用于调用Web Service的接口方法。一旦手机丢失,只要在服务器端修改调用函数所需的密码,丢失的手机上调用Web Service时使用的密码就失效了,调用接口方法时返回的都是空字符串。而新买的手机只需要重新输入一次认证码仍然可以正常使用。

  2.关于程序升级

  客户端与网页的一个重要区别是在升级方面。网页的升级不受限制,只要在服务端更新即可,但客户端则不然,需要每一部机的客户端升级。因此我们采用了网上流行的开软件自动检测更新或者进入软件后通过菜单选择检测更新的方式。

  3.关于屏幕自适应

  由于手机屏幕各有不同,在设计时我们充分考虑了分辨率的问题。首先确认的前提是程序没有支持横向屏幕,而是固定了纵向,因此处理分辨率问题时只需要关注屏幕宽度。在程序中可以用DisplayMetrics类获取屏幕分辨率参数,获取后界面中的字体大小、表格宽度和图片大小都要据此进行自动的调整。

  5.更多的数据和功能

  随着公司信息化工作进一步推开,更多的数据和功能都可以实现。数据方面比如缺水缺压工单、调度指令系统的指令数据、营抄数据、GIS系统数据、维修工单、决策辅助系统或者水力模型的计算结果等等,需要开放数据、进行简化处理以便于发布。功能方面,如果建立了更多的后台业务逻辑,比如对设备的损坏率进行统计,就可以显示出来以便于加强巡检;远程可以对采集系统的组态进行有权限的设置操作;甚至可以远程发送调度指令等等。

  作者介绍:
  陈冬雷,广州市自来水公司调度室通信技术员,高级工程师,020-87159184。

  参考文献:
  1. Nicolas Gramlich编 张劲锋译,《Andbook-Android编程》,
http://www.anddev.org/
  2. Kartikeya,《Android 编程指南& Android程序员入门》。

分享到:
编辑:林桂全