3、物理层差异:RS-232/RS-485、以太网物理层、CAN 总线物理层对兼容性的影响

各位工程师朋友,咱们今天聊聊物理层。很多人觉得协议栈里最底层的东西没啥好讲的,不就是个电平转换嘛。但说实话,我这些年处理过的兼容性问题,十有八九都出在物理层。你想想看,上层协议写得再漂亮,物理层对不上,数据根本传不过去。

3.1 RS-232:老当益壮,但脾气不小

RS-232 是我入行时接触的第一个串行接口。它的物理层特点很鲜明:单端传输,电压范围 ±3V 到 ±15V。逻辑 1 是负电压,逻辑 0 是正电压。这个设计在当年是为了抗干扰,但放到今天看,问题不少。

核心差异点:

  • 传输距离:理论 15 米,实际超过 10 米就开始丢数据
  • 速率上限:115200 bps 是常见极限,再高就不稳定
  • 共地要求:必须共地,否则电平参考点漂移

我记得有一次在工厂调试一台老式 PLC,上位机怎么都连不上。查了半天,发现是 RS-232 线缆太长,足足 20 米。信号衰减得厉害,电平根本达不到 ±5V。后来换成 RS-485 中继器才解决。嗯,这里要注意:RS-232 的兼容性问题,多半出在距离和速率上。

避坑指南:我曾经遇到过一台设备,RS-232 接口的 TX 和 RX 接反了,但设备居然还能工作——只是偶尔丢包。因为有些芯片内部有交叉检测功能,但不可靠。所以,焊线之前一定用万用表量一下电平。

3.2 RS-485:差分传输的王者,但终端电阻是命门

RS-485 用差分信号传输,抗共模干扰能力强,传输距离能到 1200 米。但它的物理层有个致命弱点:终端电阻匹配。

说白了,RS-485 总线两端必须各接一个 120Ω 电阻。不接?信号反射,数据错乱。接多了?驱动电流不够,总线瘫痪。我见过一个项目,现场 20 个设备挂在一根总线上,有人多接了 4 个终端电阻,结果整个网络时通时断。

参数 RS-232 RS-485
传输方式 单端 差分
最大节点数 1 对 1 32 个(标准),可扩展
共模电压范围 ±15V -7V 到 +12V
终端电阻 不需要 必须(120Ω)

我个人习惯,做 RS-485 项目时,会在每个设备上加一个拨码开关,用来选择是否接入终端电阻。这样现场调试时,直接拨一下就行,不用拆机箱。

3.3 以太网物理层:速率自适应,但别太相信它

以太网物理层,大家都很熟了。10BASE-T、100BASE-TX、1000BASE-T,速率自动协商。但问题就出在这个「自动协商」上。

自动协商的过程是这样的:设备上电后,发送 FLP(快速链路脉冲)来交换能力信息。如果双方都支持 100M 全双工,就握手成功。但如果有一方是老旧设备,只支持 10M 半双工,那协商结果就是 10M 半双工。

我的经验:有一次在改造一个老工厂,新交换机怎么都连不上旧 PLC 的以太网口。后来发现,旧 PLC 的网口是 10M 半双工,但新交换机默认开启了「节能以太网」功能,导致协商失败。关掉这个功能,一切正常。所以,遇到以太网不通,先检查自动协商结果。

另外,以太网物理层还有个坑:线序。虽然 MDI/MDIX 自动翻转已经很普及了,但有些工业交换机为了成本,只支持直连或交叉中的一种。我建议,手边常备一根交叉线,关键时刻能救命。

3.4 CAN 总线物理层:隐性显性,电平逻辑要搞清

CAN 总线的物理层,用的是差分信号,但逻辑定义和 RS-485 完全不同。CAN_H 和 CAN_L 的电压差,显性位(逻辑 0)是 1.5V 到 3.5V,隐性位(逻辑 1)是 0V 到 0.5V。这个设计,是为了实现总线仲裁。

但问题来了:不同厂家的 CAN 收发器,电气参数有细微差别。比如,有些收发器的隐性电平是 2.5V,有些是 2.0V。如果混用,可能导致总线电平判断错误。

兼容性要点:

  • CAN 总线两端也必须接终端电阻,但阻值是 120Ω(和 RS-485 一样)
  • 共模电压范围:-2V 到 +7V,超出这个范围会损坏收发器
  • 速率与距离成反比:1Mbps 时只能传 40 米,10kbps 时可以传 1 公里

我记得有一次,一个客户把 CAN 总线的终端电阻接成了 60Ω,结果总线上的信号反射严重,数据帧 CRC 错误率高达 30%。查了两天才找到原因。嗯,这里要提醒大家:CAN 总线的终端电阻,一定要用 120Ω,而且只能接在总线两端。

3.5 物理层兼容性总结:一张表说清楚

物理层 常见兼容性问题 解决思路
RS-232 距离过长、电平不匹配、TX/RX 接反 使用隔离器、缩短距离、用万用表确认电平
RS-485 终端电阻缺失或过多、共模电压超限 加拨码开关、使用隔离收发器、检查地线
以太网 自动协商失败、线序不匹配、节能以太网干扰 强制设置速率和双工模式、使用交叉线
CAN 总线 终端电阻错误、收发器电气参数差异、共模电压超限 统一收发器型号、严格接 120Ω 电阻、加共模扼流圈

最后说一句:物理层的兼容性问题,往往是最难排查的。因为上层协议栈跑得好好的,但数据就是传不过去。我个人的习惯是,遇到通讯问题,先拿示波器看物理层的波形。波形不对,什么都别谈。波形对了,再往上查协议。这个顺序,能省你至少一半的调试时间。

小技巧:做物理层调试时,手边常备一个 USB 转串口工具、一个 RS-485 转 USB 工具、一个以太网抓包工具。这三样东西,能解决 90% 的物理层问题。