今天我们来聊聊RS232的应用。一提到RS232相信大家都会联想到RS485,都是串口通讯很多时候都会放在一起来讲,但是今天我们只讲232。以前基本不用rs232,因为知道它的通讯距离太短了,最好不要超过10米,在实际应用中很难满足它这个要求。而rs485通讯的距离能有1000米,所以rs485的应用比rs232广多了。其实,rs232的距离是可以通过串口服务器(比如moxa)转换成网线,从而延长通讯距离。
我们都知道串口通讯需要设置波特率,停止位,数据位,奇偶校验,除了这些基本的设置,如果你经常使用232你肯定常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解一点这方面的知识是有好处的。那么,流控制在串行通讯中有何作用,在编制串行通讯程序怎样应用呢?这里我们就来谈谈这个问题。
1.流控制在串行通讯中的作用
这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过MODEM进行数据传输,这个问题就尤为突出。流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。 PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面分别说明。
2.硬件流控制
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性,我个人认为,当软件里用了流控制时,应做详细的说明,如何接线,如何应用。
3.软件流控制
由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。一般通过XON/XOFF来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。
应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
总结一下,不管用硬件流控制还是软件流控制肯定需要在设备中选择或者设备指定了哪种流控制,因为流控制方式的不同其本质是232通讯程序的不同。当然也可以没有流控制,只是数据没有流控制那么可靠。
4.串口通讯方式
串口通讯方式分为异步和同步,我碰到的只有异步方式,同步方式还没碰到过。我们来说说异步方式。
异步串行通讯规定了每个字符以帧的格式传送, 每一帧信息由起始位、 数据位、 奇偶校
验位和停止位组成。
1) 起始位起始位的作用就是表示通讯开始。 在串口通讯中, 通讯线上没有数据传送的时候信号处于逻辑“ 1”的状态,当发送设备要发送一个字符数据的时候,首先发出一个逻辑“ 0”信号, 这个逻辑低电平就是起始位。 接收设备检测到这个逻辑低电平以后, 就开始准备接收数据信号。
2) 数据位当接收设备收到起始位信号后, 紧接着就是数据位。数据位的个数可以是 5、 6、 7 或 8
位的二进制数据。在字符数据传送过程中,数据位从最小有效位(最低位)开始传送。
3) 奇偶校验位
数据位发送完成以后, 可以在传送字符的各位之外, 再传送 1 位奇偶校验位, 使用通讯
双方在通讯时约定一致的奇偶检验方式, 进行有限的差错检验。 即, 通过判断所有传送的数
位(含字符的各数位和校验位)中“ 1”的个数为奇数还是偶数进行检验。奇偶校验仅能检
测不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。
4) 停止位
当奇偶校验位或数据位 (无奇偶校验时) 发送完成以后, 系统发送停止位作为一个字符
数据结束的标志。停止位可以是 1 位、 1.5 位或者 2 位。因为位数的本质含义是信号出现的
时间,故可有分数位,如停止位可以是 1.5 位
FANUC 系统使用的串口通讯方式
FANUC 系统使用异步串行通讯方式,标准设定为:数据位 7 位、奇偶校验位 1 位、停
止位 2 位。其中数据位是固定的, 奇偶校验可以通过参数 134# 1 设定是否使用,停止位通
过参数 101 # 0 选择使用 1 位或是 2 位。
另外,除了上述标准串行通讯信号, FANUC 系统还使用了一些自己的控制码,主要用
于数据传送的流控制:
DC1 ,代码 0x11h ,表示 NC 读入数据开始
DC2 ,代码 0x12h ,表示 NC 输出数据开始
DC3 ,代码 0x93h (或 0x13h ,最高为视为符号位) ,表示 NC 读入数据结束
DC4 ,代码 0x14h ,表示 NC 输出数据结束
FANUC 系统 RS-232-C 串口的流控制
根据《FANUC 连接说明书 (硬件) 》 中的相关描述, FANUC 对串口数据控制方式如下:
v NC 接收数据的控制流程
1) NC 输出 DC1 。
2) 在接受到 DC1 控制码后,外部设备开始传输数据。
3) 若 NC 来不及进行处理,则 NC 送出 DC3 控制码。
4) 外部设备在收到 NC 送出的 DC3 控制码后, 停止发送数据。外部设备在收到 DC3
控制信号后,最多可发送 10 个字符,如果送出的字符多于 10 个,就会发生 087
报警(缓冲区溢出) 。
5) NC 在结束延时处理后,送出 DC1 控制码。
6) 外部设备在接受到 DC1 控制信号后,重新开始传送数据(数据必须是下一个要处
理的数据) 。
7) NC 在结束接收数据后,送出 DC3 控制信号。
8) 外部设备停止送出数据。
v NC 发送数据的控制流程
1) NC 送出 DC2 控制代码。
2) NC 连续地输出穿孔数据。
3) 若 I/O 设备延时处理数据( I/O 速度慢)时。
a) 当 CS 信号 OFF 时,包括当前正在传输的字符, NC 在传送 2 个字符后停止
传送。
当 CS 信号再次 ON 时,数据传输重新开始。
b) 如果控制代码 DC3 送入 NC , NC 在传输 10 个字符后停止数据输出。当控制
代码 DC1 送入 NC 后, NC 重新开始送出数据。
4) 外部设备传输数据完成后且 CS 信号 ON 时, NC 开始送出下一组数据。
5) 数据输出完成后, NC 送出 DC4 控制代码。
根据上面的叙述, 可以得出,系统读入数据的时候,使用软件流控制方式; 输出数据的
时候,同时使用软件和硬件流控制方式,具体方式可通过参数 102 #选择(0,使用 DC1 -
DC4 ; 4,不使用) 。
因为刚好项目上用到了FANUC机床的232串口传输,所以这里特别写了一点,工作中碰不到FANUC机床的可以忽略。
好了,今天就写这么多了,欢迎各位大佬来喷。
,