李周利 駱丹妮 趙學(xué)敏
摘 要: 為了解決普通RS 485總線中多個節(jié)點容易引發(fā)總線競爭、數(shù)據(jù)沖突和長期獨占總線的問題,設(shè)計了具有總線仲裁機制的RS 485總線。在普通RS 485總線基礎(chǔ)上增加了硬件握手和總線控制相關(guān)硬件,各個從節(jié)點能否占有總線需請求主節(jié)點給予授權(quán);從節(jié)點按硬件連接的自然優(yōu)先級排序;采用軟、硬件結(jié)合方式控制各個從節(jié)點對總線的占有時間,即通信結(jié)束、軟件計時或硬件定時時間到均控制硬件釋放總線,避免了因某個從節(jié)點自身故障導(dǎo)致長期獨占總線的通信錯誤,提高了RS 485總線的通信效率,增加了整個通信系統(tǒng)的可靠性和穩(wěn)定性。
關(guān)鍵詞: RS 485總線; 仲裁機制; 優(yōu)先級排序; 定時總線釋放
中圖分類號: TN911?34; TP336 文獻標(biāo)識碼: A 文章編號: 1004?373X(2017)16?0177?03
Abstract: In order to solve the problems that the multiple nodes in the common RS 485 bus easily lead to bus competition, data conflict and long?term exclusive bus, a RS 485 bus with arbitration mechanism was designed. Some hardwares that are related to handshaking and bus control are added to the common RS 485 bus. Each slave node requests the master node to give an authorization for making it occupies the bus, and then these slave nodes are sorted, according to the natural priority of hardware connection. Finally, a combination mode of software and hardware is used to control the occupation time of each node for the bus. In the end of communication, software or hardware timer releases the bus by controlling the hardware, which avoids the communication error that a slave node occupies the bus for a long term, which is caused by its own fault. This method can improve communication efficiency of RS 485 bus and increase the reliability and stability of the whole communication system.
Keywords: RS 485 bus; arbitration mechanism; priority ranking; timing bus release
0 引 言
RS 485總線以其結(jié)構(gòu)簡單、成本低廉、可選芯片多、便于維護、可靠性高等諸多優(yōu)點被廣泛應(yīng)用于遠程自動工控環(huán)境[1?3]。由于普通RS 485總線采用主從式通信方式,各從節(jié)點完全不受其他節(jié)點制約,如有兩個或兩個以上節(jié)點同時向總線發(fā)送數(shù)據(jù),將會發(fā)生總線競爭,導(dǎo)致通信數(shù)據(jù)錯誤,發(fā)送失敗[4];且某節(jié)點若出現(xiàn)通信故障,則可能出現(xiàn)該節(jié)點長期獨占總線的情況。針對多機通信中的數(shù)據(jù)沖突問題,已有的一種解決方法是采用類似于以太網(wǎng)的載波監(jiān)聽多路訪問/沖突檢測協(xié)議(CSMA/CD)[5?6]。數(shù)據(jù)接收端對接收到的數(shù)據(jù)進行校驗,如果出錯則認為發(fā)生了總線沖突,接收端不會發(fā)送確認幀,若在規(guī)定時間內(nèi)未收到確認幀,發(fā)送端就調(diào)用沖突處理函數(shù)[7]。此方法雖能在一定程度上解決上述問題,但某種程度上降低了通信效率,且依然有總線沖突的隱患存在。
在某嵌入式應(yīng)用系統(tǒng)的設(shè)計過程中,需要組建RS 485串行通信網(wǎng)絡(luò),此網(wǎng)絡(luò)系統(tǒng)共有97個節(jié)點,其中一個為主節(jié)點,向其他節(jié)點發(fā)送命令并及時接收其他節(jié)點的報警故障等。為了解決完全主從式RS 485總線中從節(jié)點不能主動發(fā)送數(shù)據(jù)的問題,可采用定時輪詢的方式。此方法雖具有通信時間的確定性,但對多從節(jié)點的情況可能會產(chǎn)生較長的通信延時。假設(shè)每個節(jié)點的輪詢時間為100 ms,對96個從節(jié)點的系統(tǒng)而言,將產(chǎn)生約9.6 s的延時。當(dāng)本系統(tǒng)中某個從節(jié)點出現(xiàn)故障需立即向主節(jié)點匯報時,最壞情況下可能會延時較長(10 s左右),實時性太差。
本文提出對各從節(jié)點之間相互獨立的RS 485總線仲裁方法,使各從節(jié)點可及時可靠穩(wěn)定地發(fā)送數(shù)據(jù),且保證每次只有一個從節(jié)點向主節(jié)點發(fā)送數(shù)據(jù),較好地解決了上述問題。
1 RS 485總線仲裁機制結(jié)構(gòu)設(shè)計
采用兩個半雙工RS 485組成的全雙工網(wǎng)絡(luò)通信結(jié)構(gòu),主從節(jié)點的接收端實時接收數(shù)據(jù),各從節(jié)點只接收主節(jié)點發(fā)送的數(shù)據(jù),主節(jié)點接收所有從節(jié)點發(fā)送的數(shù)據(jù),因此上行通信總線易發(fā)生網(wǎng)絡(luò)堵塞。本設(shè)計通過主從節(jié)點控制、從節(jié)點自然優(yōu)先級設(shè)置及三種軟、硬件定時方法確保通信可靠穩(wěn)定。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
2 主從節(jié)點控制
從節(jié)點向主節(jié)點發(fā)送數(shù)據(jù)時,先判斷總線忙否,即總線是否正在通信,若沒有,可向主節(jié)點發(fā)起發(fā)送請求信號,當(dāng)主節(jié)點向從節(jié)點授權(quán)后,從節(jié)點才有發(fā)送數(shù)據(jù)的權(quán)利。因此主從節(jié)點控制主要包括兩部分:忙檢查和硬件握手機制。endprint
2.1 忙檢查
設(shè)計總線忙信號[PBUSY],從節(jié)點通過檢測該信號,判斷總線是否處于忙的狀態(tài)。具體[PBUSY]接口硬件原理圖如圖2所示??偩€忙信號由主節(jié)點控制,當(dāng)主節(jié)點處于發(fā)送狀態(tài),或有其他從節(jié)點有發(fā)送請求,此時總線已經(jīng)被占用,主節(jié)點輸出[PBUSY],忙指示燈亮,從節(jié)點的MCU_P12收到電平為0的忙指示信號,將不能進行數(shù)據(jù)發(fā)送。
2.2 硬件握手機制
硬件握手機制包括總線請求和總線授權(quán),使多節(jié)點發(fā)送相互受到牽制,減少通信堵塞,其硬件握手(從)接口原理圖如圖3所示。當(dāng)從節(jié)點需要發(fā)送數(shù)據(jù)時必須先進行忙檢查,只有[PBUSY]信號無效時,從節(jié)點才有請求發(fā)送的資格。在檢測到總線沒有被占用后,先發(fā)送總線請求信號MCU_P24(高有效),主節(jié)點接收到請求信號后發(fā)出總線忙信號,并給出授權(quán)信號。從節(jié)點發(fā)總線請求的同時RCTR信號使繼電器關(guān)閉(RCTR現(xiàn)為MCU_P101,由MCU直接輸出,具體見圖4。該信號軟件定時120 ms,時間到后打開繼電器,即從節(jié)點整個握手過程最多時間為120 ms),將節(jié)點間直接通信的授權(quán)信號[BPRN]接入本從節(jié)點。從節(jié)點收到主節(jié)點發(fā)出的[BPRN]信號后先經(jīng)過反相器,再與同樣經(jīng)過反相器的總線請求信號異或,使輸入下個從節(jié)點的[BPRN]=1,因此本從節(jié)點就獲得了授權(quán)信號,而其他從節(jié)點便失去了獲權(quán)的機會。此設(shè)計為雙保險,即使總線忙信號失效,優(yōu)先級低的節(jié)點在總線請求后也不會得到授權(quán)信號。只有獲得授權(quán)信號的從節(jié)點與本節(jié)點的允許發(fā)送信號CTS相異或,最終才能置位發(fā)送使能,從硬件上保證了只有該從節(jié)點才能發(fā)送數(shù)據(jù)。
實測某從節(jié)點數(shù)據(jù)發(fā)送全過程波形如圖4所示。其中,通道1為總線忙信號[PBUSY],通道2為總線請求信號,通道3為總線授權(quán)信號[BPRN],通道4為發(fā)送的數(shù)據(jù)。其中,主節(jié)點給出的[PBUSY]和[BPRN]為固定延時120 ms(軟件可設(shè))。
3 自然優(yōu)先級設(shè)定
該RS 485總線由1個主節(jié)點和96個從節(jié)點組成,其中96個從節(jié)點功能作用相同。如果兩從節(jié)點同時發(fā)送一幀,發(fā)送前將因無法檢測信道信號而發(fā)生沖突,產(chǎn)生差錯。在節(jié)點多的情況下,兩個或兩個以上節(jié)點同時發(fā)送的幾率較高,會給整個系統(tǒng)帶來不穩(wěn)定的隱患[8]。
按照硬件排序為從節(jié)點設(shè)定自然優(yōu)先級,使各個從節(jié)點擁有各自的ID,如圖1所示。當(dāng)主節(jié)點要求所有從節(jié)點匯報數(shù)據(jù)時,可通過軟件定時,設(shè)定每個從節(jié)點的通信時間T,則T×ID為每個從節(jié)點的通信起點,此方法不但能避免多個從節(jié)點同時向總線發(fā)送數(shù)據(jù)造成通信阻塞,還能保證從節(jié)點向主節(jié)點匯報數(shù)據(jù)的實時性。而且當(dāng)多個從節(jié)點同時請求發(fā)送數(shù)據(jù)時,優(yōu)先級高的從節(jié)點先于并阻止優(yōu)先級低的從節(jié)點得到主節(jié)點的授權(quán)信號,得到授權(quán)信號的從節(jié)點可置位其發(fā)送使能DEx,發(fā)送數(shù)據(jù),避免網(wǎng)絡(luò)競爭。如圖1所示,例如ID=1和95的從節(jié)點同時有發(fā)送請求,由于1號優(yōu)先級高于95號,1號截獲授權(quán),發(fā)送使能DE1置位,而95號則不能發(fā)送數(shù)據(jù)。
4 軟硬件結(jié)合避免總線獨占
為了避免因某個從節(jié)點自身故障導(dǎo)致長期獨占總線的情況,現(xiàn)采用單穩(wěn)態(tài)多諧振蕩器SN74LV123,選擇第5種輸出模式,將發(fā)送時間設(shè)計為固定值40 ms,硬件控制各個從節(jié)點對總線的占用時間,計時結(jié)束即放棄總線。其工作過程如圖5所示,發(fā)送使能置位的同時,給SN74LV123的輸入A:一個下降沿信號MCU_P84,輸出信號Q=0后保持,計時開始。當(dāng)計時時間到無論數(shù)據(jù)是否發(fā)送完畢,都使輸出信號[Q]=1后保持,經(jīng)過或門后使ROFF輸出0,使繼電器控制信號RCTR=1,控制繼電器斷開總線,停止發(fā)送。當(dāng)計時時間內(nèi)數(shù)據(jù)發(fā)送完畢時,直接使MCU_P86輸出0,經(jīng)過與單穩(wěn)輸出同樣的處理后,關(guān)閉發(fā)送使能,減少不必要的總線占用延時。通過此硬件方法清零輸出使能DEx,釋放總線,增加了RS 485發(fā)送機制的可靠性。
5 結(jié) 論
本文提出的設(shè)計方案,通過增加硬件握手和設(shè)定自然優(yōu)先級的方式,合理的解決了總線競爭和數(shù)據(jù)沖突的問題,使整個系統(tǒng)更加穩(wěn)定可靠。同時,采用三種定時方式,軟硬件結(jié)合共同避免了節(jié)點長期獨占總線的情況,提高了RS 485總線的通信效率。
但本設(shè)計仍有不足之處,即硬件成本較高,適用于對可靠性要求高,成本要求不敏感的場合。
參考文獻
[1] 吳忻生,陳安,胡躍明,等.一種實現(xiàn)載波監(jiān)聽多點接入/沖突檢測的多主RS 485總線[J].電子技術(shù)應(yīng)用,2004(2):48?50.
[2] 李鑫,趙鵬.RS 485總線形式的多路站控數(shù)據(jù)采集系統(tǒng)[J].工業(yè)控制計算機,2016(5):38.
[3] 孟仕印,羅天蘭,孟傳良.回轉(zhuǎn)窯分布式控制系統(tǒng)RS 485總線通信系統(tǒng)設(shè)計[J].自動化與儀器儀表,2015(5):112?113.
[4] 朱耀春,白焰.RS 485總線通信雙機監(jiān)控程序的設(shè)計及應(yīng)用[J].工業(yè)控制計算機,2006(8):14?16.
[5] 趙亮,張吉禮.提高RS 485總線通信可靠性的優(yōu)化設(shè)計方法[J].大連理工大學(xué)學(xué)報,2015(4):393?398.
[6] 謝希仁.計算機網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,2008.
[7] 馮子陵,俞建新.RS 485總線通信協(xié)議的設(shè)計與實現(xiàn)[J].計算機工程,2012(20):215?218.
[8] 劉明,張龍燈,張洪彥,等.基于RS 485總線的互鎖聯(lián)動系統(tǒng)網(wǎng)絡(luò)化通信的實現(xiàn)[J].昆明理工大學(xué)學(xué)報(理工版),2008(4):47?50.endprint