KEPServer连接S7-1200:从PUT/GET到OPC UA与MQTT
2026/9/17 14:04:00 网站建设 项目流程

简介:这份文档面向工业自动化工程师、PLC调试人员及上位机通信初学者,系统讲解KEPServer与西门子S7-1200PLC建立通信连接的完整流程,可用于产线数据采集、远程监控与控制类项目的入门与实操参考。资源以TIA PORTAL V17为测试环境,从新建项目、添加全局DB块并设为非优化访问、编译生成偏移地址,到设备组态中开放PUT/GET通信访问、设置PLC的IP地址并下载在线,再依次完成KEPServer新建通道、选择Siemens TCP/IP Ethernet协议、添加S7-1200设备、配置标签映射,最后用Quick Client同步写入并回读验证变量,环节衔接清楚,便于对照排查通信失败的原因。压缩包共1个文件,为docx文档,约7.43MB,图文步骤配合说明,适合按图索骥地复现整套配置。目前已有2492人学习下载,可作为S7-1200与KEPServer通信的实操参考。

1. 从「PLC 有网口」到「上位系统能读点」:KEPServer 与 S7-1200 建链要解决的真问题

S7-1200 插上网线、上位机 ping 得通,很多人就默认数据能读了,结果在组态软件里建完连接一直报超时。横在中间的其实有三层东西:S7 协议基于 ISO-on-TCP 的 102 端口连接、PLC 侧对绝对地址访问的授权、以及 KEPServer 这一侧通道 / 设备 / 标签的三级模型。KEPServer 在这里扮演的是协议网关加 OPC 服务端——对上用 OPC DA、OPC UA 把数据吐给 SCADA、MES 和产线看板,对下用西门子 TCP/IP 驱动去读写 S7-1200 的 DB、M、I、Q 区。

适合的人群很具体:做产线数据采集、上位机组态、MES 对接的一线工程师,以及第一次把 1200 接进 KEPServer 的人。下面按「PLC 侧改什么 → KEPServer 侧怎么配 → 怎么验证 → 怎么扩到 MQTT」的顺序走一遍,每一步都给到可复制的参数、命令和地址写法。

2. S7-1200 侧的 4 项前置配置:IP、机架槽位、PUT/GET 与 DB 非优化访问

2.1 先确认 102 端口通不通,别只 ping 通就下结论

ping 通只说明 IP 层可达,S7 通信真正走的是 TCP 102 端口。用 PowerShell 直接测端口,比 ping 有价值得多:

# 目标 PLC 的 IP 换成现场实际地址 Test-NetConnection -ComputerName 192.168.0.1 -Port 102 -InformationLevel Detailed # 关注输出里两项: # TcpTestSucceeded : True 表示 102 端口可以建立 TCP 连接 # PingSucceeded : True 表示 ICMP 可达,二者要分开看

TcpTestSucceeded 为 True,说明 PLC 的通信栈已经在监听;为 False 而 PingSucceeded 为 True,常见原因是中间有防火墙或路由 ACL 拦了 102,或者网线接在了只走办公网段的交换机口上。老一点的环境也可以用telnet 192.168.0.1 102,能连上就是黑屏不退出,连不上会直接报无法打开到主机的连接。

提示:S7-1200 的以太网口和上位机必须在同一网段,跨网段时先确认路由没有屏蔽 102。

  • IP 与子网掩码:在 TIA Portal 的「设备组态 → 属性 → 以太网地址」里设固定 IP,不要依赖 DHCP,否则重上电后 KEPServer 侧的 Device ID 就对不上了。
  • 端口:S7 通信固定用 102,不需要在 PLC 侧额外开放,也不需要单独启用某个服务。

2.2 PUT/GET 授权与「优化的块访问」,两个必须动手的开关

这两个设置是新手最容易漏掉的。S7-1200 默认不允许远程伙伴用 PUT/GET 方式读写,而 KEPServer 的西门子驱动正是走这条路。

