新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種實(shí)現(xiàn)載波監(jiān)聽多點(diǎn)接入/沖突檢測(cè)的多主RS485總線

一種實(shí)現(xiàn)載波監(jiān)聽多點(diǎn)接入/沖突檢測(cè)的多主RS485總線

作者: 時(shí)間:2012-04-25 來源:網(wǎng)絡(luò) 收藏

智能儀表和現(xiàn)場(chǎng)總線的出現(xiàn)標(biāo)志著工業(yè)控制領(lǐng)域網(wǎng)絡(luò)時(shí)代的到來,成為工業(yè)控制的主流。目前國際上已經(jīng)出現(xiàn)了多種現(xiàn)場(chǎng)總線和相應(yīng)的通信協(xié)議,但是其系統(tǒng)造價(jià)對(duì)于許多中小型應(yīng)用仍顯過高。而RS485總線以其構(gòu)造簡(jiǎn)單、造價(jià)低廉、可選芯片多、便于維護(hù)等特點(diǎn)在眾多工業(yè)控制系統(tǒng)中得到應(yīng)用。


1 RS485總線及現(xiàn)有工作方式的特點(diǎn)

RS485總線以雙絞線為物理介質(zhì),工作在的通信狀態(tài)下[1],即同一時(shí)刻,總線上只能有一個(gè)節(jié)點(diǎn)成為主節(jié)點(diǎn)而處于發(fā)送狀態(tài),其他所有節(jié)點(diǎn)必須處于接收狀態(tài)。如果同一時(shí)刻有兩個(gè)以上的節(jié)點(diǎn)處于發(fā)送狀態(tài),將導(dǎo)致所有發(fā)送方的數(shù)據(jù)發(fā)送失敗,即所謂總線沖突。為了避免總線沖突,RS485總線具有以下特點(diǎn):

以工作模式來說,一般的RS485總線工作在主從模式下。整個(gè)通信總線系統(tǒng)由一個(gè)主節(jié)點(diǎn)、若干個(gè)從節(jié)點(diǎn)組成,由主節(jié)點(diǎn)不斷地輪流查詢從節(jié)點(diǎn)是否有通信需求。如果有則將總線控制權(quán)交給某一從節(jié)點(diǎn),從節(jié)點(diǎn)發(fā)送完畢后立刻交還總線控制權(quán)。另外還有一種“輪主輪從”的工作方式,即讓總線控制權(quán)在各個(gè)節(jié)點(diǎn)間以類似令牌環(huán)的方式傳遞[3],得到控制權(quán)的節(jié)點(diǎn)成為主節(jié)點(diǎn),其它節(jié)點(diǎn)成為從節(jié)點(diǎn)。一個(gè)節(jié)點(diǎn)在發(fā)送完數(shù)據(jù)的同時(shí),將總線控制權(quán)交給相鄰的節(jié)點(diǎn),而這個(gè)節(jié)點(diǎn)在處理完本節(jié)點(diǎn)的通信需求后再把控制權(quán)向下傳遞。令牌環(huán)式的RS485工作方式如圖1所示。

從通信節(jié)點(diǎn)來講,RS485總線上的節(jié)點(diǎn)必須具備將自己的驅(qū)動(dòng)器切換到高阻態(tài)的功能?眼1?演,以便在發(fā)送完數(shù)據(jù)后不會(huì)對(duì)總線狀態(tài)造成影響。這種驅(qū)動(dòng)器實(shí)行發(fā)送態(tài)—高阻態(tài)切換的一個(gè)影響是?押從發(fā)送數(shù)據(jù)完畢到設(shè)備切換為高阻態(tài),需要一個(gè)轉(zhuǎn)換延遲。這個(gè)轉(zhuǎn)換延遲是2線制通信中一個(gè)很重要的參數(shù)。這個(gè)時(shí)間不能太短,否則發(fā)出的字符的最后一部分因?yàn)樯形丛诳偩€上建立起來而導(dǎo)致丟失。同時(shí)這個(gè)時(shí)間也不能太長,否則在發(fā)送端還未轉(zhuǎn)為高阻態(tài)時(shí)其他設(shè)備已經(jīng)開始發(fā)送數(shù)據(jù),會(huì)導(dǎo)致總線沖突。因此2線制RS485總線上的主設(shè)備必須知道所有從設(shè)備的反應(yīng)時(shí)間,并保證在從設(shè)備反應(yīng)之前把驅(qū)動(dòng)器設(shè)為高阻態(tài),以接收從設(shè)備的數(shù)據(jù)。常用設(shè)備的轉(zhuǎn)換延遲是當(dāng)前波特率發(fā)送一個(gè)字節(jié)的時(shí)間。

