应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信

39 篇文章 0 订阅
34 篇文章 0 订阅

一 背景

OPC(OLE for Process Control,用于过程控制的OLE)是工业自动化领域中常见的通信协议。它提供了一种标准化的方式,使得不同厂商的设备和软件可互相通信和交换数据。OPC Classic是旧版OPC规范,通过使用COM(Component Object Model,组件对象模型)技术来实现数据交换。

然而,基于COM/DCOM的技术有着不可根除的缺点,例如安全性不高、应用平台受限等。因此,随着工业4.0和物联网技术的不断发展,OPC UA(Unified Architecture,统一架构)逐渐成为了新一代OPC规范。相较于OPC Classic,OPC UA在数据安全性、跨平台性、扩展性等方面有着更好的表现,这使得越来越多的企业开始考虑将现有的OPC Classic升级到OPC UA,以满足更高的数据传输性能和安全要求。

(OPC UA的特点)

二 项目概述

某知名汽车零部件制造厂商现场使用了多个厂家的设备和控制系统,包括西门子、博世、霍尼韦尔等,这些厂家提供与设备相对应的OPC服务器来进行实时数据采集,并通过OPC Classic接口将数据上传至MES系统,以进行生产计划、报工统计、质量追溯等工作。

随着工业4.0的发展以及企业的业务扩张,该公司原有MES系统所伴有的技术落后、难以维护等问题日益凸显,已无法满足新的业务需求,因此该公司决定升级MES系统,且新的MES系统将支持OPC UA接口。

由于OPC Classic通信存在一些缺陷,例如通信速度慢、数据传输不安全等,客户决定将现有的OPC Classic服务器升级为OPC UA服务器,以在实现更好的数据通信和更高的安全性同时,更便于与MES系统进行数据交互。

三 解决方案

为了实现可靠且高效的OPC UA数据传输,该工厂选择了Softing的dataFEED OPC Suite软件作为OPC UA通信的中间件,以将现场OPC Classic服务器升级到OPC UA服务器。Softing dataFEED OPC Suite是用于OPC通信的一体化数据集成解决方案,它可作为OPC中间件,还可将数据安全可靠地集成到物联网和数据库中。

dataFEED OPC Suite软件中的一个组件——dataFEED OPC Organizer UA,不仅是OPC Classic服务器和客户端,同时也是OPC UA服务器和客户端,可实现OPC Claasic和OPC UA之间的相互转换与通信。它允许从OPC Classic组件中访问OPC UA服务器,反之亦然。此外,dataFEED OPC Organizer UA可将现有的OPC Classic组件和应用程序集成到OPC UA解决方案中。

(dataFEED OPC Organizer UA:OPC Classic/OPC UA网关)

在项目升级之后,现场存在大量的OPC UA服务器,这导致配置和维护工作量变得巨大。对此,客户选择使用Softing的dataFEED SIS(Secure Integration Server)来进行集中管理,从而轻松将现场大量的OPC UA服务器集成到了MES系统中。Softing dataFEED SIS是OPC UA服务器集成软件,可集成多个OPC UA服务器,并通过一致的OPC UA接口可将数据提供给IT应用程序。而IT应用程序只需访问一台服务器,即可实现简单明了的通信结构。此外,dataFEED SIS还提供了强大的安全功能,包括用户认证、权限管理等,因此企业可根据需要设置不同的用户权限,从而保证了数据的安全性和机密性。

(dataFEED SIS——OPC UA安全集成服务器)

四 功能及特点

1. 跨规范的OPC通信

• 通过继续使用现有的OPC Classic组件来降低成本;

• 将具有集成OPC UA服务器的控制器和组件连接到OPC Classic应用程序;

• 可使用不同OPC规范或不同OPC规范版本的OPC组件来进行桥接;

• 从OPC UA客户端轻松访问OPC Classic服务器;

• 将旧控制器和新控制器轻松集成到支持“工业4.0”的解决方案中。

2. 数据的安全性

• 支持OPC UA标准所定义的所有安全机制,例如身份验证、证书交换等;

• 支持多个OPC UA端点(客户端或服务器),且每个端点都有自己的证书;

• 可使用各种加密算法进行数据加密;

• 基于IP地址的过滤访问(OPC UA端点的白名单/黑名单);

• 可检测针对OPC UA身份验证的DoS攻击。

3. OPC UA反向连接

• 实现了OT和IT中由防火墙或DMZ分隔的OPC UA组件之间的安全通信;

......

请点击此处,查看剩余30%精彩内容!

如需下载OPC安装包,请点击此处。)

| 往期回顾

▶ 使用dataFEED OPC Suite将西门子PLC数据转发至REST API

▶ Softing新发布的dataFEED OPC Suite Extended V5.22版本支持OPC UA反向连接功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,结合OPC UA订阅和WebSocket实现实时数据传输给前端的示例代码如下: ```java import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem; import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription; import org.eclipse.milo.opcua.stack.core.AttributeId; import org.eclipse.milo.opcua.stack.core.Identifiers; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @ServerEndpoint("/websocket") public class MyWebSocketServer { private OpcUaClient client; private UaSubscription subscription; private UaMonitoredItem item; private Session session; @OnOpen public void onOpen(Session session) throws Exception { System.out.println("WebSocket opened: " + session.getId()); this.session = session; // 连接OPC UA服务器 CompletableFuture<OpcUaClient> future = OpcUaClient.create( "opc.tcp://localhost:12685/sample", endpoints -> endpoints.stream().findFirst(), config -> { config.setApplicationName("OPC UA Client"); config.setCertificateValidationEnabled(false); } ); client = future.get(); // 订阅变量 subscription = client.getSubscriptionManager().createSubscription(1000.0); NodeId nodeId = new NodeId(2, "Sensor"); item = subscription.createMonitoredItem( new UaMonitoredItem.Parameters( nodeId, AttributeId.Value, TimestampsToReturn.Both ) ); item.setValueConsumer(this::onDataChanged); } private void onDataChanged(UaMonitoredItem item, DataValue value) { try { // 发送数据到前端 session.getBasicRemote().sendText(value.getValue().getValue().toString()); } catch (IOException e) { e.printStackTrace(); } } @OnClose public void onClose(Session session) throws Exception { System.out.println("WebSocket closed: " + session.getId()); // 断开OPC UA连接 item.delete(); subscription.delete(); client.disconnect().get(); } @OnError public void onError(Throwable error) { System.err.println("WebSocket error: " + error.getMessage()); } } ``` 在上面的代码中,使用`OpcUaClient`连接到OPC UA服务器。然后,创建一个订阅并订阅变量。当变量的值发生变化时,调用`onDataChanged`方法将值发送到前端。最后,在WebSocket连接关闭时,断开OPC UA连接。 请注意,此代码仅用于示例目的。在实际应用中,应该考虑更多的错误处理和线程安全问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值