『7x24小时有问必答』
1台西门子S7-1200作为 Modbus TCP 客户端(Client)
3台西门子S7-1200作为 Modbus TCP 服务器(Server)
即:1个主站轮询3个从站,这是工业现场非常典型的“集中采集”架构。下面将从硬件要求、软件配置、编程步骤、通信逻辑、注意事项等方面,为你提供一份完整、可落地的S7-1200 Modbus TCP多服务器通信详解。

一、系统架构概览

1.png

Client 主动轮询 3 台 Server
每台 Server 提供自己的数据(如传感器值、状态等)
所有 PLC 接入同一局域网(建议使用交换机)

---

二、前提条件

2.png

三、IP 地址规划(示例)

设备
角色
IP 地址
PLC-Client
Client
192.168.1.10
PLC-Server1
Server
192.168.1.11
PLC-Server2
Server
192.168.1.12
PLC-Server3
Server
192.168.1.13
确保 IP 不冲突,且能互相 ping 通。

---

四、Server 端配置(3台相同,以 Server1 为例)

1. 创建标准 DB(非优化)

新建 DB 块(如  DB_Server1_Data
属性 → 取消勾选  “优化的块访问”
定义变量(如  Temp : REAL; Status : WORD;

2. 调用  MB_SERVER  指令

在 OB1 或专用 FB 中插入:
3.png

MB_HOLD_REG
  指向你的标准 DB 起始地址
此 DB 内容将映射为 Modbus  保持寄存器(40001 起)
例如:DBW0 → 40001,DBW2 → 40002,DBD0 → 40001~40002(占2个寄存器)

3. 启用 Modbus TCP Server(TIA Portal

在项目树中右键 CPU → “属性”
左侧选择  “Modbus TCP”
勾选  “启用 Modbus TCP Server”
设置最大连接数(至少 1,建议 3 以留余量)
注意:S7-1200 最多支持  8 个 Modbus TCP 连接(Client + Server 总和),此处每台 Server 只需 1 个连接。

4. 下载程序到 Server1~3

---

五、Client 端配置(核心部分)

Client 需要  依次连接并读取 3 台 Server。由于  MB_CLIENT  是  单连接指令,不能同时连接多个 Server,因此需  分时轮询

1. 创建连接参数结构(TCON)

为每台 Server 创建一个  TCON_IP_v4  类型的连接描述(放在一个 DB 中):
// DB_Client_Config (标准DB)

Server1_Conn : TCON_IP_v4;

Server2_Conn : TCON_IP_v4;

Server3_Conn : TCON_IP_v4;

初始化值(可在“PLC 变量”中设置或在启动 OB 中赋值):
// Server1

Server1_Conn.REMOTE_PORT := 502;

Server1_Conn.REMOTE_ADDR := '192.168.1.11';

Server1_Conn.LOCAL_PORT   := 0; // 自动分配

Server1_Conn.ADDRESS_TYPE := 1601; // IPv4

// Server2

Server2_Conn.REMOTE_PORT := 502;

Server2_Conn.REMOTE_ADDR := '192.168.1.12';

...

// Server3 同理

2. 创建数据接收区(标准 DB)

// DB_Recv_Buffer (标准DB)

DataFromSvr1 : ARRAY[0..19] OF WORD; // 20 words = 40 bytes

DataFromSvr2 : ARRAY[0..19] OF WORD;

DataFromSvr3 : ARRAY[0..19] OF WORD;

3. 编写轮询状态机(关键!)

使用一个  状态变量(Step)  控制轮询顺序:
4.png

在 OB1 中实现轮询逻辑(LAD/FBD/SCL 均可,以下为 SCL 伪代码):
5.png
6.png

  技巧:可加入超时判断(如 2 秒未响应则跳过),避免卡死。

4. 使用 TSEND_C / TRCV_C?不!这里用 MB_CLIENT

注意:Modbus TCP 必须使用  MB_CLIENT  和  MB_SERVER  指令,不能用通用 TCP 指令(除非自己封装 Modbus 报文,不推荐)。

---

六、地址映射说明(重要!)

Modbus 地址(设备文档)
S7-1200 中  MB_DATA_ADDR
40001
0
40002
1
40100
99
  规则:Modbus 地址减 1 即为程序中的地址值

---

七、常见问题与排查

7.png

八、性能建议

轮询周期建议 ≥ 100ms/台(3台共 300ms+)
每次读取数据量不宜过大(≤ 120 字节较安全)
可为每台 Server 设置独立的错误计数器,连续失败 N 次后报警

---

九、扩展建议

若需  写数据到 Server,设置  MB_MODE := 4(写多个寄存器),并准备发送缓冲区
可将轮询逻辑封装为  FB 函数块,传入不同连接参数,提高复用性
使用  HMI 或 SCADA  时,也可让 HMI 作为 Client 直接读取各 Server,减轻主 PLC 负担

---

十、总结

  S7-1200 作为 Modbus TCP Client 轮询多台 Server 完全可行

关键在于:分时轮询 + 标准DB + 正确地址映射 + 状态机控制

避免同时激活多个  MB_CLIENT  实例(会冲突)

---

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码