1. 首页
  2. 物联网相关
  3. ModBus TCP在PLC工业通信中的实现与应用(STEP 7环境)

ModBus TCP在PLC工业通信中的实现与应用(STEP 7环境)

  • 发布于 2025-04-15
  • 40 次阅读

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)
    
    - 请求地址


核心参数说明

客户端模式

参数

数据类型

说明

Req

BOOL

请求触发位(TRUE=发起请求,FALSE=无动作)

Connect

BOOL

连接控制位(TRUE=建立连接,FALSE=断开连接)

IPAddr1-4

BYTE

服务器 IP 地址的四段字节(如 192.168.1.10 需拆分为四个 BYTE 参数)

IP_Port

WORD

通讯端口(工业标准默认 502)

RW

BYTE

读写标志(0=读取,1=写入)

Addr

DWORD

Modbus 起始地址(需注意地址映射规则)

Count

INT

数据长度限制:<br>• 位操作:最大 1920 位<br>• 寄存器操作:最大 120 字

DataPtr

DWORD

数据缓冲区指针(需指向有效的 V 存储区)

Done

BOOL

状态标志位(包含连接建立/断开、数据收发完成等复合状态)

Error

WORD

错误代码(建议配合错误码表解析)

服务器模式

参数

数据类型

说明

Connect

BOOL

连接控制<br>TRUE:开启监听模式<br>FALSE:断开现有连接

IP_Port

WORD

通讯端口<br>默认 502(Modbus TCP 标准端口)

MaxIQ

WORD

数字量范围<br>0-256(0=禁用所有 IO)

MaxAI

WORD

模拟量输入<br>0-56(0=禁用 AI)<br>CR40/60 CPU 需设为 0

MaxHold

WORD

保持寄存器数量<br>例:1000 字=2000 字节 V 存储区

HoldStart

DWORD

寄存器起始地址<br>通常设为&VB0

Done

BOOL

状态指示<br>TRUE=连接/断连/操作完成

Error

BYTE

错误代码<br>仅错误周期有效

库存储器配置

在 PLC 程序中调用 ModBus TCP 功能块 时,必须预先分配 库存储器地址,以确保功能块正常运行。

配置步骤

  1. 右键点击 程序块

  2. 库存储器 分配​

  3. 选择需要设置地址的指令库

  4. 推荐使用 建议地址​ 自动生成

  5. 如需自定义,需确保地址不与其他功能冲突

注意事项:
1.未分
配库存储器将导致 ModBus 通信功能异常。
2.手动设定时,建议参考 PLC 存储区占用情况,防止数据覆盖。

​​Modbus 地址设置(客户端)

Modbus 地址设置前必须完成库存储器分配,否则无法正确设置 Modbus 地址。并且仅适用于客户端模式。

  1. 路径 符号表 → Modbus TCP Client → mModBusUnitID​ 找到 mModBusUnitID​ ​的地址,对该地址写入 ModBus 地址。 ​

​ 如 mModBusUnitID​ ​地址为:VB1653: ​

赋值规则:
  单设备通讯:通常设为 1
  多设备网络:需与从站设备 ID 一致

应用案例:PLC 控制分布式 IO

PLC 连接两个开关,一个自锁开关以及一个点动开关,通过点击自锁开关,控制 PLC 尝试通过 ModBus TCP 协议连接分布式 IO,通过点击点动开关实现对分布时 IO 的 DO 接口状态进行反转。

系统组成

设备

型号

角色

主控 PLC

S7-200 SMART

客户端

分布式 IO 模块

M31-AXAX8080G

服务器

人机接口

自锁开关 + 电动开关 +LED 指示灯

控制以及状态指示

原理图

主站配置(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状态

软件监控