1979年Modicon公司(现施耐德电气)开发Modbus协议,用于PLC通信1996年施耐德推出基于TCP/IP的Modbus TCP协议至今成为工业领域最广泛使用的通信协议之一
Modbus协议家族主要包括三种类型:
Modbus ASCII - 基于串行通信,ASCII编码
Modbus RTU - 基于串行通信,二进制编码(最常用)
Modbus TCP - 基于以太网TCP/IP(本文重点)
一、Modbus TCP协议概述
二、S7-1500通信角色
S7-1500可配置为两种角色:
1. MB_CLIENT(客户端/主站)
主动发起读写请求
通常用于PLC读取第三方设备数据
使用 MB_CLIENT 指令
2. MB_SERVER(服务器/从站)
被动响应客户端请求
通常用于PLC作为数据源供其他设备读取
使用 MB_SERVER 指令
---
三、软硬件要求
四、核心指令详解
1. MB_CLIENT 指令参数
2. MB_SERVER 指令参数
参数 | 数据类型 | 说明 |
| CONNECT | Pointer | 连接参数 |
| MB_HOLD_REG | Pointer | 保持寄存器数据区 |
| MB_COIL | Pointer | 线圈数据区 |
| DISC_INPUT | Pointer | 离散输入数据区 |
| INPUT_REG | Pointer | 输入寄存器数据区 |
| ERROR | Bool | 错误标志 |
| STATUS | Word | 状态代码 |
---
五、配置步骤(以Client为例)
步骤1:创建项目并组态硬件
1. 打开TIA Portal,创建新项目2. 添加S7-1500 CPU(如CPU 1511-1PN)3. 配置PROFINET接口IP地址和子网掩码4. 编译并下载硬件组态步骤2:配置TCON_IP_v4连接参数
在全局DB块中创建TCON_IP_v4结构体:
步骤3:调用MB_CLIENT指令
步骤4:多设备轮询实现
对于多台从站设备,采用时间轮询逻辑:
---
六、关键参数设置说明
CONNECT参数重点
参数项 | Client设置 | Server设置 |
| active | TRUE | TRUE |
| remote_port | 从站端口(502) | 0 |
| local_port | 0 | 502 |
| interface_id | 根据硬件标识符设置 | 根据硬件标识符设置 |
MB_MODE功能码对照
功能码 | 说明 | MB_MODE值 |
01 | 读线圈 | 1 |
02 | 读离散输入 | 2 |
03 | 读保持寄存器 | 3 |
04 | 读输入寄存器 | 4 |
05 | 写单线圈 | 5 |
06 | 写单寄存器 | 6 |
15 | 写多线圈 | 15 |
16 | 写多寄存器 | 16 |
---
七、常见问题与解决方案
问题 | 可能原因 | 解决方案 |
| 通信失败 | IP地址错误/端口不对 | 检查双方IP和端口配置 |
| 连接超时 | 网络不通/防火墙 | 检查网络连接,关闭防火墙 |
| 数据错位 | DB块优化访问启用 | 取消DB块"优化访问"选项 |
| 指令不执行 | REQ无上升沿 | 确保REQ有持续脉冲触发 |
| STATUS错误码 | 参见诊断手册 | 查STATUS代码对应错误原因 |
| 多从站冲突 | 同时请求 | 采用轮询机制,避免并发 |
---
八、最佳实践建议
每个MB_CLIENT实例需独立背景DB块MB_UNIT_ID参数需根据从站设备ID修改(默认255)采用时间轮询控制REQ引脚,实现周期性数据读写DB块取消"优化访问",确保地址固定添加通信状态监控和故障诊断合理设置超时时间,避免长时间等待---
九、典型应用架构
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!