尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WinCC OPC服务器配置指南:从DA到UA的环境搭建与故障排查

WinCC OPC服务器配置指南:从DA到UA的环境搭建与故障排查 简介一份面向 WinCC 与 OPC 通讯配置场景的技术文档重点解决 Windows XP 系统下两台 WinCC 之间通过 OPC 进行网络通讯的配置问题适合自动化工程师、上位机组态人员及现场调试人员参考使用。包内为单个 doc 文档共 1 个文件压缩包大小 3.62MB目前已有 896 人学习/下载。文档从 OPC 客户端与服务器端双视角展开详细说明了登录账户及密码保持一致、客户端与服务器处于同一网段如服务器 192.168.0.100、客户端 192.168.0.101、关闭 Windows 防火墙或解除安全警报、通过 DCOMCNFG.EXE 调整 COM 安全与访问权限、为 OPCServer.WinCC 添加 Everyone 用户并允许完全控制等关键步骤同时补充了组态王通过网络进行 OPC 通讯时的 DCOM 配置说明以及复制 OPC 动态库并执行 regsvr32 注册的方法。读者可据此快速搭建联调环境有效排查 DCOM 权限、防火墙等常见故障。1. WINCC 的 OPC 服务器配置要解决什么问题做上位机或产线数据整合时常遇到一种尴尬PLC 侧数据在 WinCC 里看得见、存得下可 MES、报表系统、第三方面板程序却拿不到。这时把 WinCC 配成 OPC 服务器是最直接的做法——它让 WinCC 变量对外暴露成标准接口客户端不管是什么语言写的只要支持 OPC 协议就能读。标题里的“1WINCC-OPC服务器配置”本质就是这份工作的完整操作路径选哪条 OPC 通道、需要装什么组件、变量怎么映射、远程访问卡在哪、证书和授权哪些缺一不可。本文按我在现场最常用的配置顺序来讲DA 和 UA 两条线都覆盖。2. 配置前的选型与环境准备先搞清楚 DA 还是 UA2.1 WinCC 的 OPC 服务器有两种形态选错后面全是坑WinCC 做 OPC 服务器常见的是两条路传统 OPC DA 和较新的 OPC UA。判断标准很简单——客户端跑在现场内网、而且是老设备或老组态软件一般走 DA 2.0因为兼容性最好客户端要跨网段、跨平台或者对安全和数据模型有要求比如要读历史数据、要统一命名空间就优选 OPC UA。这里有一个反直觉的点OPC UA 服务器在某些 WinCC 版本里并不是默认启用的。DA 随 WinCC 安装后通常就注册进系统UA 则需要额外确认授权和服务开关。我在实际项目里见过客户花了一天调 UA 连接结果发现服务器端功能压根没激活。所以建议配置前先在 WinCC 服务器管理器里看一眼服务和授权的状态而不是直接去客户端那边查问题。2.2 装好 OPC Core Components再核对运行环境OPC DA 依赖一组微软发布的 OPC 核心组件OPC Core Components Redistributable它提供 OPCEnum 服务和代理桩。这个组件装不装决定了客户端能否枚举到服务器。64 位系统上如果客户端是 32 位进程两个位数的组件都要装否则客户端打开浏览变量对话框时会直接空列表。装完后重启一次系统再检查 OPCEnum 服务是否启动。我一般会用命令行确认sc query opcenum输出里如果状态不是 RUNNING就手动启动并改成自动。这个服务不在运行时DA 客户端“浏览服务器”那一步会失败但直接填 ProgID 访问又可能是通的很容易让人误判成证书或权限问题。2.3 授权WinCC 运行授权和 OPC 授权是两回事WinCC 的 OPC DA 功能一般随 WinCC 基础运行授权就能用但 OPC UA 服务器功能在很多版本里需要额外授权。授权管理器里对应的条目如果没激活UA 客户端连接时服务器会拒绝握手报错信息往往只是笼统的连接失败或不支持安全策略和证书问题很难区分。我已经养成习惯UA 连不上时先查授权再查证书顺序不能反。组件/环境作用配置时的常见坑OPC Core Components Redistributable提供 OPCEnum、代理 DLL32/64 位未装全枚举不到服务器WinCC 项目与运行授权变量数据的来源项目未运行OPC 读不到数据OPC UA 服务器授权启用 UA 功能授权缺失握手被拒防火墙规则通信可达性DA 要放行 135 和动态端口UA 要放行固定端口服务器系统时间证书有效性校验时间偏差大UA 证书校验失败3. 用 WINCC 配置 OPC DA 服务器变量映射与 DCOM 是重头戏3.1 打开 WinCC 的 OPC DA 服务并确认注册信息WinCC 的 OPC DA 服务器在安装完成后会注册为 COM 组件ProgID 是 OPCServer.WinCC。确认注册是否正常最直接的方法是在 WinCC 服务器上用注册表查询方式验证reg query HKCR\OPCServer.WinCC /v CLSID能查到 CLSID 就说明注册正常。如果查不到常见做法是重装 OPC 组件或在 WinCC 安装目录下重新注册对应的 dll。注意这一步必须用管理员权限执行而且注册完要重启 WinCC 项目管理器。接下来打开 WinCC 项目在变量管理里把要暴露给客户端的变量建好。我通常建议单独建一组内部变量做映射而不是直接暴露所有 PLC 过程变量。这样客户端看到的变量表干净而且后续改动过程变量名不影响第三方系统。3.2 把内部变量组织成客户端可浏览的结构WinCC 的 OPC DA 服务器暴露变量时会按 WinCC 变量管理的层次结构呈现。客户端浏览到的路径和你在变量管理里的结构基本一致。所以建立清晰的层级比事后解释强得多。我一般会新建一个名为 OPC 的变量组下面按产线、工段再建子组。变量类型用了 WinCC 的标准类型OPC 客户端读到的类型会对应为 VT_I2、VT_R4、VT_BSTR 等。布尔量在 DA 下按 VT_BOOL 处理但有些第三方系统读出来是 0/1这取决于客户端的类型映射别等联调时才惊讶。这里要特别提醒过程变量从驱动来的和内部变量在 OPC DA 服务器中都能访问但过程变量必须保证对应驱动连接是激活的否则读到的质量戳是 bad客户端可能会忽略这个值。排查读数为空时先看变量质量戳再看通信状态这是顺序问题。3.3 DCOM 配置远程客户端连不上的头号原因OPC DA 走 DCOM远程访问必须在服务器和客户端两侧都做组件服务配置。这步是项目中出问题最多的环节90% 的远程连接失败都是权限或身份验证级别导致的。3.3.1 DCOM 配置的关键参数在运行窗口输入 dcomcnfg依次进入“组件服务 — 计算机 — 我的电脑 — DCOM 配置”找到 OPCServer.WinCC或按 CLSID 找。以下是我常用的推荐值设置项推荐值说明身份验证级别默认用“默认”而不是“无”否则有些系统直接拒绝调用模拟级别标识避免令牌被客户端拿去访问其他资源启动权限添加 WinCC 启动用户和 OPC 客户端机器账号远程无法启动服务器的根因之一激活权限同启动权限与上一条一起配置访问权限添加 WinCC 运行用户权限不足时能连上但读不到数据运行身份指定用户WinCC 启动账号交互式用户可能导致服务会话下无桌面可用3.3.2 防火墙的放行逻辑DCOM 默认使用动态端口防火墙开启时除了放行 TCP 135还要放行动态端口范围。我习惯先在 DCOM 默认协议属性里把 TCP 端口固定下来比如设为 5000-5020然后防火墙只放行这条范围。命令如下netsh advfirewall firewall add rule nameOPC DCOM dirin actionallow protocolTCP localport135 netsh advfirewall firewall add rule nameOPC DCOM 动态端口 dirin actionallow protocolTCP localport5000-5020这条命令的作用是放行 DCOM 的固定端口段。室内部署时宁可多放一条本地子网限制规则也不要直接允许所有远程地址。安全策略允许的情况下把 rule 里的远程 IP 限定为客户端网段更稳妥。3.3.3 用户身份一致性WinCC 的 OPC DA 服务器运行在某个 Windows 用户上下文里。如果 WinCC 是开机自动以服务方式运行的那么 DCOM 的运行身份也必须指定同一个用户否则客户端远程调用时没有权限访问 WinCC 内部变量表。切换用户后必须重启 WinCC 项目单纯重启 OPC 服务不生效。4. 用 WINCC 配置 OPC UA 服务器端点、安全策略与证书4.1 启用 UA 服务器并设置端点OPC UA 不再依赖 DCOM通信走 TCP 4840默认端口可改。WinCC 的 UA 服务器启用位置在 WinCC 项目管理器或服务器设置中不同版本入口有差异但共同点是启用后要设置端点的安全策略和允许的客户端类型。常见的做法是配置三类策略None、Basic128Rsa15、Basic256Sha256。为了联调方便有些工程师直接全选但这样并不推荐。安全策略越多客户端越容易选错策略导致后续排错困难。安全策略加密签名适用场景None无无仅内网调试生产环境建议关Basic128Rsa15是是兼容旧 OPC UA 客户端如早期版本Basic256Sha256是是推荐默认启用新客户端都支持我通常只开 Basic256Sha256 和 None 两条None 在联调时临时用交付前关掉。这样做的好处是客户端连接时不会出现“服务器不支持 SSL”之类的提示——这类报错大部分是安全策略列表没有交集而不是服务器真的不支持 SSL。4.2 证书导出与客户端信任链建立OPC UA 是双向信任模型。WinCC UA 服务器启用自己的应用程序证书客户端连接后服务器会校验客户端证书客户端也校验服务器证书。两边只要有一方不信任握手就会在 TLS 阶段中断。这个流程在 WinCC 端的操作是找到 UA 服务器的证书存储目录把服务器证书导出为 .der 或 .crt 文件然后在客户端上导入到受信任证书列表。客户端如果是 UA Expert连一次后界面上会提示信任决策直接选择信任即可。证书这块有个常被忽略的细节服务器证书通常包含一个起始时间和结束时间。系统时钟不对、时区跳变都可能导致证书立即失效。报错表现就是 SSL 握手失败或错误信息里出现 certificate 相关字样。处理办法是把服务器和客户端的时间同步先做了再继续查证书。4.3 用 UA Expert 验证 UA 服务器端点和读取变量验证配置是否成功推荐用 OPC Foundation 的 UA Expert 或类似的 OPC UA 调试工具。先用 Discovery 功能扫描服务器地址确认端点和安全策略列表然后建立连接浏览变量树找到 WinCC 暴露的变量手动读一个值看质量戳是否为 Good。如果工具不在手边用一段极简的 C# 代码也能验证。项目引用 NuGet 包 OPCFoundation.NetStandard.Opc.Ua.Client 和 OPCFoundation.NetStandard.Opc.Ua下面的代码演示了连接和读值using Opc.Ua; using Opc.Ua.Client; string endpointUrl opc.tcp://192.168.1.10:4840; var config ApplicationConfiguration.Default; config.ApplicationName WinCC UA Reader; config.ApplicationUri urn:wincc-ua-reader; var endpoint new ConfiguredEndpoint(null, new EndpointDescription(endpointUrl)); using (var session await Session.Create(config, endpoint, false, wincc-ua-client, 60000)) { var nodeId new NodeId(OPC|变量管理|OPC|温度_1, 2); // 命名空间索引按服务器实际值调整 var value session.ReadValue(nodeId); Console.WriteLine($Value{value.Value}, Quality{value.StatusCode}); }这段代码的逻辑是先构造端点描述然后以指定超时时间创建会话最后用 NodeId 定位变量读取值。第二个参数 false 表示不校验服务器域名内网调试时先设为 false等证书信任理顺后再改回 true。NodeId 的命名空间索引 2 是 WinCC UA 服务器常见的值但不是固定的以 UA Expert 里浏览到的节点信息为准。5. 排错与进阶从 SSL 报错到授权和变量组织技巧5.1 “服务器不支持 SSL”和 ErrorCode: 1 的真实成因UA 客户端报“服务器不支持 SSL”有的是 ssl recv、ssl shakehand 变体时别急着找加密的毛病。这条提示在多数情况下是 TLS 握手在证书校验阶段被中断常见原因有三个客户端和服务器安全策略列表没有交集、服务器证书不在客户端受信任列表中、两边系统时间不一致导致证书有效期校验失败。处理顺序是先把时间同步再核对策略列表最后检查证书双向信任。ErrorCode: 1 在不同 OPC 栈里对应 BadUnexpectedError直接看这个错误码帮不上忙。我一般会看它出现在哪一步建连接时出现问题在端点或证书浏览变量时出现问题在授权或命名空间索引。把错误码和操作步骤一起贴给对端比自己猜快得多。5.2 连接失败时按固定顺序排查现场排查时我通常按这个顺序走一遍。# 1. 检查 UA 端口可达性 Test-NetConnection 192.168.1.10 -Port 4840 # 2. 查看 UA 服务是否在监听 netstat -ano | findstr 4840 # 3. 确认 DCOM 135 端口DA 场景 Test-NetConnection 192.168.1.10 -Port 135第一条命令测的是网络层可达性第二条确认 WinCC 侧进程是否真的在监听端口第三条针对 DA 场景检查 DCOM 通道。每一步的失败含义完全不同端口不通优先查防火墙和服务器进程状态端口通但客户端报证书错误就该转到证书目录去做信任操作。5.3 一个值得固定下来的变量组织习惯最后分享一个让后续运维省心的习惯WinCC 里给 OPC 暴露的变量都加上统一前缀比如 OPC_ 开头并在变量描述里写明单位和量程。第三方系统接入时工程师从几百个变量里筛出需要的几个效率差好几倍。配合在 UA 服务器端设置好命名空间客户端浏览时直接把前缀当作过滤器联调时间能压到半天以内。DA 场景下同样的变量组织方式也能减少 DCOM 权限配置后的排错范围。本文还有配套的精品资源点击获取
返回列表