← 返回 中控与协议

RS485 总线组网:地址、终端电阻、菊花链、半双工收发时序

最后更新 2026-06-22
s4 · 中控与协议 🟡 涉接线/工业配置
你将学到
  • 搞懂 RS485 菊花链拓扑的正确走法,以及为什么不能用星型/分支接法
  • 理解 120Ω 终端电阻的作用,知道装在哪里、装几个
  • 学会设备地址分配和半双工收发切换时序
  • 认识总线 AB 线序、GND 是否要接的工程实践
  • 拿到故障排查表:只有一台不通、全线乱码、信号反射怎么查

你刚把一台灯光控制器用 RS485 搞通了,然后领到下一个任务:机房里要接一整排设备——8 台科星 IO 控制器、4 台灯光控制器——都走 RS485,一条总线管到底。结果把线接上,发第一台的地址正常,发其他台要么没反应、要么两台同时乱码应答,或者只要接线超过 3 台就开始时好时坏。

这不是偶发的玄学问题。RS485 多设备组网有一套固定的工程规范,按规范来就稳,违反规范就乱。 这一节把每个细节从原理到接法讲清楚,你看完再接总线,会快很多。

涉及设备接线与工业总线配置(R2)。RS485 电气特性参数以 TI 应用手册(SLLA272D)和 Modbus over Serial Line 官方规范为准(见文末来源);具体设备的地址配置方式以该设备手册为准,不同型号不通用。


RS485 总线的本质:差分信号 + 地址广播

串口协议入门里我们讲过,RS232 是一对一私聊,RS485 是一条总线上拉群。这里先把"拉群"的底层逻辑说清楚:

RS485 是差分信号:总线上有 A、B 两根线,发送方同时驱动这两根线到相反的电压方向(A 比 B 高为逻辑 1,B 比 A 高为逻辑 0),接收方根据两者的电压差(而不是绝对电压)来判断 0/1。这就是它抗干扰强的根本原因——干扰通常是共模的,同时叠加到 A 和 B 上,差值几乎不变,数据照样能解出来。

但差分优势带来一个新约束:每个时刻只能有一个设备在驱动总线。如果两台设备同时把 A、B 往不同方向拉,信号就乱了。这就是为什么 RS485 必须是半双工(同一时刻只能发或只能收),而且多设备共线时要靠地址来区分"这条指令是给谁的"。


拓扑:为什么菊花链,不能星型

RS485 总线的标准接法是菊花链(Daisy Chain),即设备一台台串联在同一条总线上:

主控 ─────────────────────────────────
       │           │           │
    设备1        设备2        设备3

不是:

         主控
        /  |  \
     设备1 设备2 设备3   ← 错误:星型接法

也不是从主控拉一根线出来、在中间某个位置"T 形"引出分支去另一台设备:

主控 ──────────┬──────── 设备1
               │
              设备2(T 形分支)← 尽量避免

为什么不行? 信号电平在总线上是以电磁波的形式传播的,在阻抗不匹配的"分叉点"(T 形或星型节点)会产生反射:部分信号被反射回源头,和后续信号叠加,造成波形畸变,表现为数据错误、时好时坏,而且越长越严重。

菊花链结构中,信号从主控端出发,经过每台设备,一直走到末端,沿途是连续的传输线,阻抗均匀,反射最小。这是 RS485 多设备组网最重要的一条硬规矩

💡 提示

现实展厅里做不到完美菊花链怎么办?分支线长度小于总线长度的 1/5 且不超过 3 米时,分支引起的反射在低波特率(9600 以下)通常不显著。但这是工程妥协,不是规范推荐。如果超过这个距离,信号完整性就无法保证——要用 RS485 中继器或换拓扑。 以 TI RS485 应用手册(SLLA272D)中的分析为参考依据。


终端电阻:为什么是 120Ω,装在哪

菊花链的两端——最靠近主控的那端最末尾设备的那端——各装一个 120Ω 的电阻,接在 A 和 B 之间。

为什么 120Ω? 标准双绞线的特征阻抗通常在 100~120Ω 范围内,终端电阻的值要和传输线的特征阻抗匹配,才能最大程度吸收信号到达末端后的反射。所以 120Ω 不是随便取的,是和传输线阻抗匹配的结果。

为什么装两端? 信号从主控发出,经总线一路传到末端,末端是"终点",不加终端电阻就有反射,往回打。主控端同理——从末端反射回来的信号还会在主控端再次反射,形成"来回弹",在高波特率下对信号质量影响明显。两端都加,把两个反射点都消掉。

120Ω         菊花链走向           120Ω
 ├─ 主控 ─ 设备1 ─ 设备2 ─ 设备3 ─┤
   A B      A B    A B    A B
💡 提示

实际工程中很多设备的接线端子上自带"终端电阻使能"拨码,比如有人 USR-TCP232 的 RS485 口旁边就有一个终端电阻跳线,主控侧接的第一台设备和末尾设备把这个拨码打开就行,省掉外接电阻的麻烦。具体以你手上型号的手册为准。

