串行通信基础:RS-232、RS-422、RS-485 标准详解

各位同学,今天我们来聊聊串行通信。说实话,在数控系统这个圈子里混了十几年,我见过太多因为通信问题导致的设备故障。有一次在车间调试五轴加工中心,机床动不动就报警停机,查了三天,最后发现是串口线太长,信号衰减了。从那以后,我对串行通信的每个细节都不敢马虎。

串行通信,说白了就是一根线一位一位地传数据。跟并行通信比,它省线、抗干扰、能传得远。咱们数控系统里,从PLC到伺服驱动器,从编码器到上位机,到处都有它的影子。

串行通信知识体系 串行通信基础 RS-232 标准 RS-422 标准 RS-485 标准 串行通信参数 波特率 数据位 停止位 校验位

一、RS-232 标准:最经典的串口

RS-232 是咱们这行最老牌的串行通信标准。它诞生于上世纪60年代,但直到今天,很多数控系统的调试口还是用它。我个人习惯叫它「标准串口」,因为电脑主板上那个9针的DB9接口,就是它。

RS-232 是单端传输,什么意思呢?就是一根信号线对地线,用电压差来表示逻辑0和逻辑1。具体来说:

  • 逻辑1(Mark):-3V 到 -15V
  • 逻辑0(Space):+3V 到 +15V

关键参数:

  • 最大传输距离:约15米(我建议别超过10米,更保险)
  • 最大速率:115200 bps(实际常用9600或19200)
  • 连接方式:点对点(只能两台设备通信)
  • 信号线:TXD、RXD、GND,外加流控线RTS/CTS

⚠ 避坑指南:

我曾经在一条生产线上遇到RS-232通信间歇性断连,查了半天发现是地线没接好。记住,RS-232的GND必须接,而且两端设备的地电位差不能太大,否则会烧接口芯片。

二、RS-422 标准:差分传输的先行者

RS-232 传不远,抗干扰也一般。于是就有了 RS-422。它改用差分信号传输,就是一对绞线传一个信号,一根传正相,一根传反相。接收端看两根线的电压差来判断逻辑。

这样做的好处很明显:

  • 共模干扰被抵消了,抗干扰能力强很多
  • 能传更远,理论1200米
  • 速率也能上去,最高10 Mbps

RS-422 支持多点通信,但注意,它是一个发送端对多个接收端。我记得有个项目,一台工控机要同时采集8台伺服驱动器的状态,用的就是RS-422。发送端只有工控机,8台驱动器都收,没问题。

特性 RS-232 RS-422
传输方式 单端 差分
最大距离 15米 1200米
最大速率 115.2 kbps 10 Mbps
节点数 1发1收 1发10收
典型应用 调试口、鼠标 工业相机、远程采集

💡 个人经验:

RS-422 的终端电阻一定要加。不加的话,信号会在线缆末端反射,造成数据错乱。我一般在线缆最远端并一个120欧电阻,效果很好。

三、RS-485 标准:工业现场的王牌

RS-485 是 RS-422 的升级版。它也是差分传输,但最大的区别是:RS-485 支持多节点双向通信。什么意思?就是总线上可以挂很多设备,大家轮流说话,谁拿到总线谁发数据。

你想想看,一条双绞线上挂32个、64个甚至128个设备,每个设备都有唯一地址。主机点名,从机应答。这不就是咱们数控系统里最常见的通信方式吗?

RS-485 核心特点:

  • 半双工:同一时刻只能一个设备发,其他设备收
  • 多点:最多256个节点(取决于驱动芯片)
  • 距离:1200米(加中继可以更远)
  • 速率:最高10 Mbps(距离越短速率越高)
  • 共模电压范围:-7V 到 +12V

我在调试一条汽车零部件生产线时,用了RS-485总线连接了24台伺服驱动器、8个远程IO站和1台PLC。总线长度大概800米,波特率设的38400,跑了两年没出过问题。嗯,这里要注意,RS-485的布线要遵循「手拉手」拓扑,不能搞成星型,否则信号反射会让你头疼。

⚠ 避坑指南:

我曾经遇到一个案例,RS-485总线偶尔丢包,查了驱动、查了线缆都没问题。最后发现是总线两端都没加偏置电阻,导致总线空闲时电平不确定。加上偏置电阻后,问题解决。记住,RS-485总线两端要加120欧终端电阻,还要加偏置电阻让空闲电平稳定在逻辑1。

四、串行通信参数:四个关键设置

不管用哪种标准,串行通信都有四个参数必须配好。两边设备必须一模一样,否则通信不了。我刚开始做项目时,就吃过这个亏——上位机设的9600、8、N、1,下位机设的19200、8、N、1,结果数据全是乱码。

1. 波特率

波特率就是每秒传多少位。单位是 bps(bits per second)。常见的有:

  • 9600 bps:最常用,稳定可靠
  • 19200 bps:速度翻倍,距离短时可用
  • 38400、57600、115200 bps:高速场合

我个人习惯,距离超过500米用9600,100米以内用38400。速率越高,对线缆质量要求也越高。

2. 数据位

数据位就是一帧里有效数据的位数。常见的有7位和8位。ASCII码用7位就够了,二进制数据用8位。数控系统里几乎都用8位。

3. 停止位

停止位是一帧结束的标志。常见的有1位、1.5位、2位。停止位越长,抗干扰越好,但传输效率越低。我一般用1位停止位,除非通信环境特别恶劣才用2位。

4. 校验位

校验位用来检测数据传输有没有出错。常见的有:

  • 无校验(N):不用校验位
  • 奇校验(O):数据位+校验位里1的个数为奇数
  • 偶校验(E):数据位+校验位里1的个数为偶数

💡 我的建议:

工业现场干扰多,我建议用奇校验或偶校验。虽然会多传一位,但能检测出单比特错误。如果通信要求高,还可以在应用层加CRC校验,双重保险。

最后,给大家一个参数配置示例。假设我们要配置一个RS-485通信,参数为:波特率19200、8位数据位、偶校验、1位停止位。在C语言里,串口初始化代码大概是这样:

// 串口初始化示例:19200, 8, E, 1
void UART_Init(void) {
    // 设置波特率
    UBRR0H = (unsigned char)((F_CPU / 16 / 19200 - 1) >> 8);
    UBRR0L = (unsigned char)(F_CPU / 16 / 19200 - 1);
    
    // 设置帧格式:8位数据,偶校验,1位停止位
    UCSR0C = (1 << UMSEL01) | (1 << UMSEL00)  // 异步模式
           | (1 << UPM01) | (1 << UPM00)      // 偶校验
           | (1 << UCSZ01) | (1 << UCSZ00);   // 8位数据
    
    // 使能发送和接收
    UCSR0B = (1 << RXEN0) | (1 << TXEN0);
}

好了,串行通信的基础就讲到这里。RS-232、RS-422、RS-485 这三个标准,加上波特率、数据位、停止位、校验位这四个参数,是咱们数控系统通信的基石。搞懂了这些,后面学Modbus、CANopen这些协议就轻松多了。


公众号:蓝海资料掘金营,微信deep3321