張 莉,鄔寶寅
(1.鄭州科技學院 機械工程學院,鄭州450064;2.新天科技股份有限公司,鄭州 450001)
在現代分布式現場控制系統發展過程中RS485總線起到了重要作用,成為現場智能儀表、PLC、工業PC之間最為通用的總線形式。RS485總線采用一對雙絞線通過差分信號以半雙工方式進行數據通信,具有較強的抗干擾性和較遠的傳輸距離,接口簡單成本低廉。RS485總線硬件可以由差分信號收發器和MCU自帶的UART構成,隨著各種類型MCU的廣泛應用,RS485的進一步發展也具備了豐富的條件。由于傳統RS485僅為一種傳輸方式并無標準應用協議,在不同應用前提下穩定性差異較大,有效傳輸速率較低,已經在不少場合被具有更高可靠性、更高速率和具備上層應用協議的現場總線所取代,如CAN,PROFIBUS等,故基于傳統RS485的發展條件和存在的問題,設計了更加穩定的硬件結構和具有豐富功能的應用協議,進行了硬件設計、協議設計、代碼編寫和仿真。
傳統RS485總線多機通信應用方式如圖1所示,帶有UART的設備通過差分信號收發器將TTL電平的串行數據轉為差分方式送入總線,差分收發器收發狀態可切換,總線上的各個設備以并聯的方式接入,在某一時刻只能有一個設備的差分收發器是發送狀態,其他設備均為接收狀態,所以必須通過某種合適的協議才能實現總線上任意設備之間的通信,否則將會造成總線沖突。

圖1 傳統RS485總線多級通信Fig.1 Multi level communication of traditional RS485 Bus
這種應用方式存在一些問題[1-4]:(1)總線上掛載的設備數量與通信波特率和傳輸距離之間相互限制。由于總線上處于發送狀態的設備需要驅動所有處于接收狀態的設備,而且總線較長時為了克服信號反射,需要在總線兩端增加假負載,假負載會進一步消耗差分發送器的驅動能力;(2)總線上每一個設備需要預設唯一地址,為了方便協議設計,甚至需要在每一個設備里預存總線上所有設備的地址。這2個問題限制了系統擴展和應用程序設計的靈活性。本文研究解決了這2個問題,并可以顯著降低誤碼率,提高通信可靠性。
改進型RS485總線結構如圖2所示,設備采用串聯型總線接入方式和帶總線中繼功能的結構來解決傳統RS485總線應用的不足。總線上每個接入設備需要具有2個差分接收器、2個差分發送器和具有1個UART結構的微控制器,差分接收器和發送器均帶有獨立的使能端,UART的輸出端在不使用時需要能夠配置為高阻或漏開狀態;其中1個差分接收器和1個差分發送器的差分信號端并聯在一起,2個差分接收器的TTL電平輸出端和2個差分發送器的TTL電平輸入端連接在一起,并與設備內的UART數據收發線連在一起;每個差分接收器和發送器的使能端分別與微控制器的GPIO口連接[5-6]。

圖2 改進型RS485總線結構Fig.2 Structure of improved RS485 Bus
2對差分接收器、發送器分別構成設備的2個總線接入口,這里定義為上行接口A和下行接口B。將圖2中從左至右的信號方向定義為下行方向,從右至左的信號方向定義為上行方向;總線設備通過接口A、B以串聯方式接入總線,即前方設備的接口B必須與后方設備的接口A連接。差分接收器和差分發送器共4個使能端,分別通過微控制器的4個 GPIO 口 C1、C2、C3、C4控制,當接收器的使能端為0時接收有效,發送器的使能端為1時發送有效。4個GPIO口共構成該設備的7種有效狀態,即下行透傳、上行透傳、下行發送、上行發送、全線發送、下行接收、上行接收模式,其他狀態均不允許,如表1所示。

