第二讲:物理层与传输模式

RS-232、RS-485、TCP/IP,再加上RTU与ASCII模式——这些名词你肯定不陌生。但说实话,真正把它们搞明白的人,我见过的不多。

这一讲,我们就来把这些基础但关键的东西理清楚。

一、物理层:三种最常见的接口

物理层决定了数据怎么在线上跑。我调试过的设备里,90%以上就这三种:RS-232、RS-485、TCP/IP。

1. RS-232:老当益壮的点对点

RS-232是最早的串行通信标准之一。它的特点是:

  • 单端传输:用一根信号线对地传输,电压范围±3V到±15V
  • 点对点:只能接一个发送端和一个接收端
  • 距离短:理论最大15米,实际我一般控制在10米以内
  • 速率低:通常9600bps到115200bps
我的经验:RS-232在PLC编程口、老式仪表上很常见。我曾经在一条生产线上遇到RS-232通信时好时坏,最后发现是线太长(接近20米),换成RS-485就稳了。

2. RS-485:工业现场的主力军

RS-485是目前工业Modbus最常用的物理层。它为什么这么受欢迎?

  • 差分传输:用两根线(A、B)传输,抗干扰能力强
  • 多节点:一条总线上最多挂32个节点(加中继器可以更多)
  • 距离远:1200米没问题,我见过有人跑到1500米还能用
  • 速率适中:距离越远速率越低,1000米时一般用9600bps
注意:RS-485总线两端必须加120Ω终端电阻。我曾经调试一个项目,通信总是不稳定,查了半天发现是终端电阻没加。加上之后,问题立刻消失。

3. TCP/IP:现代工业的标配

随着工业以太网的普及,Modbus TCP/IP越来越常见。它的优势很明显:

  • 高速:100Mbps甚至1Gbps
  • 长距离:通过交换机可以覆盖整个工厂
  • 易集成:直接走标准以太网,IT部门也熟悉
  • 无校验:TCP/IP本身有校验,Modbus TCP不再额外加校验码

嗯,这里要注意:Modbus TCP的端口号是502,很多防火墙默认会封掉这个端口。我遇到过好几次,设备连不上,最后发现是IT把502端口给禁了。

二、传输模式:RTU与ASCII

物理层定了,接下来就是数据怎么编码。Modbus有两种传输模式:RTU和ASCII。

1. RTU模式(远程终端单元)

RTU是工业现场最常用的模式。它的特点:

  • 二进制编码:每个字节直接发送,效率高
  • CRC校验:16位循环冗余校验,可靠性高
  • 连续传输:帧与帧之间必须有3.5个字符以上的空闲时间

举个例子,读取保持寄存器(功能码03)的RTU报文:

请求:01 03 00 00 00 01 84 0A
响应:01 03 02 00 01 79 84

你看,01是设备地址,03是功能码,00 00是起始地址,00 01是读取数量,84 0A是CRC校验。响应里的02表示数据长度2字节,00 01是数据值,79 84是CRC。

核心要点:RTU模式的数据密度高,同样的波特率下,RTU比ASCII快一倍左右。我个人的习惯是,只要设备支持,优先用RTU。

2. ASCII模式(美国信息交换标准码)

ASCII模式把每个字节拆成两个ASCII字符发送。比如0x1A就发送字符'1'和'A'。

  • 可读性强:报文可以直接用串口助手看
  • LRC校验:纵向冗余校验,比CRC简单但可靠性稍低
  • 帧头帧尾:以冒号':'开头,回车换行结尾

同样的读取操作,ASCII报文长这样:

请求::010300000001F1\r\n
响应::0103020001FA\r\n

你想想看,同样的数据,ASCII模式要多发一倍的字节。所以除非调试需要,我一般不用ASCII。

什么时候用ASCII?我只有在两种情况下用ASCII:一是设备只支持ASCII(比如某些老式仪表),二是调试阶段想直接看报文内容。生产环境一律用RTU。

三、RTU与ASCII的对比

为了让你看得更清楚,我整理了一个对比表:

对比项 RTU模式 ASCII模式
编码方式 二进制 ASCII字符
数据效率 高(1字节=1字节) 低(1字节=2字符)
校验方式 CRC-16 LRC
帧间隔 3.5字符时间 1秒
可读性
适用场景 工业现场 调试、老设备

四、避坑指南

做Modbus调试这么多年,我踩过不少坑。分享几个最常见的:

  • 波特率不匹配:我曾经调试一个项目,设备怎么都连不上,最后发现是波特率设成了19200,而设备实际是9600。嗯,这种低级错误最容易犯。
  • RS-485的A/B线接反:A接B,B接A,通信肯定不行。我习惯用万用表量一下,A线对地电压比B线高0.2V左右就对了。
  • 终端电阻忘加:前面说过,总线两端必须加120Ω电阻。不加的话,长距离通信容易出问题。
  • RTU和ASCII混用:主站设成RTU,从站设成ASCII,那肯定对不上。我见过有人调试半天,最后发现是模式没统一。
特别提醒:如果你用USB转RS-485的转换器,一定要买质量好的。我吃过亏,便宜的转换器丢包率很高,调试时根本查不出来。

五、小结

这一讲我们聊了物理层和传输模式。说白了,RS-232适合短距离点对点,RS-485是工业现场的主力,TCP/IP是现代工厂的趋势。传输模式上,RTU效率高、可靠性好,是首选;ASCII只在调试或兼容老设备时用。

下一讲,我们会深入Modbus的报文结构,看看请求和响应到底长什么样。到时候我会用实际项目中的报文来讲解,保证你一看就懂。