『7x24小时有问必答』
一、通信概述
昆仑通态(MCGS)触摸屏支持Modbus TCP 协议,可与 S7-1200 PLC 进行通信。在此场景中,通常S7-1200 作为 Modbus TCP 服务器(从站),昆仑通态作为Modbus TCP 客户端(主站)

1.1 通信架构

1.png

1.2 两种通信方案对比

方案
协议
S7-1200 角色
昆仑通态角色
优势
方案一(推荐)
以太网 S7
S7 服务器
S7 客户端
直接访问 PLC 变量,无需额外编程
方案二
Modbus TCP
Modbus 从站
Modbus 主站
通用性强,兼容多品牌设备

1.3 通信特点

特性
说明
通信类型
Modbus TCP(基于 TCP/IP)
功能码
01/02/03/04/05/06/15/16
传输距离
标准 100 米(可扩展)
通信周期
100ms ~ 1s 可调
端口号
默认 502
连接数
S7-1200 最多支持 8 个 Modbus TCP 连接

---

二、硬件与软件要求

2.1 软件要求

软件
最低版本
推荐版本
说明
TIA Portal(博途)
V15.1
V17/V18/V19
S7-1200 组态
S7-1200 固件
V2.0
V4.0+
支持 Modbus TCP 服务器
MCGS 组态软件
V7.5
V8.0+
昆仑通态 HMI 组态
MB_SERVER 库
V2.0+
最新版本
TIA Portal 内置
昆仑通态固件
根据型号
最新版本
支持 Modbus TCP

2.2 硬件要求

设备
型号
说明
S7-1200
CPU 1212C/1214C/1215C/1217C
带 PROFINET 接口
昆仑通态 HMI
TPC7062Ti/TPC1061Ti/TPC1561Hi 等
带以太网接口
网线
CAT5e 及以上
标准工业以太网线
交换机
可选
多设备连接时使用

2.3 昆仑通态常见型号

系列
型号
屏幕尺寸
通信接口
TPC 系列
TPC7062Ti
7 英寸
以太网/RS485
TPC 系列
TPC1061Ti
10.1 英寸
以太网/RS485
TPC 系列
TPC1561Hi
15.6 英寸
以太网/RS485
mcGS 系列
mcGS-T 系列
多种尺寸
以太网/RS485

2.4 S7-1200 Modbus TCP 连接限制

S7-1200 型号
最大 Modbus TCP 连接数
说明
CPU 1211C
8 个
共享通信资源
CPU 1212C
8 个
共享通信资源
CPU 1214C
8 个
共享通信资源
CPU 1215C
8 个
共享通信资源
CPU 1217C
8 个
共享通信资源

---

三、配置步骤(S7-1200 侧)

第一步:创建 TIA Portal 项目

打开TIA Portal软件
点击「创建新项目」,输入项目名称
选择「添加新设备」

第二步:添加 S7-1200 CPU

添加 PLC
选择「控制器」→「SIMATIC S7-1200」→「CPU」
选择具体型号和固件版本
配置 PROFINET 接口
IP 地址:如  192.168.0.1
子网掩码:255.255.255.0
进入「设备视图」→ 点击 CPU 上的 PROFINET 接口
在「属性」→「以太网地址」中设置:

第三步:添加 Modbus TCP 通信块

打开程序块
展开「程序块」→「MAIN」
找到「通信」→「其它」→「Modbus TCP」
添加 MB_SERVER 块
拖拽「MB_SERVER」到 OB1 或 FB/FC 中
系统会自动生成背景数据块(如 DB3)
配置 MB_SERVER 参数
参数
设置值
说明
CONNECT
新建连接
指向 Modbus TCP 连接配置
DISC_IO
PM100.0 BYTE 100
离散输入/输出区
HOLD_REG
PDB1.DBW0 BYTE 200
保持寄存器区
MB_HOLD_REG
PDB1.DBW0
保持寄存器指针

第四步:配置 Modbus TCP 连接

