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