葉碩
(武漢郵電科學研究院,湖北 武漢 430000)
佘新平
(長江大學電子信息學院,湖北 荊州 434023)
智能抄表采集是指通過嵌入式技術、無線通訊以及計算機,對用戶電能使用信息進行采集處理的過程。隨著通信技術、微處理器技術、數據處理技術的共同發展[1],智能電網的建設克服了傳統抄表對人力資源造成浪費的缺陷,有效降低了抄表的成本,并提高了電表信息采集的準確性。筆者設計了一種基于STM32處理器、運用循環冗余校驗手段的智能抄表采集系統,旨在方便用電管理部門對用電信息的采集,提高工作效率。

圖1 智能抄表采集系統結構框圖
智能抄表采集系統(采集器)的結構框圖如圖1所示。采集系統以STM32處理器為核心,RS485通信模塊和紅外發射模塊為主要結構,使用液晶屏和LED指示燈顯示采集信息和狀態。電能表通過RS485通信模塊與處理器相連,將表征著用戶用電狀況的信息發送給STM32處理器;電表信息經過STM32處理后,再通過紅外通信模塊發送給上位機做進一步分析;同時,液晶屏顯示當前采集到的用電數據,指示燈提示采集是否成功。上位機為基于MCU(微控制單元,Microcontroller Unit)組成的控制系統,具有對紅外上傳數據進行分析篩選的能力。
目前市面上STM32處理器主要存在F4、F1兩種型號[1]。相比STM32F1,STM32F4運算速度更快、功能更為完善。該系統在算法上對速度有一定要求,且為考慮到以后升級擴展,故選用STM32F4作為處理器。
RS232與RS485是2種常用的有線數據通信接口標準。與RS232相比,RS485接口電平降低且兼容于TTL電平,即使在無法確保斷電的情況下插拔,也能降低對接口電路芯片的損壞概率。其數據傳輸采用差分信號負邏輯,因而能有效抑制共模干擾,保證傳輸數據的穩定。此外,RS485在近距離時速率可達到35Mbps,并支持遠距離傳輸,還可以通過多種校驗的手段進一步提高數據傳輸的可靠性,適合作為智能抄表采集系統的底層通信方式。

圖2 MAX3485芯片與DB9連接電路
MAX3485是一種差分信號到電平信號轉換的芯片,適用于半雙工通信,其通信電壓3.3V,可實現最高10Mbps的傳輸速率。該系統設計選用該芯片(見圖2),MAX3485芯片A、B引腳與DB9的2、3腳相連,將接收到的差分信號轉換為電平信號后,傳送至STM32的USART1中,通過算法完成對采集數據的處理。
紅外通信主要通過數據電脈沖與紅外光脈沖之間的相互轉換來實現無線的數據收發,可用來取代點對點的線纜連接[2]。紅外線接收頭CHQ1838D具有較強的抗干擾能力,能實現寬角度、長距離接收,且能正常工作于2.7V的低電壓條件,因此系統紅外模塊的設計選用其作為接收裝置。
采集器在整個抄表系統中承擔中轉作用,對電能表而言,采集器將表中表征著用戶電能使用情況的數據進行采集;對上位機而言,采集器給整個智能電網系統提供基本用電數據。因此,采集系統收發數據的可靠性就顯得很重要,為保證數據的可靠,必須對所有傳輸的數據進行循環冗余校驗(CRC)。
數據的傳輸速率和可靠性往往不可兼得,采用信道編碼的方式可以有效解決二者之間的矛盾。信道編碼又稱差錯控制編碼,其常用的方法包括前向糾錯方式(FEC)、混合糾錯(HEC)方式以及循環冗余校驗(CRC)方式。其中,前2種方式都有各自的缺陷[3],適用場合受局限,而循環冗余校驗(CRC)方式,不僅編碼、解碼方式簡單,在不增加過多冗余位的條件下,也能保持較低的誤判率,因此,CRC校驗方式被廣泛應用。
循環冗余校驗原理如下:將待傳送的k位碼序列視為多項M(x)式的系數,則M(x)的最高次冪為k-1次冪,選擇最高次冪為r的多項式G(x)作為生成多項式,則由:

生成多項式G(x)應滿足3個要求:任何一位發生錯誤都應使余數不為0;不同位發生錯誤時應當使余數不同;余數應滿足循環規律[4]。幾種典型的生成多項式如表1所示。

表1 幾種典型的生成多項式