操作路径(TIA Portal):

  1. 打开项目,选中 PLC,右键「属性」→「保护与安全」→「连接机制」。
  2. 勾选「允许来自远程伙伴的 PUT/GET 通信访问」。
  3. 找到要被采集的 DB 块,右键「属性」→「属性」标签页,取消勾选「优化的块访问」。
  4. 全编译后下载到 PLC。

第 3 步的原因值得说清楚:勾了「优化的块访问」的 DB 只保留符号信息,没有稳定的绝对偏移量,外部按 DB1.DBW0 这种绝对地址去读会失败,或者读到错位的数据。取消勾选后,DB 内每个变量才有固定的字节偏移,KEPServer 才能按地址寻址。改 DB 属性会触发下载,涉及在线运行的设备要挑停机窗口。

注意:改完 DB 属性如果没重新下载,PLC 里跑的还是旧结构,KEPServer 侧的表现是读数恒为 0 或者质量戳变 Bad。

2.3 机架槽位和连接资源,填错一个就连不上

KEPServer 新建设备时要填 Rack 和 Slot。S7-1200 / S7-1500 是 Rack 0、Slot 1;S7-300 是 Rack 0、Slot 2;S7-400 常见 Rack 0、Slot 2 或 3。把 1200 的 Slot 填成 2,结果就是连接超时或者驱动日志里反复报错。

连接资源也要顺带看一眼:TIA 里 PLC 属性 →「连接资源」页会列出最大连接数和当前占用情况。不同型号上限不一样,从个位数到十几都有。KEPServer 的一个 Channel 到同一台 PLC 通常只占一条 S7 连接,但如果你同时接了触摸屏、另一套组态软件、还有第三方采集程序,就要算总量,超了会表现为「时通时断」。

KEPServer 侧字段S7-1200 侧对应值说明
Device IDPLC 的 IP,如 192.168.0.1与 TIA 里设的固定 IP 一致
Port102S7 通信固定端口,不要改
Rack0S7-1200 / 1500 固定为 0
Slot1S7-1200 为 1,写 2 必失败
ModelS7-1200选错型号,地址解析会异常
优化的块访问已取消勾选DB 拥有绝对偏移的前提

3. KEPServer 端新建 Siemens TCP/IP Ethernet 通道与 S7-1200 设备

3.1 建 Channel:驱动、网卡、写优化三个关键选择

路径:KEPServerEX 配置界面左侧树,右键「Connectivity」→「New Channel」→ 输入名称(比如 PLC_Line1)→ Device driver 选「Siemens TCP/IP Ethernet」→ 选择网卡 → 完成。

Channel 层参数不少,真正影响稳定性的就三个:

参数推荐值作用与调法
Network Interface指向 PLC 所在网段的那块网卡多网卡机器上选错,会一直连不上
Write OptimizationWrite only on change(默认)减少无谓写入;调试阶段可临时改 Always
Auto-Demotion启用,失败 3 次降级,降级 10000 ms断线后不打爆 PLC,恢复后自动回连

Auto-Demotion 值得单独说:不启用时,PLC 一断,驱动会按扫描周期持续重连,网络恢复的瞬间容易产生连接风暴,轻则报错刷屏,重则让 PLC 的通信资源被占满。启用后,连续失败 N 次的设备会被降级,按设定的时间间隔再试。产线上网络抖动频繁的场景,建议打开。

3.2 建 Device:IP、Rack/Slot 与扫描周期怎么填

右键刚建的 Channel →「New Device」,向导里逐项填:

  • Name:建议带产线或工位前缀,比如 LINE1_STATION3,后面 OPC UA 节点路径就是由它拼出来的。
  • Model:选 S7-1200,一定展开对应系列,别随手选成 S7-300。
  • Device ID:PLC 的 IP 地址,填 IP 就行,不用带端口。
  • 连接参数:Port 102、Rack 0、Slot 1。
  • Scan Rate:设备级默认扫描周期,现场常用 100~1000 ms,高频点位在 Tag 上单独覆盖。

扫描周期不是越小越好。100 ms 意味着每秒 10 次请求,点位一多,PLC 的通信负载会明显上升。比较稳妥的做法是设备级给 1000 ms 打底,把真正需要快速响应的少数点位在 Tag 级设到 100~200 ms。

