PLC(可编程逻辑控制器)作为工业自动化核心设备,其通信能力直接影响系统集成水平。当前主流PLC产品(西门子S7系列、三菱Q系列、罗克韦尔ControlLogix等)均原生支持ModBus TCP/RTU协议。该协议凭借开放性架构、强兼容性和低成本优势,已成为工业领域应用最广泛的通信标准。
协议特性
通信架构:主从式结构(Master/Slave)
传输模式:
RTU模式:基于RS-232/485物理层
TCP模式:通过TCP/IP封装ModBus帧
技术优势:实现工业设备与企业信息系统的无缝集成
ModBus TCP 通讯要点
1. 设备角色(主站/从站)
ModBus TCP 采用主从通信架构,其中:
主站(Master) :主动发起通信请求,通常是 PLC、SCADA 系统或上位机(如 PC 或 HMI)。
从站(Slave) :被动响应主站的请求,通常是传感器、变频器、智能仪表或其他 PLC。 每个从站必须具有唯一的设备地址(1-247) ,以便主站能够正确寻址。
2. IP 地址与端口号
ModBus TCP 基于标准以太网(TCP/IP),因此需要以下网络参数:
IP 地址:每个 ModBus TCP 设备(主站和从站)必须配置唯一的 IP 地址,确保网络层可达。
端口号:ModBus TCP 默认使用 502 端口(IANA 标准),但某些设备允许自定义端口号以适应特殊网络环境。
功能码决定了 ModBus TCP 的操作类型,常见功能码包括:
01(0x01) :读取线圈状态(DO/继电器输出)
02(0x02) :读取离散输入(DI)
03(0x03) :读取保持寄存器(如 PLC 的 D、V 存储区)
04(0x04) :读取输入寄存器(AI 模拟量输入)
05(0x05) :写单个线圈(控制 DO)
06(0x06) :写单个寄存器(修改单个存储值)
15(0x0F) :写多个线圈 16(0x10) :写多个寄存器
PLC 程序块初始化配置
添加 ModBus 功能块
在 STEP 7 开发环境中,通过以下路径添加 ModBus 功能块
[指令] → [库] → Modbus TCP库
关键选择:
1.服务器模式:适用于 PLC 作为数据提供方
2.客户端模式(需额外配置):
- TCP/IP 地址(四段式)
- 端口号(默认 502)
- 请求地址
核心参数说明
客户端模式
服务器模式
库存储器配置
在 PLC 程序中调用 ModBus TCP 功能块 时,必须预先分配 库存储器地址,以确保功能块正常运行。
配置步骤
右键点击
程序块
选
库存储器
分配选择需要设置地址的指令库
推荐使用
建议地址
自动生成如需自定义,需确保地址不与其他功能冲突
注意事项:
1.未分配库存储器
将导致 ModBus 通信功能异常。
2.手动设定时,建议参考 PLC 存储区占用情况,防止数据覆盖。
Modbus 地址设置(客户端)
Modbus 地址设置前必须完成库存储器分配,否则无法正确设置 Modbus 地址。并且仅适用于客户端模式。
路径
符号表 → Modbus TCP Client → mModBusUnitID
找到mModBusUnitID
的地址,对该地址写入 ModBus 地址。
如 mModBusUnitID 地址为:VB1653:
赋值规则:
单设备通讯:通常设为 1
多设备网络:需与从站设备 ID 一致
应用案例:PLC 控制分布式 IO
PLC 连接两个开关,一个自锁开关以及一个点动开关,通过点击自锁开关,控制 PLC 尝试通过 ModBus TCP 协议连接分布式 IO,通过点击点动开关实现对分布时 IO 的 DO 接口状态进行反转。
系统组成
原理图
主站配置(IO设备)
设置 M31-AXAX8080G 为 Modbus TCP 服务器模式
记录关键参数:
• IP 地址:10.100.165.100
• 端口:502
• 站号:1
PLC 初始化配置(根据需要设置)
需要确保 PLC 与分布式 IO 能够正常通讯,需要确保两个设备在同样的网路环境中。
对 PLC 进行网络设置。在 STEP 7 软件中找到 CPU ST20,确认模块信息以及版本和需要连接的 PLC 是否一致。
对 PLC 进行网络信息设置
PLC 设置 ModBus TCP 指令块
在 [指令] → [库] → Modbus TCP Client
中添加指令块
对指令块进行初始化。并根据需求设置两个开关进行控制,自锁按钮按下后尝试连接分布式 IO,点动按钮按下后发送指令。
ModBus TCP 服务器地址 : 10.100.165.100
ModBus TCP 服务器端口 : 502
RW(工作模式) : 1 (写入)
Addr(ModBus 起始地址) :1
Count(数据长度):16
DataPtr(发送/接受数据存入 VB100):&VB100(注意地址不要冲突)
Done(状态标志位写入 V0.1):V0.1
Error(错误信息存入 VB1):VB1
PLC 库存储器初始化
右键 程序块
选择 库存储器分配
进行配置
选择添加的 ModBus TCP Client
库,进行地址设置。可以自行设置,推荐使用 建议地址
防止地址冲突
设置 ModBus 地址
在 符号表 → Modbus TCP Client
中找到 mModBusUnitID
的地址
随后将 ModBus 地址写入 mModBusUnitID 的地址
编写控制程序
根据需求,编写一个简单的控制程序,实现检测输入 I0.1
的状态,从而改变 DataPtr
的值(暂存在 VB100
)。
编写完成后下载程序到 PLC 运行
整体程序
效果展示
自锁开关控制连接
点动开关控制分布式IO状态
软件监控