摘? 要: 利用以太網的沖突檢測方式在RS485總線上連接的多個設備之間采用多主方式對等傳輸數據,并給出了這種方法的硬件設計方案和軟件流程。
關鍵詞: RS485總線? 對等網? 沖突檢測
?
目前以RS485總線為基礎組建的各類網絡中,多采用主從式通信。但在一些組網中,采用對等式的通信方式更符合設計要求,效率更高。例如在一套由人機接口、紅外控制模塊(用于遙控家電)、三表集抄模塊、安防模塊和家居網關服務終端(與互聯網及電話相聯)等組成的智能家居服務系統中,該家居系統內部采用什么樣的數據傳輸方式,怎樣可靠和高效地傳輸數據,對整個家居系統的正常運轉至關重要。因為總線上發起通信的數據有外界的遙控指令、人機接口處傳來的控制和查詢指令以及一些模塊主動上傳的指令(如報警),這些指令大多數是隨機的,若采用主從式難以符合要求,而采用多主方式的對等網可以符合數據傳輸的要求,使數據及時發送。同時由于各個設備是對等的關系,實行分布式控制,所以一個模塊損壞,不會影響其他模塊工作,因此不存在主站損壞導致整個通信線路癱瘓的問題,從而使通信的可靠性大大增加。
1? 多主式對等網數據傳輸方案的選擇
在采用多主方式后,掛接在總線上的各設備之間是對等的關系,各節點在發送數據時存在總線競爭問題,需要考慮設備之間的優先發送數據問題以及傳送效率問題。要解決總線競爭問題,可以考慮用以太網的沖突檢測方案或令牌總線方案。在以太網的沖突檢測方案中,當總線上有不同節點同時發送數據時,會由于信號疊加而造成信號紊亂,即信號的沖突。要避免這種情況,節點在發送數據前要偵聽一下總線是否忙,不忙時才發送,以減少沖突。當發生沖突時,可以用二進制指數退避算法來解決沖突。令牌總線方案是通過令牌的傳送來控制每個節點發送的時間,從而解決總線的競爭。它雖然不存在沖突問題,但要不斷地傳送令牌,某一節點要發送數據,必須等到獲得令牌才能發送,這會延誤重要數據的發送,并加大數據量和等待時間。在輕載荷時效率低,而且其協議比沖突檢測方案復雜,初始化時間長。綜合考慮,以太網的沖突檢測方案在輕載荷時效率高,且協議較令牌總線方案簡單。考慮到智能家居項目中總線上負荷不大,沖突量少,因此采用以太網的沖突檢測方式來實現多主方式數據傳輸。
2? 多主式數據傳輸的硬件設計
2.1 器件的選擇
系統的主控單片機采用AT89C52。AT89C52能夠與51系列單片機兼容,具有8KB Flash程序存儲器、256B數據存儲器,以及串口中斷和定時器。這些完全能夠滿足系統對中斷、數據存儲器和程序存儲器容量的需求。RS485收發器可考慮用SN75LBC184,該芯片具有很好的抗干擾性能,可靠性高。
2.2 設計原理
硬件原理圖如圖1所示。單片機AT89C52的串口數據線與SN75LBC184的收發端口相連。SN75LBC184的使能端由單片機I/O口控制,通過RS485收發器進行單片機信號與RS485信號的轉換。利用AT89C52有一個全雙工串口通信端口的特性,在發送1個字節后,緊接著從總線收一次數據,并比較2個數據是否相同。若相同,則認為沒有產生沖突;否則認為產生了沖突,去執行相應的沖突處理。此時RS485收發器要收發同時使能,可讓收(/RE)一直使能,發使能(DE)用一個單片機I/O口(P11)控制。為了減小RS485總線上的盲區狀態,加強通信的可靠性,在RS485總線的出口處加3個保護電阻,分別是上拉電阻750Ω、接地電阻750Ω和2條信號線之間的電阻130Ω。
3?多主式數據傳輸的軟件設計
下面將介紹采用RS485總線組建對等網,利用沖突檢測方式傳送數據的原理及軟件流程。該總線傳輸速率為38.4kbps,采用多主發送方式。
3.1 發送流程
由于采用類似以太網的沖突檢測方式來發送數據,因此為了減少沖突,數據在發送之前應先進行總線偵聽,即確定總線是否有數據正在發送。若有,則等待到線路空閑;否則可發送,這樣可以減少沖突發生的概率。按傳輸速率為38.4kbps計算,每位的發送時間為26μs,以每個字節為10位計(起始位和結束位各1位,數據位8位),則發送每個字節需260μs。發送1幀32字節數據最少需8320μs。在總線偵聽時,若500μs沒有接收中斷,則認為總線空閑,可以發送數據,等待時間很短,在數據量小時效率高。當某些數據幀要求有回應時,要發送回應幀,若回應幀滿足以下條件:
(1)發送1個字節要260μs,1幀最大32字節數據至少要8320μs,取10ms。
(2)對方接收到的時間取10ms。
(3)程序處理時間取10ms。
(4)對方發送時間按10次沖突算,則(210-1)×3×500=1534500,取1.54s。
(5)接收回應幀時間10ms。
則等待時間T=10+10+1534+10=1564ms,可取1.6s。
若要求回應幀的數據等待一段時間后還沒收到回應幀,則重發數據,這樣可減少誤碼率。若多次無法通信,則各裝置要置出錯信息,作相應處理或向外界報警。具體發送流程如圖2所示。當有數據要發送時,先判斷線路是否忙,若不忙,則可以發送數據。在發送途中檢測是否有沖突,若在發送中發現有數據沖突,則進行沖突處理,算出退避時間,等待退避時間后重傳數據,最多10次;若無沖突,則發送完成,在設定的時間內等待回應幀,若在規定時間內沒收到回應幀,則置相應標志選擇重傳本幀數據或放棄;若收到回應幀,則本次通信成功。
?
3.2 接收流程
串口通信采用異步傳送方式。字符是按幀格式進行傳送的,每幀數據中起始位和結束位各占1位(用于建立發送與接收之間的同步),數據位8位,無校驗位。接收流程圖如圖3所示。在串口收到數據后,按格式去判別所接收的數據是否正確,即先找到起始符,然后判斷是否為發給自己的數據,并按自定義協議的數據要求和范圍逐個進行檢驗。若為有效數據則放入接收緩沖區,置接收標志,讓應用層處理,有需要回應的,應用層處理完后發送相應的回應幀。對接收到的數據進行處理時,先看是否符合通信格式,CRC校驗是否通過,然后才譯碼。若其中一個數據不合要求,就清緩沖區,認為數據無效,有些數據需返回錯誤信息。在通信中可能有一些異常狀態,如接收數據出錯或1幀數據沒有收完。在此情況下,若數據之間的間隔超過最大等待時間,則需把接收數據緩沖區清空,認為數據無效。
?
3.3 沖突檢測流程
若2個設備同時在空閑的電纜上發送數據,就會發生數據沖突,此時系統要能檢測出總線上的沖突。在發送時把數據賦給一個變量,進入發送中斷后等待接收中斷標志(若超時也認為發生了沖突),然后從串口取數,與變量中的數比較即可判斷有無沖突。沖突檢測流程圖如圖4所示。進入串口中斷后,如果是發送中斷,則清TI(發送中斷)標志,等待RI(接收中斷)標志。若超過設定時間(500ms)沒收到RI標志為1的信號,則認為發生了沖突。在接收到RI標志后,把串口緩沖區的數據與發送前存的數據比較,若二者相同,則不存在沖突;若不同,則認為發生了沖突。
3.4 沖突處理流程
在發送數據中,若檢測到一次收發數據不同,就認為總線上有數據沖突,要進行沖突處理。沖突處理流程圖如圖5所示。發送過程中,當檢測到總線上有數據沖突,則所有設備停止發送,計算出等待的時間,退出串口中斷,在等待一段退避時間后,重新發送。等待時間的計算采用改進的二進制指數退避算法。
?
在二進制指數退避算法中退避時延T=(2i-1)×基本時間間隔×優先系數。
其中i為沖突次數,最大取10,基本時間間隔定為500μs。優先系數是考慮讓一些重要數據在發生沖突后可以優先發出,各站中越重要的數據優先系數越低,這是對以太網二進制指數退避算法的改進。優先系數根據系統需求確定。根據總線上各設備的情況,以智能家居系統為例,可考慮把通信信息優先級分為3級。如安防報警信息優先級別最高,優先系數最小,可設為1,其他設備的優先系數可根據情況設為2或3。當發生一次沖突時,安防優先系數為1,基本時間間隔取500μs。當等待500μs后,若總線空閑,則可重新發送,即只等待1ms。計算后的計數值在單片機的定時器中計數,計時時間到,則再次總線偵聽,發送數據。
4? 結束語
該方案已經在一套智能家居系統中得到實現,同時也可作為其他項目的通信參考方案。該方案不僅可在RS485總線上使用,經一定的修改之后還可以用于電力載波等方式,因此具有很好的兼容性。
?
參考文獻
1? Forouzan B,Coombs C,Fegan S C著,潘仡,朱丹宇,周正康譯.數據通信與網絡.北京:機械工業出版社,2000
2? FAILSAFE Biasing of Differential Buses.National?Semiconductor Corporation,1998