创建连接配置
在「程序块」→「系统块」→「Modbus TCP」
右键「添加新连接」
配置连接参数
参数
设置值
说明
连接 ID
唯一连接标识
IP 地址
0.0.0.0
监听所有 IP(或指定 HMI IP)
端口号
502
Modbus TCP 默认端口
连接类型
TCP
选择 TCP 连接
主动建立连接
PLC 作为服务器被动监听

第五步:创建数据块

创建 DB 块
右键「程序块」→「添加新块」→「数据块」
命名为「Modbus_Data」
取消「优化的块访问」,使用绝对地址
定义变量
变量名称
数据类型
地址
说明
Coil_Out
Array[0..99] Of Bool
DB1.DBX0.0
线圈输出区
Discrete_In
Array[0..99] Of Bool
DB1.DBX100.0
离散输入区
Hold_Reg
Array[0..99] Of Word
DB1.DBW200
保持寄存器区
Input_Reg
Array[0..99] Of Word
DB1.DBW400
输入寄存器区

第六步:编写通信程序

// 主程序 OB1

// 调用 MB_SERVER 块

"MB_Server_Instance"(

      CONNECT := 'Modbus_TCP_Connection',   // 连接配置

      DISC_IO := P#"Modbus_Data".Coil_Out, // 离散 I/O 区

      HOLD_REG := P#"Modbus_Data".Hold_Reg[0], // 保持寄存器区

      MB_HOLD_REG := P#"Modbus_Data".Hold_Reg[0], // 保持寄存器指针

      MB_MODE := 0,                                    // 服务器模式

      BUSY =>  MB_Busy,                              // 忙标志

      ERROR =>  MB_Error,                           // 错误标志

      STATUS =>  MB_Status                         // 状态代码

);

第七步:编译并下载

编译项目
点击「编译」→「编译全部」
检查是否有错误
下载 PLC 程序
连接 S7-1200 PLC
下载程序到 PLC
将 PLC 切换到RUN 模式

---

四、昆仑通态 MCGS 侧配置

第一步:创建 MCGS 项目

打开MCGS 组态软件
点击「新建工程」,输入工程名称
选择对应 HMI 型号

第二步:配置设备连接

进入设备窗口
点击「设备窗口」标签
双击「设备窗口」进入配置
添加设备驱动
打开 MCGS 嵌入版组态软件
进入设备窗口 → 右键 →设备工具箱
添加:通用 TCP/IP 父设备 →莫迪康(Modbus)RTU/ASCII/TCP 设备
配置设备属性
参数
设置值
说明
设备名称
S7-1200
自定义名称
IP 地址
192.168.0.1
S7-1200 地址
端口号
502
Modbus TCP 默认端口
设备地址
1
Modbus 从站地址
通信周期
500ms
数据更新周期
超时时间
3000ms
通信超时判定

第三步:配置变量连接

进入实时数据库
点击「实时数据库」标签
添加变量
添加变量
变量名称
数据类型
Modbus 地址
读写权限
说明
Start_Btn
开关型
00001
只写
启动按钮
Stop_Btn
开关型
00002
只写
停止按钮
Motor_Run
开关型
10001
只读
电机运行
Motor_Fault
开关型
10002
只读
电机故障
Speed_Set
数值型
40001
读写
速度设定
Speed_Act
数值型
40002
只读
实际速度
Current_Val
数值型
40003
只读
电流值
Temp_Val
数值型
40004
只读
温度值
Fault_Code
数值型
40005
只读
故障代码
配置变量属性
双击变量进入属性设置
选择「设备连接」
选择对应设备和地址
设置读写权限

第四步:设计 HMI 画面

创建画面
点击「用户窗口」标签
右键「添加新窗口」
添加控件
控件类型
功能
关联变量
按钮
启动/停止/复位
Start_Btn/Stop_Btn
指示灯
状态显示
Motor_Run/Motor_Fault
输入框
数值输入
Speed_Set
标签
数值显示
Speed_Act/Current_Val/Temp_Val
报警窗口
报警显示
Fault_Code
配置控件属性
双击控件进入属性设置
在「变量连接」中关联数据库变量
设置外观、颜色、动画等

