← 全部文章 工业通讯

RS-232、RS-422、RS-485 详解

2024 年 9 月 23 日 · 4 分钟读完

目录
  1. 一、各自解决了什么问题
  2. RS-232(1962 年)
  3. RS-422(1978 年)
  4. RS-485(1983 年)
  5. 对比
  6. 二、引脚与接线
  7. RS-232(DB9)
  8. RS-422
  9. RS-485(两线)
  10. 三、现场常见问题
  11. 延伸

做硬件对接时经常听到 RS-232、RS-485、RS-422、USB、TCP 这些词。这里把三种串口讲清楚,再记录实际接线时的注意事项。

先说一个容易混的点:RS-232 / 422 / 485 只规定了电气特性(电平、线怎么接),不规定数据格式。上面跑什么协议(Modbus RTU、厂家自定义协议……)是另一回事。

一、各自解决了什么问题

RS-232(1962 年)

为了让计算机和调制解调器、终端、打印机之间有一个标准的串行接口。

  • 单端信号:每根信号线以 GND 为参考,用电压高低表示 0 和 1。
  • 负逻辑:-3 ~ -15 V 表示 1,+3 ~ +15 V 表示 0,常见的是 ±12 V 左右。
  • 点对点:一个口只能接一个设备。
  • 距离和速率:标准规定约 15 米、20 kbps;实际在短线上跑 115200 bps 很常见。

局限:单端信号容易受干扰,地电位差大时还会出错,所以距离短;只能一对一。

原文说 RS-232「电气隔离」,这是不对的。RS-232 本身没有隔离,两边的 GND 直接相连,工业现场需要隔离时要用带隔离的转换器。

RS-422(1978 年)

为了解决 RS-232 距离短、速率低、抗干扰差的问题。

  • 差分信号:每个信号用一对线(A、B)传输,看的是两根线之间的电压差,外界干扰同时作用在两根线上会被抵消,所以抗干扰强、距离远。
  • 四线全双工:发送一对、接收一对,可以同时收发。
  • 一发多收:一个发送器最多带 10 个接收器(单主多从)。
  • 距离和速率:最远约 1200 米(100 kbps 时),短距离最高 10 Mbps。距离越长,速率越低。

RS-485(1983 年)

在 RS-422 的基础上,允许总线上有多个发送器。

  • 两线半双工最常用:一对线既发又收,同一时刻只能一个设备发送。
  • 多点总线:标准负载下最多 32 个节点,用 1/8 负载的芯片可以接到 256 个。
  • 距离、速率和 RS-422 相当。

电气上允许多个设备都能发送,但同时发就会冲突,所以实际应用都靠协议约定「谁什么时候发」,最常见的是 Modbus RTU 的一主多从轮询:主站问,被点名的从站答,其他人只听。

对比

RS-232 RS-422 RS-485
信号 单端 差分 差分
线数 TXD、RXD、GND 4 线 + GND 2 线 + GND(常用)
双工 全双工 全双工 半双工(2 线)
拓扑 点对点 1 发 10 收 多点总线,32 节点起
距离 ~15 m ~1200 m ~1200 m
速率 标准 20 kbps,实际常用 115.2 kbps 最高 10 Mbps 最高 10 Mbps

二、引脚与接线

RS-232(DB9)

引脚 缩写 功能 方向(电脑端)
1 DCD 数据载波检测 输入
2 RXD 接收数据 输入
3 TXD 发送数据 输出
4 DTR 数据终端就绪 输出
5 GND 信号地 -
6 DSR 数据设备就绪 输入
7 RTS 请求发送 输出
8 CTS 允许发送 输入
9 RI 振铃指示 输入

最基本的通讯只要三根线,收发交叉:

设备 A          设备 B
TXD (3)  ----->  RXD (2)
RXD (2)  <-----  TXD (3)
GND (5)  <---->  GND (5)

