摘 要: 目前国内水表抄表行业存在找表难、外出抄表员难管理、水表漏抄和抄表界面不友好等问题,给企业造成较大的经济损失。为避免上述现象的出现,设计了一款基于Android平台的抄表机抄表软件。该软件具有二维码扫描、GPS定位/地图导航、拍照以及GPRS/WiFi通信等功能。
关键词: Android;二维码;GPS;地图导航;GPRS/WiFi通信
目前水表抄表方式主要有IC智能卡水表、无线发射式、抄表机抄表以及分线制集中抄表等[1]。IC智能卡水表是一种先充值后使用的智能水表,用户往往由于无法很好地掌握充值时间造成突然停水的现象;无线发射式和分线制集中抄表方式因其昂贵的前期投入和后期维护费用,暂无法广泛推广。抄表机抄表是目前国内市场上采用最多使用最广的方式。
现有的抄表机抄表存在以下4个问题:(1)抄表机不能够精确定位每一只水表,导致找表困难;(2)供水企业难以掌握外出抄表员工的工作情况,常出现有意估抄的情况;(3)水表分布广泛、不规律,常常漏抄大量水表;(4)现有抄表机界面不友好,不便于使用。
鉴于此,设计一款基于Android OS水表抄表机软件。本软件利用现有GPS定位技术实时记录外出抄表员工的抄表路径,方便供水企业管理外出抄表员工;本系统还具有地图导航功能,可以方便抄表员在地图上查询水表地理位置以及行走路线;同时,利用现有成熟的GPRS/WiFi通信技术与服务器即时通信。此外,为了提高抄表效率,本系统采用二维码扫描技术快速得到水表信息,省去抄表员在抄表机中查找的过程;最后,本系统增加对水表读数拍照的功能,以便日后公司对抄表情况的抽查和复查。
1 抄表机软件总体设计
抄表机软件堆栈结构如图1所示。主要包含以下模块:
(1)本地数据库设计。本地数据库用于存储抄表相关数据,数据读写方便,减少抄表机与服务器的通信。
(2)二维码扫描。抄表机直接从印制在表体上的二维码识别出该水表的相关信息,无需手动查找。
(3)抄表功能。通过手动或者二维码扫描的方式找到对应的水表,输入水表读数。
(4)GPS实时定位。对外出抄表员外出抄表路径实时定位并记录,方便对其管理。
(5)地图导航。地图上显示每一个水表的地理位置,并提供路线导航。
(6)网络通信。利用GPRS/WiFi通信技术实现终端与后台服务器的无缝连接。
(7)拍照功能。将水表表码以水表图片的形式存入数据库中,方便供水企业日后对抄表工作的抽查和复查。
2 主要模块介绍
2.1 抄表机数据库
本地数据库用于存储来自服务器的抄表任务单以便于抄表员抄表。本地数据库主要由6张表组成,分别为水表信息表(PDA_ShuiBiaoXX)、客户信息表(PDA_KeHuXX)、用户欠费信息表(PDA_QianFeiXX)、抄表信息表(PDA_ChaoBiaoList)、册本信息表(PDA_CeBenXX)和图片信息表(PDA_MediaFile)。
抄表信息表中每个水表的ID(S_id)是唯一的,与水表信息表中水表ID(S_id)构成一对一的关系;一个抄表册包含多个水表,通过册本ID(C_id)与水表信息表构成一对多的关系;一个水表可以有多种欠费信息,通过水表ID(S_id)与欠费信息表构成一对多的关系;一个水表可以有多张图片,同样通过水表ID(S_id)与图片信息表形成一对多的关系;一个客户可以拥有多个水表,客户信息表与水表信息表通过客户ID(K_id)构成一对多的关系。根据以上所述,可以构建如图2所示的关系图。
2.2 抄表功能
抄表功能是该软件的基本功能,其主要任务是将水表读数写入本地数据库以及记录抄表过程中的异常情况。具体步骤如下:
(1)输入本次水表读数;
(2)计算本次用水量。从数据库中读出上次读数,本次读数减去上次读数得到本次用水量;
(3)将用水量及相关数据写入数据库。当确认所抄表码无误后,调用database的update方法[2]将数据写入数据库中。
2.3 二维码识别
二维码(dimensional barcode)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息[3]。二维码有很多种,本系统采用在行业中应用最成功的QR码(Quick Response code),它以矩阵排列的形式存储数据。
为实现QR码的快速识别,本软件采用开源类库Zxing实现。首先将识别出的信息以固定的格式输出,最后对输出的信息进行后续操作。二维码识别主要流程如下:
(1)完成初始化,打开摄像头。初始化主要由Android项目的Activity来完成,包含view的初始化,摄像头硬件和驱动初始化以及Zxing类库的初始化。
setContentView(R.layout.qrcodescan);
CameraManager.init(getApplication());
CameraManager.openDriver();
(2)摄像头自动对焦。在CaptureActivityHandler中实现自动对焦,并获取一帧图像。
CameraManager.get().requestAutoFocus(this,R.id.auto_focus);
(3)条码解码。在CaptureActivityHandler中新建一个条码解码线程DecodeThread进行解码,将图像灰度化、二值化、条码区域定位。如果解码成功,调用系统函数getSystemService(VIBRATOR_SERVICE)新建vibrator类,执行方法vibrate(VIBRATE_DURATION)进行震动及声音提示,并将条码值返回给CaptureActivityHandler;如果解码失败则获取下一帧图像继续尝试解码。
(4)后续处理。最终解码成功后,CaptureActivityHandler调用主程序中的回调函数将解码出的信息作进一步的处理。
抄表机软件QR码解码应用流程如图3所示。
2.4 网络通信
抄表机软件采用WiFi和GPRS两种网络保证通信的可靠,实现有线网络和无线网络的无缝连接,利用socket[4]通信构建通信链路,完成数据协议转换等功能。
为提高抄表机软件与服务器之间的通信效率,本文初步设计一套通信协议,采用指令加数据的形式,具体格式如表1所示。
2.5 地图导航
软件结合百度地图API和GPS的使用,实现以下功能:定位并在地图上标注当前所处位置;地图显示当前位置到目的位置的最优公交、驾车以及步行路线;地图上标识每一个水表的地理位置,抄表员可以直观地查看水表分布。以下是调用百度地图API[5]实现路线导航的基本步骤(以驾车路线为例):
(1)初始化。完成授权验证、BMapManager类初始化、百度地图Activity初始化以及MapView的初始化。
(2)设置地图显示模式。主要是对是否使用内置缩放控件以及缩放过程中是否显示图层的设置。
mMapView.setBuiltInZoomControls(true);
//设置是否使用内置缩放控件
mMapView.setDrawOverlayWhenZooming(true);
(3)新建路线搜索模块。百度地图API中有一个MKSearch类专门用于路线搜索,它包含公交、驾车和步行等路线搜索,并可以根据需要设置搜索策略,如时间最短、距离最短、换乘最少、步行距离最短等。
mMKSearch=new MKSearch();
//新建一个MKSearch,初始化搜索模块
mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
//设置策略
(4)初始化搜索模块,建立搜索监听事件。百度地图API中MKSearchListener()用于接收并处理MKSearch()返回的搜索结果。
(5)开始搜索。得到起点位置和终点位置后,将起始点传给搜索方法,开始搜索,搜索完毕将结果返回。
mMKSearch.drivingSearch(“杭州”,startNode,“杭州”,endNode);
3 测试结果分析
该软件各模块的测试是在HTC G11手机上进行的,该测试平台各参数如下。主屏尺寸:4英寸800×480像素;操作系统:Android OS 2.3.4;CPU型号:高通骁龙Snapdrago;CPU频率:1 024 MHz;电池容量:1 450 mAh可拆卸式。
3.1 抄表功能测试结果
图4显示的是抄表功能测试结果。图4(a)是ID号为P12537水表对应的抄表界面。图4(b)是通过SQLiteSpy数据库软件查看执行抄表功能以后的数据库相关信息。图中可以看到PDA_ChaoBiaoSJ表中水表编号P12537对应的BenCiCM(本次抄码)和I_ChaoJianSL(用水量)两项的值与图4(a)中填入的数据一致,因此数据写入数据库成功。
3.2 二维码识别测试结果
图5是QR码识别测试结果图。图5(a)是QR码扫描过程界面;图5(b)是识别结果显示界面;图5(c)是选择“确定”后的相应抄表界面。本次实验结果表明,该QR码识别方法识别速度快、准确率高、纠错能力强,能够满足本系统的要求。
3.3 网络通信测试结果
利用WiFi/GPRS主要是用于发送单个抄表数据(含图片)和抄表数据库。考虑到网络不稳定而导致传输中断的情况,软件设计时采用大文件断点上传技术。实验结果表明,软件可实现网络重连后续传文件,提高效率。
3.4 地图导航测试结果
图6是GPS定位及地图导航测试结果界面,图6(a)中地图中心点是抄表员当前位置在地图上的显示,图6(b)中线显示的是当前位置到目的地的驾车路线(点击每一个带箭头的节点将会提示行走方向及距离)。
针对现有抄表机软件不能满足水表抄表行业需求的现状,本文设计了一款基于Android OS的抄表机软件。重点介绍了软件中数据库设计、二维码识别应用、网络通信及地图导航等模块。本软件基于Android操作系统,增加现有抄表机没有的二维码扫描、地图导航等功能,弥补了现有抄表机存在的一些不足。
参考文献
[1] 石岩峰,蔡洪光,尹佳辉.水表抄表系统的发展与趋势分析[M].科技风,2009(8):204.
[2] 吴亚峰,索伊娜.Android核心技术与实例详解[M].北京:电子工业出版社,2012.
[3] RUSS A. Two dimensional bar codes[J]. Adams Cemmuniea-fions, 2002,27(4):15-18.
[4] 刘邦桂,李正凡.用Java实现流式Socket通信[J].华东交通大学学报,2007,24(5):110-112.
[5] 文斌,李代伟.基于Android的移动公交辅助导航系统设计与实现[J].成都信息工程学院学报,2012(5):437-442.