网关工作模式
模式 | 说明 | 适用场景 |
| Modbus TCP 主站 | 网关主动读取/写入 Modbus 从站设备 | 网关采集传感器/仪表数据 |
| Modbus TCP 从站 | 网关作为 Modbus 服务器,等待主站访问 | 网关数据被上位机读取 |
通信特点
特性 | 说明 |
通信类型 | Profinet IO RT + Modbus TCP |
数据交换 | 过程映像输入/输出(I/Q 区)+ Modbus 寄存器映射 |
传输距离 | 标准 100 米(可扩展) |
通信周期 | 2ms ~ 512ms 可调 |
无需编程 | 网关配置完成后,S7-1200 直接读写 I/O 地址 |
---
二、硬件与软件要求
1. 软件要求
软件 | 最低版本 | 推荐版本 | 说明 |
TIA Portal(博途) | V15.1 | V17/V18/V19 | S7-1200 组态 |
网关配置软件 | 根据网关品牌 | 最新版本 | 网关参数配置 |
GSDML 文件 | V2.3 | 网关厂家提供 | Profinet 设备描述 |
2. 硬件要求
设备 | 型号 | 说明 |
| S7-1200 | CPU1214C/1215C/1217C V4.0以上 | IO 控制器 |
| 协议网关 | 远创智控/兴达易控/耐特森等 | Profinet 转 Modbus TCP 网关 |
| Modbus TCP 设备 | 变频器/仪表/传感器等 | 支持 Modbus TCP 协议 |
| 网线 | CAT5e 及以上 | 标准工业以太网线 |
| 交换机 | 可选 | 多设备连接时使用 |
3. 常见网关型号
品牌 | 型号 | 特点 |
| 远创智控 | YC-PNMT100 | 1 路 Profinet+1 路 Modbus TCP |
| 兴达易控 | XD-ETHPN20 | 支持主/从模式切换 |
| 耐特森 | NT-PN-MTCP | 支持边缘计算功能 |
| 鼎实科技 | DF-ProfiNet-TCP | 工业级防护 |
---
三、配置步骤(TIA Portal 侧)
第一步:获取并导入 GSDML 文件
获取 GSD 文件:
从网关厂家官网下载
或从网关配套光盘/USB 获取
文件名如:GSDML-V2.3-Gateway-ModbusTCP.xml
导入 GSD 文件:
打开 TIA Portal
点击「选项」→「管理通用站描述文件 (GSD)」
选择 GSDML 文件所在文件夹
点击「安装」按钮
等待安装进度条完成
验证导入:
安装完成后,硬件目录会自动更新
在「其他现场设备」→「PROFINET IO」→「I/O」→ 网关品牌中可查看
第二步:创建 TIA Portal 项目
打开TIA Portal软件
点击「创建新项目」,输入项目名称
选择「添加新设备」
第三步:添加 S7-1200 CPU(IO 控制器)
添加 PLC:
选择「控制器」→「SIMATIC S7-1200」→「CPU」
选择具体型号(如 CPU 1215C DC/DC/DC)
选择固件版本(V4.0 及以上)
配置 PROFINET 接口:
进入「设备视图」→ 点击 CPU 上的 PROFINET 接口
在「属性」→「以太网地址」中设置:
IP 地址:如 192.168.0.1
子网掩码:255.255.255.0
勾选「自动生成 PROFINET 设备名称」
第四步:添加网关为 IO 设备
添加网关:
进入「网络视图」
在右侧「硬件目录」→「其他现场设备」→「PROFINET IO」→ 网关品牌→ 型号
拖拽到网络视图中配置 PROFINET 接口:
双击网络视图中的网关
在「属性」→「以太网地址」中设置:
IP 地址:如 192.168.0.2(与 PLC 同一网段)
子网掩码:255.255.255.0
取消勾选「自动生成 PROFINET 设备名称」
手动设置设备名称(如:"gateway_modbus1")
分配 IO 控制器:
在网络视图中选中网关
点击「未分配」
选择 S7-1200 作为 Controller
第五步:配置数据交换区(过程映像)
这是最关键的配置,决定数据交换格式:
进入设备视图:
双击网关图标
进入「设备视图」
配置子模块:
数据类型 | 长度 | 说明 |
| 输入数据 | 64~256 字节 | Modbus 设备数据→PLC 读取 |
| 输出数据 | 32~128 字节 | PLC 写入→Modbus 设备 |
选择合适的子模块(过程数据区)
典型配置包括:
配置 I/O 地址:
输入地址(PLC 读取):如 %IW0-%IW127
输出地址(PLC 写入):如 %QW0-%QW63
第六步:建立网络连接
进入「网络视图」
选中 S7-1200 的 PROFINET 接口(绿色方块)
拖拽连线到网关的 PROFINET 接口连接成功后显示绿色实线
第七步:分配设备名称(关键步骤)
连接 PLC:
使用网线连接 PC 与 S7-1200
确保 PC 与 PLC 在同一网段
在线访问:
点击「在线」→「访问 PG/PC」
选择连接的网卡
点击「更新」搜索网络设备
分配名称:
找到未分配名称的网关(显示 MAC 地址)
输入配置的设备名称(如:"gateway_modbus1")
点击「分配名称」
验证:
点击「显示」确认名称已分配
设备名称必须与 TIA Portal 组态完全一致
第八步:编译并下载
编译项目:
点击「编译」→「编译全部」
检查是否有错误
下载组态:
连接 S7-1200 PLC
下载组态到 PLC
将 PLC 切换到RUN 模式
网关上电:
网关会自动从 PLC 获取组态
无需单独下载 Profinet 侧配置
---
四、网关侧配置(Modbus TCP 侧)
第一步:连接网关配置软件
连接网关:
使用网线连接 PC 与网关配置口
或使用 Profinet 网络在线配置
打开配置软件:
运行网关厂家提供的配置工具
搜索并连接网关设备
第二步:配置网络参数
参数 | 设置值 | 说明 |
| Profinet 设备名称 | gateway_modbus1 | 与 TIA 组态一致 |
| Profinet IP 地址 | 192.168.0.2 | 与 TIA 组态一致 |
| Modbus TCP IP 地址 | 192.168.1.1 | Modbus 侧网段 |
| Modbus TCP 端口 | 502 | 标准 Modbus 端口 |
| 通信周期 | 10ms~100ms | 根据应用选择 |
第三步:配置 Modbus TCP 主站模式(网关读取从站设备)
参数 | 设置值 | 说明 |
| 工作模式 | Modbus TCP 主站 | 网关主动读取设备 |
| 从站 IP 地址 | 192.168.1.10 | Modbus 从站设备 IP |
| 从站站号 | 1 | Modbus 从站地址 |
| 功能码 | 03/04/06/16 | 读保持寄存器/输入寄存器/写单寄存器/写多寄存器 |
| 起始地址 | 40001 | Modbus 寄存器起始地址 |
| 数据长度 | 10 个字 | 读取/写入的数据量 |
| 映射到 Profinet | 输入区%IW0 开始 | 数据映射到 PLC 输入地址 |
第四步:配置数据映射表
这是最关键的配置,决定 Modbus 数据与 Profinet I/O 的对应关系:
Profinet 地址 | Modbus 地址 | 功能码 | 数据类型 | 说明 |
%IW0 | 40001 | 03 | INT | 变频器频率给定 |
%IW2 | 40003 | 03 | INT | 变频器运行速度 |
%IW4 | 40005 | 03 | INT | 变频器输出电流 |
%IW6 | 40007 | 03 | INT | 变频器输出电压 |
%QW0 | 40001 | 16 | INT | 启动/停止命令 |
%QW2 | 40003 | 16 | INT | 频率设定值 |
第五步:配置 Modbus TCP 从站模式(网关作为服务器)
参数 | 设置值 | 说明 |
| 工作模式 | Modbus TCP 从站 | 网关作为服务器 |
| 监听端口 | 502 | 标准 Modbus 端口 |
| Profinet 输入→Modbus 寄存器 | %IW0→40001 | PLC 输入数据映射到 Modbus |
| Profinet 输出←Modbus 寄存器 | %QW0←40001 | Modbus 写入数据映射到 PLC 输出 |
第六步:保存并重启
保存配置:
点击「保存」按钮
配置参数写入网关
重启网关:
重启网关使配置生效
等待网关启动完成
---
五、数据交换格式详解
1. 输入数据(网关→PLC)
偏移 | 数据类型 | 长度 | 说明 |
0 | 状态字 | 2 字节 | 网关状态、通信标志 |
2 | Modbus 设备 1 数据 | 20 字节 | 从站 1 寄存器数据 |
22 | Modbus 设备 2 数据 | 20 字节 | 从站 2 寄存器数据 |
42 | 诊断信息 | 4 字节 | 错误代码、警告 |
2. 输出数据(PLC→网关)
偏移 | 数据类型 | 长度 | 说明 |
0 | 控制字 | 2 字节 | 启动/停止/复位命令 |
2 | Modbus 设备 1 命令 | 20 字节 | 写入从站 1 寄存器 |
22 | Modbus 设备 2 命令 | 20 字节 | 写入从站 2 寄存器 |
3. 状态字详解
位 | 名称 | 功能 | 0 | 1 |
0 | 就绪 | 网关就绪 | 未就绪 | 就绪 |
1 | Profinet 通信 | Profinet 连接 | 故障 | 正常 |
2 | Modbus 通信 | Modbus 连接 | 故障 | 正常 |
3 | 故障 | 故障状态 | 无故障 | 故障 |
4 | 设备 1 在线 | Modbus 设备 1 | 离线 | 在线 |
5 | 设备 2 在线 | Modbus 设备 2 | 离线 | 在线 |
6 | 数据有效 | 数据有效性 | 无效 | 有效 |
7 | 保留 | - | - | - |
---
六、编程示例
1. 标准 Profinet IO 编程
// 定义数据块DATA_BLOCK "Gateway_Data"STRUCT // 输出数据(写入网关) Control_Word : WORD; // 控制字 %QW0 Freq_Setpoint : INT; // 频率设定 %QW2 Start_Command : WORD; // 启动命令 %QW4 // 输入数据(从网关读取) Status_Word : WORD; // 状态字 %IW0 Freq_Actual : INT; // 实际频率 %IW2 Current_Value : INT; // 输出电流 %IW4 Voltage_Value : INT; // 输出电压 %IW6 Device_Status : WORD; // 设备状态 %IW8 Diagnostic : DWORD; // 诊断信息 %IW10END_STRUCTEND_DATA_BLOCK// 主程序 OB1// 读取网关状态"Gateway_Data".Status_Word := %IW0;"Gateway_Data".Freq_Actual := %IW2;"Gateway_Data".Current_Value := %IW4;"Gateway_Data".Voltage_Value := %IW6;// 判断网关就绪IF ("Gateway_Data".Status_Word AND 160001) <> 0 THEN "Gateway_Ready" := TRUE;ELSE "Gateway_Ready" := FALSE;END_IF;// 判断 Profinet 通信正常IF ("Gateway_Data".Status_Word AND 160002) <> 0 THEN "Profinet_OK" := TRUE;ELSE "Profinet_Fault" := TRUE;END_IF;// 判断 Modbus 通信正常IF ("Gateway_Data".Status_Word AND 160004) <> 0 THEN "Modbus_OK" := TRUE;ELSE "Modbus_Fault" := TRUE;END_IF;// 启动变频器(上升沿触发)"Start_Rising_Edge" := "Start_Button" AND NOT "Start_Prev";IF "Start_Rising_Edge" AND "Gateway_Ready" THEN "Gateway_Data".Control_Word := 160001; // 启动命令 "Gateway_Data".Freq_Setpoint := 500; // 50.0Hz(假设 0.1Hz 分辨率) %QW0 := "Gateway_Data".Control_Word; %QW2 := "Gateway_Data".Freq_Setpoint;END_IF;"Start_Prev" := "Start_Button";// 停止变频器IF "Stop_Button" THEN "Gateway_Data".Control_Word := 160002; // 停止命令 %QW0 := "Gateway_Data".Control_Word;END_IF;// 故障复位IF "Reset_Button" AND ("Gateway_Data".Status_Word AND 160008) <> 0 THEN "Gateway_Data".Control_Word := 160004; // 复位命令 %QW0 := "Gateway_Data".Control_Word;END_IF;2. 完整控制程序示例
// 主程序 OB1// 初始化IF "First_Scan" THEN "Gateway_Data".Control_Word := 160001; // 启动命令 %QW0 := "Gateway_Data".Control_Word; "First_Scan" := FALSE;END_IF;// 读取状态"Gateway_Data".Status_Word := %IW0;"Gateway_Data".Freq_Actual := %IW2;"Gateway_Data".Current_Value := %IW4;// 网关就绪判断IF ("Gateway_Data".Status_Word AND 160001) <> 0 THEN "Gateway_Ready" := TRUE;ELSE "Gateway_Ready" := FALSE;END_IF;// Profinet 通信判断IF ("Gateway_Data".Status_Word AND 160002) <> 0 THEN "Profinet_OK" := TRUE;ELSE "Profinet_Fault" := TRUE;END_IF;// Modbus 通信判断IF ("Gateway_Data".Status_Word AND 160004) <> 0 THEN "Modbus_OK" := TRUE; "Device_Online" := TRUE;ELSE "Modbus_Fault" := TRUE; "Device_Online" := FALSE;END_IF;// 频率值转换(假设 0.1Hz 分辨率)"Actual_Frequency" := REAL("Gateway_Data".Freq_Actual) / 10.0;// 电流值转换(假设 0.1A 分辨率)"Actual_Current" := REAL("Gateway_Data".Current_Value) / 10.0;// 启动条件IF "Start_Button" AND "Gateway_Ready" AND "Profinet_OK" AND "Modbus_OK" THEN "Gateway_Data".Control_Word := 160001; // 启动 "Gateway_Data".Freq_Setpoint := INT("Speed_Setpoint" * 10.0); %QW0 := "Gateway_Data".Control_Word; %QW2 := "Gateway_Data".Freq_Setpoint;END_IF;// 停止条件IF "Stop_Button" OR "Emergency_Stop" THEN "Gateway_Data".Control_Word := 160002; // 停止 %QW0 := "Gateway_Data".Control_Word;END_IF;// 故障处理IF ("Gateway_Data".Status_Word AND 160008) <> 0 THEN "Gateway_Fault" := TRUE; "Fault_Code" := "Gateway_Data".Diagnostic; // 输出故障信号 %QX0.0 := TRUE; // 自动复位尝试 IF "Auto_Reset_Enable" THEN "Reset_Timer"(IN := TRUE, PT := T5S); IF "Reset_Timer".Q THEN "Gateway_Data".Control_Word := 160004; // 复位 %QW0 := "Gateway_Data".Control_Word; "Reset_Timer"(IN := FALSE); END_IF; END_IF;ELSE "Gateway_Fault" := FALSE; %QX0.0 := FALSE;END_IF;// 通信超时监控"Watchdog_Timer"(IN := "Profinet_OK" AND "Modbus_OK", PT := T1S);IF NOT "Watchdog_Timer".Q THEN "Communication_Timeout" := TRUE; // 触发报警 %QX0.1 := TRUE;END_IF;3. 多设备数据轮询示例
// 多 Modbus 从站数据轮询CASE "Poll_Index" OF 1: // 读取设备 1 数据 "Device1_Freq" := %IW10; "Device1_Status" := %IW12; 2: // 读取设备 2 数据 "Device2_Freq" := %IW20; "Device2_Status" := %IW22; 3: // 读取设备 3 数据 "Device3_Freq" := %IW30; "Device3_Status" := %IW32;END_CASE;// 轮询索引切换"Poll_Timer"(IN := TRUE, PT := T100MS);IF "Poll_Timer".Q THEN "Poll_Index" := "Poll_Index" + 1; IF "Poll_Index" > 3 THEN "Poll_Index" := 1; END_IF; "Poll_Timer"(IN := FALSE);END_IF;---
七、通信状态监控与诊断
1. 网关 LED 状态指示
LED | 颜色/状态 | 含义 |
| RUN | 绿色常亮 | 运行正常 |
| RUN | 黄色闪烁 | 启动中/待机 |
| RUN | 红色 | 故障 |
| PN LINK | 绿色 | Profinet 网络连接正常 |
| PN LINK | 熄灭 | Profinet 网络连接断开 |
| MB LINK | 绿色 | Modbus TCP 连接正常 |
| MB LINK | 红色 | Modbus TCP 连接故障 |
2. TIA Portal 在线监控
状态指示 | 颜色 | 含义 |
通信正常 | 绿色 | Profinet 连接建立成功 |
通信故障 | 红色 | 连接中断或配置错误 |
正在连接 | 黄色 | 设备正在建立连接 |
3. 诊断缓冲区
在 TIA Portal 中查看 CPU 的「诊断缓冲区」
可获取详细的通信错误信息
常见错误:设备名称不匹配、IP 冲突、网线故障等
4. 常见网关故障代码
错误码 | 含义 | 解决方案 |
0x0000 | 无错误 | 正常 |
0x0001 | Profinet 通信超时 | 检查 Profinet 网络连接 |
0x0002 | Modbus 通信超时 | 检查 Modbus 设备连接 |
0x0003 | 设备名称不匹配 | 重新分配设备名称 |
0x0100 | Modbus 从站无响应 | 检查从站 IP 和站号 |
0x0101 | Modbus 功能码错误 | 检查功能码配置 |
0x0102 | 寄存器地址错误 | 检查寄存器地址配置 |
0x0200 | 数据映射错误 | 检查映射表配置 |
---
八、常见问题与解决方案
问题现象 | 可能原因 | 解决方案 |
网关无法识别 | GSD 文件未导入 | 在 TIA Portal 中导入 GSDML 文件 |
设备名称分配失败 | 未在线操作 | 点击「在线」→「访问 PG/PC」分配名称 |
通信超时 | IP 地址不在同一网段 | 检查并统一 IP 网段 |
Modbus 数据不更新 | 从站设备未响应 | 检查 Modbus 从站配置和接线 |
连接显示红色 | PLC 未运行 | 将 PLC 切换到 RUN 模式 |
设备名称不匹配 | 名称不一致 | 确保 TIA 组态与网关配置一致 |
数据映射错误 | 映射表配置错误 | 检查网关映射表配置 |
频繁通信中断 | 网线质量差 | 更换高质量网线 |
Profinet 正常但 Modbus 故障 | Modbus 侧配置错误 | 检查网关 Modbus 配置 |
数据值异常 | 字节顺序错误 | 调整字节交换配置 |
多从站轮询失败 | 轮询周期过短 | 延长轮询时间间隔 |
配置无法保存 | 网关未重启 | 保存配置后重启网关 |
---
九、配置要点总结
配置项 | 关键要点 |
软件版本 | TIA Portal V15.1 及以上 |
GSD 文件 | 必须从网关厂家获取并导入 |
IP 地址 | Profinet 侧同一网段,Modbus 侧可独立 |
设备名称 | 必须在线分配且与组态一致 |
数据交换区 | 正确配置输入/输出地址 |
映射表 | Modbus 寄存器与 Profinet I/O 正确映射 |
通信周期 | 根据应用选择 10ms~100ms |
字节顺序 | 注意大小端配置 |
网络连接 | 使用标准网线,确保连接可靠 |
诊断功能 | 启用诊断便于故障排查 |
第三方设备 | 网关是第三方设备,非西门子 |
---
十、推荐参考资料
资料名称 | 来源 | 链接 |
远创智控 Profinet 转 Modbus TCP 网关手册 | 远创智控官网 | 下载 |
兴达易控 XD-ETHPN20 配置指南 | 兴达易控官网 | 下载 |
耐特森 Profinet 转 Modbus TCP 网关手册 | 耐特森官网 | 下载 |
S7-1200 与第三方 Profinet 设备通信 | 西门子工业支持中心 | 查看 |
TIA Portal Profinet 配置指南 | 西门子工业支持中心 | 下载 |
---
十一、总结
S7-1200 通过 Profinet IO 转 Modbus TCP 网关通信是异协议集成的经典方案,具有以下优势:
优势 | 说明 |
高速实时 | Profinet RT 通信,周期可达 2ms |
无需编程 | 网关配置完成后,PLC 直接读写 I/O |
诊断完善 | 支持网关级诊断和故障定位 |
扩展灵活 | 支持多 Modbus 从站、多网关连接 |
成本优化 | 减少 PLC 通信模块,降低硬件成本 |
兼容性好 | 支持各类 Modbus TCP 设备 |
协议转换 | 实现 Profinet 与 Modbus TCP 无缝对接 |
即插即用 | GSD 导入后即可使用 |
配置流程简图
重要提示
网关是第三方设备,不是西门子产品必须从网关厂家获取 GSDML 文件,TIA Portal 不自带设备名称必须严格一致,区分大小写Modbus 寄存器地址配置要正确,注意地址偏移字节顺序(大小端)要匹配,否则数据值会异常通信周期要合理设置,避免轮询过快导致从站响应不过来 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!