1. Modbus通讯基础回顾:RS-485物理层特性、Modbus RTU/ASCII协议帧格式、主从站通讯机制

各位工程师朋友,咱们开始第一讲。做现场总线这么多年,我见过太多通讯问题,最后追根溯源,都是基础没打牢。Modbus这东西,看着简单,但坑不少。今天咱们就把地基夯实。

1.1 RS-485物理层特性

RS-485是Modbus最常用的物理层。说白了,它就是一对差分信号线,A和B。为什么用差分?抗干扰能力强啊。你想想看,干扰信号同时作用在两根线上,一减就没了。

关键参数我列一下:

参数 典型值 说明
传输距离 1200米(理论) 实际建议800米以内
节点数 32个(标准) 加中继可扩展
共模电压 -7V ~ +12V 超过这个范围会损坏芯片
终端电阻 120Ω 线缆特性阻抗匹配

避坑指南:我曾经在一个项目里,现场距离也就300米,但通讯就是断断续续。查了半天,发现终端电阻没加。你想想看,信号跑到末端反射回来,跟后面的信号叠加,不乱才怪。所以,长线通讯,终端电阻必须加。

RS-485还有个特点,半双工。同一时间只能一个设备发,其他设备收。这个特性决定了Modbus的主从机制。

1.2 Modbus RTU/ASCII协议帧格式

Modbus有两种帧格式:RTU和ASCII。我个人习惯用RTU,效率高。ASCII主要是给那些只能处理ASCII字符的老设备用的。

RTU帧格式:

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

举个例子,读取从站地址为1的设备的保持寄存器,起始地址0,读取2个寄存器:

发送:01 03 00 00 00 02 C4 0B
接收:01 03 04 00 0A 00 14 XX XX

这里01是地址,03是功能码(读保持寄存器),00 00是起始地址,00 02是寄存器数量。C4 0B是CRC校验。

小技巧:CRC校验很多人觉得麻烦,其实有现成的计算工具。但我建议你理解一下原理,因为有时候CRC算不对,通讯就是不通。我遇到过好几次,设备手册上写的CRC算法跟标准不一样,折腾半天才发现。

ASCII帧格式:

| 起始符 | 地址码 | 功能码 | 数据区 | LRC校验 | 结束符 |
| :      | 2字符  | 2字符  | N字符  | 2字符   | CR/LF  |

ASCII帧用LRC校验,比CRC简单,但效率低。同样的命令,ASCII帧长度是RTU的两倍。

1.3 主从站通讯机制

Modbus是典型的主从架构。一个主站,多个从站。主站发起请求,从站响应。从站之间不能直接通讯。

通讯流程:

  1. 主站发送请求帧,包含目标从站地址
  2. 所有从站都收到这个帧,但只有地址匹配的那个才处理
  3. 从站执行命令,然后返回响应帧
  4. 主站收到响应,解析数据

注意:如果从站没响应,主站会超时重发。这个超时时间设置很关键。设太短,从站还没处理完就重发,造成总线冲突。设太长,系统响应慢。我一般设500ms,根据现场情况调整。

主站轮询周期怎么算?举个例子,你有10个从站,每个从站响应时间50ms,加上主站处理时间20ms,那一个周期就是:

总周期 = (50ms + 20ms) × 10 = 700ms

嗯,这里要注意,实际还要加上线路延迟和干扰重发的时间。我建议留30%的余量。

广播机制:地址0是广播地址,所有从站都会执行,但不返回响应。这个功能我用的不多,因为没法确认从站是否执行成功。

个人经验:有一次在钢厂调试,现场电磁环境极差。Modbus通讯时不时就丢包。我后来把每个从站的响应超时从200ms改到800ms,重试次数从3次改到5次,问题就解决了。虽然响应慢了点,但至少通讯稳定了。有时候,稳定比速度更重要。

好了,第一讲就到这里。基础打牢了,后面讲干扰分析和抗干扰策略,你才能理解为什么那么做。下一讲,咱们聊聊现场常见的干扰源。