两台电脑直连用交叉线(2、3 交叉);电脑接调制解调器类设备用直通线。不确定时,用万用表量:空闲状态下 TXD 对 GND 是 -5 ~ -12 V,哪根有电压哪根就是对方的发送脚。

RS-422

电脑一般只有 DB9 的 RS-232 口或 USB,需要经过转换器,转出来的信号:

信号 功能
TX+ / TX-(T+ / T-) 发送对
RX+ / RX-(R+ / R-) 接收对
GND 信号地

点对点全双工,发送对接对方的接收对:

设备 A               设备 B
TX+  -------------->  RX+
TX-  -------------->  RX-
RX+  <--------------  TX+
RX-  <--------------  TX-
GND  ---------------  GND

一主多从时,主机的 TX 对并联到所有从机的 RX 对;从机的 TX 对并联回主机的 RX 对,同样要由协议保证从机轮流回答。

RS-485(两线)

信号 功能
A(D+、485+) 差分正
B(D-、485-) 差分负
GND 信号地

所有设备手拉手挂在同一对线上,A 接 A,B 接 B,总线两头各加一个 120 Ω 终端电阻:

[120Ω]                                                  [120Ω]
  A ──┬──────────────┬──────────────┬──────────────┬──── A
  B ──┼──┬───────────┼──┬───────────┼──┬───────────┼──┬─ B
      │  │           │  │           │  │           │  │
     A  B          A  B          A  B          A  B
     主站          从站 1         从站 2         从站 3
(GND 也最好一起连上)

四线 RS-485 和 RS-422 接法相同。

三、现场常见问题

  • A、B 标反了:不同厂家对 A、B 的定义不统一,有的 A 是正,有的 A 是负。通讯不上时,第一件事就是把 A、B 对调试试,不会烧坏。也可以量空闲电压:空闲时 A 比 B 高 0.2 V 以上的那根是正。
  • 终端电阻只加在两头:总线最远的两个端点各一个 120 Ω。每个设备都加,相当于并联了一堆电阻,信号被拉得太小反而不通。短距离(几十米)、低波特率(9600)时不加通常也能用。很多转换器和设备有拨码开关控制终端电阻,要检查。
  • 不要星形接线:从一个点分出好几根长线到各个设备会产生反射,必须手拉手串下去,分支线越短越好。
  • 地线要接:差分信号对共模电压有范围要求(-7 ~ +12 V),两边地电位差太大会通讯异常甚至损坏芯片,所以 GND 也要连上;距离远、有大功率设备时用隔离型转换器。
  • 用屏蔽双绞线:A、B 用同一对双绞线,屏蔽层单端接地。
  • 半双工的收发切换:两线 485 发送时要打开驱动器,发完要及时切回接收,否则收不到回复或者把对方的回复「挡住」。USB 转 485 转换器基本都是自动切换的;自己用单片机做时,要在最后一个字节真正发完(发送完成中断,而不是发送缓冲区空)之后再切换方向。
  • 轮询间隔:Modbus RTU 要求帧之间至少 3.5 个字符时间的静默,上位机连续发请求太快,从站会把两帧当成一帧。

延伸

  • 在 C# 里用串口:System.IO.Ports.SerialPort,设好 PortName、BaudRate、DataBits、Parity、StopBits,两边参数必须一致。DataReceived 事件在线程池线程上触发,而且一次收到的不一定是完整一帧,要自己按协议拼帧(按长度或按帧尾)。
  • Modbus RTU:485 上最常用的协议,地址 + 功能码 + 数据 + CRC。C# 里可以用 NModbus 或 HslCommunication,不用自己算 CRC。
  • 串口服务器:现场设备离电脑远时,用「串口转以太网」模块把 485 转成 TCP,上位机用 Socket 连,也可以用虚拟串口软件映射成本机 COM 口。
  • 和网络通讯对比:PLC 之类的设备现在多用以太网,见 西门子 PLC 通讯 和 倍福 ADS 通讯。

# 串口 # 硬件

原文首发于 blog.csdn.net