基于CAN總線數據采集的遠程抄表系統設計
數據采集程序說明
數據采集是將電表轉盤每轉一圈轉化為一個周期電脈沖,單片機將此脈沖累加,從而測得電表消費度數。為了避免停電時造成計數丟失,造成電力公司損失,每計0.1度電時便將累計數據保存于24C02中;根據電度表量程,保存電表計數數據占用3個字節,前2個字節保存整數部分,后1個保存小數部分。同時考慮到24C02擦寫壽命,在24C02中開辟240字節專門用于存儲電表技術以輪回寫入,防止將數據頻繁寫入固定地址而造成損壞。單片機采用定時計數器中斷進行數據采集,以3000r/KWH為例,每轉300圈(0.1度)采樣一次并保存,程序如下:
void count0() interrupt 1 using 2
{
//工作在16位計數定模式,每計數300個脈沖中斷一次,晶振使用12Mhz
tl0=0xD4;
th0=0xFE;
DOTCOUNT++;// 記錄小數點后的數據,無符號字符型
if(DOTCOUNT>=10){
COUNT++; //記錄整數部分,無符號整型
DOTCOUNT=0;
}
Write24C02(COUNT, DOTCOUNT,2);//2-表示保存數據為電表度數(1-用電高峰時間段設置)
//在此自程序中完成不同時間段(不同計價)分類存儲。
}
CAN總線數據收發程序說明
數據采集器數據傳輸內容較為簡單,發送出去的數據主要包括電表度數(占5個字節),接收到的數據多為命令(1-4個字節),而CAN總線每次數據可傳輸8個字節,因此每數據傳輸采用1幀即可完成。本設計采用PeliCAN工作模式(29位表示碼),利用查詢方式發送數據,利用外部中斷0接收數據。
數據的發送由CAN控制器根據CAN協議規范自動完成。首先CPU必須將要發送的數據報文傳送到CAN控制器發送緩沖器中,并置位命令寄存器中的發送請求標志,程序流程如圖5所示。

圖5 數據發送流程圖
數據接收采用外部中斷0接收,CAN控制器接收到一幀數據后,產生中斷觸發信號,CPU立即響應,將收到的報文接收到字節的接收緩沖器,并置位命令寄存器的釋放緩沖區標志RRB。單片機根據接收數據進行命令解析,并做出相應執行。部分程序代碼如下:
void INT0( ) interrupt 0 using 1
{
BYTE Length; // CAN 數據長度代碼
BYTE i; //下標
bit FF //0 :標準 CAN幀 1:擴展幀
CANDR=RBF; //地址指向SJA1000接收緩沖區
ReceiveMessage[0]=CANDAT; // 讀取并保存你幀報文字節
FF=ReceiveMessage[0]0x80;
//取出幀格式
Length=ReceiveMessage[0]0x0F;
//取出報文長度
if(Length>0x08) Length=0x08;
ReceiveMessage[1]= CANDAT; //保存報文標識碼1
ReceiveMessage[2]= CANDAT; //保存報文標識碼2
if(FF){
ReceiveMessage[1]= CANDAT; //保存報文標識碼3
ReceiveMessage[2]= CANDAT; //保存報文標識碼4
}
For(i=0;i Length;i++) ReceiveMessage[i+3]= CANDAT; //保存幀數據
CANCON=0x04 // 釋放接收緩沖區
}
數據集中器設計方案
數據收集器主要起到轉發后臺管理服務器和各節點間的數據傳輸功能,如圖6所示。CAN總線控制器模塊主要用來向各節點發送或接收相關數據,各節點地址通過程序設置均已被包括在對應報文29位表示碼中,數據集中器可以通過廣播或點對點向各用戶節點發送命令數據。由于用戶節點比較多,數據集中上傳比較多,因此需要較多的數據接收緩沖區保存,然后通過GSM轉發給后臺管理服務器完成遠程數據交流,因此采用有512字節內存的單片機STC89C51對CAN控制器和GSM模塊進行控制。單片機控制GSM模塊在Text模式下接收手機短信,短信的收發是通過向串口以文本模式發送AT指令來實現的,其編碼轉換格式簡單,并有較高的轉換速率。

圖6 數據集中器示意圖
結束語
本文主要以電能表為例介紹了遠程抄表系統數據采集和轉發的設計方案,在此基礎上只要稍加修改就可開發出不同抄表系統,如預付費電表系統、遠程燃氣抄表系統、遠程水表抄表系統等。本文引用地址:http://www.104case.com/article/151842.htm
霍爾傳感器相關文章:霍爾傳感器工作原理
電度表相關文章:電度表原理
電能表相關文章:電能表原理 霍爾傳感器相關文章:霍爾傳感器原理
評論