第五步:编译并下载

编译工程
点击「编译」→「编译全部」
检查是否有错误
下载 HMI 程序
使用网线连接 PC 与 HMI
点击「下载」按钮
等待下载完成
HMI 重启
HMI 自动重启运行
检查通信状态

---

五、数据交换格式详解

5.1 Modbus 功能码

功能码
名称
S7-1200 映射
MCGS 寄存器类型
01
读线圈
%Q/M 区
线圈(0xxxx)
02
读离散输入
%I/M 区
离散输入(1xxxx)
03
读保持寄存器
DB 块
保持寄存器(4xxxx)
04
读输入寄存器
DB 块/IW 区
输入寄存器(3xxxx)
05
写单线圈
%Q/M 区
线圈(0xxxx)
06
写单寄存器
DB 块
保持寄存器(4xxxx)
15
写多线圈
%Q/M 区
线圈(0xxxx)
16
写多寄存器
DB 块
保持寄存器(4xxxx)

5.2 地址映射表(典型配置)

MCGS 地址
功能码
S7-1200 地址
数据类型
说明
00001-00100
01
DB1.DBX0.0-DB1.DBX12.3
Bool
线圈输出
10001-10100
02
DB1.DBX100.0-DB1.DBX112.3
Bool
离散输入
40001-40100
03
DB1.DBW200-DB1.DBW398
Word
保持寄存器
30001-30100
04
DB1.DBW400-DB1.DBW598
Word
输入寄存器

5.3 数据类型转换

MCGS 类型
S7-1200 类型
说明
开关型
Bool
1 位
数值型
Int/Word
16 位
长整数
DInt
32 位
实数型
Real
32 位浮点
字符串
Array[Char]
需特殊处理

5.4 典型读写示例

读取保持寄存器
请求:00 01 00 00 00 06 01 03 00 C8 00 0A

响应:00 01 00 00 00 17 01 03 14 [数据 20 字节]

写入单寄存器
请求:00 02 00 00 00 09 01 06 00 C8 03 E8

响应:00 02 00 00 00 06 01 06 00 C8 03 E8

---

六、编程示例

6.1 S7-1200 服务器程序(SCL)

// 数据块 DB1 "Modbus_Server_Data"(取消优化块访问)

DATA_BLOCK "Modbus_Server_Data"

STRUCT

      // 线圈区(功能码 01/05/15)

      Coil_Out : Array[0..99] Of Bool;      // DB1.DBX0.0

      // 离散输入区(功能码 02)

      Discrete_In : Array[0..99] Of Bool; // DB1.DBX100.0

      // 保持寄存器区(功能码 03/06/16)

      Hold_Reg : Array[0..99] Of Word;      // DB1.DBW200

      // 输入寄存器区(功能码 04)

      Input_Reg : Array[0..99] Of Word;    // DB1.DBW400

      // 通信状态

      Server_Ready : Bool;                        // DB1.DBX600.0

      Comm_Error : Bool;                           // DB1.DBX600.1

      Error_Code : Word;                           // DB1.DBW602

      Client_Connected : Bool;                  // DB1.DBX600.2

END_STRUCT

END_DATA_BLOCK

// 主程序 OB1

FUNCTION_BLOCK "FB_Modbus_Server"

VAR

      // MB_SERVER 实例

      "MB_Server_Instance" : MB_SERVER;

      // 连接配置

      "Modbus_TCP_Connection" : TCON_Modbus;

      // 状态变量

       MB_Busy : Bool;

       MB_Error : Bool;

       MB_Status : Word;

END_VAR

// 连接配置初始化

"Modbus_TCP_Connection".connectionId := W161;

"Modbus_TCP_Connection".connectionType := W161;   // TCP

"Modbus_TCP_Connection".activeEstablish := FALSE;   // 被动监听

"Modbus_TCP_Connection".localPort := 502;

// 调用 MB_SERVER 块

