新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于CAN總線(xiàn)數(shù)據(jù)采集的遠(yuǎn)程抄表系統(tǒng)設(shè)計(jì)

        基于CAN總線(xiàn)數(shù)據(jù)采集的遠(yuǎn)程抄表系統(tǒng)設(shè)計(jì)

        作者: 時(shí)間:2010-05-26 來(lái)源:網(wǎng)絡(luò) 收藏

        程序說(shuō)明

        是將電表轉(zhuǎn)盤(pán)每轉(zhuǎn)一圈轉(zhuǎn)化為一個(gè)周期電脈沖,單片機(jī)將此脈沖累加,從而測(cè)得電表消費(fèi)度數(shù)。為了避免停電時(shí)造成計(jì)數(shù)丟失,造成電力公司損失,每計(jì)0.1度電時(shí)便將累計(jì)數(shù)據(jù)保存于24C02中;根據(jù)電度表量程,保存電表計(jì)數(shù)數(shù)據(jù)占用3個(gè)字節(jié),前2個(gè)字節(jié)保存整數(shù)部分,后1個(gè)保存小數(shù)部分。同時(shí)考慮到24C02擦寫(xiě)壽命,在24C02中開(kāi)辟240字節(jié)專(zhuān)門(mén)用于存儲(chǔ)電表技術(shù)以輪回寫(xiě)入,防止將數(shù)據(jù)頻繁寫(xiě)入固定地址而造成損壞。單片機(jī)采用定時(shí)計(jì)數(shù)器中斷進(jìn)行,以3000r/KWH為例,每轉(zhuǎn)300圈(0.1度)采樣一次并保存,程序如下:

        void count0() interrupt 1 using 2

        {

        //工作在16位計(jì)數(shù)定模式,每計(jì)數(shù)300個(gè)脈沖中斷一次,晶振使用12Mhz

        tl0=0xD4;

        th0=0xFE;

        DOTCOUNT++;// 記錄小數(shù)點(diǎn)后的數(shù)據(jù),無(wú)符號(hào)字符型

        if(DOTCOUNT>=10){

        COUNT++; //記錄整數(shù)部分,無(wú)符號(hào)整型

        DOTCOUNT=0;

        }

        Write24C02(COUNT, DOTCOUNT,2);//2-表示保存數(shù)據(jù)為電表度數(shù)(1-用電高峰時(shí)間段設(shè)置)

        //在此自程序中完成不同時(shí)間段(不同計(jì)價(jià))分類(lèi)存儲(chǔ)。

        }

        數(shù)據(jù)收發(fā)程序說(shuō)明

        數(shù)據(jù)采集器數(shù)據(jù)傳輸內(nèi)容較為簡(jiǎn)單,發(fā)送出去的數(shù)據(jù)主要包括電表度數(shù)(占5個(gè)字節(jié)),接收到的數(shù)據(jù)多為命令(1-4個(gè)字節(jié)),而每次數(shù)據(jù)可傳輸8個(gè)字節(jié),因此每數(shù)據(jù)傳輸采用1幀即可完成。本采用Peli工作模式(29位表示碼),利用查詢(xún)方式發(fā)送數(shù)據(jù),利用外部中斷0接收數(shù)據(jù)。

        數(shù)據(jù)的發(fā)送由CAN控制器根據(jù)CAN協(xié)議規(guī)范自動(dòng)完成。首先CPU必須將要發(fā)送的數(shù)據(jù)報(bào)文傳送到CAN控制器發(fā)送緩沖器中,并置位命令寄存器中的發(fā)送請(qǐng)求標(biāo)志,程序流程如圖5所示。


        圖5 數(shù)據(jù)發(fā)送流程圖

        數(shù)據(jù)接收采用外部中斷0接收,CAN控制器接收到一幀數(shù)據(jù)后,產(chǎn)生中斷觸發(fā)信號(hào),CPU立即響應(yīng),將收到的報(bào)文接收到字節(jié)的接收緩沖器,并置位命令寄存器的釋放緩沖區(qū)標(biāo)志RRB。單片機(jī)根據(jù)接收數(shù)據(jù)進(jìn)行命令解析,并做出相應(yīng)執(zhí)行。部分程序代碼如下:

        void INT0( ) interrupt 0 using 1

        {

        BYTE Length; // CAN 數(shù)據(jù)長(zhǎng)度代碼

        BYTE i; //下標(biāo)

        bit FF //0 :標(biāo)準(zhǔn) CAN幀 1:擴(kuò)展幀

        CANDR=RBF; //地址指向SJA1000接收緩沖區(qū)

        ReceiveMessage[0]=CANDAT; // 讀取并保存你幀報(bào)文字節(jié)

        FF=ReceiveMessage[0]0x80;

        //取出幀格式

        Length=ReceiveMessage[0]0x0F;

        //取出報(bào)文長(zhǎng)度

        if(Length>0x08) Length=0x08;

        ReceiveMessage[1]= CANDAT; //保存報(bào)文標(biāo)識(shí)碼1

        ReceiveMessage[2]= CANDAT; //保存報(bào)文標(biāo)識(shí)碼2

        if(FF){

        ReceiveMessage[1]= CANDAT; //保存報(bào)文標(biāo)識(shí)碼3

        ReceiveMessage[2]= CANDAT; //保存報(bào)文標(biāo)識(shí)碼4

        }

        For(i=0;i Length;i++) ReceiveMessage[i+3]= CANDAT; //保存幀數(shù)據(jù)

        CANCON=0x04 // 釋放接收緩沖區(qū)

        }

        數(shù)據(jù)集中器方案

        數(shù)據(jù)收集器主要起到轉(zhuǎn)發(fā)后臺(tái)管理服務(wù)器和各節(jié)點(diǎn)間的數(shù)據(jù)傳輸功能,如圖6所示。CAN控制器模塊主要用來(lái)向各節(jié)點(diǎn)發(fā)送或接收相關(guān)數(shù)據(jù),各節(jié)點(diǎn)地址通過(guò)程序設(shè)置均已被包括在對(duì)應(yīng)報(bào)文29位表示碼中,數(shù)據(jù)集中器可以通過(guò)廣播或點(diǎn)對(duì)點(diǎn)向各用戶(hù)節(jié)點(diǎn)發(fā)送命令數(shù)據(jù)。由于用戶(hù)節(jié)點(diǎn)比較多,數(shù)據(jù)集中上傳比較多,因此需要較多的數(shù)據(jù)接收緩沖區(qū)保存,然后通過(guò)GSM轉(zhuǎn)發(fā)給后臺(tái)管理服務(wù)器完成數(shù)據(jù)交流,因此采用有512字節(jié)內(nèi)存的單片機(jī)STC89C51對(duì)CAN控制器和GSM模塊進(jìn)行控制。單片機(jī)控制GSM模塊在Text模式下接收手機(jī)短信,短信的收發(fā)是通過(guò)向串口以文本模式發(fā)送AT指令來(lái)實(shí)現(xiàn)的,其編碼轉(zhuǎn)換格式簡(jiǎn)單,并有較高的轉(zhuǎn)換速率。


        圖6 數(shù)據(jù)集中器示意圖

        結(jié)束語(yǔ)

        本文主要以電能表為例介紹了抄表數(shù)據(jù)采集和轉(zhuǎn)發(fā)的方案,在此基礎(chǔ)上只要稍加修改就可開(kāi)發(fā)出不同抄表,如預(yù)付費(fèi)電表燃?xì)獬硐到y(tǒng)、遠(yuǎn)程水表抄表系統(tǒng)等。

        本文引用地址:http://www.104case.com/article/151842.htm

        霍爾傳感器相關(guān)文章:霍爾傳感器工作原理


        電度表相關(guān)文章:電度表原理


        電能表相關(guān)文章:電能表原理
        霍爾傳感器相關(guān)文章:霍爾傳感器原理

        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 延长县| 陇川县| 平阳县| 彭山县| 柳州市| 抚远县| 宜宾县| 荥经县| 邯郸市| 昭苏县| 乐亭县| 临猗县| 襄樊市| 沙洋县| 兰坪| 江达县| 昭平县| 德安县| 景东| 崇阳县| 乌海市| 建德市| 红河县| 集贤县| 泸定县| 西盟| 宜黄县| 德格县| 沙田区| 尤溪县| 宝兴县| 宁南县| 丰县| 仁化县| 边坝县| 滦南县| 屏东市| 丰原市| 临西县| 壤塘县| 南雄市|