RS-232、RS-422、RS-485 详解
2024 年 9 月 23 日 · 4 分钟读完
目录
做硬件对接时经常听到 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