如何处理 RS-485 总线半双工通信冲突:避免两节点同时发数据的总线仲裁技巧

RS-485 是 **半双工** 总线:同一时刻只能有一个驱动器占用 A/B。两个节点同时发送会发生冲突,波形塌陷,CRC 大面积失败,表现为「有时好有时坏」的乱码。

### 工程约束

  1. **单一主站轮询**:从站不主动突发(除非协议明确允许多主并做仲裁)。
  2. **发送切换延时**:发完等移位寄存器排空(TC)后再切接收,常留 1~2 字符时间。
  3. **DE/RE 极性**:接反会导致「以为在听其实在发」。
  4. **终端与偏置**:冲突之外的电气问题要分开查。

### 与 Modbus

Modbus 主从模型天然适配 485:主站一问,从站一答。用在线串口助手模拟主站时,保持「一问一答」,不要多软件同时抢同一总线。

排查冲突时:先保证物理上只有一个主,再用示波器或逻辑分析仪看 DE 时序;软件重试只能掩盖,不能根治双发。

### 冲突复现实验

  1. 故意用两个主站工具同时轮询同一总线,观察误码。
  2. 恢复单主后误码应明显下降。
  3. 检查从站是否在非请求时段主动上报(需协议支持)。
  4. 调整主站超时与帧间隔,避免「问未完又问」。

半双工的纪律比代码技巧更重要。串口助手只做单主模拟时,现场总线才会安静。

联调记录建议包含:波特率与帧格式、接线方式、样本 HEX、现象与结论。使用 Web Serial Pro 等工具时可直接导出日志片段附在工单中,方便软硬件同事对齐。