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