一種實(shí)現載波監聽(tīng)多點(diǎn)接入/沖突檢測的多主RS485總線(xiàn)
智能儀表和現場(chǎng)總線(xiàn)的出現標志著(zhù)工業(yè)控制領(lǐng)域網(wǎng)絡(luò )時(shí)代的到來(lái),成為工業(yè)控制的主流。目前國際上已經(jīng)出現了多種現場(chǎng)總線(xiàn)和相應的通信協(xié)議,但是其系統造價(jià)對于許多中小型應用仍顯過(guò)高。而RS485總線(xiàn)以其構造簡(jiǎn)單、造價(jià)低廉、可選芯片多、便于維護等特點(diǎn)在眾多工業(yè)控制系統中得到應用。
1 RS485總線(xiàn)及現有工作方式的特點(diǎn)
RS485總線(xiàn)以雙絞線(xiàn)為物理介質(zhì),工作在半雙工的通信狀態(tài)下[1],即同一時(shí)刻,總線(xiàn)上只能有一個(gè)節點(diǎn)成為主節點(diǎn)而處于發(fā)送狀態(tài),其他所有節點(diǎn)必須處于接收狀態(tài)。如果同一時(shí)刻有兩個(gè)以上的節點(diǎn)處于發(fā)送狀態(tài),將導致所有發(fā)送方的數據發(fā)送失敗,即所謂總線(xiàn)沖突。為了避免總線(xiàn)沖突,RS485總線(xiàn)具有以下特點(diǎn):
以工作模式來(lái)說(shuō),一般的RS485總線(xiàn)工作在主從模式下。整個(gè)通信總線(xiàn)系統由一個(gè)主節點(diǎn)、若干個(gè)從節點(diǎn)組成,由主節點(diǎn)不斷地輪流查詢(xún)從節點(diǎn)是否有通信需求。如果有則將總線(xiàn)控制權交給某一從節點(diǎn),從節點(diǎn)發(fā)送完畢后立刻交還總線(xiàn)控制權。另外還有一種“輪主輪從”的工作方式,即讓總線(xiàn)控制權在各個(gè)節點(diǎn)間以類(lèi)似令牌環(huán)的方式傳遞[3],得到控制權的節點(diǎn)成為主節點(diǎn),其它節點(diǎn)成為從節點(diǎn)。一個(gè)節點(diǎn)在發(fā)送完數據的同時(shí),將總線(xiàn)控制權交給相鄰的節點(diǎn),而這個(gè)節點(diǎn)在處理完本節點(diǎn)的通信需求后再把控制權向下傳遞。令牌環(huán)式的RS485工作方式如圖1所示。
從通信節點(diǎn)來(lái)講,RS485總線(xiàn)上的節點(diǎn)必須具備將自己的驅動(dòng)器切換到高阻態(tài)的功能?眼1?演,以便在發(fā)送完數據后不會(huì )對總線(xiàn)狀態(tài)造成影響。這種驅動(dòng)器實(shí)行發(fā)送態(tài)—高阻態(tài)切換的一個(gè)影響是?押從發(fā)送數據完畢到設備切換為高阻態(tài),需要一個(gè)轉換延遲。這個(gè)轉換延遲是2線(xiàn)制通信中一個(gè)很重要的參數。這個(gè)時(shí)間不能太短,否則發(fā)出的字符的最后一部分因為尚未在總線(xiàn)上建立起來(lái)而導致丟失。同時(shí)這個(gè)時(shí)間也不能太長(cháng),否則在發(fā)送端還未轉為高阻態(tài)時(shí)其他設備已經(jīng)開(kāi)始發(fā)送數據,會(huì )導致總線(xiàn)沖突。因此2線(xiàn)制RS485總線(xiàn)上的主設備必須知道所有從設備的反應時(shí)間,并保證在從設備反應之前把驅動(dòng)器設為高阻態(tài),以接收從設備的數據。常用設備的轉換延遲是當前波特率發(fā)送一個(gè)字節的時(shí)間。
以上為適應RS485總線(xiàn)的特殊之處而采用的工作方式也引入了一些不足。首先,上面提到的兩種總線(xiàn)工作方式在很多對實(shí)時(shí)性、可靠性要求高的工業(yè)控制場(chǎng)合有較大的局限性。主要原因是主從式總線(xiàn)的從節點(diǎn)無(wú)發(fā)起通信的權利,相互之間的通信需要通過(guò)主節點(diǎn)中轉。而“輪主輪從”總線(xiàn)上的各個(gè)節點(diǎn)由于等待總線(xiàn)控制權的時(shí)間未知,實(shí)時(shí)性也無(wú)法保證。同時(shí),如果主從式的主節點(diǎn)或者是“輪主輪從”式的獲取令牌的節點(diǎn)出現故障,整個(gè)總線(xiàn)的工作將癱瘓,風(fēng)險過(guò)于集中。其次,對驅動(dòng)器實(shí)行“發(fā)送態(tài)—高阻態(tài)”切換以及考慮切換延遲等要求使編程變得復雜。在上電瞬間、CPU損壞或者是程序跑飛的情況下,還需要考慮復雜的故障保護等問(wèn)題[2],否則將容易引起總線(xiàn)故障。
2 RS485總線(xiàn)上CSMA/CD的實(shí)現
為了解決各個(gè)節點(diǎn)主動(dòng)獲取總線(xiàn)控制權的問(wèn)題,人們想到了利用監聽(tīng)總線(xiàn)狀態(tài)的方式實(shí)現總線(xiàn)控制權的本地判斷和獲取,也就是CSMA/CD協(xié)議實(shí)際上做的工作[3]。即所有節點(diǎn)在發(fā)送前監聽(tīng)總線(xiàn)上是否有其他節點(diǎn)在發(fā)送數據,如果有,就暫時(shí)不發(fā)送。另外在發(fā)送數據的同時(shí),邊發(fā)送邊監聽(tīng),如果監聽(tīng)到?jīng)_突則沖突雙方都停止發(fā)送。這樣做,既能保證每一個(gè)節點(diǎn)都具有發(fā)起通信的權利,又能盡量減少發(fā)生總線(xiàn)沖突的機會(huì ),提高整個(gè)系統的吞吐量。
已有的一種實(shí)現方法[4]是將總線(xiàn)接收器的輸出端反相后接到CPU的外部中斷管腳,如圖2所示。用觸發(fā)中斷的方式判斷總線(xiàn)上是否有數據傳輸,同時(shí)結合定時(shí)器中斷判斷總線(xiàn)是否空閑。如果總線(xiàn)空閑,就獲得總線(xiàn)控制權,發(fā)送數據;然后用監聽(tīng)自己發(fā)送數據的辦法判斷是否發(fā)生總線(xiàn)沖突。該方法解決了總線(xiàn)控制權分配的時(shí)延問(wèn)題,但是需要使用至少4個(gè)管腳(INT0、RXD、TXD、驅動(dòng)器使能管腳),并且占用外部中斷和內部定時(shí)器中斷,需要利用軟件監聽(tīng)發(fā)送的數據避免總線(xiàn)沖突。系統資源耗費較多,編程復雜,在一些場(chǎng)合的應用也有局限性。本文在以上方法的基礎上提出了一種利用硬件監聽(tīng)總線(xiàn)狀態(tài)的方法,真正實(shí)現CSMA/CD協(xié)議。同時(shí)減少了系統資源的占用率,簡(jiǎn)化了總線(xiàn)沖突的判斷。另外實(shí)現了驅動(dòng)器的無(wú)延遲自動(dòng)切換,進(jìn)一步提高了系統的實(shí)時(shí)性。該系統工作穩定、可靠,并且大大提高了通信的實(shí)時(shí)性,特別適合實(shí)時(shí)分布式控制的場(chǎng)合。
2.1 系統框圖
系統由總線(xiàn)狀態(tài)判斷邏輯、驅動(dòng)器自動(dòng)切換邏輯兩部分組成,如圖3所示。系統資源只占用CPU的3個(gè)管腳:RXD、TXD、總線(xiàn)狀態(tài)指示腳,不占用任何中斷。在軟件實(shí)現方面由于采用了硬件判斷總線(xiàn)狀態(tài)而變得非常簡(jiǎn)單,只需要對標準的232通信程序做微小修改即可。
2.2 總線(xiàn)狀態(tài)判斷邏輯
該電路由雙RS485總線(xiàn)接收器構成,兩個(gè)接收器的輸出相與后得到總線(xiàn)狀態(tài)信號。偏置電阻網(wǎng)絡(luò )的對稱(chēng)形式使得在總線(xiàn)沒(méi)有被驅動(dòng)的情況下,兩條總線(xiàn)的電平相等??偩€(xiàn)狀態(tài)判斷邏輯如圖4所示。由于接收器的兩個(gè)接入點(diǎn)電平不同,所以當總線(xiàn)處于高阻狀態(tài)或者總線(xiàn)被短路時(shí),兩個(gè)接收器都是高電平輸出,總線(xiàn)狀態(tài)為高電平。因為A、B線(xiàn)通過(guò)6.8kΩ電阻分別接入兩個(gè)接收器的不同接收端,所以當總線(xiàn)出現任何一個(gè)確定的邏輯狀態(tài)時(shí),都將引起其中一個(gè)接收器的輸出變?yōu)榈碗娖?,這樣總線(xiàn)狀態(tài)就變?yōu)榈碗娖?,表明總線(xiàn)被占用。經(jīng)過(guò)理論計算和EWB仿真,該網(wǎng)絡(luò )從A、B點(diǎn)看接入阻抗為12.2kΩ,恰好滿(mǎn)足RS485協(xié)議的接收器輸入阻抗要求。
評論