1. 串口通信基础:RS232/RS485标准、波特率、数据位、停止位、校验位详解
1.1 先说两句心里话
做SCADA系统这么多年,我调试过最多的通信接口,就是串口。
你别看它老,它可靠。在工业现场,什么以太网断了、WiFi飘了,串口往往还能坚挺地传数据。我个人习惯,凡是关键设备之间的心跳信号,一定走串口——稳。
但话说回来,串口通信也是最容易出幺蛾子的地方。波特率设错了、校验位不匹配、线序接反了……这些坑我全踩过。今天咱们就把串口通信的底裤扒干净,从标准到参数,一个一个说透。
1.2 RS232 与 RS485:两种标准,两种脾气
串口通信的物理层标准,最常见的就是RS232和RS485。它们俩的区别,说白了就是「单挑」和「群殴」。
RS232:点对点,简单粗暴
RS232是早期PC标配的串口标准。它用正负电压表示逻辑电平:-3V到-15V是逻辑1,+3V到+15V是逻辑0。嗯,电压范围挺宽,但抗干扰能力一般。
我在项目中遇到过一件事:一条RS232线拉了15米,数据就开始乱码。后来一查,RS232的极限传输距离也就15米左右。你想想看,工厂里设备动不动隔几十米,RS232根本扛不住。
RS485:差分信号,抗干扰强
RS485用的是差分信号传输。两根线(A和B)之间的电压差来决定逻辑:差值为正就是逻辑1,差值为负就是逻辑0。这种设计天生抗共模干扰,传输距离能到1200米。
而且RS485支持多站通信,一条总线上可以挂32个节点(甚至更多)。我调试过一条RS485总线,挂了18台变频器,跑115200波特率,稳得很。
| 参数 | RS232 | RS485 |
|---|---|---|
| 传输方式 | 单端(非平衡) | 差分(平衡) |
| 最大距离 | 约15米 | 约1200米 |
| 节点数 | 1对1 | 最多32节点(标准) |
| 抗干扰 | 一般 | 强 |
| 典型应用 | 短距离、一对一 | 长距离、多设备 |
1.3 波特率:通信的「心跳」
波特率,就是每秒传输的符号数。单位是bps(bits per second)。
常见的波特率有:9600、19200、38400、115200。工业现场用得最多的是9600和19200。为什么?因为距离越长,波特率就得越低,否则信号会衰减得厉害。
我曾经调试一条200米长的RS485线,设成115200,数据全错。降到9600,立马正常。你想想看,信号在长线缆上跑,高频分量衰减快,波特率越高,眼图越差。
1.4 数据位:一次传多少比特
数据位,就是每个数据帧里实际承载的数据比特数。常见的有7位和8位。
7位数据位,一般用于传输ASCII字符(0-127)。8位数据位,可以传0-255的完整字节。现在绝大多数设备都用8位数据位。我几乎没见过用7位的,除非是跟老古董设备通信。
1.5 停止位:帧与帧之间的「喘息」
停止位,就是一个数据帧结束后的空闲时间。常见的有1位、1.5位、2位。
停止位越长,接收端越容易同步。但代价是传输效率降低。我个人习惯,大部分场景用1位停止位就够了。如果通信环境特别差(比如强干扰),我会设成2位停止位,给接收端多点时间处理。
1.6 校验位:数据对不对,它说了算
校验位,是用来检测数据传输过程中有没有出错的。常见的有:无校验(None)、奇校验(Odd)、偶校验(Even)。
奇校验:数据位加上校验位,1的总个数为奇数。
偶校验:数据位加上校验位,1的总个数为偶数。
举个例子:数据位是 0100 0001(即字符'A'),有2个1。如果采用奇校验,校验位就得是1,让总1个数变成3(奇数)。如果采用偶校验,校验位就是0,总1个数保持2(偶数)。
1.7 避坑指南:串口参数不匹配的典型症状
- 症状一: 能收到数据,但全是乱码。大概率是波特率不匹配。
- 症状二: 数据偶尔丢一两个字节。可能是停止位太短,或者干扰太大。
- 症状三: 数据能收到,但校验总是失败。检查校验位设置是否一致。
- 症状四: 完全收不到数据。先查线序,再查参数。
我曾经调试一个PLC和变频器的通信,数据时通时断。折腾了两小时,最后发现是RS485的A/B线接反了。嗯,这种低级错误,谁都会犯。但犯过一次,你就记住了。
1.8 小结
串口通信的参数,说白了就是五个东西:标准、波特率、数据位、停止位、校验位。它们必须完全一致,通信才能正常。
我建议你,每次调试串口设备前,先列个表,把两端的参数写出来,逐项核对。别嫌麻烦,这能省你半天时间。
下一章,咱们聊聊串口通信的硬件接线和常见故障排查。到时候我会分享几个我亲手踩过的坑,保证让你少走弯路。