前言
Modbus是工控领域最常用的通信协议之一。本文详细讲解Modbus RTU和Modbus TCP的配置方法,以西门子S7-200 SMART为例进行实例演示。
一、Modbus协议基础
Modbus RTU
- 物理层:RS485/RS232
- 数据格式:8位数据位,1/2位停止位,奇偶校验
- 传输速率:9600/19200/38400/115200 bps
Modbus TCP
- 物理层:以太网
- 端口号:502
- 特点:支持多客户端连接
二、Modbus功能码
| 功能码 | 名称 | 说明 |
|---|---|---|
| 01 | 读线圈 | 读取输出状态 |
| 03 | 读保持寄存器 | 读取模拟量数据 |
| 05 | 写单个线圈 | 控制输出 |
| 06 | 写单个寄存器 | 设置参数 |
| 16 | 写多个寄存器 | 批量写入 |
三、S7-200 SMART Modbus RTU配置
// S7-200 SMART Modbus库指令// 初始化Modbus主站CALL MBUS_CTRL, // 指令 Mode:=1, // 1=Modbus RTU Baud:=19200, // 波特率 Parity:=2, // 0=无, 1=奇, 2=偶 Port:=1, // CPU本体端口 Timeout:=1000 // 超时时间ms// 读取从站数据CALL MBUS_MSG, // 指令 Addr:=1, // 从站地址(1-247) Mode:=0, // 0=读, 1=写 DataAddr:=0, // 寄存器地址 Count:=10, // 寄存器数量 DataPtr:=&VB100 // 数据存放区
四、三菱FX5U Modbus TCP配置
// GX Works3 配置步骤1. 创建工程,选择FX5U CPU2. 模块参数 → 以太网端口 → 对象设备连接配置3. 选择"SLMP连接"或"Modbus TCP"4. 程序中编写通信指令:// 连接从站M8411 := TRUE; // Modbus TCP模式// 读取保持寄存器(功能码03)FROM K0 K0 D0 K4; // 从Modbus设备读4个字// 写入保持寄存器(功能码06)TO K0 K10 D100 K1; // 写1个字到Modbus设备
五、常见问题与解决
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 通信超时 | 参数不一致 | 检查波特率、数据位、校验位 |
| 数据错误 | 字节序问题 | 检查高地位顺序 |
| 频繁掉线 | 干扰或接地不良 | 检查屏蔽层接地 |
六、调试工具推荐
- Modbus Poll:Modbus主站仿真工具
- Modbus Slave:Modbus从站仿真工具
- Wireshark:网络抓包分析(Modbus TCP)
七、实战案例:PLC读取变频器参数
// 目标:读取三菱E720变频器输出频率// 变频器Modbus参数:// 从站地址: 1// 频率寄存器地址: 0001H (40002)// 电流寄存器地址: 0003H (40004)// PLC程序MB_MSG(Addr:=1, // 变频器地址 RW:=0, // 读操作 Addr:=1, // 寄存器地址1 Count:=2, // 读2个寄存器 DataPtr:=&VD1000); // 存放地址// 转换频率值VD1004 := VD1000 * 0.01; // 实际频率Hz
关注【一路福利】,获取Modbus通信完整教程和实例源码!