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中,请用户应用中注意此类问题。