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