场景设备级 Scan RateTag 级覆盖
温度、液位等慢变量1000 ms不覆盖
设备状态字、报警位500 ms200 ms
节拍计数、位置反馈200 ms100 ms

3.3 Tag 地址语法与 CSV 批量导入

KEPServer 的西门子 TCP/IP 驱动用绝对地址寻址,常用写法如下:

地址写法对应 PLC 地址建议数据类型
DB1,X0.0DB1.DBX0.0Boolean
DB1,B0DB1.DBB0Byte
DB1,D0DB1.DBW0Short / Word
DB1,DW2DB1.DBD2DWord / Float
M0、M10.0M0、M10.0Word / Boolean
I0.0、Q0.0输入输出区Boolean

手动建十几个点还能接受,上百个点必须走导入。KEPServer 支持 Tag 的 CSV 导出与导入:先在设备下建一个点,右键「Export Tags」拿到模板,按列填好后「Import Tags」。用脚本生成比手敲可靠:

Tag Name,Address,Data Type,Scan Rate,Description,Scaling LINE1_TEMP01,DB10,D0,Short,1000,挤出机一区温度, LINE1_SPEED,DB10,DW2,Float,200,主机转速, LINE1_RUN,DB10,X0.0,Boolean,200,运行状态, LINE1_ALARM,DB10,X6.3,Boolean,200,急停报警,

导入时几个容易踩的点:地址列不要带空格,数据类型要和 DB 里实际声明的类型一致(DB 里是 Real 就得选 Float,选成 DWord 读出来会是一个奇怪的大整数);Scan Rate 列留空表示沿用设备级设置。导入完成后打开某个 Tag 的属性页,KEPServer 会把地址语法反解一遍,能正常显示成 DB10、D0 这样的形式,说明格式被正确识别了。

4. 用 OPC Quick Client 与 OPC UA 客户端验证链路,并处理 5 类典型故障

4.1 OPC Quick Client 看 Value / Quality / Timestamp

KEPServer 菜单「Tools → Launch OPC Quick Client」。新建一个 OPC DA 连接,ProgID 选 Kepware.KEPServerEX.V6,连上后展开 Channel → Device,把 Tag 拖到右侧观察区。

三个字段各有含义:Value 是驱动解析后的值;Quality 是链路健康度,Good 表示读到了;Timestamp 是驱动更新该点的时间戳。Quality 长期 Bad,说明请求根本没成功,这时候别只盯着 Value 是不是 0。

Quality 表现含义先查什么
Good正常读写
Bad请求失败网线、102 端口、DB 偏移
Uncertain有值但不可信刚启动,或通信中断后的残留值
反复 Good / Bad 跳变间歇性断链连接资源耗尽、交换机、Auto-Demotion 设置

4.2 用 Python 走 OPC UA 再验一次

工程上更常见的消费端是 OPC UA。KEPServerEX 自带 OPC UA Server,默认监听 49320(生产环境记得改配置并启用认证)。用 asyncua 拉一个点:

import asyncio from asyncua import Client ENDPOINT = "opc.tcp://192.168.0.10:49320" # KEPServer 所在机器 IP + OPC UA 端口 NODE_ID = "ns=2;s=PLC_Line1.LINE1_STATION3.LINE1_TEMP01" # Channel.Device.Tag class Handler: def datachange_notification(self, node, val, data): print(node, val) async def main(): # KEPServer 的 OPC UA Server 默认允许匿名接入,无需账号密码 async with Client(url=ENDPOINT) as client: node = client.get_node(NODE_ID) value = await node.read_value() # 单次读取 print("value =", value) sub = await client.create_subscription(500, Handler()) # 500ms 采样间隔 await sub.subscribe_data_change(node) await asyncio.sleep(10) asyncio.run(main())

代码逻辑:先用 endpoint 建立会话,get_node 用 NodeId 字符串定位到具体点位,read_value 做一次同步读;后半段是订阅模式,采样间隔 500 ms,比轮询省资源。参数上有两个容易搞错的地方——ENDPOINT 里的 IP 是 KEPServer 所在机器的地址,不是 PLC 的 IP;NODE_ID 的结构是 Channel 名 + Device 名 + Tag 名,中间用点分隔,前缀 ns=2 表示 KEPServer 的私有命名空间。连不上时先确认 OPC UA Server 有没有启用。

