摘 要:设计了一种基于C/S和B/S混合结构的水表远程抄表系统,以GPRS网络和Internet网络为通道,实现水表系统的远程数据采集和传输,同时给出了一种基于Web集群和数据库集群的负载均衡方案。另外,设计了一款基于Android平台的抄表机抄表软件。该软件具有二维码扫描、GPS定位/地图导航、拍照以及GPRS/WiFi通信等功能。整个系统采用Internet编程、多线程、数据库管理等技术,采用模块化、结构化的程序设计思想。系统完成后能够解决传统人工入户抄表带来的各种弊端,降低供水部门的管理成本,提高用水管理水平和服务质量,实际运行表明该系统通信可靠,实时性好。
关键词:自动抄表;无线分组业务;网络编程;多线程技术;Web集群服务器;负载均衡
随着电子技术、计算机技术以及网络通信技术的快速发展,供水系统的自动化程度也在不断地提高,自动抄表已成为各大供水公司所关注的一个重要课题。目前国内的自动抄表系统一般都采用两层结构,底层(集中器与采集器之间)一般利用低压载波或RS-485总线的通信方式[1-2]。上层(集中器与管理中心之间)的通信根据信道介质不同有电话线、电力线载波、光纤和无线等多种方式,并且以有线的方式居多。但在很多情况下,对于供水公司来说,水表测点分散,地理位置复杂,实施布线比较困难。
目前基于公共互联网远程监控技术的研究与应用在许多领域都引起了关注,互联网已经渗透到社会的每一个角落,而通过GPRS网络系统[3],设备可采用Internet的技术标准与服务器交换数据,实现与国际互联网的连接。
然而基于供水系统自身的特点,采用自动抄表而没有人为去监督校验数据很难保证数据的完全可靠,所以必须开发一款手持抄表机去配合完成数据的检验,目前国内现有的抄表机抄表存在以下4个问题:(1)抄表机不能够精确定位每一只水表,导致找表困难;(2)供水企业难以掌握外出抄表员工的工作情况,常出现有意估抄的情况;(3)水表分布广泛、不规律,常常漏抄水表;(4)现有抄表机界面不友好,不便于使用。
本文选用了基于GPRS的无线通信技术作为远程集中自动抄表的通信方式,开发一款服务器后台管理软件,同时开发了一款基于安卓的手持抄表机终端。
1 系统分析和设计
1.1 系统体系结构
C/S结构是20世纪90年代开始流行的一种体系结构,在C/S结构下,应用系统包括客户机和服务器两部分[4],应用处理由客户端来完成,数据访问及事务处理由服务器来承担。C/S结构对程序整体性考虑较多,注重流程及对权限进行多层次校验,具有安全性高、联机事务处理性能好的特点,并且还具有应用程序开发效率高的优点,但同时也具有内在缺陷,例如客户端平台相关性,客户端管理复杂,维护困难等。随着C/S结构的进一步深化,出现了基于Web的B/S结构。B/S结构用户界面更加友好,可跨平台使用数据库、超文本、多媒体等多种形式的信息,系统具有可靠性、整体性以及可扩展性,客户端仅需配置操作系统和Web浏览器,更利于软件的开发、安装、升级,节省开发维护费用。基于Web的B/S结构特别适用于信息的浏览、查询与发布,适于领导辅助决策支持。而C/S结构适用于信息管理、办公自动化等事务处理的系统。根据系统的开发要求和系统目标,系统选择C/S和B/S混合的结构,该混合结构的软件开发由浏览器、网页服务器、客户端、事务服务器、数据库服务器(资源文件)和数据库组成,如图1所示。这种混合结构既发挥传统C/S结构成熟的技术,又能借Internet技术充分发挥B/S结构的优点[5-6]。系统的功能框图如图2所示。
1.2 编程工具选择和数据库建立
Visual C#是极其优秀的面向对象的程序设计语言,具有开发简单、功能强大、扩展方便、易于维护的优点,本系统采用该语言开发实现。ASP.NET实现了网页的前台和后台的分离以及代码的“隐藏”技术。因此,利用ASP.NET构建网站越来越多,所以网页部分采用ASP.NET技术实现。SQL Server作为微软发布的一个典型的关系型数据库应用系统,功能强大、操作简便、安全可靠。本系统设计中选择Microsoft SQL Server 2008作为数据库服务器平台。
在数据库设计中使用了存储过程和事务,增强了代码的重用性和共享性,应用程序的开发速度,开发质量和效率都有所提高,对禁止用户直接访问的数据对象,通过对用户进行存储过程的使用授权,能够通过执行存储过程去操作那些禁止直接访问的下层数据对象,保证数据安全、完整性,通过将事务管理机制引入存储过程,保证了系统数据的一致性和完整性。
1.3 Internet编程
1.3.1 异步通信
异步通信方式比之同步方式可以提高程序的并行度和效率,其具体的实现是通过委托的方式,事件发生时,系统会自动地通知回调函数去执行相关的操作。但是,异步的方式一般需要在某种程度上的协调才能将功能发挥到极致。例如,在服务器上获取正在尝试连接的客户端套接字时,由于使用了异步方式,这样就使得可以在不等待客户端连接接入,而直接去执行后面的代码,看似好像是效率很高,不阻塞就能够执行,但是如果在该方法尚未接收到连接请求时就在此方法的后面调用了在套接字上的读写操作,就会造成程序执行结构的错误。.NET Framework可以利用委托异步调用任何方法,对于任何一种方法,如果希望异步执行,最简单的方法就是通过调用委托的开启方法开始异步执行,然后执行其他操作,最后调用委托终止方法结束异步操作,通过轮询方式检查异步调用是否完成。终止方法在异步调用完成后才返回,因此这种方式非常适合执行文件或网络操作。
1.3.2 多线程技术
由于各个现场水表是独立运行的,向服务器申请连接及数据传输事件时也是随机的,因此非常适合于多线程技术。当主机监听到有连接请求时,就启动一个新线程,用于处理相应的任务。一个终端对应一个独立的线程,一旦该线程启动,将和主线程一起独立运行,主线程仍然处于监听状态,从而确保整个系统处于有序状态,多线程工作流程如图3所示,创建线程包括创建监听端口的主线程和处理终端任务的辅助线程。抄表终端工作流程如图4所示。
(3)终端回馈信息格式如表2所示。
(4)在数据传输过程中,中心服务器每发一个小包,必须等待终端有相应的反馈后才继续发送。例如发心跳包后必须回心跳包,发状态查询包后必须回状态查询包。
1.3.4 通信过程中异常处理
为了保证通信安全可靠和系统的稳定,必须将通信过程中的异常处理问题放在一个比较高的位置,例如:(1)Socket连接的异常断开:在发送信息失败Socket断开的情况需要重连接。发送线程(Send Thread)在发现Send失败后(由计时器通知),关闭Socket连接,新建Socket并重新连接;(2)发送请求包异常:发送请求包后T1时间内没有收到应答包判定为应答接收失败。发送请求包后没有回应的情况、检测异常,累计3次失败视为终端掉线,通信的异常情况较多,具体限于篇幅不做详细介绍。
1.4 Web服务器集群和数据库服务器集群技术[7]
1.4.1 负载均衡算法
将一组服务器组成集群,对外作为一个整体来提供服务,可以提高服务器的服务质量。这样就避免了一台服务器由于资源的有限而只能为有限的用户提供服务的弊端。此时多个服务器集群中任务的合理分配至关重要。负载均衡算法的好坏直接决定集群中单个节点的负载,进而影响集群的性能。
目前应用服务器集群负载均衡有硬件和软件两种方式,在本系统设计中选用了软件的方式,采用动态加权方式负担负载,在系统的运行开始时通过收集每个服务器的负载情况设置权值,真正实现负载均衡。数据库的负载均衡的实现采用的是最小连接法。在数据库中存有连接表。Web服务器通过查看该表确定连接的对象,同时动态地修改该表为其他的Web服务器提供连接标准。
1.4.2 数据库集群负载均衡结构
数据库服务器在设计中采用了master/slave机制,每个节点同时扮演着master和slave的角色,在每一个节点上操作数据库,其结果是每一个数据库都得到相同的数据。连接到数据库的服务按照一定的策略分配给其中的一台服务器,实现负载的分担。同时该结构一个master可以对应增加多个slave,扩展性良好,如图5所示。
1.4.3 Web服务器负载均衡结构
负载均衡器负责接受客户端的请求,根据服务器的情况将任务分配给服务器,同时将结果返回给客户。服务器在接受任务和返回结果都需要负载均衡的参与。Internet连接直接和负载均衡器相连接,而不是直接和Web服务器连接,具体如图6所示。
2 具体实现
2.1 系统登录
管理人员登录时要输入用户名和密码,同时要对系统的基本参数进行设置,只有通过认证才能进入系统主界面,否则无法进入。
2.2 用户管理的实现
为确保信息的安全性,用户管理模块对系统使用者的名称、密码、权限等信息做了规定。该模块实现了用户添加、用户删除、密码修改等功能。系统登录时会根据登录者的权限提供全部或部分功能,当登录者是管理员时,将提供全部的功能,如果登录者是一般用户,将只提供部分功能。
2.3 水表管理的实现
管理人员可以增加、修改、删除水表信息,导出用户信息,增加街区信息等,并且能够查看修改单个水表的具体信息。管理人员可以实时查看各个自动抄表模块的运行情况以及手持终端的地理信息位置。
2.4 统计分析的实现
具有编制单个用户每月报表、全部用户的每日报表、费用结算单等功能,并将系统采集到的信息,统计汇总出二次信息,以数据表格和趋势图的形式显示统计的详细数据,用于管理决策。统计分析模块除了统计各种常用信息外还包括经常发生故障的用户及地段等信息。
2.5 系统维护功能的实现
系统维护主要是对系统中需要用到的一些参数进行设置或重新配置以及对数据库中的数据进行维护,这些参数一般是比较固定的,但是用户可以根据实际的变动情况对其设置。系统维护包括系统参数设置和数据维护部分,其中参数设置包括系统常用参数设置和数据库参数设置,系统常用参数设置指的是对公司名称,站点等相关信息进行设置,数据库参数设置指的是对服务器名称、数据库类型、数据库名称等的恢复及定期删除数据库中部分数据的功能。此外,后台服务管理软件对数据采集的时间和周期也可自行设定,具体实现鉴于篇幅不做具体描述。
本文提出了一种基于C/S和B/S混合结构的水表远程抄表和管理系统的设计方案。既发挥了C/S模式成熟的技术特长,避免建立多层C/S模式的高昂代价,又能借Internet技术充分发挥B/S模式的优点,有效实现快速的信息交流和信息共享。该系统能够解决传统抄表带来的各种弊端,降低供水部门的管理成本,提高用水管理水平和服务质量。手持抄表终端增加现有抄表机没有的二维码读取、地图导航等功能,弥补了现有抄表机存在的不足。下一步计划实现与营业收费系统的互联。该系统除在供水公司应用外,同时也为电表、煤气表的数据抄收工作以及智能家居提供了技术解决方案。
参考文献
[1] 刘基华,卢延诗.基于C/S与B/S的电厂信息管理系统[J].中国测试技术,2003,29(1):49-50.
[2] 栗玉霞,徐建政,刘爱兵.GPRS技术在自动抄表系统中的应用[J].电力自动化设备,2003,23(12):52-53.
[3] 孙忠富,曹洪太,李洪亮,等.基于GPRS和WEB的温室环境信息采集系统的实现[J].农业工程学报,2006,22(6):131-134.
[4] 王喜富,陈建广.基于B/S与C/S模式的铁路运输安全管理信息系统[J].中国安全科学学报,2004,14(3):73-76.
[5] SAEED GHASEMI, MAJID MEGHDAD. The design and management of intelligent systems in mechanical domestic water meters[J]. Open Journal of Urology, 2011,2(4):424-429.
[6] 冯鉴炜.太阳能热水工程远程监测系统开发[D].杭州:杭州电子科技大学,2012.
[7] 张锋,祝永志.B/S模式服务器集群系统的研究与应用[J].电脑知识与技术,2009,5(1):88-89.