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