只有一台设备时要不要终端电阻? 理论上一台设备的总线非常短,反射影响极小。但工程实践上建议同样加上——代价几乎为零,省掉一个潜在问题根源。

中间的设备要不要加终端电阻? 不要。中间设备加了终端电阻,相当于在总线中间"插了一堵墙",把总线并联上了一个额外的低阻抗,信号被大量吸收,总线上的驱动能力不够,后面的设备就看不到信号了。


设备地址:怎么分配,怎么配置

每台 RS485 设备必须有唯一的地址(在 Modbus 协议中叫从站地址,Slave ID)。主控发一条指令,指令帧里带上目标地址,只有地址匹配的那台设备才响应,其余保持沉默。

地址范围(Modbus over Serial Line 规范)

地址值 含义
0 广播地址(所有从站都响应,但通常广播指令不含应答,防总线碰撞)
1 ~ 247 有效从站地址,每台设备占一个,不重复
248 ~ 255 保留,不使用

地址配置方式(以手册为准,常见两种):

  1. 硬件拨码开关:设备上有一排 DIP 开关,用二进制编码地址(如 4 位拨码,可设 1~15)。拨完断电再上电生效。
  2. 软件配置:通过设备的配置软件或 Web 配置界面写入地址,上电保存。
💡 提示

工程习惯:地址从 1 开始分配,按设备物理位置顺序来(最靠近主控的叫 1 号,依次往后)。建一张地址表存到项目文档里,记录每台设备的从站地址、型号、物理位置、用途。三个月后再来加设备,有这张表不会踩地址重复的坑。

地址冲突的后果:两台设备配了同一个地址,主控发指令时两台同时试图应答,信号在总线上叠加,就是乱码。典型表现是接收区出现双倍字节的乱码,和单台设备的乱码(波特率不对)长相不一样——单台乱码是字符不对、字节数可能正常;地址冲突的乱码是字节数多出来、内容混乱。


AB 线序:正接还是反接

RS485 的 A、B 线对应关系:

  • A 线(-):逻辑 0 时电压高于 B;逻辑 1 时电压低于 B。(各厂商定义有差异,以下是 TIA-485 标准)
  • B 线(+):逻辑 0 时电压低于 A;逻辑 1 时电压高于 A。

听起来绕,实际接线只记住:A 接 A,B 接 B。不同设备之间、主控和从设备之间,A 线接在一起、B 线接在一起,这是正接。接反了(A 接 B、B 接 A),差分信号极性反了,接收方看到的 0/1 全部反转,接收区显示乱码。

💡 提示

一个常见的坑:不同厂商的接线标注不统一。有的厂商叫 A(+)、B(-);有的叫 D+、D-;有的叫 RS485+、RS485-。两台设备对接时,看正负标注,正接正、负接负,不要只看字母 A/B,因为 A/B 的极性定义在不同品牌之间并不统一(EIA-485 标准对 A/B 极性有定义,但工程实践中混用导致标注混乱)。如果接完第一次收到乱码,先把 A/B 对调试一次,很多时候就通了。


GND(参考地)要不要接

RS485 理论上是差分传输,不依赖绝对电压,理论上不需要 GND。但实际工程中,GND 要接,理由:

  1. RS485 收发器有一个工作电压范围,通常是 -7V ~ +12V 对 GND。如果两个设备的 GND 电位差太大,超出这个范围,接收器就可能工作异常甚至损坏。
  2. 长距离、多设备的 RS485 总线里,两个设备的 GND 可能因为不同供电来源而有几伏的电位差,这在工业现场很常见。
  3. Modbus over Serial Line 官方规范也明确建议连接信号地(Signal Ground)。

接法:在总线里拉第三根线作为 GND,每台设备的 GND 接在上面。不要把 GND 和强电地(PE)混在一起,那是另一回事。


半双工收发时序:切换太慢为什么会乱码

RS485 是半双工,同一时刻总线要么处于"发送状态"(某台设备在驱动总线),要么处于"接收状态"(所有设备监听)。主控发完一条指令后,需要在极短时间内把总线切换到接收状态,才能接到从站的应答。

发送和接收之间有两个关键时间参数

  1. 发完切收延迟(Transmit-to-Receive delay, t_TX_RX):主控发完最后一个字节后,需要等发送器关闭、总线上的驱动电流消散,才能开启接收器。如果切换太快,总线还没"静下来",从站的应答就会混入主控自己发出的信号尾声,造成应答乱码。
  2. 从站应答延迟(Response delay):从站收到完整帧、校验通过,到开始发应答帧,有一段处理时间。Modbus over Serial Line 规范定义:从站应答必须在最后一个请求字节发完后 3.5 个字符时间内开始,最多不超过 1 秒(正常情况下毫秒级)。
主控        发指令帧 ─────────────┐
                                  │ t_TX_RX(切收延迟)
从站        收到完整帧,处理 ──────┘─→ 开始发应答帧 ──────────┐
                                                               │
主控        进入接收状态 ──────────────────────────────────→ 读应答
💡 提示

