系統總體構成
自來水流量遠程監(jiān)測系統的結構如圖1 所示,。系統由若干監(jiān)測終端、無線數據傳輸網絡和監(jiān)控中心三部分組成,。其中,,監(jiān)測終端安裝于各供水分區(qū)的監(jiān)測點,及時將監(jiān)測到的流量數據通過GPRS網絡傳輸到設在自來水公司的監(jiān)控中心,,由中心對各分區(qū)的數據進行分析,,從而實現對各分區(qū)供水的科學管理。這里所說的供水分區(qū)不是一般的給水系統分區(qū)(并聯分區(qū)或串聯分區(qū)),,而是在供水管網上安裝流量計將整個供水系統劃分成若干個供水區(qū)域,,每個區(qū)域作為一個監(jiān)測點,對管理區(qū)域內流進的自來水總量和實際銷售的水量進行量化管理,,以此來了解和掌握各區(qū)域內的需水量,、供銷差、漏失量,、未收費水量等情況,。
圖1 系統結構圖
其中,監(jiān)測終端應實現下列功能:
?。?)現場采集流量信息,,包括瞬時流量、正向總量,、反向總量,、流量百分比、差值總量,、流速等信息,。
(2)具有遠程通信功能,。定時將采集的流量信息通過GPRS網絡,,上傳至監(jiān)控中心,。
(3)監(jiān)測終端可以按監(jiān)控中心的指令完成校時,。
?。?)停電復電時間記錄。監(jiān)測流量計的供電,,一旦停電立即記錄下停電時間,,并報告監(jiān)控中心,隨即進入睡眠模式,;恢復供電時,,記錄來電時間,也上傳到中心,。
?。?)歷史數據記錄。具有一定的非易失性數據存儲區(qū),,可在本地保存斷電/復電時間以及歷史數據,。
(6)軟件在線升級,。監(jiān)測終端預留升級接口,,可在不改變硬件設計的情況下根據用戶的需要對軟件進行升級,滿足不同用戶的需求,。
監(jiān)測終端的硬件設計
監(jiān)測終端由單片機,、 GPRS DTU(包括SIM卡、天線等),、供電電路,、實時時鐘、Flash存儲器以及數據采集設備組成,,如圖2所示,。其中,虛線框中是需要用硬件實現的部分,。
圖 2 監(jiān)測終端的硬件組成
1 PIC16F877A單片機
鑒于監(jiān)測終端設置在無人看管,、環(huán)境較惡劣的地方,要求抗干擾能力強,、性能可靠,采用了Microchip公司的PIC單片機中的PIC16F877A,。
PIC16F877A單片機內部有 8K*14的Flash程序存儲器和368B的RAM數據存儲器,;采用哈佛結構,數據線和指令線分離,,取數據和取指令可以同時進行,,執(zhí)行效率高,、速度快。
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作為外部存儲器,記錄歷史數據和斷電/復電時間,。與以往的并行存儲器或鐵電存儲器相比,,串行存儲器具有很大優(yōu)勢,。并行存儲器存儲容量大,讀寫速度快,,但是抗干擾能力差,;鐵電存儲器采用串行接口,抗干擾能力強,,也具有很高的靈活性,,可以單字節(jié)讀寫(不需要擦除,可直接改寫數據),,但其存儲密度小,,單位成本高,讀寫速度較慢,。而本系統中采用的M25P16存儲器綜合了這二者的優(yōu)點,,不僅存儲容量大,讀寫速度快,,而且抗干擾能力強,,占用MCU引腳資源少。
6 供電電路及掉電檢測
整個電路板上器件都工作在5V電壓下,。
除了正常供電外,,為保證在突然斷電的情況下,能及時記錄斷電時間,,以備向監(jiān)控中心報告,,還需要備用電源以及斷電檢測電路。本系統主電源采用UPS供電,,可保證在交流電斷電的情況下仍能工作,,另外從220V交流電直接接一電源作為掉電檢測電路的輸入,經光耦隔離,,連接到單片機的RB0引腳,,斷電時,觸發(fā)單片機的RB0外部中斷實現斷電保護,,讀取當前DS1302的時間保存到Flash存儲器,,并經DTU上傳到監(jiān)控中心,然后使單片機進入低功耗工作狀態(tài),?;謴凸╇姇r,同樣要記錄復電時間并上傳,。
監(jiān)測終端的軟件設計
在監(jiān)測終端的軟件設計中,,采用模塊化設計,根據功能將程序劃分為多個模塊分別設計。這種設計方法不僅使得程序結構清晰,,而且為以后新功能的擴展以及程序的移植提供了便利,在調試過程中也便于對軟件故障的定位,。
軟件在MPLAB IDE8.10環(huán)境下,,采用PICC編譯器,用C語言實現,。主程序流程如圖3所示,。監(jiān)測終端上電后,先進行初始化,,然后進入循環(huán),,根據條件調用各個子程序。其中初始化包括各I/O端口的方向設置,、SPI初始化,、中斷標志的設置等。寫數據到Flash時,,須先判斷整個Flash是否寫滿,,惹是須先擦除才能寫入新數據。
圖 3 主程序流程圖
在本系統中,,單片機需處理多個任務,,而且有的任務又是隨機的,故MCU采用查詢和中斷相結合的工作方式,。其中,,定時上報采用查詢方式,如圖3所示,,而斷電檢測,、來電喚醒則通過PIC單片機的RB0電平變化中斷來完成。但是,,在中斷服務程序中,,只簡單的設置掉電/復電標志,并不執(zhí)行其他復雜的操作,,相應的掉電/復電服務是在主程序中檢測到掉電/復電標志后才執(zhí)行的,。這是因為PIC16F877A單片機只有8層深度的硬件堆棧,在中斷里調用子程序極易出現堆棧溢出的情況。為了保證程序的可靠運行,,故將讀取DS1302的時間,、轉入睡眠模式等操作都放在主程序中執(zhí)行,使中斷服務程序盡量短小,,提高系統運行的可靠性,。