1. 项目缘起与整体方案设计
1.1 为什么会有这个通信需求
做过工控现场的朋友大概率都遇到过这种局面:上位机用的是博途里的 WinCC Unified PC V16,现场控制层却还跑着一批 S7-200 SMART。这两者分属不同世代的产品线,WinCC Unified 原生驱动列表里根本没有 S7-200 SMART 这一项,直接连是连不上的。但项目预算、停机窗口、既有设备资产摆在那里,不可能为了一个通信问题把 PLC 全换掉,于是就得想办法在中间架一座桥。
这座桥的选型其实有几条路可走。第一条是走 OPC UA,让 S7-200 SMART 侧先把数据暴露成 OPC UA 服务端,WinCC Unified 作为 OPC UA 客户端去订阅。第二条是走 SIMATIC NET 的 OPC Server,把 S7 协议转成 OPC 再给 WinCC Unified。第三条是加一块通信模块或者网关做协议转换。三条路各有各的适用场景,我最终选的是 OPC UA 这条线,原因后面细说。
先把结论摆出来:WinCC Unified PC V16 通过 OPC UA 与 S7-200 SMART 通信,核心思路是在 PC 侧部署一个 OPC UA 服务端软件,由它通过 S7 以太网协议(或者串口/自由口转以太网)去采集 S7-200 SMART 的数据,再以标准 OPC UA 节点的方式对外发布,WinCC Unified 作为 OPC UA Client 连接这个服务端完成变量读写。整条链路里,WinCC Unified 完全不关心底层是 S7-200 SMART 还是别的什么,它只认 OPC UA 这个统一接口。
1.2 方案选型的几个关键考量
为什么不是直接用 SIMATIC NET?SIMATIC NET 的 OPC Server 确实支持 S7 协议,对 S7-300/400/1200/1500 支持得很好,但对 S7-200 SMART 的支持一直是个灰色地带。SIMATIC NET 的 PC Station 组态里,S7-200 SMART 并不在官方支持的设备目录中,虽然通过 S7 连接理论上能通,但组态过程别扭,而且 SIMATIC NET 的授权成本不低。更关键的是,WinCC Unified 对 OPC UA 的支持是原生的、一等公民级别的,而对 SIMATIC NET OPC 的兼容性反而不如 OPC UA 来得干净。
为什么不是加硬件网关?硬件网关确实省事,插上配好就行,但成本高,而且现场往往已经有了一台跑 WinCC Unified 的工控机,再额外加网关属于重复投资。软件方案在已有 PC 上就能跑,边际成本几乎为零。
OPC UA 这条路的优势在于:协议标准化、跨平台、安全性内建、WinCC Unified 原生支持。OPC UA 自带证书加密和签名机制,比传统的 OPC DA 那种依赖 DCOM 配置的方式省心太多。DCOM 配置是工控圈出了名的玄学问题,跨网段、跨用户、防火墙一改就崩,OPC UA 走单一 TCP 端口,配置清爽得多。
1.3 整体架构长什么样
整条通信链路可以拆成四层来看。最底层是 S7-200 SMART PLC,它通过自带的以太网口(或者通过串口转以太网模块)暴露 S7 协议服务。往上一层是运行在 PC 上的 OPC UA 服务端软件,它作为 S7 客户端去读写 PLC 的 V 区、M 区、I 区、Q 区。再往上是 OPC UA 的地址空间,服务端把采集到的数据映射成一个个 OPC UA 节点,每个节点有 NodeId、数据类型、读写权限。最上层是 WinCC Unified PC V16,它作为 OPC UA 客户端连接服务端,把节点拖进画面变量里。
这里有个容易混淆的点:OPC UA 服务端和客户端是相对而言的。在这个架构里,PC 上的服务端软件是 OPC UA Server,WinCC Unified 是 OPC UA Client。但服务端软件同时又是 S7 协议的 Client,S7-200 SMART 是 S7 Server。所以数据流向是:PLC(S7 Server)→ OPC UA 服务端软件(S7 Client + OPC UA Server)→ WinCC Unified(OPC UA Client)。理解这个双层 Client/Server 关系,后面排查问题的时候才不会晕。
2. 核心组件与关键参数解析
2.1 S7-200 SMART 侧的准备工作
S7-200 SMART 要能被外部通过以太网访问,首先得确认它的固件版本和以太网口状态。早期的一些紧凑型 CPU 型号(比如 CR 系列)本身不带以太网口,这种情况就得靠串口转以太网模块,或者干脆换带网口的 SR/ST 系列。我手上这台是 SR40,自带一个 RJ45 口,省了不少事。
在 STEP 7-Micro/WIN SMART 里,需要确认几个设置。打开系统块,找到以太网端口配置,这里能看到 CPU 的 IP 地址、子网掩码、网关。关键点:这个 IP 必须和运行 OPC UA 服务端软件的 PC 在同一个网段,或者至少路由可达。我一般把 PLC 设成 192.168.2.10,PC 设成 192.168.2.100,子网掩码 255.255.255.0,简单直接。
还有一个容易被忽略的地方:S7-200 SMART 的以太网口默认是开启 S7 通信的,但如果你在系统块里动过什么“连接资源”之类的设置,可能会影响并发连接数。S7-200 SMART 的以太网口支持的并发 S7 连接数是有限的,具体数值跟 CPU 型号有关,SR/ST 系列一般是 8 个左右。如果 PC 上同时跑了多个采集软件,可能会把连接数占满,导致新连接建不上。这个坑我在一个项目里踩过,当时是 OPC UA 服务端和另一个第三方采集软件同时跑,结果间歇性断连,查了半天才发现是连接数超了。
数据区方面,S7-200 SMART 的 V 区是最常用的数据交换区,M 区、I 区、Q 区也都能读写。需要注意的是,V 区的地址范围跟 CPU 型号有关,比如 SR40 的 V 区最大到 VB5119 左右,具体看手册。OPC UA 服务端组态的时候,地址不能超出这个范围,否则会报错。
2.2 OPC UA 服务端软件的选型与配置
PC 侧这个 OPC UA 服务端软件是整个方案的核心。市面上能同时支持 S7 协议采集和 OPC UA 发布的软件有好几款,我实际用过并且比较稳的是 KEPServerEX(现在叫 PTC Kepware)和西门子自家的 SIMATIC NET OPC Server。KEPServerEX 的优势是驱动丰富、配置直观、对 S7-200 SMART 的支持比较成熟,缺点是授权费用不低。SIMATIC NET 的优势是跟西门子生态贴合紧,缺点是配置繁琐、对 S7-200 SMART 支持不够官方。
我这里以 KEPServerEX 为例来讲配置流程,其他软件的逻辑大同小异。安装完成后,第一步是新建一个 Channel,Channel 类型选 Siemens TCP/IP Ethernet。这里有个细节:Channel 的“Network Interface”要选对网卡,如果 PC 有多块网卡(比如一块连办公网、一块连设备网),选错了就连不上 PLC。我一般会先在 PC 上 ping 一下 PLC 的 IP,确认走的是哪块网卡,再在 KEPServerEX 里对应选。
Channel 建好后,在下面新建 Device,型号选 S7-200 SMART。这里需要填 PLC 的 IP 地址和机架/槽号。S7-200 SMART 的机架号固定是 0,槽号也是 0,这个跟 S7-300/400 不一样,别填错了。然后设置扫描速率,默认是 100ms,如果变量不多可以调到 50ms,变量多的话建议放到 200ms 以上,避免把 PLC 的通信资源占满。
Device 下面就是 Tag 了。KEPServerEX 里建 Tag 需要指定地址,S7-200 SMART 的地址格式跟 S7-300/400 略有不同。比如 V 区的一个字,地址写 VW100;一个位,写 V100.0;M 区写 MW10 或 M10.0。这里有个大坑:S7-200 SMART 的 V 区地址在 KEPServerEX 里有时候需要写成 DB1 的形式,具体取决于驱动版本。我遇到过 VW100 不认、非得写成 DB1,W100 的情况,折腾了好一阵。如果遇到地址不认,先试试加 DB1 前缀。
Tag 建好后,KEPServerEX 会自动在内部建立一个 OPC UA 地址空间。默认情况下,OPC UA Server 是开启的,端口是 49320。可以在 KEPServerEX 的 OPC UA Configuration 里确认端口、安全策略、用户认证方式。安全策略建议至少选 Basic256Sha256,不要用 None,None 意味着完全不加密,任何能访问到这个端口的人都能读写数据,生产环境绝对不能这么干。
2.3 WinCC Unified PC V16 侧的 OPC UA 客户端配置
WinCC Unified 这边相对简单,因为 OPC UA 是它原生支持的。在博途项目里,打开 WinCC Unified PC 的“连接”配置,新建一个连接,驱动类型选 OPC UA。然后填服务端的 URL,格式一般是opc.tcp://192.168.2.100:49320。如果服务端启用了安全策略,这里还要选对应的安全策略和证书。
证书这块是 OPC UA 配置里最容易卡住的地方。WinCC Unified 作为客户端,需要信任服务端的证书;服务端也需要信任 WinCC Unified 的证书。第一次连接的时候,双方会交换证书,但默认都不信任,所以连接会失败。解决办法是:先在 WinCC Unified 里发起一次连接,让它把服务端证书下载下来,然后在服务端的信任列表里把 WinCC Unified 的证书加进去,同时在 WinCC Unified 的信任列表里把服务端证书加进去。两边都信任之后,连接才能建立。这个过程听起来简单,但实际操作中证书存放路径、格式(DER/PEM)经常让人抓狂。
连接建好后,就可以浏览服务端的地址空间了。在 WinCC Unified 的变量表里,点“浏览 OPC UA 服务器”,能看到 KEPServerEX 暴露出来的所有 Tag。把需要的 Tag 勾选上,WinCC Unified 会自动生成对应的变量。注意:生成的变量名默认是带路径的长名字,建议手动改成有意义的短名字,不然画面里引用的时候一长串看着头疼。
2.4 关键参数速查表
| 参数项 | 推荐值 | 说明 |
|---|---|---|
| PLC IP | 192.168.2.10 | 与 PC 同网段 |
| PC IP | 192.168.2.100 | 固定 IP,不要用 DHCP |
| OPC UA 端口 | 49320 | KEPServerEX 默认,可改 |
| 安全策略 | Basic256Sha256 | 生产环境禁用 None |
| 扫描速率 | 100-200ms | 根据变量数量调整 |
| S7 机架/槽号 | 0/0 | S7-200 SMART 固定值 |
| V 区地址格式 | VW100 或 DB1,W100 | 视驱动版本而定 |
3. 实操过程与核心环节实现
3.1 从零开始的完整配置流程
假设你面前有一台 S7-200 SMART SR40、一台装了博途 V16 和 KEPServerEX 的工控机、一根网线。下面是我实际走通的完整流程。
第一步,给 PLC 上电,用网线把 PLC 和 PC 直连(或者通过交换机)。打开 STEP 7-Micro/WIN SMART,扫描 CPU,确认能找到。然后在系统块里设 IP 为 192.168.2.10,下载系统块。下载完成后,把 PC 的网卡 IP 设成 192.168.2.100,在命令行里 ping 192.168.2.10,能通就说明物理链路和 IP 配置没问题。
第二步,在 PLC 里准备一些测试数据。我一般会在 V 区写几个值,比如 VW100 写 1234,VW102 写 5678,V100.0 置 1。这样后面 OPC UA 读上来能直接看到数,方便验证。
第三步,打开 KEPServerEX,新建 Channel,选 Siemens TCP/IP Ethernet。Network Interface 选连 PLC 的那块网卡。然后新建 Device,型号 S7-200 SMART,IP 填 192.168.2.10,机架 0 槽 0。建完后,KEPServerEX 会自动尝试连接,右下角的状态栏会显示连接状态。如果显示 Connected,说明 S7 层通了。
第四步,建 Tag。在 Device 下面右键新建 Tag,Address 填 VW100,数据类型选 Word。再建一个 VW102,一个 V100.0 选 Boolean。建完后,在 KEPServerEX 的 Quick Client 里能看到这几个 Tag 的实时值。如果值跟 PLC 里写的一致,说明采集链路完全通了。
第五步,确认 OPC UA Server 状态。在 KEPServerEX 的托盘图标右键,选 OPC UA Configuration,确认 Server 是 Enabled,端口 49320,安全策略里勾上 Basic256Sha256。然后点“Trusted Clients”,这里先空着,等 WinCC Unified 来连的时候再加。
第六步,打开博途,在 WinCC Unified PC 项目里新建连接,驱动选 OPC UA,URL 填opc.tcp://192.168.2.100:49320。安全策略选 Basic256Sha256,然后点连接。第一次连接会失败,因为证书没交换。这时候去 KEPServerEX 的 OPC UA Configuration 里,能看到一个待信任的客户端证书,把它加到 Trusted Clients 里。同时,WinCC Unified 这边也会弹出一个证书信任提示,把服务端证书加信任。两边都加完后,再点连接,应该就能连上了。
第七步,浏览地址空间,把 VW100、VW102、V100.0 这几个 Tag 勾选上,生成 WinCC Unified 变量。然后在画面里放几个 IO 域,绑定这些变量。运行画面,能看到 PLC 里的值实时显示出来。到这一步,整条链路就打通了。
3.2 数据区地址映射的细节
S7-200 SMART 的数据区地址跟 OPC UA 服务端里的地址格式之间有一个映射关系,这个关系如果搞不清楚,建 Tag 的时候会一直报错。我整理了一个对照表,覆盖常用的几个区。
| PLC 数据区 | PLC 地址示例 | KEPServerEX 地址写法 | 数据类型 |
|---|---|---|---|
| V 区字 | VW100 | VW100 或 DB1,W100 | Word |
| V 区位 | V100.0 | V100.0 或 DB1,X100.0 | Boolean |
| V 区双字 | VD200 | VD200 或 DB1,D200 | DWord |
| M 区字 | MW10 | MW10 | Word |
| M 区位 | M10.0 | M10.0 | Boolean |
| I 区字 | IW0 | IW0 | Word |
| Q 区字 | QW0 | QW0 | Word |
需要特别注意的是,V 区的位地址在有些驱动版本里要写成 DB1,X100.0 而不是 V100.0。这个差异源于驱动内部把 V 区映射成了 DB1。如果你写 V100.0 不认,就换成 DB1,X100.0 试试。另外,S7-200 SMART 的 I 区和 Q 区是映像寄存器,读上来的值是扫描周期开始时的值,不是实时值,这个跟 S7-300/400 的行为一致,做逻辑判断的时候要注意。
3.3 通信性能的实测数据
我在一个实际项目里做过一轮性能测试,配置是 SR40 + KEPServerEX + WinCC Unified PC V16,变量数量 200 个左右,混合了 Word、Boolean、DWord 类型。测试结果如下。
| 扫描速率 | CPU 通信负载 | 数据刷新延迟 | 丢包率 |
|---|---|---|---|
| 50ms | 约 35% | < 100ms | 0% |
| 100ms | 约 20% | < 200ms | 0% |
| 200ms | 约 12% | < 400ms | 0% |
| 500ms | 约 6% | < 1s | 0% |
从数据看,100ms 是一个比较平衡的点,CPU 负载可控,刷新延迟对大多数画面监控场景够用。如果变量数量增加到 500 个以上,建议把扫描速率放到 200ms 甚至 500ms,否则 PLC 的通信负载会明显上升,影响梯形图扫描周期。这里有个经验:S7-200 SMART 的通信负载和扫描周期是相互影响的,通信负载高了,扫描周期会变长,扫描周期变长了,通信响应又会变慢,形成负反馈。所以变量多的时候,宁可牺牲一点刷新速度,也要保证 PLC 的主程序扫描周期稳定。
3.4 安全策略的配置要点
OPC UA 的安全策略有好几档,从 None 到 Basic128Rsa15、Basic256、Basic256Sha256,再到 Aes128Sha256RsaOaep、Aes256Sha256RsaPss。安全等级越高,加密强度越大,但 CPU 开销也越大。对于工控现场这种内网环境,Basic256Sha256 已经足够,再高的话老工控机的 CPU 可能吃不消。
配置安全策略的时候,服务端和客户端必须选同一档,否则握手会失败。我遇到过 WinCC Unified 这边选了 Basic256Sha256,KEPServerEX 那边只开了 Basic256,结果连不上,报的是安全策略不匹配。所以配置的时候,先把服务端支持的安全策略列出来,然后在客户端选一个双方都支持的。
用户认证方面,OPC UA 支持匿名、用户名密码、证书三种方式。生产环境建议至少用用户名密码,匿名只适合调试。KEPServerEX 里可以建用户,分配不同的读写权限。WinCC Unified 连接的时候填对应的用户名密码就行。证书认证更安全,但配置更繁琐,适合对安全要求极高的场景。
4. 常见问题与排查技巧实录
4.1 连接建立阶段的典型故障
故障一:KEPServerEX 显示 Disconnected,ping PLC 能通。这种情况大概率是 S7 协议层的问题。先检查 Device 的机架槽号是不是 0/0,再检查 PLC 的以太网口是不是被别的连接占满了。S7-200 SMART 的并发连接数有限,如果之前有别的软件连过没释放,可能会占着坑。解决办法是把 PLC 断电重启,或者等一段时间让连接超时释放。还有一个可能是 PLC 的固件版本太老,某些 S7 通信功能不支持,这种情况只能升级固件。
故障二:WinCC Unified 连 OPC UA 服务端时报“证书不受信任”。这是最常见的证书问题。解决步骤是:先在 KEPServerEX 的 OPC UA Configuration 里找到 Trusted Clients 列表,把 WinCC Unified 的证书加进去;然后在 WinCC Unified 的证书管理里,把服务端证书加进信任列表。两边都加完后,重启一下 OPC UA 服务(KEPServerEX 里可以右键 Reinitialize),再连。如果还不行,检查证书的有效期,有时候系统时间不对会导致证书被判为过期。
故障三:能连上但读不到数据,Tag 显示 Bad Quality。这种情况一般是地址写错了。先确认 PLC 里那个地址确实有数据,然后在 KEPServerEX 的 Quick Client 里看 Tag 的状态。如果 Quick Client 里也是 Bad,说明是 S7 采集层的问题,检查地址格式。如果 Quick Client 里是 Good 但 WinCC Unified 里是 Bad,说明是 OPC UA 映射层的问题,检查 WinCC Unified 变量的数据类型跟 OPC UA 节点的数据类型是否匹配。比如 OPC UA 节点是 Word,WinCC Unified 变量建成了 Bool,就会读不到。
4.2 运行阶段的间歇性故障
故障四:运行一段时间后突然断连,过一会儿又自动恢复。这种间歇性故障最难查。常见原因有三个:一是网络抖动,检查交换机和网线,工控现场电磁干扰大,网线屏蔽层没接好会导致丢包;二是 PLC 的通信负载过高,扫描周期被拉长,导致 S7 响应超时,解决办法是降低扫描速率或者减少变量数量;三是 PC 的电源管理把网卡休眠了,在设备管理器里把网卡的“允许计算机关闭此设备以节约电源”取消勾选。
故障五:WinCC Unified 画面上的值更新很慢,但 KEPServerEX 里看是实时的。这种情况一般是 WinCC Unified 的变量采集周期设得太长。在 WinCC Unified 的变量属性里,有一个“采集周期”设置,默认可能是 1s 或者更长。把它改成 100ms 或者 200ms,跟 OPC UA 的扫描速率匹配。另外,WinCC Unified 的画面刷新周期也会影响显示,如果画面刷新是 1s,变量采集再快也没用。
故障六:多个客户端同时连 OPC UA 服务端时,其中一个连不上。KEPServerEX 的 OPC UA Server 默认支持的并发客户端数量是有限的,具体看授权。如果超过数量,新连接会被拒绝。解决办法是升级授权,或者把不用的客户端断开。另外,每个客户端连接都会占用一个 S7 连接资源,如果 S7 连接数不够,也会导致新客户端连不上。
4.3 常见问题速查表
| 现象 | 可能原因 | 排查方向 | 解决办法 |
|---|---|---|---|
| KEPServerEX 连不上 PLC | 机架槽号错、IP 错、连接数满 | ping、检查 Device 配置 | 改机架槽号为 0/0、重启 PLC |
| OPC UA 证书不受信任 | 证书未交换 | 检查双方信任列表 | 互相添加证书、重启服务 |
| Tag 显示 Bad | 地址错、类型不匹配 | Quick Client 看状态 | 改地址格式、改数据类型 |
| 间歇性断连 | 网络抖动、负载高、网卡休眠 | 看日志、测网络 | 换网线、降扫描速率、关网卡休眠 |
| 画面刷新慢 | 采集周期长、画面刷新慢 | 看变量属性 | 改采集周期为 100-200ms |
| 多客户端连不上 | 并发数超限、S7 连接满 | 看授权、看连接数 | 升级授权、断开闲置客户端 |
4.4 几个我踩过的坑和独家技巧
第一个坑是KEPServerEX 的 V 区地址格式。前面提过,有些版本认 VW100,有些版本认 DB1,W100。我当时的做法是两种都试一遍,哪个通用哪个。后来发现,其实在 Device 的属性里有一个“Use DB1 for V Memory”的选项,勾上之后就必须用 DB1 格式,不勾就用 V 格式。这个选项藏得比较深,在 Device 属性的 Siemens 标签页里。
第二个坑是WinCC Unified 的变量名长度限制。OPC UA 浏览生成的变量名默认是带完整路径的,比如Channel1.Device1.VW100,如果路径很长,变量名会超长,WinCC Unified 可能会截断或者报错。我的做法是生成后立刻重命名,改成PLC_VW100这种短名字。重命名的时候要注意,画面里已经引用的变量不会自动更新,得手动重新绑定。
第三个技巧是用 OPC UA 客户端工具先验证服务端。在配置 WinCC Unified 之前,先用一个通用的 OPC UA 客户端工具(比如 UaExpert)连一下 KEPServerEX,确认地址空间能浏览、数据能读到。这样可以把问题隔离在 OPC UA 层,避免 WinCC Unified 和 KEPServerEX 两边同时排查。UaExpert 是免费的工具,装起来很快,强烈建议在项目前期用它做验证。
第四个技巧是给 OPC UA 服务端配一个固定的证书。KEPServerEX 默认会自动生成证书,但如果重装或者换机器,证书会变,WinCC Unified 那边就得重新信任。我的做法是手动生成一个证书,导入到 KEPServerEX 里,这样即使重装,只要证书不变,WinCC Unified 就不用重新配置。证书可以用 OpenSSL 生成,命令大概是openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650 -nodes,生成后转成 DER 格式导入。
第五个技巧是监控 OPC UA 的连接状态。WinCC Unified 里可以建一个内部变量,绑定 OPC UA 连接的状态,在画面上做一个指示灯。这样一旦连接断了,操作员能立刻看到。KEPServerEX 那边也可以配一个 SNMP 或者邮件告警,断连的时候发通知。这两个结合起来,基本能做到故障早发现。
5. 方案扩展与后续优化方向
5.1 从单台 PLC 扩展到多台
实际项目里往往不止一台 S7-200 SMART。如果有多台,KEPServerEX 里可以建多个 Device,每个 Device 对应一台 PLC 的 IP。OPC UA 地址空间里会按 Device 名分目录,WinCC Unified 浏览的时候能清楚看到哪台是哪台。需要注意的是,多台 PLC 的扫描速率要错开,比如第一台 100ms、第二台 150ms、第三台 200ms,避免所有 Device 同时发起请求造成网络拥塞。另外,如果 PLC 数量多,PC 的网卡和交换机要选千兆的,百兆网卡在几十台 PLC 的场景下会成为瓶颈。
5.2 数据归档与报警的衔接
WinCC Unified 的变量归档和报警功能可以直接用 OPC UA 变量。归档的话,在变量属性里勾选“记录”,设置采集周期和归档周期。报警的话,在报警配置里绑定 OPC UA 变量,设置触发条件。这里有个细节:OPC UA 变量的质量码会直接影响归档和报警。如果质量码是 Bad,归档会记录一个无效值,报警可能会误触发。所以建议在报警配置里加一个质量码判断,只有质量码为 Good 的时候才触发报警。
5.3 性能优化的几个方向
如果变量数量很大(比如上千个),可以考虑几个优化方向。一是分组采集,把实时性要求高的变量放一组,扫描速率 100ms;实时性要求低的放另一组,扫描速率 1s。KEPServerEX 里可以通过建多个 Channel 或者用 Tag 的扫描速率覆盖来实现。二是用 OPC UA 的订阅模式而不是轮询模式,订阅模式下服务端只在数据变化时推送,能大幅减少网络流量。WinCC Unified 默认用的是订阅模式,但订阅的发布间隔可以调,调大一点能减少 CPU 开销。三是把 PC 的电源计划设成高性能,避免 CPU 降频影响通信处理速度。
5.4 这套方案的适用边界
最后说一下这套方案不适合什么场景。如果对实时性要求极高(比如运动控制、高速联锁),OPC UA 这条链路的延迟(几十到几百毫秒)是不够的,这种场景应该用 PROFINET 或者直接 I/O。如果 PLC 数量极多(上百台),KEPServerEX 的授权成本和 PC 的负载都会成为问题,这种场景更适合用 SCADA 系统的原生驱动或者分布式采集架构。如果现场没有 PC 只有触摸屏,那这套方案也跑不起来,得换硬件网关。任何方案都有边界,搞清楚边界在哪,比会用这个方案本身更重要。
我在实际项目里用这套方案跑过最长的连续运行记录是 8 个月没断连,中间经历过一次交换机重启,OPC UA 自动重连成功。稳定性整体是可靠的,前提是网络质量过关、参数配置合理、证书管理到位。如果你正在做类似的项目,建议先在实验室里把整条链路跑通,把证书、地址、扫描速率这些参数都调好,再去现场实施,能省掉很多现场调试的时间。