"MB_Server_Instance"(

      CONNECT := 'Modbus_TCP_Connection',

      DISC_IO := P#"Modbus_Server_Data".Coil_Out,

      HOLD_REG := P#"Modbus_Server_Data".Hold_Reg[0],

      MB_HOLD_REG := P#"Modbus_Server_Data".Hold_Reg[0],

      BUSY =>  MB_Busy,

      ERROR =>  MB_Error,

      STATUS =>  MB_Status

);

// 状态处理

IF  MB_Error THEN

      "Modbus_Server_Data".Comm_Error := TRUE;

      "Modbus_Server_Data".Error_Code :=  MB_Status;

ELSE

      "Modbus_Server_Data".Comm_Error := FALSE;

END_IF;

// 服务器就绪标志

"Modbus_Server_Data".Server_Ready := NOT  MB_Busy;

6.2 数据映射处理

// 将 PLC 内部数据映射到 Modbus 寄存器区

// 保持寄存器映射

"Modbus_Server_Data".Hold_Reg[0] := "Motor_Speed_Setpoint";    // 40001

"Modbus_Server_Data".Hold_Reg[1] := "Motor_Speed_Actual";       // 40002

"Modbus_Server_Data".Hold_Reg[2] := WORD("Motor_Current");      // 40003

"Modbus_Server_Data".Hold_Reg[3] := WORD("Motor_Temp");          // 40004

"Modbus_Server_Data".Hold_Reg[4] := "Fault_Code";                   // 40005

// 线圈映射

"Modbus_Server_Data".Coil_Out[0] := "Motor_Start";                  // 00001

"Modbus_Server_Data".Coil_Out[1] := "Motor_Stop";                   // 00002

"Modbus_Server_Data".Coil_Out[2] := "Motor_Reset";                  // 00003

// 离散输入映射

"Modbus_Server_Data".Discrete_In[0] := "Motor_Running";          // 10001

"Modbus_Server_Data".Discrete_In[1] := "Motor_Fault";             // 10002

6.3 读取 HMI 写入的数据

// 从 Modbus 寄存器区读取数据到 PLC 内部变量

"Motor_Speed_Setpoint" := INT("Modbus_Server_Data".Hold_Reg[0]);

"Motor_Start" := "Modbus_Server_Data".Coil_Out[0];

"Motor_Stop" := "Modbus_Server_Data".Coil_Out[1];

"Motor_Reset" := "Modbus_Server_Data".Coil_Out[2];

// 控制逻辑

IF "Motor_Start" AND NOT "Motor_Stop" AND NOT "Motor_Fault" THEN

      "Motor_Running" := TRUE;

END_IF;

IF "Motor_Stop" OR "Motor_Fault" THEN

      "Motor_Running" := FALSE;

END_IF;

IF "Motor_Reset" THEN

      "Fault_Code" := 0;

      "Motor_Fault" := FALSE;

END_IF;

---

七、通信状态监控与诊断

7.1 MB_SERVER 状态代码

状态代码
含义
解决方案
无错误
正常
连接超时
检查网络连接
连接拒绝
检查 IP 和端口
无连接
等待客户端连接
连接断开
检查网络稳定性
数据错误
检查寄存器地址
功能码错误
检查功能码支持
从站地址错误
检查 Slave ID
数据长度错误
检查数据长度配置

7.2 MCGS 通信状态

状态显示
含义
设备在线
通信正常
设备离线
通信中断
数据刷新
正常数据交换
通信超时
请求无响应

7.3 TIA Portal 在线监控

在 TIA Portal 中查看 CPU 的「在线与诊断」
查看「通信」→「Modbus TCP」连接状态
查看通信错误信息
监控 DB 块数据变化

7.4 MCGS 诊断

在 MCGS 运行环境中查看「设备状态」
查看通信错误日志
使用「设备调试」功能测试连接

---

八、常见问题与解决方案

