1. 通讯协议基础:RS232/RS485串口通讯
各位同行,咱们今天聊聊串口通讯。说实话,这玩意儿看着简单,但我在现场见过太多人栽跟头了。RS232和RS485,可以说是SCADA系统里最基础的通讯方式,没有之一。你想想看,从PLC到仪表,从变频器到智能电表,哪个设备不配个串口?
1.1 RS232:点对点的老将
RS232,说白了就是一台设备跟另一台设备直接对话。我最早接触SCADA系统时,用的就是RS232。它的原理其实不复杂——用电压差来表示逻辑0和逻辑1。
关键参数:
- 逻辑1:-3V 到 -15V(标记状态)
- 逻辑0:+3V 到 +15V(空格状态)
- 传输距离:理论15米以内,实际我建议别超过10米
- 通讯方式:全双工,能同时收发
嗯,这里要注意。RS232的接线方式,很多人搞混。标准的DB9接口,我给大家列个表:
| 引脚号 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| 2 | RXD | 接收 | 接收数据 |
| 3 | TXD | 发送 | 发送数据 |
| 5 | GND | 公共 | 信号地 |
| 7 | RTS | 输出 | 请求发送 |
| 8 | CTS | 输入 | 清除发送 |
我在项目中遇到过,有人把2和3接反了,结果数据死活不通。其实最简单的办法——交叉接法:设备的TXD接对方的RXD,RXD接对方的TXD,GND接GND。三根线就能干活。
1.2 RS485:远距离的王者
RS485就不一样了。它用的是差分信号传输,抗干扰能力强得多。我记得有一次在化工厂做项目,现场电机一启动,RS232就乱码,换成RS485后稳得很。
RS485的核心优势:
- 传输距离:1200米(理论值,实际800米以内比较稳)
- 多站能力:一条总线上最多挂32个节点(标准)
- 通讯方式:半双工,同一时间只能发或收
- 信号方式:差分信号(A+、B-)
接线方式上,RS485只需要两根线:A(正)和B(负)。但有个坑——终端电阻。我曾经在一条300米的总线上,不加终端电阻,数据偶尔丢包。加上120欧姆的电阻后,问题就解决了。
⚠️ 重要提醒:
- RS485总线两端必须各加一个120Ω终端电阻
- 屏蔽层单端接地,别两端都接
- 总线上的设备,地址不能重复
1.3 参数配置:波特率、数据位、停止位、校验位
这些参数,说白了就是通讯双方约定好的"暗号"。配置不对,数据就是乱码。我给大家画个图,看看数据帧长什么样:
咱们一个一个说:
波特率
就是每秒传输的比特数。常见的有9600、19200、38400、115200。我个人习惯,距离远用9600,距离近用115200。为什么?波特率越高,信号衰减越快。我在一个矿山项目里,用115200跑500米,数据全是错的,降到9600就正常了。
数据位
通常是8位。老设备可能用7位。记住一点:通讯双方必须一致。我曾经调试一台老式温控仪,它只支持7位数据位,我默认设了8位,折腾了俩小时才发现问题。
停止位
1位或2位。2位停止位更可靠,但速度慢一点。我一般用1位,除非通讯环境特别差。
校验位
有三种:无校验、奇校验、偶校验。校验位的作用是检测数据是否出错。但说实话,现在很多协议自带校验,串口校验反而用得少了。我建议:如果协议没有CRC校验,就加上奇偶校验;如果有,就设无校验。
💡 我的配置经验:
- 默认配置:9600、8、N、1(9600波特率,8数据位,无校验,1停止位)
- 90%的设备都支持这个配置
- 调试时先用这个配置试,不行再改
1.4 常见问题与避坑指南
做SCADA这么多年,串口通讯的问题我见得太多了。给大家总结几个最常见的:
⚠️ 问题一:数据乱码
原因:波特率不匹配,或者校验位设置不一致。
我曾经在污水处理厂,PLC发过来的数据全是乱码。查了半天,发现PLC设的是19200,上位机设的是9600。改过来就好了。
⚠️ 问题二:通讯时断时续
原因:接线松动、地线没接好、或者RS485没加终端电阻。
我建议:用万用表量一下A、B之间的电压。正常应该在1.5V到5V之间。如果电压不稳定,多半是接地问题。
⚠️ 问题三:只能发不能收
原因:RS232的2、3脚接反了,或者RS485的A、B接反了。
解决办法:交换一下接线试试。RS485的A、B接反不会烧设备,最多通讯不上。
1.5 调试工具与技巧
工欲善其事,必先利其器。我调试串口通讯,必备三样东西:
- 串口调试助手:发送十六进制数据,看返回对不对
- USB转串口线:笔记本没有串口,这个必须有
- 万用表:量电压、量通断
调试步骤,我一般这么来:
- 先确认物理连接:用万用表量一下,线是不是通的
- 再确认参数配置:波特率、数据位、停止位、校验位,两边必须一样
- 然后发个简单的命令:比如读设备地址,看返回对不对
- 最后才跑完整协议
嗯,这里有个小技巧。调试时把串口调试助手的显示模式设成十六进制,别用ASCII。为什么?因为很多控制字符在ASCII模式下看不见。我见过有人调试了半天,其实设备已经返回数据了,只是显示模式不对没看到。
🔧 快速排查清单:
- ✅ 接线是否正确(RS232交叉,RS485直连)
- ✅ 波特率是否一致
- ✅ 数据位、停止位、校验位是否一致
- ✅ RS485终端电阻是否加上
- ✅ 设备地址是否正确
- ✅ 屏蔽层是否单端接地
说实话,串口通讯看着简单,但真要出了问题,排查起来也挺费劲的。不过只要你掌握了这些基础,大部分问题都能快速定位。我带的徒弟,我都是让他们先把串口通讯吃透,再去碰以太网。因为串口通讯是基础中的基础,搞懂了它,其他通讯协议也就触类旁通了。
公众号:蓝海资料掘金营,微信deep3321