网络/协议
本文介绍了串口通信协议RS-232、RS-422和RS-485的基本概念,包括波特率、数据位、停止位、奇偶校验位以及握手等信息。
串口通信的概念十分简单。 串口按位发送和接收字节。 尽管比按字节传输的并行通信慢,但是串口很简单并且能够实现远距离通信。 例如, IEEE 488规范定义并行通信时指出,设备间线总长度不得超过20米,且任意两个设备间的距离不得超过2米;而串口通信的长度可达1200米。
通常,串口用于传输ASCII数据。 通信使用3根线完成:(1) 地线,(2) 发送线,(3) 接收线。 由于串口通信是异步的,端口能够在一根线上发送数据的同时在另一根线上接收数据。 这种方式称为全双工传输。 其他线用于握手,但不是必须的。 串口通信最重要的参数是波特率、数据位、停止位和奇偶校验位。 对于两个进行通信的端口,这些参数必须匹配:
波特率是衡量通信速度的参数。 它表示每秒钟传送的位数。 例如,300波特表示每秒钟发送300个位。 当我们提到串口中的时钟周期时,我们就是指波特率。 例如,如果协议需要4800波特率,那么时钟是4800Hz。 这意味着串口通信在数据线上的采样率为4800Hz。 通常电话线的波特率为14400、28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。 高波特率常常用于距离很近的仪器间的通信。
数据位是衡量通信中实际数据位的参数。 当计算机发送一个信息包,实际的数据可能不是8位的, 标准的值是5、7和8位。 如何设置取决于您想传送的信息。 例如,标准的ASCII码是0~127(7位)。 扩展的ASCII码是0~255(8位)。 如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。 每个包是指一个字节,包括开始/停止位、数据位和奇偶校验位。 由于实际数据位取决于所选的通信协议,术语“包”指任何通信的情况。
停止位用于表示单个包的最后一位。 典型的值为1、1.5和2位。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。 因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。 适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
奇偶校验位是用于串口通信的一种简单的检错方式。 有四种检错方式:偶、奇、高和低。 当然没有校验位也是可以的。 对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。 例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。 如果是奇校验,校验位为1,这样就有3个逻辑高位。 高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。 这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或传输和接收数据是否不同步。
RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。用途十分广泛,比如连接鼠标、打印机或者调制解调器,同时也可以接工业仪器仪表。 用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。 RS-232只限于PC串口和设备间点对点的通信。 RS-232串口通信最远距离是50英尺。
数据
TXD(引脚3) 串口数据输出
RXD(引脚2) 串口数据输入
握手
RTS(引脚7) 发送请求
CTS(引脚8) 清除发送
DSR(引脚6) 数据发送就绪
DCD (引脚1) 数据载波检测
DTR(引脚4) 数据终端就绪
地线
GND(引脚5) 地线
其他
RI(引脚9) 铃声指示
表1:RS-232引脚功能
RS-422 (EIA RS-422-A Standard)是Apple Macintosh计算机的串口连接标准。 RS-422使用差分信号,RS-232使用非平衡参考地的信号。差分传输使用两根线发送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。
RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。 有了多个设备的能力,你可以使用单个RS-485串口建立设备网络。 由于出色抗噪和多点通讯能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。 RS-485是RS-422的扩展集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串行通信。
数据
TXD+(引脚8) 串口数据输出(差分)
TXD-(引脚9) 串口数据输出(差分)
RXD+(引脚4) 串口数据输入(差分)
RXD-(引脚5) 串口数据输入(差分)
握手
RTS+(引脚3) 发送请求(差分)
RTS-(引脚7) 发送请求(差分)
CTS+(引脚2) 清除发送(差分)
CTS-(引脚6) 清除发送(差分)
DSR(引脚6) 数据发送就绪
地线
GND(引脚1) 地线
表2:RS-485和RS-422引脚功能
RS-232是最常见的串口,是大部分兼容Windows的桌面计算机的一个标准组件。 如今通过USB到RS-232转换器使用RS-232更为常见。 RS-232只允许每根线使用一个发送器和接收器。 RS-232也使用全双工双数方式。 NI某些RS-232板卡支持的波特率最高达1 Mb/s,但大部分设备限于115.2 kb/s及以下。
RS-422 (EIA RS-422-A Standard)是传统Apple计算机的串口连接标准。 该标准机制下的最高数据传输速度可达10 Mb/s。RS-422使用两根线发送每个信号,以增加最大波特率和线缆长度。 RS-422还指定用于多点通讯应用,一个发送器连接到最多10个接收器的总线并发送数据。
RS-485是RS-422的扩展集,对这些能力进行了扩展。 RS-485解决了RS-422处理多点通讯的限制,通过同一数据线通信时最多允许32个设备。 RS-485总线上的任意从设备都可以与任意其他32个从设备进行通信,无需经由主设备。 由于RS-422是RS-485的子集,因而所有RS-422设备可能受RS-485控制。
RS-485和RS-422都支持多点通讯能力,但RS-485可允许最多32个设备,而RS-422的限制为10个。对于这两种串行通讯协议,您都需要自己添加终端匹配电路。 所有NI RS-485板卡都兼容RS-422标准。
下表对工作模式、驱动器和接收器总数、最大线缆长度和最大数据速率进行了比较。
标准 RS-232 RS-422 RS-485
工作模式 单端 差分 差分
单根线上的驱动器/接收器数 1个驱动器
1个接收器 1个驱动器
10个接收器 32个驱动器*
32个接收器
最大缆线长度 50 ft (2500 pF) 4000 ft 4000 ft
最大数据速率(最大线缆长度时) 160 kb/s(最高可达1 Mb/s) 10 Mb/s 10 Mb/s
表3:RS-232、RS-422和RS-485规范
*同一时间只有一个驱动器活动
*同一时间只有一个驱动器活动
RS-232通行方式允许简单连接三线:TX、RX和地线。
但是对于数据传输,双方必须对数据定时使用相同的波特率。 尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。 这时需要串口的握手功能。 在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。
软件握手:我们讨论的第一种握手是软件握手。 通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。 必须的线仍然是三根:TX、RX和地线,因为控制字符在传输线上和普通字符没有区别, 函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。 这些字符在通信中由接收方发送,使发送方暂停。
例如:假设发送方以高波特率发送数据。 在传输中,接收方发现由于CPU忙于其他工作,输入缓冲区已经满了。 为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入缓冲区清空。 一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。 输入缓冲区半满时,LabWindows发送XOFF。 此外,如果XOFF传输被打断,LabWindows会在缓冲区达到75%和90%时发送XOFF。 显然,发送方必须遵循此守则以保证传输继续。
此方式的最大缺点,也是最重要的概念:数值将不再使用十进制17和19。 由于这些数值为无字符数值,因此往往不会影响 ASCII 的传输作业;然而,若以二进制法传输数据,则极可能将这些数值作为数据进行传输,导致传输作业发生错误。
硬件握手:第二种是使用硬件线握手。 和TX和RX线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。 第一组线是RTS (Request to Send)和CTS (Clear to Send)。 当接收方准备好接收数据,它置高RTS线表示就绪, 如果发送方也就绪,它置高CTS,表示它即将发送数据。 另一组线是DTR (Data Terminal Ready)和DSR (Data Set Ready)。 这些线主要用于调制解调器通信。 使得串口和调制解调器通信他们的状态。 例如:当调制解调器已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。 读取DSR线置高,PC机开始发送数据。 一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。
在LabWindows中,函数SetCTSMode使能或者禁止使用硬件握手。 如果CTS模式使能,LabWindows使用如下规则:
当PC发送数据:
RS-232库必须检测CTS线高后才能发送数据。
当PC接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。
如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。
如果输入队列近乎为空,库函数置高RTS,但使DTR维持高电平。
如果端口关闭,库函数置低RTS和DTR。
XModem握手:最后讨论的握手叫做XModem文件传输协议。 这个协议在调制解调器通信中非常通用。 尽管它通常使用在调制解调器通信中,XModem协议能够直接在其他遵循这个协议的设备通信中使用。 在LabWindows中,实际的XModem应用对用户隐藏了。 只要PC和其他设备使用XModem协议,在文件传输中就使用LabWindows的XModem函数。 函数是XModemConfig、XModemSend和XModemReceive。
XModem使用介于如下参数的协议:start_of_data、end_of_trans、neg_ack、ack、wait_delay、start_delay、max_tries、packet_size。 这些参数需要通信双方认定。 标准的XModem有一个标准的定义;然而,可以通过XModemConfig函数修改,以满足具体需要。 这些参数的使用方法由接收方发送的字符neg_ack确定。 这通知发送方其准备接收数据。 它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_tries次数,或者收到接收方发送的start_of_data,发送方停止尝试。 如果达到max_tries次数,将通知用户无法与发送方通信。 如果从发送方收到start_of_data,接收方将读取后继信息数据包。 包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。 在读取数据后,接收方会调用wait_delay,然后向发送方发送响应。 如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。 如果一直没有收到响应,发送方通知用户传输数据失败。
由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NUL (0)字节。 这导致接收的数据比原数据多。 在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。
全部0条评论
快来发表一下你的评论吧 !