实际工程里,这个时序问题通常不需要你手动处理——中控软件(SoftControl 等)和串口服务器(有人 USR 系列)已经把收发切换逻辑内置了,默认配置在大多数场景下没问题。但当你自己写代码控制 RS485 设备时,比如用 Arduino 或 Python 配合 USB-RS485 转换器,必须在发完一帧后加一个延迟(通常 2~10ms,以设备手册为准)再开接收器,否则会漏掉应答的头几个字节。

典型的半双工切换代码节奏(伪代码):

# 使能发送
set_tx_enable(True)
uart.write(frame_bytes)
uart.flush()                 # 等所有字节从 UART FIFO 发完
time.sleep(0.003)            # 等总线驱动电流消散,3ms 是保守值,以硬件手册为准
# 切换到接收
set_tx_enable(False)
response = uart.read(expected_bytes, timeout=1.0)

总线挂多少台设备?能跑多快?

标准 RS485 规范(TIA-485)定义:

  • 单段总线最多 32 个单位负载(Unit Load, UL)。一台标准负载设备是 1 UL,所以理论上最多 32 台。配合"四分之一负载"或"八分之一负载"芯片,可以挂到 128 或 256 台,但这依赖收发器芯片的规格,以芯片 datasheet 为准。
  • 传输距离和波特率成反比:9600 bps 可达约 1200 米,115200 bps 约 100 米(以标准双绞线,这是近似参考值,实际受线材质量、干扰、连接数影响,以 TI SLLA272D 手册数据为准)。

展厅实际组网建议:

场景 建议
单总线设备数 控制在 20 台以内,留有余量,避免接近极限
总线长度 ≤300 米时用 9600 bps 基本无问题;更长考虑光电隔离或分段
波特率 优先用 9600,稳定性最好;速度需求大时用 38400
线材 用双绞屏蔽线(STP),屏蔽层一端接地;降低共模干扰

故障排查表

现象 最可能的原因 怎么查 / 怎么办
所有设备都无响应 主控端 AB 线接反 / 总线主干断开 用万用表量 A-B 电压:空闲时有约 +0.2V 偏置说明接法有效;线接反则对调 A/B
某一台从不响应,其他正常 该台地址配错 / 拨码错 / AB 接线松 重新确认拨码地址=发出帧的目标地址;单独隔出来一对一测试
只要接超过 3 台就开始乱码 终端电阻缺失 / 总线反射 两端各加 120Ω 终端电阻;确认中间设备没有接终端电阻
发一条指令两台同时应答且乱码 两台地址相同(地址冲突) 逐台断开测试,找到重复地址台,改为唯一地址
时好时坏,慢速(9600)就稳,快了就乱 分支/星型接法引起信号反射 改成菊花链;若有 T 形分支且分支线 >3m,换路由或用中继器
应答首字节乱码/截断,后续正常 半双工切换延迟不够 在发完帧后增加延迟(2~10ms)再切收;自写代码时加 flush() 等待发完
总线长距离偶发错误(CRC 错) 线路干扰 / GND 电位差 检查是否用双绞屏蔽线;屏蔽层一端接地;加总线 GND 线
只有末端设备不稳 末端缺终端电阻,信号反射回头叠加 末端设备旁加 120Ω 终端电阻 A-B 间

一个典型展厅组网实例(拓扑示意)

以"1 台有人 USR-TCP232 串口服务器(主控侧 RS485 口)+ 6 台科星网络 IO 控制器"为例(具体型号支持情况以各厂商手册为准):

网口──→ USR-TCP232 ──RS485 A/B──→ 科星IO #1(Addr:1) ──→ #2(Addr:2) ──→ ... ──→ #6(Addr:6)
         [终端电阻]                                                               [终端电阻]
          A-B间120Ω                    菊花链,线到线串联                          A-B间120Ω
          (或拨码使能)                  每台拨码地址唯一                           (或拨码使能)

波特率:所有设备和 USR-TCP232 的 RS485 串口参数一致(如 9600-8-N-1)。 总线 GND:从串口服务器地端拉一根 GND 线到每台设备的 GND 端子(第三根线)。


小结 · 你现在掌握了什么

  • RS485 多设备组网的拓扑铁律:菊花链,不要星型/分支,根源是信号反射。
  • 两端各一个 120Ω 终端电阻,中间不加;选有终端电阻拨码的设备可以省掉外接。
  • 每台设备地址唯一(1~247);接线 A 接 A、B 接 B,正负标注不同品牌有差异时认准正负符号。
  • 半双工切换:发完帧需等 2~10ms 再切收,中控软件已内置,自写代码时要显式处理。
  • GND 接上,不浮空,避免共模超范围。

下一步:总线接好了,下面要学总线上跑的协议——Modbus RTU / TCP 入门:功能码、寄存器、从站地址、CRC,把地址、线圈、寄存器这套数据模型搞清楚,就能读写展厅里任意一台 Modbus 设备。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明

需要展厅软硬件方案或定制开发?