圖3 CRC-16編碼發送流程圖
CRC校驗可以檢測出所有奇數個隨機錯誤和長度不超過多項式G(x)最高階的突發錯誤[4],但若出現錯誤碼元恰好能被多項式G(x)整除的情況,則CRC校驗無法發揮作用,但通過增加CRC的生成多項式G(x)的階數,使余式R(x)位數增加,可有效降低誤判概率。
CRC-16校驗算法分為查表法和計算法2種,其中查表法節省了CPU運算時間,因此具有更高的運算速度;而計算法嚴格遵照CRC校驗原理進行運算,因此代碼相對較少,具有靈活的移植性。設計之初筆者考慮了處理器的運算速度,因此采用計算法。
CRC-16校驗碼計算方法是將16位的CRC寄存器所有位全部賦值為1(1111 1111 1111 1111,化為十六進制為0xFFFF),取發送數據的一個字節,與CRC寄存器中的數據進行異或運算,再將CRC寄存器的內容右移一位,用0填補最高位,并檢查右移后的移出位:若移除數據為1,則將當前CRC寄存器的數據與多項式0xA001(1010 0000 0000 0001)進行異或;若移除數據為0,則CRC寄存器的內容繼續右移一位,用0填補最高位,并檢查右移后的移出位。
重復上述步驟直至右移8次完成,這樣整個8位數據全部進行了處理;將發送所有字節數據都按上述步驟計算完成后,得到的16位CRC寄存器的檢驗碼;追加在發送數據后,構成循環冗余校驗。CRC-16編碼發送流程圖如圖3所示,對應的校驗程序如下:
unsigned short CRC_CHECK(unsigned char *USART_RX_BUF, unsigned char size)
{
unsigned short CRC_Temp;
unsigned char i,j;
CRC_Temp = 0xffff;
for (i=0;i { CRC_Temp^= USART_RX_BUF[i]; //取一個字節的數據進行異或運算 for (j=0;j<8;j++) { if (CRC_Temp & 0x01) //移除數據為1,則與0xA001進行異或 CRC_Temp = (CRC_Temp ?1 ) ^ 0xa001; else //移除數據為0,寄存器內容右移0補最高位 CRC_Temp = CRC_Temp ?1; } } return(CRC_Temp); } 圖4 CRC-16解碼流程圖 圖5 數據發射程序框圖 數據采集模塊實現將電表中的信息采集到STM32中,如果數據采集無誤,則閃爍綠燈2s用于提示采集成功。如果數據采集失敗,則持續閃爍紅燈,提示數據重新采集。 由于CRC編碼采用模2除法,因此每一位除或減的結果不影響其他位,這意味著運算中不會向高位借位,因此本質上等同于異或運算[5],所以在解碼過程中,將接收信息碼M(x)·xr+R(x)與事先選定的G(x)相除,若恰好整除,則視為傳輸無誤。 實際操作中,將CRC編碼發送的校驗位數據單獨存儲,取接收的信息位進行CRC編碼,對比校驗位,若兩者一致,則認為發送信息傳輸無誤,若不正確,則舍棄改組數據,并通過指示燈提示數據重新采集。CRC-16解碼流程如圖4所示。 數據發射模塊將STM32中的信息整理后通過紅外通信的方式發送給上位機,數據發送過程中閃爍綠色指示燈。 紅外收發模塊的數據傳輸格式,要求前2個字節為發送指令位:第1個字節為地址控制位,規定發射地址,其中A1為默認地址;第2個字節為操作控制位,用于修改發射狀態,具有F1、F2、F3三種設置,分別對應紅外發射狀態、修改串口通信地址狀態、修改波特率狀態;后3個字節為用戶自定義的發送信息,由于規定一次必須發送5個字節,因此,通過如圖5所示的算法將數據完整地傳給上位機。 發送中,將前兩位字符設置為A1、F1,因此發射程序算法如下:首先將所得數據分為3個字節一組,不足3個字節則補充添加特定字符FF。然后開辟新數組,并定義其前2個字節為所需的發送指令A1、F1,再將分組后的電表信息數據循環寫入并發送。 試驗模擬測試完整的數據采集過程,通過RS485對電表數據進行抄收,再經由紅外通信對數據進行發送。 首先完成抄收數據的檢查,將紅外模塊即將發送的數據打印到串口進行對比,驗證CRC編碼程序與數據發送程序是否正確。測試結果如圖6所示。然后數據通過紅外模塊發送,上位機將接收的數據打印到串口,對比發送數據,驗證系統的功能能否實現。測試結果如圖7所示。 圖6 自檢發送測試結果 圖7 紅外收發數據結果 在晴朗天氣情況下于室外測試系統,并對不同距離條件下數據發送情況進行匯總,試驗結果如表2所示。從試驗結果可以看出,系統的通信在短距離內較為可靠。 上位機需要接收來自各個采集器的電表數據,若使用硬件插拔方式進行通信,上位機的使用壽命將因硬件磨損而縮短,設計紅外收發的目的在于克服這一問題,當前的紅外收發距離,已經可以較好勝任通信工作。 表2 數據抄收記錄 智能抄表技術在我國經過多年發展,已經具有了一定規模,但智能電網的完善仍有很長的路要走,需要在以綠色節能為目標的驅動下,完成配電網的更新換代、輸電站的進一步自動化等,提高電網整體的安全性與高效性。同時,這項惠及民生的工程,還需要在制度上、管理上做到同步的發展。 [1]任順航,呂鵬鵬,王立鵬,等. 基于STM32的電能手抄系統設計與實現[J]. 電子技術應用,2014,40(1):75~78. [2]魏曉艷,李軍. 紅外通訊技術與藍牙技術比較[J]. 電子元器件應用,2007,9(4):68~69,72. [3]王忠,李延社,游智勝. CRC算法設計與程序實現[J]. 電子測量技術,2007,30(12):26~28,36. [4]彭偉. 嵌入式系統CRC循環冗余校驗算法設計研究[J]. 南京信息工程大學學報(自然科學版),2012,4(3):258~265. [5]李宥謀,房鼎益. CRC編碼算法研究與實現[J]. 西北大學學報(自然科學版),2006,36(6):895~898.

3.2 數據采集模塊
3.3 數據發射模塊
4 測試分析



5 結語