问题现象
可能原因
解决方案
HMI 无法连接 PLC
IP 地址不在同一网段
检查并统一 IP 网段
连接超时
端口号错误
确认端口为 502
连接被拒绝
MB_SERVER 未运行
检查 PLC 程序和 RUN 模式
数据读取失败
寄存器地址错误
检查地址映射(注意偏移)
功能码不支持
功能码配置错误
确认支持的功能码
从站地址错误
设备地址不匹配
确认从站地址为 1
频繁通信中断
网线质量差
更换高质量网线
数据值异常
字节顺序错误
检查高低字节顺序
DB 块访问失败
优化块访问启用
禁用优化块访问
多个客户端冲突
连接数超限
减少连接或升级 PLC
MB_SERVER 报错
连接配置错误
检查 CONNECT 参数
防火墙阻止
PC 防火墙设置
关闭防火墙或添加例外
HMI 变量不更新
变量地址配置错误
检查变量寄存器类型和地址
数据跳动
通信周期过短
延长通信周期
中文显示乱码
字符编码问题
统一使用 ASCII 或 Unicode

---

九、配置要点总结

配置项
关键要点
通信协议
Modbus TCP(S7-1200 作为服务器)
IP 地址
同一网段,不能冲突
端口号
默认 502
从站地址
MCGS 中设备地址通常为 1
连接配置
MB_SERVER 的 CONNECT 参数正确
数据指针
使用 P格式(如 PDB1.DBW0 BYTE 200)
DB块优化
必须禁用优化块访问
功能码
01/02/03/04/05/06/15/16
地址映射
注意 Modbus 地址与 PLC 地址对应
运行模式
PLC 需切换到 RUN 模式
防火墙
PC 防火墙需允许 502 端口
网络连接
使用 CAT5e 及以上标准网线
数据类型
MCGS 与 PLC 数据类型要匹配
通信周期
合理设置,避免过快导致通信拥堵

---

十、S7 通信 vs Modbus TCP 对比

特性
以太网 S7 通信
Modbus TCP 通信
协议类型
西门子专有协议
开放标准协议
配置复杂度
简单(直接变量关联)
中等(需配置寄存器映射)
数据访问
直接访问 PLC 变量
通过寄存器地址访问
DB 块优化
可启用优化访问
必须禁用优化访问
兼容性
仅支持西门子设备
支持多品牌设备
推荐场景
纯西门子系统
多品牌混合系统

---

十一、推荐参考资料

资料名称
来源
S7-1200 Modbus TCP 通信手册
西门子工业支持中心
MB_SERVER 功能块使用说明
TIA Portal 帮助文档
昆仑通态 MCGS 用户手册
昆仑通态官网
MCGS 设备驱动配置指南
昆仑通态官网
Modbus TCP 协议规范
Modbus 组织官网

---

十二、总结

S7-1200 与昆仑通态触摸屏的 Modbus TCP 通信是跨品牌集成的经典方案,具有以下优势:
优势
说明
标准协议
Modbus TCP 是开放标准,兼容性好
配置简单
TIA Portal 内置 MB_SERVER 块,MCGS 驱动成熟
功能丰富
支持数据采集、报警、历史、趋势等
成本优化
无需额外通信模块,国产 HMI 性价比高
扩展灵活
支持多个客户端连接
兼容性好
支持标准 Modbus TCP 客户端
本土化
昆仑通态是国产软件,中文支持好

配置流程简图

2.png
重要提示S7-1200 作为 Modbus TCP 服务器,被动监听连接IP 地址必须在同一网段,不能冲突端口号默认为 502,如有修改需同步配置DB 块必须禁用优化块访问,使用绝对地址MCGS 中设备地址通常为1PC/HMI 防火墙需允许 502 端口,否则连接会被阻止注意地址映射关系,Modbus 地址与 PLC 地址要对应数据类型要匹配,Bool/Word/Real 等要正确对应通信周期要合理,避免过快导致通信拥堵MCGS 变量地址格式:0xxxx=线圈,1xxxx=离散,3xxxx=输入寄存器,4xxxx=保持寄存器

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

本版积分规则

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

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

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


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