第二章 通讯基础概念:串口通讯、RS-232/RS-485标准、波特率、数据位、停止位、校验位

各位工程师朋友,咱们今天聊点实在的。远程IO模块要跟PLC或者上位机对话,靠的是什么?说白了,就是串口通讯。这玩意儿看着基础,但我在现场见过太多人栽在它上面。今天我就把串口通讯的底裤扒开,让你看得明明白白。

2.1 串口通讯:数据怎么“串”起来?

串口通讯,顾名思义,就是数据一位一位地串着发。你想想看,一根线,一次只能传一个比特(0或1)。就像排队过独木桥,一个一个来。

我刚开始做项目时,总觉得并行通讯快,串口太慢。后来发现,串口虽然慢,但抗干扰能力强,线也少,成本低。工业现场动不动几十米上百米,并行线早被干扰得不成样子了。串口反而稳得很。

串口通讯的核心,就是约定好“什么时候发、什么时候收”。双方得对表,不然数据就乱套了。这个“对表”的过程,就是我们接下来要聊的波特率、数据位、停止位、校验位。

2.2 RS-232 与 RS-485:两个老将

这两个标准,是串口通讯的物理层规范。说白了,就是规定电压多少、怎么接线。

2.2.1 RS-232:老当益壮,但腿短

RS-232 是早期PC机上的标配。它的信号电压是 ±12V 左右,逻辑“1”是负电压,逻辑“0”是正电压。这个电压摆幅大,抗干扰能力还行。

但它的致命伤是——距离短。一般也就15米左右。我在一个老旧工厂里见过,RS-232 线拉了20米,数据就开始丢包。后来我直接换成了 RS-485,问题立马解决。

另外,RS-232 是点对点的,一个口只能接一个设备。这在现代工业里,基本不够用。

注意: 我曾经见过有人把 RS-232 的 TX 和 RX 接反了,折腾了一整天。记住:TX 接对方的 RX,RX 接对方的 TX,GND 接 GND。别搞反了。

2.2.2 RS-485:工业现场的老黄牛

RS-485 是我个人最常用的标准。它用差分信号传输,两根线(A和B),抗干扰能力极强。距离能到1200米,速度也能到10Mbps(短距离时)。

更重要的是,RS-485 支持多节点。一条总线上可以挂32个设备(标准),有些芯片能挂到256个。远程IO模块基本都是用 RS-485 组网的。

接线也简单:A接A,B接B。但要注意,总线两端要加120欧姆的终端电阻。我遇到过好几次,不加电阻,通讯时好时坏,加了就稳如老狗。

特性 RS-232 RS-485
传输方式 单端(非平衡) 差分(平衡)
最大距离 约15米 约1200米
最大节点数 1对1 32~256个
电压范围 ±12V ±5V(差分)
抗干扰能力 一般
典型应用 调试口、短距离 工业总线、远程IO

2.3 波特率:通讯的“心跳”

波特率,就是每秒传输的比特数。单位是 bps(bits per second)。

常见的波特率有:9600、19200、38400、115200。工业远程IO模块,我一般用9600或19200。为什么?因为距离远、干扰大,高速率容易出错。

有一次,我在一个变频器旁边调试,用了115200的波特率,数据全是乱码。降到9600,立马正常。你想想看,高速率对信号质量要求高,现场环境复杂,还是稳一点好。

波特率必须一致。发送方和接收方得对好表。差一点都不行。我见过有人设成9600和9640,结果通讯时断时续,查了半天才发现是波特率偏差。

核心原则: 波特率越高,传输越快,但抗干扰能力越差。工业现场,优先选9600或19200。

2.4 数据位:一次传多少数据?

数据位,就是一次传输中,实际数据的位数。常见的有7位和8位。

7位数据位,一般用于传输ASCII字符(0-127)。8位数据位,可以传0-255的数值,更常用。远程IO模块,基本都是8位数据位。

我建议你,除非有特殊要求,一律用8位数据位。省得后面扩展时还要改配置。

2.5 停止位:给接收方一点缓冲

停止位,就是一帧数据结束后的空闲时间。常见的有1位、1.5位、2位。

停止位的作用,是让接收方有时间处理刚收到的数据。如果接收方处理速度慢,或者时钟有偏差,停止位长一点更安全。

我一般用1位停止位。如果通讯不稳定,可以试试2位。但说实话,现在芯片处理速度都很快,1位基本够用。

2.6 校验位:数据对不对?

校验位,是用来检测数据在传输过程中有没有出错。常见的有:

  • 无校验(None):不校验,速度快,但容易出错。
  • 奇校验(Odd):数据位+校验位中,1的个数为奇数。
  • 偶校验(Even):数据位+校验位中,1的个数为偶数。
  • 标记校验(Mark):校验位固定为1。
  • 空格校验(Space):校验位固定为0。

工业现场,我推荐用无校验或偶校验。无校验速度快,偶校验能检测单比特错误。奇校验也行,但用得少。

我曾经在一个项目中,用了偶校验,结果发现数据偶尔会错。排查了半天,发现是干扰导致校验位翻转。后来我改成无校验,加了CRC校验(后面章节会讲),问题就解决了。所以,校验位只是基础,真正要可靠,还得靠更高级的校验机制。

2.7 实战配置:一个典型的远程IO模块

假设你手头有一个远程IO模块,要跟PLC通讯。典型的配置是这样的:

波特率:9600
数据位:8
停止位:1
校验位:无
流控制:无

这个配置,在工业现场最通用。我90%的项目都用这个。如果通讯距离超过500米,我会把波特率降到4800或2400。

小技巧: 调试时,先用示波器看波形。看波特率对不对,看信号幅度够不够。比用软件调试快多了。

2.8 避坑指南:我踩过的那些坑

  • 地线问题:RS-485虽然差分,但最好还是共地。我遇到过地电位差太大,烧了模块的。
  • 终端电阻:长距离通讯,不加终端电阻,信号会反射。我吃过这个亏。
  • 接线顺序:先接GND,再接信号线。带电插拔容易烧接口。
  • 波特率偏差:两个设备的晶振精度不同,会导致波特率偏差。用高精度晶振,或者用自动波特率检测功能。

好了,这一章的内容就到这里。串口通讯看着简单,但细节很多。你把这些基础概念吃透了,后面学Modbus、Profibus就轻松多了。下一章,我们聊聊Modbus RTU协议,这可是远程IO模块的“通用语言”。