RS232/RS485/RS422的硬件理論,以及實際應(yīng)用中解決問題的方法
RS-232(rs232轉(zhuǎn)rs485)是全雙功傳輸模式,且只有單站工作能力。具有各自獨(dú)立的傳送(TD)及接收(RD)信號線與一根接地信號線,CTS及RTS的目的是為硬件流控使用,作為HMI與PLC的信號交換(Handshaking)控制用,只有少數(shù)PLC的CTS或RTS必需由HMI控制。
RS422具有全雙工差分傳輸模式,且具有多站工作能力。RS485是半雙工差分傳輸模式,具有多站功能能力,在編寫驅(qū)動時,要考慮信號撞車問題,撞車問題就是在發(fā)送數(shù)據(jù)的時候,也在接收數(shù)據(jù),收發(fā)數(shù)據(jù)時序不對。用RS485/422通訊方式,總線上只能有一個主站,其余設(shè)備都是從站!在用RS485,RS422通訊時,有時候驅(qū)動程序沒有問題,但是接收到數(shù)據(jù)卻總是一些亂碼,這時候可以接上地線。尤其是變頻器這種干擾比較嚴(yán)重的情況下。
采用RS-485/RS422接口通訊時,在什么條件下需要采用終端匹配?電阻值如何確定?如何配置終端匹配電阻?
在長線信號傳輸時,一般為了避免信號的反射和回波,需要在接收端接入終端匹配電阻。其終端匹配電阻值取決于電纜的阻抗特性,與電纜的長度無關(guān)。RS-485/RS-422一般采用雙絞線(屏蔽或非屏蔽)連接,終端電阻一般介于100至140Ω之間,典型值為120Ω。在實際配置時,在電纜的兩個終端節(jié)點上,即最近端和最遠(yuǎn)端,各接入一個終端電阻,而處于中間部分的節(jié)點則不能接入終端電阻,否則將導(dǎo)致通訊出錯。
為什么在RS-485/RS-422構(gòu)成的通信網(wǎng)絡(luò)中,傳輸數(shù)據(jù)包時經(jīng)常出現(xiàn)多出一個數(shù)據(jù)或少一個數(shù)據(jù)的現(xiàn)象?
一般在點-多點通信系統(tǒng)中會經(jīng)常出現(xiàn)這個問題, 歸納出現(xiàn)的原因大致如下:
1)在半雙工通信中,一般可以通過禁止RS-485收發(fā)器接收使能或UART內(nèi)部的接收使能,以保證不出現(xiàn)自發(fā)自收,進(jìn)而減少CPU的開銷。當(dāng)數(shù)據(jù)發(fā)送完成后,RS-485接收器和內(nèi)部UART將回到允許接收狀態(tài)而發(fā)送器將關(guān)閉,在此狀態(tài)切換過程中,可能出現(xiàn)RS-485接收器輸出低電平跳變,而此時UART已經(jīng)允許接收,從而導(dǎo)致多接收一個字節(jié)。
正確處理方法應(yīng)該為:從接收狀態(tài)向發(fā)送狀態(tài)轉(zhuǎn)換時,先禁止內(nèi)部UART的接收使能,再打開接口的發(fā)送器使能,然后,允許內(nèi)部UART的發(fā)送使能,開始發(fā)送數(shù)據(jù);從發(fā)送狀態(tài)向接收狀態(tài)轉(zhuǎn)換時,先禁止內(nèi)部UART的發(fā)送使能,再關(guān)閉接口的發(fā)送使能(如果接口的接收使能被禁止,則緊跟著打開接口的接收使能),在延時2至4個NOP指令后,才打開內(nèi)部UART的接收使能。
2)對于大多數(shù)UART來說,內(nèi)部發(fā)送緩沖器"空"會產(chǎn)生中斷或置對應(yīng)的標(biāo)志位,但此時數(shù)據(jù)不一定真的發(fā)送完成,因為數(shù)據(jù)有可能還在輸出移位寄存器中。如果僅靠發(fā)送緩沖的狀態(tài)來判斷一包數(shù)據(jù)是否發(fā)送完成,從而決定是否關(guān)閉內(nèi)部UART的發(fā)送使能和接口的發(fā)送使能,則這個數(shù)據(jù)包的最后一個字節(jié)將不會發(fā)送到總線上,以致對方會少接收一個字節(jié)。此類問題會出現(xiàn)在MAX3100、MAX3140和PIC系列單片機(jī)等類似情況的UART中,請用戶應(yīng)用中注意此類問題。