以上為適應(yīng)RS485總線的特殊之處而采用的工作方式也引入了一些不足。首先,上面提到的兩種總線工作方式在很多對(duì)實(shí)時(shí)性、可靠性要求高的工業(yè)控制場(chǎng)合有較大的局限性。主要原因是主從式總線的從節(jié)點(diǎn)無發(fā)起通信的權(quán)利,相互之間的通信需要通過主節(jié)點(diǎn)中轉(zhuǎn)。而“輪主輪從”總線上的各個(gè)節(jié)點(diǎn)由于等待總線控制權(quán)的時(shí)間未知,實(shí)時(shí)性也無法保證。同時(shí),如果主從式的主節(jié)點(diǎn)或者是“輪主輪從”式的獲取令牌的節(jié)點(diǎn)出現(xiàn)故障,整個(gè)總線的工作將癱瘓,風(fēng)險(xiǎn)過于集中。其次,對(duì)驅(qū)動(dòng)器實(shí)行“發(fā)送態(tài)—高阻態(tài)”切換以及考慮切換延遲等要求使編程變得復(fù)雜。在上電瞬間、CPU損壞或者是程序跑飛的情況下,還需要考慮復(fù)雜的故障保護(hù)等問題[2],否則將容易引起總線故障。

2 RS485總線上CSMA/CD的實(shí)現(xiàn)

為了解決各個(gè)節(jié)點(diǎn)主動(dòng)獲取總線控制權(quán)的問題,人們想到了利用監(jiān)聽總線狀態(tài)的方式實(shí)現(xiàn)總線控制權(quán)的本地判斷和獲取,也就是CSMA/CD協(xié)議實(shí)際上做的工作[3]。即所有節(jié)點(diǎn)在發(fā)送前監(jiān)聽總線上是否有其他節(jié)點(diǎn)在發(fā)送數(shù)據(jù),如果有,就暫時(shí)不發(fā)送。另外在發(fā)送數(shù)據(jù)的同時(shí),邊發(fā)送邊監(jiān)聽,如果監(jiān)聽到?jīng)_突則沖突雙方都停止發(fā)送。這樣做,既能保證每一個(gè)節(jié)點(diǎn)都具有發(fā)起通信的權(quán)利,又能盡量減少發(fā)生總線沖突的機(jī)會(huì),提高整個(gè)系統(tǒng)的吞吐量。

已有的一種實(shí)現(xiàn)方法[4]是將總線接收器的輸出端反相后接到CPU的外部中斷管腳,如圖2所示。用觸發(fā)中斷的方式判斷總線上是否有數(shù)據(jù)傳輸,同時(shí)結(jié)合定時(shí)器中斷判斷總線是否空閑。如果總線空閑,就獲得總線控制權(quán),發(fā)送數(shù)據(jù);然后用監(jiān)聽自己發(fā)送數(shù)據(jù)的辦法判斷是否發(fā)生總線沖突。該方法解決了總線控制權(quán)分配的時(shí)延問題,但是需要使用至少4個(gè)管腳(INT0、RXD、TXD、驅(qū)動(dòng)器使能管腳),并且占用外部中斷和內(nèi)部定時(shí)器中斷,需要利用軟件監(jiān)聽發(fā)送的數(shù)據(jù)避免總線沖突。系統(tǒng)資源耗費(fèi)較多,編程復(fù)雜,在一些場(chǎng)合的應(yīng)用也有局限性。本文在以上方法的基礎(chǔ)上提出了一種利用硬件監(jiān)聽總線狀態(tài)的方法,真正實(shí)現(xiàn)CSMA/CD協(xié)議。同時(shí)減少了系統(tǒng)資源的占用率,簡(jiǎn)化了總線沖突的判斷。另外實(shí)現(xiàn)了驅(qū)動(dòng)器的無延遲自動(dòng)切換,進(jìn)一步提高了系統(tǒng)的實(shí)時(shí)性。該系統(tǒng)工作穩(wěn)定、可靠,并且大大提高了通信的實(shí)時(shí)性,特別適合實(shí)時(shí)分布式控制的場(chǎng)合。


上一頁 1 2 3 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