1、引言
隨著科學技術的進步和國民經濟的發展,人們對生活居住環境的要求也越來越高,希望能有個安全、舒適、便捷的家。因此繼建設"智能大廈"的迅猛浪潮之后,建設"智能化住宅"的浪潮也逐步席卷全國。居民小區物業管理網絡系統能實現居民小區的智能化管理。居民小區物業管理網絡系統主要由小區中心控制計算機、服務及管理系統軟件、調制解調器、中繼器、用戶前端控制器、安防傳感器、電表、氣表、水表、各級現場執行器等構成。用戶儀表包括前端控制器、水電氣表、各種安防傳感器及現場執行器等功能部件。本設計采取的是一戶四表(電表、氣表、水-1表、水-2表),四表一采集器(前端控制器)。集中器是整個系統的通信橋梁,各用戶的數據都經集中器與上位管理計算機進行通信。上位計算機進行遠端抄計數據和現場控制,對用戶的水電氣用量進行結算和打印賬單。
2、 前端控制器結構
前端控制器以AT89C52單片機為智能處理器,主要由電源模塊、四表(電表、氣表、水-1表、水-2表)、信號調理模塊、通信模塊(RS-485專線和電力載波)、時鐘模塊、監控模塊、數據存儲模塊、小鍵盤模塊、三防傳感器、報警監測模塊、現場儀表控制模塊等組成。其結構如圖1所示。前端控制器數據采集與控制系統主要實現對四表的脈沖計數、累加、存儲、與上位機通信,并可實現三防報警信息的實時采集及現場控制。通過控制器擴展的小鍵盤電路可以對前端控制器進行一些簡單的控制,如輸入標準時間等。通過擴展的時鐘模塊可以準確對用電進行分時段的累加等。通過擴展的數據存儲模塊可以保證系統在掉電的情況下,單片機中的重要數據不丟失。
圖1 前端控制器結構方框圖
3、數據采集模塊軟件設計
前端控制器軟件程序主要分為主程序模塊、數據采集與控制模塊程序設計、三防報警與控制模塊程序設計、小鍵盤模塊程序設計、時鐘與存儲器模塊程序設計。 這里主要介紹數據采集設計流程及主要內容。該模塊是該系統軟件設計的核心部分,本系統所要實現的功能大部分都在該模塊中實現。它設計的好與壞將直接的影響該系統的性能指標。該模塊要實現的功能為:累計用戶的用電、用氣、用水量。并能存儲前一月和當前月各表的脈沖量。并能對用電量全天分12個時段及分谷、平、峰時段存儲。其工作流程如圖2:
3.1 脈沖計數
需計數的脈沖表有四只,為增加計數的可靠性及提高系統的抗干擾能力,每只表有兩條出線,采用循環查詢計數的方式。為了避免計數誤差,系統進行了以下的考慮:設立了四個標志位--P01MARK、P03MARK、P05MARK、P07MARK。在初始化的時候對以上標志位置1,當檢測到輸入為高電平時且它對應的標志位為1,計數單元加1,同時對該標志位清零。當執行下一輪計數的時候,如果該高電平雖還沒有過去,但標志位不為1,則不會進行計數操作。當檢測到輸入為低電平的時候,對通道所對應的標志位置1。也既是說,只有當程序檢測到一次低電平,才能計一次數。根據系統選用各表的技術指標可知:其脈沖間隔大于1.5秒,如果程序能夠正確的檢測到脈沖,那么檢測低電平就沒有任何問題。
為了暫存各表的計數值,系統在片內RAM中開劈了專門的存儲單元。具體定義見表1:
表1 各表脈沖量暫存區定義
計數原理:
以電表為例,當COUNTERELEC0=255時,COUNTERELEC1加1,同時COUNTERELEC0清零。每一字節規定能存儲的最大脈沖數為255。所以每一表的最大計數值為:最大脈沖量=255*255+255=65280(個脈沖)。由于系統程序采取的是定時(系統定時為30分鐘)讀取這些計數單元的值,然后對這些計數單元清零后又開始新一輪計數。電表是在單位時間內產生脈沖數最多的,以電表來說,在半小時內要達到600多度電,這對一般的用戶來說是達不到的。那水表和氣表就更不在話下了。因此,系統采用2個字節作為暫存單元已經足夠。程序流程如圖3
圖3中的出錯處理模塊主要處理線路故障。系統在片內RAM中專門開辟了一個字節的單元存放其線路故障信息。如表2:
表2 線路故障存儲單元定義
INPUTCIRCUIT中每一位均有具體的定義,見表3:
表3 線路故障信息定義
其中只有當各位為'1'時才有效,為0表示無故障。由于系統每一輪計數操作,要檢測四表的輸入情況,為了減少誤差。在一輪計數未完成前,不管各線路有無故障,都不會退出計數流程。當P0口的8位都檢測完以后,比較線路故障信息存放單元INPUTCIRCUIT中的值是否為0。為0表示各線路無故障,進行下一輪計數;否則表示有故障,然后向CPU申請串口中斷。向上位機報告各線路故障信息。具體的處理在通信模塊中完成。應該注意的是,在向上位機報告完其故障信息后。進行下一輪計數時,應對該單元清零。
3.2 定時
系統采用定時讀取以上各表暫存區的數據。系統設定時間為半小時。采用定時器T0作為計時單元。由于T0不能產生30分鐘的定時時間。所以系統擴展了兩個定時單元,見表4:
表4 定時單元地址定義
定時程序流程如圖4
圖4 定時流程
定時器T0與脈沖計數流程是同時進行的,當定時時間(60MS)到時,產生定時中斷,進入T0中斷服務程序,如果T0TIMER0和T0TIMER1不滿足條件,則不會進入數據處理模塊。而跳出中斷,重新對T0賦值,又重新定時,繼續脈沖計數。
3.3 數據處理模塊
3.3.1數據處理程序
當定時條件滿足時,進入數據處理模塊。在該模塊中,將實現以下功能:判斷滿一月否,未滿一月,則進行常規的脈沖量累加。滿一月,則將本月已累加的各表脈沖量轉存到系統規定的上月各表脈沖量存儲單元。當然,在移存之前,要對此存儲單元清零。在轉存的同時,要對本月存儲單元清零。然后再讀取計數單元中的數據進行分類累加。具體的流程如圖5:
圖5 數據處理模塊流程圖
對時滿一月的處理方法為:系統開辟三個字節來存放系統設定的每一月的翻轉時間,見表5:
表5 一月翻轉時間存儲定義
當系統的定時條件滿足時,便向時鐘芯片DS1302讀時間(月、天、時、分),當讀取時間和上述系統存儲單元中月、天、時三者都相等時。表示滿一月。且CHECKMONTH中的月時間自動加1。而CHECKDATE、 CHECKHOUR的時間不會變。由于一年只有12個月,所以在每次加1之前,應該判斷CHECKMONTH的值是否等于12。不等則自動加1。相等則應在加1前對CHECKMONTH清零。
3.3.2 電脈沖量計算模塊
對電脈沖量的計算要分時段,系統將全天24小時分為12個時段。每2個小時一個時段,0-2小時為第一時段,以后的依次類推。同時系統為了實現復費計算,將全天分為6個時段,三個計費時段:谷、平、峰時段。計費時段時段的分法如表6:
表6
為了簡化,系統只比較了2個時段:谷時段、平時段。其思想為:如果實時時間不在谷時段和平時段之內,就必在峰時段。所以系統在輸入時間時就只輸入了谷時段的開始和結束時間;平時段的開始和結束時段。系統為此設立了6個字節的空間來存儲它們,見表7:
表7 谷平時間段存儲定義
系統為了方便判斷當前時間處于哪個計費時段之內。設置了2個標志位。見表8:
表8 谷平時段標志位
這些標志位均是置1有效。即當TIMEBOT=1時,表示現在處于谷時段;當TIMEBLEV=1時,表示現在處于平時段;如果兩者均不為1,則處于峰時段。該模塊的具體處理流程如圖6:
圖6 電脈沖量計算流程圖
由于要對電脈沖量分時段存儲。故需時段比較模塊COMPARETIME,如圖,為了提高系統對12時段判斷的準確率,系統采用了兩個比較量:小時和分鐘。對分鐘比較采取四舍五入的方法, 為此,系統設置了一個標志位EXAMINEMINUTE。當分鐘小于15時,對該標志位置位。比如說現在的小時數據為2,而分鐘數為12,如果只比較小時數,則可判斷前一段定時時間在2時段。顯然,并不準確。系統每次計數時間為30分鐘。雖然在兩個時段都有計數,但在前一時段的時間更長。所以,系統增加了對分鐘比較。12小于15,EXAMINEMINUTE置位,以后程序檢測到EXAMINEMINUTE的狀態,則判斷這一計數時間在1時段。這樣就更準確。同時在該模塊中還設計了對谷、平、峰時段的比較。同時對已定義的各標志位置位。具體的處理流程圖見圖7:三個計費時段的脈沖量的累加的處理與此類似。
圖7 COMPARETIME模塊流程圖
氣脈沖量計算模塊、水-1脈沖量計算模塊、水-2脈沖量計算模塊的處理與電脈沖量模塊的處理方法相同,只是:氣脈沖量、水-1脈沖量、水-2脈沖量不分時段累加。
3.3.3 各表脈沖量存儲空間說明
系統設計能存儲2個月的各表脈沖量。系統在RAM開辟了專門的存儲單元。具體的定義如表9:
表9 各表脈沖量存儲區定義
各存儲空間均為3個字節。標號對應的都是連續3字節的最后一字節。比如說051H---053H存儲的是本月用氣脈沖量,從左到右為由高到低。
4 . 結論
在本文介紹的物業管理系統中前端控制器的硬件電路基礎上,結合上述程序流程,運用匯編語言開發出了數據采集程序,上位控制計算機在VB環境下與下位集中器和前端控制器進行通信,并對全部遠端設備進行管理和監控,計算各戶水電氣用量、打印結算清單和記錄前端報警信息,能很好的對居民小區物業進行管理