系统总体构成
自来水流量远程监测系统的结构如图1 所示。系统由若干监测终端、无线数据传输网络和监控中心三部分组成。其中,监测终端安装于各供水分区的监测点,及时将监测到的流量数据通过GPRS网络传输到设在自来水公司的监控中心,由中心对各分区的数据进行分析,从而实现对各分区供水的科学管理。这里所说的供水分区不是一般的给水系统分区(并联分区或串联分区),而是在供水管网上安装流量计将整个供水系统划分成若干个供水区域,每个区域作为一个监测点,对管理区域内流进的自来水总量和实际销售的水量进行量化管理,以此来了解和掌握各区域内的需水量、供销差、漏失量、未收费水量等情况。
图1 系统结构图
其中,监测终端应实现下列功能:
(1)现场采集流量信息,包括瞬时流量、正向总量、反向总量、流量百分比、差值总量、流速等信息。
(2)具有远程通信功能。定时将采集的流量信息通过GPRS网络,上传至监控中心。
(3)监测终端可以按监控中心的指令完成校时。
(4)停电复电时间记录。监测流量计的供电,一旦停电立即记录下停电时间,并报告监控中心,随即进入睡眠模式;恢复供电时,记录来电时间,也上传到中心。
(5)历史数据记录。具有一定的非易失性数据存储区,可在本地保存断电/复电时间以及历史数据。
(6)软件在线升级。监测终端预留升级接口,可在不改变硬件设计的情况下根据用户的需要对软件进行升级,满足不同用户的需求。
监测终端的硬件设计
监测终端由单片机、 GPRS DTU(包括SIM卡、天线等)、供电电路、实时时钟、Flash存储器以及数据采集设备组成,如图2所示。其中,虚线框中是需要用硬件实现的部分。
图 2 监测终端的硬件组成
1 PIC16F877A单片机
鉴于监测终端设置在无人看管、环境较恶劣的地方,要求抗干扰能力强、性能可靠,采用了Microchip公司的PIC单片机中的PIC16F877A。
PIC16F877A单片机内部有 8K*14的Flash程序存储器和368B的RAM数据存储器;采用哈佛结构,数据线和指令线分离,取数据和取指令可以同时进行,执行效率高、速度快。
2 GPRS DTU
无线通信模块采用成都众山科技有限公司的ZSD2110 GPRS DTU。ZSD2110是一款使用GPRS进行无线数据传输的终端设备,支持PPP、TCP、UDP、ICMP等众多复杂网络协议,支持透明数据传输和用户自由控制传输模式,同时支持点对点、点对多点、设备间、设备与中心间等各种不同的通信模式。
3 串行通信接口
从图2中可看出,单片机采集数据以及跟DTU之间的通信都是通过串行接口,而PIC16F877A只有一个USART接口。这里采用分时复用的原则,通过一片4位总线开关芯片FST3125在流量计与DTU之间切换,平时与流量计接通,采集数据,上传时间到时,断开与流量计的连接,接通DTU,上传数据(必要时完成校时)。
4 DS1302实时时钟
实时时钟用于提供系统采样、定时上传、记录断电/复电时间等操作的时间基准,是本系统不可缺少的一部分。本设计选用了DS1302实时时钟芯片。
DS1302使用32.768kHz的外部晶振,该振荡电路不需要外接任何电阻或电容,设计简单。需要注意的是,在晶振的选择上,只能选用负载电容为6pF的32.768kHz晶振,否则可能会导致晶振不能起振,DS1302 不计时的问题。
5 SPI Flash存储器
采用串行Flash作为外部存储器,记录历史数据和断电/复电时间。与以往的并行存储器或铁电存储器相比,串行存储器具有很大优势。并行存储器存储容量大,读写速度快,但是抗干扰能力差;铁电存储器采用串行接口,抗干扰能力强,也具有很高的灵活性,可以单字节读写(不需要擦除,可直接改写数据),但其存储密度小,单位成本高,读写速度较慢。而本系统中采用的M25P16存储器综合了这二者的优点,不仅存储容量大,读写速度快,而且抗干扰能力强,占用MCU引脚资源少。
6 供电电路及掉电检测
整个电路板上器件都工作在5V电压下。
除了正常供电外,为保证在突然断电的情况下,能及时记录断电时间,以备向监控中心报告,还需要备用电源以及断电检测电路。本系统主电源采用UPS供电,可保证在交流电断电的情况下仍能工作,另外从220V交流电直接接一电源作为掉电检测电路的输入,经光耦隔离,连接到单片机的RB0引脚,断电时,触发单片机的RB0外部中断实现断电保护,读取当前DS1302的时间保存到Flash存储器,并经DTU上传到监控中心,然后使单片机进入低功耗工作状态。恢复供电时,同样要记录复电时间并上传。
监测终端的软件设计
在监测终端的软件设计中,采用模块化设计,根据功能将程序划分为多个模块分别设计。这种设计方法不仅使得程序结构清晰,而且为以后新功能的扩展以及程序的移植提供了便利,在调试过程中也便于对软件故障的定位。
软件在MPLAB IDE8.10环境下,采用PICC编译器,用C语言实现。主程序流程如图3所示。监测终端上电后,先进行初始化,然后进入循环,根据条件调用各个子程序。其中初始化包括各I/O端口的方向设置、SPI初始化、中断标志的设置等。写数据到Flash时,须先判断整个Flash是否写满,惹是须先擦除才能写入新数据。
图 3 主程序流程图
在本系统中,单片机需处理多个任务,而且有的任务又是随机的,故MCU采用查询和中断相结合的工作方式。其中,定时上报采用查询方式,如图3所示,而断电检测、来电唤醒则通过PIC单片机的RB0电平变化中断来完成。但是,在中断服务程序中,只简单的设置掉电/复电标志,并不执行其他复杂的操作,相应的掉电/复电服务是在主程序中检测到掉电/复电标志后才执行的。这是因为PIC16F877A单片机只有8层深度的硬件堆栈,在中断里调用子程序极易出现堆栈溢出的情况。为了保证程序的可靠运行,故将读取DS1302的时间、转入睡眠模式等操作都放在主程序中执行,使中断服务程序尽量短小,提高系统运行的可靠性。