Modbus是工业通讯里最基础的协议,不会Modbus都不好意思说自己做过PLC项目。今天从原理到实战一次性讲完。
一、Modbus是什么?
Modbus是1979年发明的通讯协议,几乎成了工业设备的”普通话”。不管什么品牌的设备,基本都支持Modbus。
三种模式:
- Modbus RTU:串口通讯(RS485),最常用
- Modbus TCP:以太网通讯,速度快
- Modbus ASCII:老式串口,基本淘汰
二、Modbus核心概念
主从架构
- 主站(Master):发起通讯
- 从站(Slave):响应请求
- 1个主站最多带247个从站
功能码
| 功能码 | 含义 | 操作对象 |
|---|---|---|
| 01 | 读线圈 | 位(0x) |
| 03 | 读保持寄存器 | 字(4x) |
| 05 | 写单个线圈 | 位 |
| 06 | 写单个寄存器 | 字 |
| 15 | 写多个线圈 | 位 |
| 16 | 写多个寄存器 | 字 |
最常用的是03和06,记住这两个就能应付80%的场景。
寄存器地址
| 区域 | 地址范围 | 读写 | 说明 |
|---|---|---|---|
| 0x | 00001-09999 | 读写 | 线圈(输出) |
| 1x | 10001-19999 | 只读 | 离散输入 |
| 3x | 30001-39999 | 只读 | 输入寄存器 |
| 4x | 40001-49999 | 读写 | 保持寄存器 |
三、西门子S7-1200做Modbus TCP通讯
硬件组态
- CPU 1215C + 以太网口
- 分配IP地址:192.168.0.1
编程步骤
Step 1:添加Modbus指令
在TIA Portal中,从指令库拖出MB_CLIENT和MB_SERVER
Step 2:配置主站参数
// MB_CLIENT配置REQ := TRUE// 触发请求DISC := FALSE// 不断开CONNECT_ID :=1// 连接IDIP_OCT1 :=192// 从站IPIP_OCT2 :=168IP_OCT3 :=0IP_OCT4 :=2IP_PORT :=502// Modbus端口MB_MODE :=0// 读写模式MB_DATA_ADDR :=0// 起始地址MB_DATA_LEN :=10// 读取长度
Step 3:数据映射
读取的从站数据存入DB块,在HMI上直接引用即可。
四、调试技巧
- 先用Modbus Poll/Slave软件测试——确认通讯参数正确再接实际设备
- 波特率/站号必须一致——90%的通讯故障都是参数不对
- 接线注意A/B——RS485的A和B不能反
- 终端电阻——长距离通讯必须加120Ω终端电阻
五、常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| 通讯超时 | IP/端口错误 | 检查参数 |
| 数据错乱 | 字节序问题 | 交换高低字 |
| 从站无响应 | 站号不对 | 核对从站地址 |
| 偶尔断线 | 接线松动 | 焊接或压紧 |
Modbus是PLC通讯的敲门砖,学会了再学Profinet、EtherCAT等高级协议就容易多了。