表1 改進型RS485總線的傳輸模式Tab.1 Transmission mode of improved RS485 Bus
(1)當A口接收和B口發送被使能、UART處于接收狀態時,設備處于下行透傳模式,此時總線信號按下行方向傳送,信號從A口進入設備轉為TTL電平被UART接收,同時通過B口重新轉為差分信號回到總線。
(2)當A口發送和B口接收被使能、UART處于接收狀態時,設備處于上行透傳模式。該模式與下行透傳模式功能相同,只是與總線信號按上行方向傳送。
(3)當A口和B口發送都被使能、UART處于發送狀態時,設備處于全線發送模式,此時UART輸出的數據通過A口和B口轉換為差分信號分別向上行和下行方向傳輸。
(4)當A口被關閉、B口發送被使能、UART處于發送狀態時,設備處于下行發送模式,此時UART輸出的數據通過B口轉換為差分信號向下行方向傳輸。
(5)當B口被關閉、A口發送被使能、UART處于發送狀態時,設備處于上行發送模式,此時UART輸出的數據通過A口轉換為差分信號向上行方向傳輸。
(6)當B口被關閉、A口接收被使能、UART處于接收狀態時,設備處于下行接收模式,此時下行方向總線信號從A口進入設備轉為TTL電平被UART接收,但不會繼續向下行方向傳送。
(7)當A口被關閉、B口接收被使能、UART處于接收狀態時,設備處于上行接收模式,此時上行方向總線信號從B口進入設備轉為TTL電平被UART接收,但不會繼續向上行方向傳送。
在改進型RS485設備的7種模式中,下行透傳模式、上行透傳模式相當于傳統RS485的接收模式,全線發送模式相當于傳統RS485的發送模式;而下行發送、上行發送、下行接收、上行接收這4種模式是傳統RS485所不具備的,通過這4種模式可以實現總線設備數量自動查詢和編址等功能。
依托改進設計的硬件結構,可以通過協議實現總線設備數量自動查詢、自動編址、數據通信、設備熱插拔4種功能。這些功能通過查詢狀態和順序通信狀態來實現。設備上電或復位時,總線首先進入查詢狀態,通過該狀態使每個設備獲得總線上設備總數量和自身的總線地址(即該設備在總線上的位置),然后總線進入順序通信狀態,設備按照總線地址的順序獲得數據發送權[5]。通信過程中,設備定時或通信發生故障時重新進入查詢狀態,檢測是否有設備新增或斷開,若檢測到總線設備發生變化即更新設備數量和編址,然后重新進入通信狀態,通過該功能可應對設備熱插拔等情況[7-8]。
總線查詢狀態分為下位設備搜尋和下位授地址2個過程。進入查詢狀態后首先進行下位搜尋,即查詢總線下行方向是否還有相鄰設備,同時應答來自上行方向設備的查詢指令。具體方式為設備定時切換成下行發送模式發送搜尋指令,發送時間約為100 μs,然后切換成上行接收模式接收下行方向傳來的應答,持續5 ms;其他時間為下行接收模式,接收上行方向設備傳來的搜尋指令,若收到搜尋指令則立即轉為上行發送模式發送應答。定時下行發送搜尋指令的周期為以100 ms為基數的隨機時間,循環進行。由于下行接收模式的時間遠大于其他階段時間,且經過多次循環,有很大的概率可以接收到上行方向設備發送的搜尋指令。經過若干次循環后,若沒有搜尋到下位設備,則該設備置下行端部標志;若沒有接收到搜尋指令,則置上行端部標志;若既搜尋到下位設備又收到來自上位的搜尋指令,則置總線中部標志,如圖3(a)所示。
下位授地址過程由上行端部標志設備發起,上行端部設備首先設定自身地址為0,然后向下行方向相鄰的設備發送授地址指令,設其地址為1;相鄰設備收到授地址指令后,再向其下行方向設備發送授地址指令,設其地址為2,以此類推,直到下行端部設備為止,如圖3(b)所示。由于在被授地址之前,總線設備絕大多數時間處于下行接收模式,可以收到來自上行方向的授地址指令;然后在向下行方向發送完授地址指令后,立即切換為上行接收模式;當下行端部設備被授地址后,立即向上行方向發送通信啟動指令,使總線設備進入正常通信狀態,如圖 3(c)所示。

