第二讲:串口通信基础——RS232/RS485物理层、数据帧格式、波特率与校验位
各位同学,咱们今天聊串口通信。说实话,这玩意儿在工业现场太常见了。我做了十几年PLC,跟串口打交道的次数,比跟老婆说话的次数还多(开个玩笑)。但你别看它老,它可靠啊。很多老工程师,包括我,对串口都有一种特殊的感情。
这一讲,咱们把RS232、RS485的物理层、数据帧格式、波特率和校验位这几个核心概念掰开揉碎了讲。你把这些搞懂了,以后调试串口设备,心里就有底了。
一、RS232与RS485:物理层的那些事儿
先说说RS232。这玩意儿是早期PC的标准配置,9针串口,你肯定见过。它的传输距离,说实话,不太行。我实测过,稳定通信也就15米左右,再远信号就衰减得厉害。而且它是全双工的,能同时收发,但电平是±12V,跟现在主流的3.3V/5V逻辑电平不兼容,所以现在新设备上越来越少见了。
那RS485呢?它才是工业现场的主角。为什么?因为它能跑远,1200米没问题。而且它是差分信号传输,抗干扰能力强。你想想看,工厂里电机一启动,电磁干扰满天飞,RS232早挂了,RS485还能稳稳地传数据。我有个项目,在钢厂里做数据采集,现场温度高、干扰大,最后全靠RS485扛下来的。
还有个关键点:RS485是半双工的。什么意思?就是同一时刻只能发或者只能收,不能同时干。这跟RS232不一样。很多新手在这里栽跟头,写程序时忘了切换收发状态,结果数据发不出去也收不回来。
核心区别速记:
- RS232:点对点,全双工,距离短(15米),电平高(±12V)
- RS485:多点(最多32个节点),半双工,距离长(1200米),差分信号
二、数据帧格式:一个字节是怎么传出去的?
好,物理层搞定了,咱们看看数据是怎么打包的。串口通信里,一个数据帧通常包含这么几部分:起始位、数据位、校验位、停止位。
我习惯用8位数据位、无校验、1位停止位,也就是常说的8N1。这是最常用的格式,兼容性最好。但有些老设备,比如一些温控仪表,它可能用7位数据位加偶校验。这时候你就要小心了,配置不对,通信就失败。
举个例子,你发一个字节0x55(二进制01010101),在8N1格式下,它实际在线上是这样的:
起始位(0) + 数据位(01010101) + 停止位(1)
实际波形:0 01010101 1
注意,数据位是低位在前。也就是说,你先发最低位,再发最高位。这个顺序别搞反了,否则数据全错。
我的小技巧:调试时用示波器看波形,数一下起始位和停止位,就能判断出数据格式对不对。我曾经靠这招,半小时就找到了一个通信不稳定的原因——原来是停止位设成了2位,而设备只支持1位。
三、波特率:通信的节奏
波特率,说白了就是每秒传多少个bit。9600、19200、115200,这些是常见值。波特率越高,传得越快,但距离越短,抗干扰能力也越差。
我建议,在工业现场,能用9600就别用115200。为什么?稳定啊。你想想看,现场干扰那么多,高速传输很容易出错。我有个项目,一开始用了115200,结果数据经常丢包,后来降到9600,稳如老狗。
还有一点,通信双方的波特率必须一致,误差不能超过±2%。否则就会出现数据错位。我曾经遇到过一台国产仪表,标称9600,实际测出来是9650,跟PLC对不上,折腾了半天才发现是仪表晶振不准。
| 波特率 | 每字节传输时间(8N1) | 适用场景 |
|---|---|---|
| 9600 | 约1.04ms | 工业现场,长距离,高可靠性 |
| 19200 | 约0.52ms | 一般工业应用 |
| 115200 | 约0.087ms | 短距离,高速调试 |
四、校验位:数据对不对?
校验位是用来检查数据在传输过程中有没有出错的。常见的有无校验、奇校验、偶校验。
无校验,就是不加校验位,数据帧最短,效率最高。但可靠性最低。奇校验,就是让数据位加上校验位里1的个数为奇数。偶校验,就是让1的个数为偶数。
说实话,奇偶校验只能检测奇数个bit的错误,如果两个bit同时出错,它就检测不出来了。所以它只能算是一种简单的检错手段。在要求高的场合,比如Modbus RTU,人家用的是CRC校验,那才叫可靠。
避坑指南:我曾经在一个项目里,用了偶校验,但设备说明书上写的是奇校验。结果通信时好时坏,查了两天才发现是校验位配反了。所以,拿到新设备,第一件事就是确认它的通信参数,别想当然。
五、实战经验:串口调试的几点忠告
好了,理论讲完了,我分享几点实战经验:
- 先确认物理连接。 用万用表量一下A、B线(RS485)或者TX、RX(RS232)有没有电压。没电压,多半是线断了或者设备没供电。
- 用串口助手先测。 别一上来就写PLC程序。用电脑串口助手发几个字节,看设备有没有回应。能回应,说明通信参数基本对了。
- 注意终端电阻。 RS485在长距离或高速时,需要在总线两端加120欧姆的终端电阻,否则信号反射会导致数据错误。我见过有人不加电阻,通信距离一超过100米就乱码。
- 接地很重要。 特别是RS232,地线不接,通信可能不稳定。RS485虽然抗干扰强,但最好也把屏蔽层单端接地。
嗯,这一讲就到这里。串口通信看似简单,但细节很多。你把这些基础打牢了,后面学Modbus、Profibus这些协议,就会轻松很多。下一讲,咱们聊聊Modbus RTU协议,那可是工业通信的常青树。