4.3 五类典型故障的定位顺序

现象大概率原因处理
Device 一直转圈连不上Rack/Slot 填错,或 102 不通改 Slot=1,先跑端口测试
能连上但所有点都是 BadPUT/GET 未勾选,或 DB 仍是优化访问回 TIA 改两项并重新下载
部分点 Bad、部分 Good地址偏移写错、数据类型不匹配对照 DB 声明逐个核对偏移
值正常但恒为 0地址落在未使用的 DB 区,或偏移算错用 PLC 监控表核对同一偏移
白天正常、夜班频繁断连接资源被其他客户端抢占看 PLC 的连接资源占用页

排查顺序建议固定成一条线:端口 → 通道与设备参数 → PUT/GET 与 DB 属性 → 地址偏移 → 数据类型。越往前越省时间,不要一上来就怀疑 KEPServer 本身有问题。

5. 让 KEPServer 的数据流向 MQTT:两条路径与批量建点的收尾技巧

标题外的热搜问题「kepserver 可以对接 mqtt 吗」,答案是可以,而且有两个方向完全不同的做法,选错方向会白折腾半天。

5.1 IoT Gateway:把采集到的点位发布到 Broker

这是最常见的用法。装好 KEPServerEX 的 IoT Gateway 插件后,配置界面会多出「IoT Gateway」节点,新增一个 Agent,传输方式选 MQTT,填 Broker 地址、端口、Client ID、用户名密码,再勾选要发布的 Tag。数据以 JSON 发出:

{ "timestamp": 1732500000000, "values": [ { "id": "PLC_Line1.LINE1_STATION3.LINE1_TEMP01", "v": 186.4, "q": true, "t": 1732500000000 }, { "id": "PLC_Line1.LINE1_STATION3.LINE1_RUN", "v": true, "q": true, "t": 1732500000000 } ] }

id 是 Tag 的完整路径,v 是值,q 是质量位,t 是毫秒时间戳。发布周期在 Agent 的 Rate 里设,最小 100 ms,但现场通常拉到 1000 ms 更稳。这条链路是 PLC → KEPServer → Broker → 平台,KEPServer 站在生产端。

5.2 MQTT Client 驱动:把 Broker 当成数据源

另一个方向容易被混淆:KEPServerEX 里的「MQTT Client」是一个设备驱动,作用是让 KEPServer 作为 MQTT 客户端去订阅 Broker 上的主题,把收到的话题内容当作 Tag 读进来。它解决的是「现场已有 MQTT 数据,想统一收敛到 OPC UA」的问题。两者区别一句话:IoT Gateway 是往外推,MQTT Client 驱动是往里收。

5.3 批量建点的收尾技巧

点位上千的时候,CSV 手写不现实,用脚本按「基础偏移 + 步长」生成更可靠:

# 生成 KEPServer 可直接导入的 Tag CSV rows = ["Tag Name,Address,Data Type,Scan Rate,Description"] base = 0 # DB10 的起始字节偏移 for i in range(1, 33): # 32 路温度 rows.append(f"LINE1_TEMP{i:02d},DB10,D{base},Short,1000,温度通道{i},") base += 2 # Word 类型占 2 字节 with open("tags_line1.csv", "w", encoding="utf-8") as f: f.write("\n".join(rows))

偏移累加用 2 字节一档,是因为 Word 类型占两个字节;换成 Float 就要按 4 字节步进。混用类型时,先按 DB 里声明的顺序把偏移表算准,再生成 CSV,否则导入后会出现「前半段正常、后半段全 Bad」。导入前先备份工程文件(File → Save As),导入失败能立刻回退。

导入完成后在 Quick Client 里全选点位反查一遍 Quality,确认没有成片的 Bad,再把 KEPServer 的 OPC UA 端点交给上层平台使用;这时候去核对 IoT Gateway 的发布主题,往往还能顺手发现几个漏配的 Tag。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询