
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 NETSIMATIC 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 ServerWinCC Unified 是 OPC UA Client。但服务端软件同时又是 S7 协议的 ClientS7-200 SMART 是 S7 Server。所以数据流向是PLCS7 Server→ OPC UA 服务端软件S7 Client OPC UA Server→ WinCC UnifiedOPC 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.10PC 设成 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 为例来讲配置流程其他软件的逻辑大同小异。安装完成后第一步是新建一个 ChannelChannel 类型选 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.0M 区写 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不要用 NoneNone 意味着完全不加密任何能访问到这个端口的人都能读写数据生产环境绝对不能这么干。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 IP192.168.2.10与 PC 同网段PC IP192.168.2.100固定 IP不要用 DHCPOPC UA 端口49320KEPServerEX 默认可改安全策略Basic256Sha256生产环境禁用 None扫描速率100-200ms根据变量数量调整S7 机架/槽号0/0S7-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 写 1234VW102 写 5678V100.0 置 1。这样后面 OPC UA 读上来能直接看到数方便验证。第三步打开 KEPServerEX新建 Channel选 Siemens TCP/IP Ethernet。Network Interface 选连 PLC 的那块网卡。然后新建 Device型号 S7-200 SMARTIP 填 192.168.2.10机架 0 槽 0。建完后KEPServerEX 会自动尝试连接右下角的状态栏会显示连接状态。如果显示 Connected说明 S7 层通了。第四步建 Tag。在 Device 下面右键新建 TagAddress 填 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 UAURL 填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 区字VW100VW100 或 DB1,W100WordV 区位V100.0V100.0 或 DB1,X100.0BooleanV 区双字VD200VD200 或 DB1,D200DWordM 区字MW10MW10WordM 区位M10.0M10.0BooleanI 区字IW0IW0WordQ 区字QW0QW0Word需要特别注意的是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% 100ms0%100ms约 20% 200ms0%200ms约 12% 400ms0%500ms约 6% 1s0%从数据看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 这边选了 Basic256Sha256KEPServerEX 那边只开了 Basic256结果连不上报的是安全策略不匹配。所以配置的时候先把服务端支持的安全策略列出来然后在客户端选一个双方都支持的。用户认证方面OPC UA 支持匿名、用户名密码、证书三种方式。生产环境建议至少用用户名密码匿名只适合调试。KEPServerEX 里可以建用户分配不同的读写权限。WinCC Unified 连接的时候填对应的用户名密码就行。证书认证更安全但配置更繁琐适合对安全要求极高的场景。4. 常见问题与排查技巧实录4.1 连接建立阶段的典型故障故障一KEPServerEX 显示 Disconnectedping 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 节点是 WordWinCC 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、重启 PLCOPC 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 自动重连成功。稳定性整体是可靠的前提是网络质量过关、参数配置合理、证书管理到位。如果你正在做类似的项目建议先在实验室里把整条链路跑通把证书、地址、扫描速率这些参数都调好再去现场实施能省掉很多现场调试的时间。