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