2、RS-232/RS-485串口:电气特性、通信协议(Modbus)、典型应用(门禁控制器、读卡器)、布线规范与常见故障

串口通信,在安防行业里可以说是「老黄牛」一样的存在。别看它技术古老,但稳定可靠,至今仍是门禁控制器和读卡器之间的主力通信方式。今天咱们就把它彻底聊透。

2.1 电气特性:RS-232 vs RS-485,到底差在哪?

很多刚入行的朋友会问:为什么不用RS-232直接连读卡器?嗯,这里有个关键点——传输距离和抗干扰能力。

RS-232 是单端信号,说白了就是一根信号线对地。电压范围在 ±3V 到 ±15V 之间。优点是简单,缺点是传输距离撑死15米,而且抗干扰能力弱。我在项目中遇到过,用RS-232拉了个10米的线到读卡器,结果数据乱码,查了半天才发现是线太长,信号衰减了。

RS-485 就不一样了。它用的是差分信号,两根线(A和B)互为参考。电压差在 ±200mV 以上就能识别。这意味着什么?抗共模干扰能力强,传输距离能到1200米。你想想看,一个大型园区,门禁控制器到读卡器动不动就几百米,RS-485几乎是唯一选择。

参数 RS-232 RS-485
信号方式 单端(对地) 差分(A/B线)
最大距离 约15米 约1200米
节点数 1对1 最多256个节点
抗干扰
典型应用 调试口、短距设备 门禁、读卡器、楼宇对讲

核心结论:门禁控制器和读卡器之间,90%的情况用RS-485。RS-232更多用于本地调试或短距离直连。

2.2 通信协议:Modbus 到底怎么跑?

电气层搞定了,接下来是协议层。安防行业里,Modbus RTU 是绝对的主流。为什么?因为它简单、开放、硬件开销低。

Modbus RTU 的报文结构是这样的:

地址码(1字节) + 功能码(1字节) + 数据区(N字节) + CRC校验(2字节)

举个例子,门禁控制器要读取读卡器的状态:

主机发送:01 03 00 00 00 01 84 0A
从机回复:01 03 02 00 01 79 84

解释一下:

  • 01:从机地址,也就是读卡器的ID
  • 03:功能码,表示读取保持寄存器
  • 00 00:起始地址
  • 00 01:读取1个寄存器
  • 84 0A:CRC校验

回复里的 00 01 表示读卡器状态正常。如果返回 00 00,那就是读卡失败或者卡片无效。

个人经验:我建议你在设计协议时,把读卡器的状态寄存器定义得细一点。比如 bit0 表示卡片是否有效,bit1 表示读卡器是否在线,bit2 表示防拆开关状态。这样一次读取就能拿到所有信息,省去多次交互的麻烦。

2.3 典型应用:门禁控制器 + 读卡器

咱们来看一个实际场景。一个门禁控制器,下面挂了4个读卡器。每个读卡器通过RS-485总线连接到控制器。

布线是这样的:

  • 控制器作为主机,地址固定为0
  • 4个读卡器分别设置地址为1、2、3、4
  • 所有设备挂在同一对RS-485总线上(A线接A线,B线接B线)

控制器轮询每个读卡器:

轮询地址1:01 03 00 00 00 01 84 0A
等待回复...
轮询地址2:02 03 00 00 00 01 84 0A
等待回复...
轮询地址3:03 03 00 00 00 01 84 0A
等待回复...
轮询地址4:04 03 00 00 00 01 84 0A
等待回复...

这里有个坑:轮询间隔不能太短。我曾经遇到一个项目,控制器轮询间隔设成了10ms,结果读卡器来不及回复,导致总线冲突。后来我把间隔调到50ms,问题就解决了。你想想看,4个读卡器,每个50ms,一轮也就200ms,完全够用。

2.4 布线规范:别让一根线毁了整个系统

RS-485布线,说难不难,说简单也不简单。我见过太多因为布线不规范导致的故障了。

核心规范:

  1. 必须使用双绞线。A线和B线要绞在一起,这样才能有效抑制共模干扰。别图便宜用平行线,那是给自己挖坑。
  2. 终端电阻不能省。在总线的两端,各加一个120欧姆的电阻。为什么?因为信号在长线上会反射,终端电阻能吸收反射波。我遇到过好几次,不加终端电阻,总线距离一长就丢包,加上就好了。
  3. 总线拓扑用「手拉手」。也就是从控制器出发,一个接一个地连到读卡器,最后到末端。千万别搞成星型拓扑,那会导致信号反射严重。
  4. 屏蔽层单端接地。如果用了屏蔽双绞线,屏蔽层只在控制器一端接地。两端都接地反而会形成地环路,引入干扰。

警告:RS-485的A线和B线绝对不能接反。接反了,通信直接失败。我建议你在布线时,用不同颜色的线区分A和B,比如A用红色,B用黑色。这样后期维护也方便。

2.5 常见故障与排查

做安防这么多年,串口故障我见得多了。下面这几个是最常见的:

  • 通信完全不通:先检查接线,A/B是否接反?电源是否正常?地址是否冲突?
  • 偶尔丢包:大概率是终端电阻没加,或者总线距离太长。用示波器看波形,如果信号边沿有振铃,那就是反射。
  • 数据乱码:波特率不匹配,或者地线没接好。RS-485虽然差分,但地线还是要接的,否则共模电压会漂移。
  • 某个读卡器时好时坏:检查那个节点的接线,可能是接触不良。我曾经遇到过,读卡器内部的接线端子松了,导致通信时断时续。

避坑指南:我曾经在一个项目中,所有读卡器都正常,唯独一个读卡器死活连不上。查了半天,发现那个读卡器的地址被误设成了0。而0通常是主机地址,冲突了。所以,设备地址一定要从1开始分配,并且做好记录。

好了,关于RS-232和RS-485串口,咱们就聊到这里。下一章我会讲韦根接口,那是读卡器和门禁控制器之间的另一种经典通信方式。到时候咱们再细聊。