| 摘要:針對RS-485接口收發(fā)電路的特點,討論RS-485總線在Polling和CSMA/CD通信方式中死鎖檢測和解除死鎖的方法。該方法同樣適用于RS-422接口。 關(guān)鍵詞:RS-485接口 死鎖檢測 死鎖解除 RS-485總線傳送距離遠、速度快、抗干擾能力強,是工業(yè)現(xiàn)場廣泛應(yīng)用的數(shù)字通信標(biāo)準(zhǔn)。RS-485總線是一種半雙工通信標(biāo)準(zhǔn),支持總線方式多點互連,使其成為集散控制系統(tǒng)和現(xiàn)場總線控制系統(tǒng)中采用最多的通信和組網(wǎng)方法。采用RS-485總線連接的多個站點,任一時刻只能有一個站點在“說”,其它站點只能處于“聽”狀態(tài)。如果有多個1個的站點在“說”,數(shù)據(jù)將在通信總線上碰撞,結(jié)果是處于接收狀態(tài)的站點不能收到正確的數(shù)據(jù)。在RS-485總線通信網(wǎng)中,必須控制好每個站點的“聽、說”狀態(tài),即收發(fā)狀態(tài),以保證能及時、正確地傳輸數(shù)據(jù)。 圖1是最常見的RS-485接口。在RS-485總線通信系統(tǒng)中,掛在總線上的收發(fā)電路一般大于2個。使用圖1所示接收電路,如果系統(tǒng)中的某一個站點死機或出了問題,可能使單片機的P1.0口恒為“1”。其發(fā)送器將長期占用通信總線,產(chǎn)生稱為RS-485總線“死鎖”的狀態(tài),其它所有站點的均無法使用通信總線進行通信,這將導(dǎo)致整個通信系統(tǒng)崩潰。為了說明方便,把RS-485總線A線對地電壓為稱為VA,B線對地電壓為稱為VB;VA>VB時的死鎖稱為“1”死鎖,VA<VB時的死鎖稱為“0”死鎖。如果2個站點失控,其中一個是“1”死鎖,另一個是“0”死鎖,而系統(tǒng)無法及時解除該死鎖狀態(tài),不但各站點間無法正常通信而且會燒壞鎖站點的RS-485接口芯片,引發(fā)更大的故障。 在RS-485總線通信系統(tǒng)中,通常設(shè)有個功能強、工作可靠的站點作為主站,其它的作為子站。主站除了完成它的相關(guān)工作任務(wù)外,通常它還負責(zé)管理掛在RS-485總線上的其它子站。程序跑飛是所有基于微處理器系統(tǒng)均需面對的普遍問題。在工業(yè)測控系統(tǒng)中,可靠、穩(wěn)定地工作是第一位的。若同時賦予主站RS-485總線死鎖檢測與解除的軟/硬件和在所有的子站中配置相關(guān)硬件,將可以有效解決由于子站程序跑飛而引發(fā)的RS-485總線死鎖問題。 一、RS-485總線死鎖檢測 1.查詢方式的RS-485總線死鎖檢測 RS-485總線在發(fā)送數(shù)據(jù)時,允許同時接收剛發(fā)送的數(shù)據(jù)。RS-485總線通信系統(tǒng)如果工作于查詢方式,主站將不斷地每隔一定時間輪詢各個子部。只要輪詢時間不太長,如輪詢時間間隔<1min,則只須軟件開鎖就可以滿足RS-485總線死鎖檢測要求。主站在輪詢過程中,若檢測到以下兩種情況,就可以初步判為RS-485死鎖: (1)主站發(fā)送的數(shù)據(jù)與接收到的不相同; (2)在輪詢某個子站時,無響應(yīng)或響應(yīng)的數(shù)據(jù)不正確(可能是RS-485總線死鎖或子站死機,也有可能孩子站已退出運行)。 2.工作于CSMA/CD方式的RS-485總線死鎖檢測 采用CSMA/CD通信方式的RS-485總線,主站一般不主動輪詢每個子站。此方式下,主站可以采用圖2所示硬件來檢測RS-485總線的死鎖狀態(tài)。在RS-485總線空閑時,要求信號線A至少比信號線B高0.2V以上。只要使RS-485總線空閑時0.2V<VA-VB<3V,圖2所示電路就可以正常檢測RS-485總線死鎖。當(dāng)RS-485總線發(fā)生“1”死鎖時,VA-VB約等于5V,光耦輸出低電平拉低主站的INT1引腳。對于“0”死鎖檢測,只需依靠主站的RS-485接口電路就可實現(xiàn)。在“0”死鎖時,RS-485接口電路輸出低電平拉低主站的RXD引腳。RS-485總線空閑時,INT1及RXD引腳為穩(wěn)定的高電平狀態(tài)。正常收發(fā)數(shù)據(jù)地,INT1及RXD引腳在一個字節(jié)內(nèi)至少出現(xiàn)一次高低電平交替交化;“1”死鎖時,INT1長期處于低電平狀態(tài),“0”死鎖時,RXD長期處于低電平狀態(tài)。根據(jù)以上特點只需用軟件檢測INT1和RXD的低電平持續(xù)時間就可判斷RS-485總線的狀態(tài)。 檢測到INT1或RXD低電平后,通過軟件用以下兩個軟件之一來判斷RS-485總線“1”死鎖或“0”死鎖(假定啟動發(fā)送數(shù)據(jù)后,兩字節(jié)間的空隙時間小于發(fā)送1字節(jié)時間): (1)INT1低電平持續(xù)時間>正常發(fā)送2字節(jié)時間,判為RS-485總線“1”死鎖。 (2)RXD低電平持續(xù)時間>正常發(fā)送2字節(jié)時間,判為RS-485總線“0”死鎖。 二、RS-485總線死鎖解除 RS-485總線死鎖往往是由于子站的微控制器程序跑飛,使得RS-485發(fā)送器的發(fā)送使能DE恒為高電平引起的。出現(xiàn)這種情況只需給相應(yīng)的子站復(fù)位一下,讓它重新執(zhí)行初始化程序始可解決。在檢測到RS-485總線死鎖后,如果各子站的軟/硬件無問題,可以采用復(fù)位程序跑飛的子站來解除死鎖。以下介紹兩類可以由主站自動復(fù)位子站的硬件電路。該電路適用于RST引腳高電平有效時復(fù)位的單片機,如國內(nèi)廣泛應(yīng)用的51系列單片機。對于RST引腳低電平有效時復(fù)位的單片機則須將電路的邏輯取反。 1.有選擇性地復(fù)位死鎖子站電路 圖3是具有選擇性的復(fù)位死鎖子站電路,是一種巧妙的解除通信總線死鎖狀態(tài)設(shè)計。它利用了RS-485總線死鎖,則對應(yīng)死鎖子站的發(fā)送使能DE為“1”的特點,在子站中只用了少量的硬件開銷(1個與非門、1個電阻和1只三極管),即實現(xiàn)了有選擇性的復(fù)位死鎖子站的電路。在正常工作時,主站的P1.1置為“0”,此時不管各個子站的DE為何狀態(tài),它們的與非門輸出均為高電平,三極管T1截止,RST為低電平,不會復(fù)位任何子站。當(dāng)檢測到RS-485總線死鎖時,主站只需將P1.1置為“1”,只有DE為“1”子站的與非門輸出低電平,三極管T1導(dǎo)通,RST為高電平,相應(yīng)的子站被復(fù)位。其它子站的與非門輸出高電平,不會被錯誤地復(fù)位。 2.無選擇性地復(fù)位所有子站電路 圖4是一個無選擇性復(fù)位子站的電路。它由主站的P1.1驅(qū)動,通過屏蔽電纜引到各子站的外復(fù)位電路T1的基極。正常運行時,主站置P1.1為“1”,此時它不影響各子站原有的復(fù)位功能。當(dāng)主站檢測到RS-485總線死鎖或復(fù)位各子站時,只須將P1.1置為“0”,所有掛在復(fù)位總線上的T1均導(dǎo)通,RST輸出高電平,各子站均被無條件復(fù)位。 結(jié)束語 單片機的復(fù)位電路是對干擾較為敏感的電路。施加在單片機的復(fù)位電路上一個ms級的微小毛刺干擾,就會對單片機造成極為嚴(yán)重的影響。若毛刺干擾持續(xù)時間大于單片機要求最小的可靠復(fù)位時間,單片機被復(fù)位;否則單片機還末完成復(fù)位過程,復(fù)位信號就被撤消,其內(nèi)部寄存器將處于不確定狀態(tài),令單片機的應(yīng)用中,為了可靠起見,一般不外引復(fù)位電路。在要文的應(yīng)用中,需將復(fù)位電路外引,復(fù)位總線采用屏蔽線以提高抗干擾能力。 本文介紹的2種遠方復(fù)位電路,各有優(yōu)缺點。具有選擇性的復(fù)位電路優(yōu)點是:有選擇性地復(fù)位鎖RS-485總線的子站,而不影響其它正常的子站,滿足解除RS-485總線死鎖的要求。缺點是:當(dāng)子站程序跑飛但并沒有使得DE恒為高電平時,RS-485總線處于正常狀態(tài),主站可以和所有正常的子站通信,但主站對這個異常的子站無能為力。無選擇性的復(fù)位電路優(yōu)點是:主站可以復(fù)位任何類型的由于程序跑飛引起異常的子站,此外,在電路的實現(xiàn)上較有選擇性的復(fù)位電路簡單。缺點是:它的動作是無選擇性的,不管子站是否異常,掛在復(fù)位總線上的所有子站均被無條件復(fù)位。 RS-422接口的電氣參數(shù)要求與RS-485接口相同,主要差別在于RS-422是全雙工接口,而RS-485是雙工接口。本文介紹RS-485總線死鎖檢測方法,只需稍加修改,同樣適用于RS-422總線系統(tǒng),而解除死鎖的方法無需任何修改即可直接應(yīng)用于RS-422總線系統(tǒng)。 |