rs485基础知识
针对rs-232串口标准的局限性,人们又提出了rs-422,rs-485接口标准。rs-485/422采用平衡发送和差分接收方式实现通信:发送端将串行口的ttl电平信号转换成差分信号a、b两路输出,经过线缆传输之后在接收端将差分信号还原成ttl电平信号。由于传输线通常使用双绞线,又是差分传输,所以又极强的抗共模干扰的能力,总线收发器灵敏度很高,可以检测到低至200mv电压。故传输信号在千米之外都是可以恢复。
1、rs-485 的电气特性
驱动器能输出±7v的共模电压
接收器的输入电阻rin≥12kω
输入端的电容≤50pf
在节点数为32个,配置了120ω的终端电阻的情况下,驱动器至少还能输出电压1.5v(终端电阻的大小与所用双绞线的参数有关)
发送端:逻辑"1"以两线间的电压差为+(2 至6) v 表示;逻辑"0"以两线间的电压差为-(2 至6)v 表示。
接收器的输入灵敏度为200mv(即(v+)-(v-)≥0.2v,表示信号"0";(v+)-(v-)≤-0.2v,表示信号"1")
2、传输速率与传输距离
rs-485 的数据最高传输速率为10mbps,最大的通信距离约为1219m,传输速率与传输距离成反比,在10kb/s的传输速率下,才可以达到最大的通信距离。
但是由于rs-485 常常要与pc 机的rs-232口通信,所以实际上一般最高115.2kbps。又由于太高的速率会使rs-485 传输距离减小,所以往往为9600bps 左右或以下。
3、网络拓扑
rs-485 接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。rs-485采用半双工工作方式,支持多点数据通信。
rs-485总线网络拓扑一般采用终端匹配的总线型结构。即采用一条总线将各个节点串接起来,不支持环形或星型网络。如果需要使用星型结构,就必须使用485中继器或者485集线器才可以。rs-485/422总线一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。
4、连接器
我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于gpib使用命令字符串的方式。必须的线仍然是三根:tx、rx和地线,因为控制字符在传输线上和普通字符没有区别,函数setxmodem允许用户使能或者禁止用户使用两个控制字符xon和oxff。这些字符在通信中由接收方发送,使发送方暂停。例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于cpu忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送xoff,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送xon,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,labwindows发送xoff。此外,如果xoff传输被打断,labwindows会在buffer达到75%和90%时发送xoff。显然,发送方必须遵循此守则以保证传输继续。
2、硬件握手
第二种是使用硬件线握手。和tx和rx线一样,rts/cts和dtr/dsr一起工作,一个作为输出,另一个作为输入。第一组线是rts (request to send)和cts(clear to send)。当接收方准备好接收数据,它置高rts线表示它准备好了,如果发送方也就绪,它置高cts,表示它即将发送数据。另一组线是dtr(data terminal ready)和dsr(data set ready)。这些现主要用于modem通信。使得串口和modem通信他们的状态。例如:当modem已经准备好接收来自pc的数据,它置高dtr线,表示和电话线的连接已经建立。读取dsr线置高,pc机开始发送数据。一个简单的规则是dtr/dsr用于表示系统通信就绪,而rts/cts用于单个数据包的传输。在labwindows,函数setctsmode使能或者禁止使用硬件握手。如果cts模式使能,labwindows使用如下规则:当pc发送数据:rs-232库必须检测cts线高后才能发送数据。
当pc接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高rts和dtr。
如果输入队列90%满,库函数置低rts,但使dtr维持高电平。
如果端口队列近乎空了,库函数置高rts,但使drt维持高电平。
如果端口关闭,库函数置低rts和dtr。
3、xmodem握手
最后讨论的握手叫做xmodem文件传输协议。这个协议在modem通信中非常通用。尽管它通常使用在modem通信中,xmodem协议能够直接在其他遵循这个协议的设备通信中使用。在labwindows中,实际的xmodem应用对用户隐藏了。只要pc和其他设备使用xmodem协议,在文件传输中就使用labwindows的xmodem函数。函数是xmodemconfig,xmodemsend和xmodemreceive。xmodem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、wait_delay、 start_delay、max_tries、packet_size。这些参数需要通信双方认定,标准的xmodem有一个标准的定义:然而,可以通过 xmodemconfig函数修改,以满足具体需要。这些参数的使用方法由接收方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的start_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用wait_delay,然后想发送方发送响应。如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。如果一直没有收到响应,发送方通知用户传输数据失败。
由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ascii码null(0)字节。这导致接收的数据比原数据多。在xmodem情况下一定不要使用xon/xoff,因为xmodem发送方发出包的数目很可能增加到xon/off控制字符的值,从而导致通信故障。
rs232基础知识
计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和
pc 机的rs-232 口为9 芯针插座。一些设备与pc 机连接的rs-232 接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据txd”、“接收数据rxd”和“信号地gnd”。双向接口能够只需要3根线制作是因为rs-232的所有信号都共享一个公共接地。非平衡电路使得rs-232非常的容易受两设备间基点电压偏移的影响。对于信号的上升期和下降期,rs-232也只有相对较差的控制能力,很容易发生串话的问题。rs-232被推荐在短距离(15m以内)间通信。由于非对称电路的关系,rs-232接口电缆通常不是由双绞线制作的。
3、传输电缆
rs-232-c标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特,驱动器允许有2500pf的电容负载,通信距离将受此电容限制。
例如,采用150pf/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是rs-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。
由rs-232c标准规定在码元畸变小于4%的情况下,传输电缆长度应为50 英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国dec公司曾规定允许码元畸变为10%而得出下面实验结果。其中1 号电缆为屏蔽电缆,型号为decp.no.9107723 内有三对双绞线,每对由22# awg 组成,其外覆以屏蔽网。2 号电缆为不带屏蔽的电缆。型号为decp.no.9105856-04是22#awg 的四芯电缆。
4、链路层
在rs-232标准中,字符是以一系列位元来一个接一个的传输。最长用的编码格式是异步起停asynchronous start-stop格式,它使用一个起始位后面紧跟7或8 个数据比特,这个可能是奇偶位,然后是两个停止位。所以发送一个字符需要10比特,带来的一个好的效果是使全部的传输速率,发送信号的速率以10分划。
串行通信在软件设置里需要做多项设置,最常见的设置包括波特率、奇偶校验和停止位。 波特率是指从一设备发到另一设备的波特率,即每秒钟多少比特bits per second (bit/s)。典型的波特率是300、1200、2400、9600、19200等bit/s。一般通信两端设备都要设为相同的波特率,但有些设备也可以设置为自动检测波特率。
奇偶校验parity是用来验证数据的正确性。奇偶校验一般不用,如果使用,那么既可以做奇校验也可以做偶校验。奇偶校验是通过修改每一发送字节(也可以限制发送的字节)来工作的。如果不作奇偶校验,那么数据是不会被改变的。在偶校验中,因为奇偶校验位会被相应的置1或0(一般是最高位或最低位),所以数据会被改变以使得所有传送的数位(含字符的各数位和校验位)中“1”的个数为偶数;在奇校验中,所有传送的数位(含字符的各数位和校验位)中“1”的个数为奇数。奇偶校验可以用于接受方检查传输是否发送生错误——如果某一字节中“1”的个数发生了错误,那么这个字节在传输中一定有错误发生。如果奇偶校验是正确的,那么要么没有发生错误要么发生了偶数个的错误。
停止位是在每个字节传输之后发送的,它用来帮助接受信号方硬件重同步。
在串行通信软件设置中d/p/s是常规的符号表示。8/n/1(非常普遍)表明8bit数据,没有奇偶校验,1bit停止位。数据位可以设置为7、8或者9,奇偶校验位可以设置为无(n)、奇(o)或者偶(e),奇偶校验位可以使用数据中的比特位,所以8/e/1就表示一共8位数据位,其中一位用来做奇偶校验位。停止位可以是1、1.5或者2位的(1.5是用在波特率为60wpm的电传打字机上的)。
5、传输控制
当需要发送握手信号或数据完整性检测时需要制定其他设置。公用的组合有rts/cts,dtr/dsr或者xon/xoff(实际中不使用连接器管脚而在数据流内插入特殊字符)。
接受方把xon/xoff信号发给发送方来控制发送方何时发送数据,这些信号是与发送数据的传输方向相反的。xon信号告诉发送方接受方准备好接受更多的数据,xoff信号告诉发送方停止发送数据直到知道接受方再次准备好。xon/xoff一般不赞成使用,推荐用rts/cts控制流来代替它们。
xon/xoff是一种工作在终端间的带内方法,但是必须两端都支持这个协议,而且在突然启动的时候会有混淆的可能。
xon/xoff可以工作于3线的接口。rts/cts最初是设计为电传打字机和调制解调器半双工协作通信的,每次它只能一方调制解调器发送数据。终端必须发送请求发送信号然后等到调制解调器回应清除发送信号。尽管rts/cts是通过硬件达到握手,但它有自己的优势。
6、rs-232标准的不足
经过许多年来rs-232 器件以及通信技术的改进,rs-232 的通信距离已经大大增加。由于rs-232 接口标准出现较早,难免有不足之处,主要有以下四点:
(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与ttl 电平不兼容故需使用电平转换电路方能与ttl 电路连接。
(2) 传输速率较低,在异步传输时,波特率为20kbps。现在由于采用新的uart 芯片16c550 等,波特率达到115.2kbps。
(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4) 传输距离有限,最大传输距离标准值为50 米,实际上也只能用在15米左右。(电子工程师笔记)