基于ZigBee 技術(shù)的無(wú)線(xiàn)抄表系統設計與應用
1 引言
現階段,無(wú)線(xiàn)技術(shù)正飛速地進(jìn)入許多應用領(lǐng)域,與有線(xiàn)設備相比其具有成本低、攜帶方便、無(wú)需布線(xiàn)等優(yōu)點(diǎn),特別適用于手持設備的通信、電池供電設備、遙控、遙測、小型無(wú)線(xiàn)網(wǎng)絡(luò )、無(wú)線(xiàn)抄表、門(mén)禁系統、小區傳呼、工業(yè)數據采集系統、用戶(hù)識別、信號采集、水文氣象監控、無(wú)線(xiàn)數字語(yǔ)音、數字圖像傳輸等系統的應用。
2 系統方案設計
(1) 系統整體設計
整個(gè)系統按照運行流程可分成三部分:終端設備(多個(gè))、手持式采集設備(一個(gè))、數據MIS 系統。終端設備是采集氣量數據的集成設備,它負責對氣量的數據進(jìn)行采集和控制,同時(shí)可通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )傳輸給手持式采集設備;手持式采集設備是通過(guò)無(wú)線(xiàn)通道對終端設備的數據進(jìn)行下載和控制的設備;數據MIS系統是將手持式設備中的采集數據下載后對其進(jìn)行管理的軟件系統。
(2) 終端設備
在用戶(hù)端氣表加裝通訊模塊形成終端設備,實(shí)現數據的讀取和無(wú)線(xiàn)傳輸。
(3) 手持式采集設備配置
MPU:PHILIPS P89LV51RD2,低功耗芯片;
EEPROM:24AA512(64K)用以存放所采集的數據;
LCD:MOBI2006 薄型液晶LCD;
鍵盤(pán):設置4 個(gè)功能鍵,分別為:上、下、確認、背光;
RS-232C 接口芯片:MAX232;
無(wú)線(xiàn)模塊:IP?Link1000-B;
(4) 數據庫MIS系統
其主要功能包括與手持式采集設備進(jìn)行數據交換并存儲,對數據進(jìn)行格式化加工,對數據進(jìn)行通用管理(添加、刪除、修改、查詢(xún)等)以及根據客戶(hù)需求打印各種報表。
3 系統硬件結構及連接圖
手持設備的硬件連接如圖2 所示,元件主要包括微控制芯片、片外存儲器、多路復用器CD4052、無(wú)線(xiàn)模塊IP?Link1000-B、串口電平轉換芯片MAX232、鍵盤(pán)和LED 顯示屏。
微控制芯片通過(guò)并口連接鍵盤(pán)和LED 顯示屏,片外存儲器EEPROM采用I2C模擬總線(xiàn)方式連接,上位機和下位機通訊采用RS-232C 方式,需使用MAX232 芯片進(jìn)行電平轉換,另因無(wú)線(xiàn)模塊與上下位機通訊都通過(guò)通用串行口,所以要進(jìn)行串行口擴展,采用多路復用開(kāi)關(guān)CD4052。
(1) 數據幀定義
數據幀是數據傳輸協(xié)議中數據的規范格式,數據幀結構的定義如表1 所示。
注:Lead 為幀標識(幀頭)、Command 為命令字、Length 為數據長(cháng)度、Load 為數據、Checksum為CRC校驗碼
(2) 傳輸協(xié)議
上位機—下位機采用S-232 串行數據傳輸,串行口通信方式為異步串行通信,信息格式為1 個(gè)開(kāi)始位、8 位數據位、1個(gè)停止位、無(wú)奇偶校驗位,數據傳輸采用“停止—等待”協(xié)議。
數據發(fā)送:發(fā)送方將欲發(fā)送的數據先進(jìn)行幀格式定義,先對數據串(命令字+數據長(cháng)度+數據)進(jìn)行循環(huán)冗余校驗(CRC-16 ),形成兩個(gè)字節的校驗碼,在數據串前添加幀標識,然后附上所得的校驗碼,形成數據幀后進(jìn)行發(fā)送,并等待返回信息。
數據接收:接收方在接收數據幀時(shí),先判斷幀標識,若錯誤,丟棄當前幀并向數據源發(fā)重傳命令;如果正確,接收“命令”字節和“數據長(cháng)度”字節并判斷數據長(cháng)度,超出數據長(cháng)度時(shí)停止接收數據并發(fā)重傳命令,長(cháng)度合乎要求時(shí)才進(jìn)行后面數據的接收,以上每個(gè)字節接收過(guò)程都包含超時(shí)判斷,如果超時(shí)要求數據重發(fā)。數據接收完畢后進(jìn)行循環(huán)冗余校驗,將生成的校驗碼與接收到的校驗碼比較,相同則通過(guò)校驗,數據幀正確,然后進(jìn)行命令字節判斷并對數據進(jìn)行處理;若未通過(guò)校驗,接收方發(fā)重傳命令至發(fā)送方,要求重新傳輸該幀數據。
發(fā)送端A在啟動(dòng)發(fā)送后等待返回信息,接收端B接收并校驗數據后進(jìn)行信息回復,包括正確報告或錯誤報告信息,發(fā)送端A 在接收到接收端B 的反饋信息后,作出相應的判斷動(dòng)作。另外,在得到錯誤報告信息或在規定時(shí)間內沒(méi)有接收到反饋信息時(shí),發(fā)送端A重新發(fā)送當前數據幀,并且記錄重發(fā)次數。當重發(fā)次數超過(guò)給定值N 時(shí),停止發(fā)送,并報出錯信息。
4.2 下位機與上位機的通信
下位機(手持設備)與上位機(計算機)通信采用RS-232C 串口通信,上位機對所接收的數據進(jìn)行CRC 檢驗判斷,校驗未通過(guò),要求重傳,校驗通過(guò),數據存儲至數據庫。上位機利用Visual Basic 6.0中的通信控件MSComm開(kāi)發(fā)串行通訊程序。MSComm 控件提供兩種處理通信的方式:事件驅動(dòng)方式和查詢(xún)方式。事件驅動(dòng)方式由MSC omm 控件的onComm事件捕獲并處理通信事件和錯誤,其優(yōu)點(diǎn)是程序相應及時(shí)、可靠性高;查詢(xún)方式是通過(guò)檢查commEvent屬性的值來(lái)判斷事件和錯誤,適合于應用程序較小的情況。
(1) 控件屬性:包括串口初始化屬性設置、數據讀寫(xiě)操作、狀態(tài)控制、打開(kāi)/ 關(guān)閉串口。
(2) 串口初始化屬性設置
下面結合初始化程序的實(shí)例來(lái)說(shuō)明屬性的設置:
MSComm. CommPort = 2 設置通信端口號;
MSComm. Settings =“1200, M, 8, 1” 設置波特率為12 00 ,奇偶校驗為標記,8 位數據位,1 位停止位;
MSComm. InputLen = 0 讀取接收緩沖區的全部代碼;
MSComm. InputMode = comInputModeBinary 接收的數據格式為二進(jìn)制數據;
MSComm. InBufferSize = 100 設置接收緩沖區大小為100字節;
MSComm. OutBufferSize = 10 設置發(fā)送緩沖區的大小為10字節;
MSComm. OutBufferCount = 0 清除發(fā)送緩沖區;
MSComm. InBufferCount = 0 清除接收緩沖區;
MSComm. PortOpen = True 打開(kāi)串口(關(guān)閉端口時(shí)值為f a l s e );
(3) 數據讀寫(xiě)操作
Output 屬性:向發(fā)送緩沖區寫(xiě)數據流,為Variant 型變量。Output 屬性可以傳輸文本數據或二進(jìn)制數據,用Output 屬性傳輸文本數據,須定義一個(gè)包含一個(gè)字符串的Variant。發(fā)送二進(jìn)制數據,則須傳遞一個(gè)包含字節數組的Variant 到Output屬性。以下是上位機向下位機發(fā)確認信號(ACK)的實(shí)例。
定義sendata 為Variant,發(fā)送Output 的值,right()為Byte數據,存放要發(fā)送的二進(jìn)制數據:
Dim sendata As Variant
Dim right(1) As Byte
right (0) = H5E
sendata = right 二進(jìn)制數據變?yōu)閂ariant 格式
MSComm. InBufferCount = 0 接收緩沖區清空
MSComm. Output = sendata 發(fā)送二進(jìn)制數據
Inp ut 屬性:將接收緩沖區中收到的數據讀入變量,為Variant 型變量。當InputMode 屬性值為0 (文本模式)時(shí),變量中含String 型數據,當InputMode 屬性值為1(二進(jìn)制模式)時(shí),變量中含B y t e 型數組數據。
InputLen 屬性:確定被Input 屬性讀取的字符數。設置InputLen 為0,則讀取緩沖區中全部的內容。若接收緩沖區中In putLen 字符無(wú)效,In put 屬性返回一個(gè)零長(cháng)度字符串(“”)。在使用Input 前,用戶(hù)可以選擇檢查InBufferCount 屬性來(lái)確定緩沖區中是否已有需要數目的字符。
InBufferCount屬性:返回接收緩沖區中已傳到但還未取走的字符個(gè)數,In teg er 型。設為0 ,則清空緩沖區。
OutBufferCount 屬性:類(lèi)似于InBufferCount 屬性,為發(fā)送緩沖區中已傳到但還未取走的字符個(gè)數,Integer 型。設為0 ,則清空緩沖區。
5 數據的循環(huán)冗余校驗
在數據的無(wú)線(xiàn)傳輸過(guò)程中,因為噪聲的干擾數據極易出錯,因此在傳輸時(shí)必須采用可靠的數據校驗方法。數據校驗方法包括奇偶校驗,循環(huán)甬余校驗等多種校驗方法,普遍采用循環(huán)甬余校驗方法(CRC),它能有效地檢測出傳輸數據的錯誤。CRC 的全稱(chēng)為Cyclic Redundancy Check,它是一類(lèi)重要的線(xiàn)性分組碼,編碼和解碼方法簡(jiǎn)單,檢錯和糾錯能力強,在通信領(lǐng)域廣泛地用于實(shí)現差錯控制。
CRC 校驗的基本思想是利用線(xiàn)性編碼理論,在發(fā)送端根據要傳送的k 位二進(jìn)制碼序列,以一定的規則產(chǎn)生一個(gè)校驗用的監督碼(即CRC 碼)r 位,并附在信息后邊,構成一個(gè)新的二進(jìn)制碼序列數共(k + r )位,最后發(fā)送出去。在接收端,根據信息碼和CRC 碼之間所遵循的規則進(jìn)行檢驗,以確定傳送中是否出錯。
例如,16 位的CRC 碼產(chǎn)生的規則是先將要發(fā)送的二進(jìn)制序列數左移16 位后,再除以一個(gè)多項式,最后所得到的余即是CRC 碼,其中B(X)表示n 位的二進(jìn)制序列數,G(X)為多項式,Q(X)為整數,R(X)是余數(既CRC 碼)。
求CRC 碼采用模2 加減運算法則,即是不帶進(jìn)位和借位的按位加減,這種加減運算實(shí)際上就是邏輯上的異或運算,加法和減法等價(jià),乘法和除法運算與普通代數式的乘除法運算是一樣,符合同樣的規律。生成CRC碼的多項式如下,其中CRC-16 和CRC-CCITT 產(chǎn)生16 位的CRC 碼,而CRC-32 則產(chǎn)生的是32 位的CRC 碼。
CRC-16:(美國標準) G(X)=X16+X15+X2+1
CRC-CCITT:(歐洲標準) G(X)=X16+X12+X5+1
C R C - 3 2 :G (X ) =X 3 2 +X 2 6 +X 2 3 +X 2 2+ X 1 6+ X 1 2+X11+X10+X8+X7+X5+ X4+X2+X1+1
下面以CRC-16 為例:
數據以字節為單位,待傳送的數據排隊,運算區先存放兩個(gè)字節的數據,緩沖區為一個(gè)字節,第三個(gè)字節的數據放在緩沖區內,運算區的數據按位運算,最左邊為標志位,標志位左移,緩沖區內的數據也左移一位(運算區內為新的16位數據),標志位與CRC-1 6 多項式的最高位系數(總為1)比較,標志位為1 則運算區內的數據位與多項式的后十六位“異或”運算,為零則不運算。然后下一位左移,過(guò)程同上,直至緩沖區內的八位數據全傳輸至運算區內為止。這時(shí)第三個(gè)字節的數據運算完畢,將第四個(gè)字節的數據存入緩沖區,運算方法同上。
待數據串運算完畢后,后面附加16 個(gè)零進(jìn)行運算,數據完全運算完成后,運算區的兩個(gè)字節的數據就是生成的CRC校驗碼。將CRC 校驗位附在信息碼后作為循環(huán)碼發(fā)送。
以上是CRC 校驗碼的產(chǎn)生過(guò)程。
接收方在接收到數據(循環(huán)碼= 數據串+ 校驗位)后,再進(jìn)行CRC 校驗,最后產(chǎn)生的運算區內的數據就是待校驗的余數,余數為零則表示接受的數據串正確,否則為錯。
CR C 碼以模二除法得到余數,具體實(shí)現方法是用“異或”運算實(shí)現。單片機CRC 檢驗子程序如下:
CRC_CHECK:
MOV R3, #00H ;存儲CRC碼高位
MOV R4, #00H ;存儲CRC碼低位
CRC0: MOV A, R3
XRL A, @R0 ;R0 為初始值地址
MOV R3, A
MOV R7, #08H ;8 次比較
CRC1: MOV A, R4
CLR C ;進(jìn)位標志清零
RLC A
MOV R4, A
MOV A, R3
RLC A
MOV R3, A
JNC CRC2
XRL A, #80H ;高字節異或運算
MOV R3, A
MOV A, R4
XRL A, #05H ;低字節異或運算
MOV R4, A
CRC2: DJNZ R7, CRC1
INC R0 ;取下一校驗字節數據
DJNZ R6, CRC0 ;R6 為欲校驗數據串的長(cháng)度
RET
6 無(wú)線(xiàn)模塊特征說(shuō)明
本系統的無(wú)線(xiàn)數據傳輸是基于IEEE802.15.4協(xié)議的ZigBee技術(shù)。IEEE 802.15.4無(wú)線(xiàn)數據傳輸協(xié)議標準主要規定了一種短距離、低功耗、低速率、低價(jià)位、高效率、高可靠性的短程無(wú)線(xiàn)網(wǎng)絡(luò )標準。遵循這一標準的技術(shù)被稱(chēng)作ZigBee 技術(shù)。ZigBee 技術(shù)是一種低速率無(wú)線(xiàn)傳輸技術(shù),采用直序擴頻(DS S S ) 技術(shù)來(lái)提高抗干擾能力,工作頻率為8 6 8MHz 、915MHz 或2.4GHz,其中2.4GHz 是一個(gè)開(kāi)放的頻率。該技術(shù)的突出特點(diǎn)是應用簡(jiǎn)單,電池壽命長(cháng),有組網(wǎng)能力,可靠性高以及成本低。
在ZigBee 的七層協(xié)議中,IEEE802.15.4 只定義了PHY和MAC 層,實(shí)體層(PHY)規范確定了在2.4GHz 以250Kbps的基準傳輸率工作的低功耗展頻無(wú)線(xiàn)電(另有一些以更低數據傳播率工作的915 MHz 和868 MHz 的實(shí)體層規范),介質(zhì)訪(fǎng)問(wèn)層(MAC)規范定義了在同一區域工作的多個(gè)802.15.4無(wú)線(xiàn)電信號如何共享空中通道。ZigBee兼容性平臺則在IEEE802.15.4 的基礎上包含了網(wǎng)絡(luò )與安全層、以及應用開(kāi)發(fā)框架(Application Framework)的定義。ZigBee 技術(shù)主要工作在無(wú)須注冊的2.4GHz ISM頻段,數據速率為20~250Kbit/s,最大傳輸范圍在10~75m,典型距離為30m。
系統中無(wú)線(xiàn)模塊采用兼容IEEE 802.15.4 協(xié)議的赫立訊IP?Link1000-B 無(wú)線(xiàn)網(wǎng)絡(luò )收發(fā)模塊,組網(wǎng)形式為星型網(wǎng)絡(luò )。模塊的工作狀態(tài)由外部設備控制,外部設備通過(guò)模塊的UART0接口,采用AT命令或數據幀結構的形式對IP?Link1000-B模塊進(jìn)行配置和操作。
無(wú)線(xiàn)模塊在使用前先進(jìn)行參數配置,包括對UART0 的波特率,模塊的網(wǎng)絡(luò )節點(diǎn),節點(diǎn)號等參數進(jìn)行設置,配置結果保存于模塊內部非易失性存儲器中,然后模塊進(jìn)入數據狀態(tài),準備數據的傳輸。無(wú)線(xiàn)模塊在使用中先處于休眠狀態(tài),在外部命令作用下進(jìn)入活動(dòng)模式,數據傳輸成功后又回到休眠狀態(tài)。
文中的無(wú)線(xiàn)硬件設計、軟件設計解決方案經(jīng)測試運行穩定,無(wú)線(xiàn)通信誤碼率低、可靠性高、安全性好。文中的軟硬件設計方案,可適用于各種單片機,并且作為無(wú)線(xiàn)通信技術(shù)在相關(guān)領(lǐng)域的推廣和廣泛的運用有著(zhù)較好的參考價(jià)值。
評論