圖3 協議過程Fig.3 Protocol process
總線設備進入順序通信狀態后,從地址為0的設備開始依次發送數據,直到下行端部設備。具體過程如圖3(d)所示。總線設備收到通信啟動指令后,設備0進入下行發送模式,總線中部設備進入下行透傳模式,下行端部設備進入下行接收模式。設備0發送的數據可以被其他所有設備接收;數據發送完畢后設備0切換為上行接收模式,設備1切換為全線發送模式,其他設備依然為下行透傳模式和下行接收模式,設備1發送數據也可被其他所有設備接收;發送完畢后設備1切換為上行透傳模式,設備2切換為全線發送模式,以此類推。每個具有數據發送權的設備以全線發送模式發送數據,其上行方向全部為上行透傳模式,下行方向全部為下行透傳模式,總線上下兩端設備分別為上行接收模式和下行接收模式,發送的數據可以被其他所有設備接收。
總線設計允許在運行狀態下,在兩端添加新設備。新設備接入總線端部并上電后進入查詢狀態,而總線原有設備在運行過程中,其兩端設備的開放端端口實際處于關閉狀態,不會相互影響。總線原有設備經過一段時間的順序通信循環后,兩端設備定期進入查詢狀態,即原上行端部設備切換到下行接收模式,若上行方向有新設備接入,便會接收到新設備發出的搜尋指令;原下行端部設備切換到下行發送模式向下發送搜尋指令,若下行方向有新設備接入則會接收到搜尋指令應答。兩端設備進行新設備查詢過程中,原總線中部設備一直處于上行透傳模式。若未發現有新設備接入,則原下行端部設備發送通信啟動指令,重新進行循環通信;若有新設備接入,則原下行端部設備發送復位指令,所有設備重新執行查詢命令。
總線運行狀態下,若有設備拔除或發生總線斷線時,總線可重新進行編址,重啟循環通信過程。這項處理有2種情況:若斷開部分不包含具有數據發送權的設備,則當數據發送權傳遞到斷開點上行相鄰處設備并發送數據后,此設備將無法再向下傳遞數據發送權,即數據發送權指令無應答,而該處上行方向設備皆為上行透傳模式或上行接收模式,故該設備將向上行方向發送復位指令,使總線上其余設備復位并重新執行總線查詢、編址過程;另一種情況是,若斷開部分包含具有數據發送權的設備,則斷開點處的設備在等待超時后,將向下行方向發送復位指令。由于下行方向設備都為下行透傳模式或下行接收模式,故可以接收到復位指令并重新執行總線查詢、編址過程。
改進型RS485總線硬件通過總線中繼功能,保證在總線設備較多,總距離較遠的情況下得到較高的傳輸穩定性和傳輸波特率;同時基于該硬件結構特點,可通過協議實現總線設備自動編址,順序通信、總線斷線可檢測和設備熱插拔處理,增加設備組網的靈活性。通過采用3臺由STM32F103RET6構成的改進型RS485總線設備進行測試,采用與CAN總線相同的1M通信波特率和100 m的設備間距進行重復數據通信,測試通信誤碼率低于10-10,優于RS485、RS232、RS422等傳統通信方式,通信波特率可達到CAN總線的水平。改進型RS485硬件可由STM32等具有高速UART設備的MCU構成,通過移植包含尋址、通信、插拔處理功能的底層代碼,設計出具有協議通用性的智能儀表設備,使這種智能儀表既能保留RS485的優勢又能具備現代現場總線的性能。
[1]趙亮,張吉禮.提高RS485總線通信可靠性的優化設計方法[J].大連理工大學學報,2015,55(4):393-398
[2]張潔,梅勇,苗世洪,等.提高RS-485現場總線網絡可靠性的措施[J].電工技術,2004(1):31-33.
[3]張芳娥,衡君山,甄換強.RS485總線網絡可靠性研究[J].儀器儀表學報,2006,27(6):2458-2459.
[4]于月森,葉王慶.RS-485總線可靠性應用研究[J].微計算機信息,2007(23):274-276.
[5]馮子陵,俞建新.RS485總線通信協議的設計與實現[J].計算機工程,2012,38(20):215-218.
[6]NI Haiyan,HU Chao,MA Changwang.Research on a 485-serial network architecture in intelligent uptown management[C]//Proc 2006 IEEE Conf on Mechatronics and Automation.Luoyang:IEEE Press,2006:400-405.
[7]王書根,王振松,劉曉云.Modbus協議的RS485總線通訊機的設計及應用[J].自動化與儀表,2011,26(5):25-28.
[8]耿立中,王鵬,馬騁,等.RS485高速數據傳輸協議的設計與實現[J].清華大學學報:自然科學版,2008,48(8):1311-1314.