在 .NET 中使用 OPC UA 协议

  • 什么是 OPC UA

  • UaExpert 的使用

    • 下载 UaExpert

    • 首次启动

    • 添加 OPC UA 服务器

    • 连接 OPC UA 服务器

    • 查看 PLC 数据

  • 使用 C# 读写 OPC UA 数据

    • 连接到 OPC UA 服务器

    • 获取节点的值

    • 写入节点的值

什么是 OPC UA

OPC UA(OPC Unified Architecture,开放平台通信统一架构)是 OPC 基金会应用在自动化技术的机器对机器网络传输协定。OPC UA 不依赖于特定的操作系统或平台,可以在 Windows、Mac、Linux 等多种系统上运行,而传统的 OPC(如 OPC DA)通常只能在 Windows 上使用。该协议提供了一个更为先进、安全和灵活的解决方案,适用于现代工业自动化和物联网环境中的设备间通信。

7b3e2d4276b9204628be9d528d1a77a7.png

OPC UA 通过一个统一的信息模型来实现设备间的无缝数据交换,信息模型来源于面向对象编程,使用了对象作为过程系统表示数据和活动的基础。这个模型由节点组成,节点可以是对象、变量或方法,它们通过引用相互连接,构成了一个复杂的网络。每个节点都有一组属性和引用,用于描述数据和定义节点间的关系。OPC UA 的地址空间就是这样一个节点网络,它为客户端提供了一种标准化的方式来访问服务器上的对象。OPC UA 还提供了一系列服务,使客户端能够执行读取、写入和订阅等操作。安全性也是 OPC UA 设计的核心,内置了多种安全机制,包括认证、授权、加密和消息签名,以确保数据传输的安全性。

da17112b20a020c1694288b509809391.png

UaExpert 的使用

UaExpert 是一款 OPC UA 客户端软件,用于连接 OPC UA 服务器并与之交互。UaExpert 支持 OPC UA 的所有特性,包括数据视图、报警视图、历史趋势视图和诊断视图等功能。用户可以通过 UaExpert 访问服务器上的节点,如设备和传感器,以及它们的属性,例如温度、压力等数据。UaExpert 还提供了仿真、配置、历史功能测试和导出节点的功能,大多数功能都是免费使用的。

下载 UaExpert

访问 Unified Automation 的官网下载 UaExpert,未注册用户则需要先注册才能下载。

72abf5c11d0bee6d9aab9d35d64adbf7.png

首次启动

安装完成后,首次运行 UaExpert 会提示创建一个应用程序证书,填写一些相关信息即可。

1ac3c188c7a9a6b25ed7991ce3188892.png

启动后的界面如下。

d38e2e560aae3f74e24690633931179f.png

添加 OPC UA 服务器

依次单击菜单栏 Server - Add,或者直接单击工具栏的  图标,会弹出添加服务器对话框。双击 Custom Discovery 下面的文字,输入 OPC UA 服务器的地址和端口号。

ddc6b3e53877b9b7172e9916c8dc9c72.png

完成后会看到新添加的 OPC UA 服务器信息,选中开锁状 🔓 图标,并单击 OK 按钮,即完成服务器添加的操作。

71201acc50e7d191c3dc46ab9e43541c.png

连接 OPC UA 服务器

服务器添加完成后,在左侧项目树的 Servers 会显示相关信息,此时服务器尚未连接。单击工具栏的插头 🔌 图标,或者右击服务器点击 Connect,即可连接服务器。

f4297aedef02b1a84b6c6a6aaf28c3bc.png

查看 PLC 数据

成功连接后,会在界面左下侧 Address Space 显示 PLC 中的相关数据。找到想要监控(订阅)的数据,将其直接拖放到界面中间的 Data Access View 就可以实时观察数据的变化。界面右侧 Attributes 可以显示选中节点的相关属性。

dd11892353ce2cbb257c80a91f0b1e36.png

使用 C# 读写 OPC UA 数据

首先需要在项目中引用 NuGet 包 OPCFoundation.NetStandard.Opc.Ua

连接到 OPC UA 服务器

  1. 创建一个应用配置对象,用于设置应用名称、唯一标识、类型、证书和安全策略;

    // 创建一个应用配置对象,用于设置应用名称、唯一标识、类型、证书和安全策略
    var config = new ApplicationConfiguration()
    {
        ApplicationName = "MyClient",
        ApplicationUri = Utils.Format(@"urn:{0}:MyClient", System.Net.Dns.GetHostName()),
        ApplicationType = ApplicationType.Client,
        SecurityConfiguration = new SecurityConfiguration
        {
            ApplicationCertificate = new CertificateIdentifier { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = "MyClientSubjectName" },
            TrustedIssuerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities" },
            TrustedPeerCertificates = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications" },
            RejectedCertificateStore = new CertificateTrustList { StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates" },
            AutoAcceptUntrustedCertificates = true,
            RejectSHA1SignedCertificates = false,
            MinimumCertificateKeySize = 1024,
            NonceLength = 32,
        },
        TransportConfigurations = new TransportConfigurationCollection(),
        TransportQuotas = new TransportQuotas { OperationTimeout = 15000 },
        ClientConfiguration = new ClientConfiguration { DefaultSessionTimeout = 60000 },
        TraceConfiguration = new TraceConfiguration()
    };
    
    // 验证应用配置对象
    await config.Validate(ApplicationType.Client);
    
    // 设置证书验证事件,用于自动接受不受信任的证书
    if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
    {
        config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
    }
  2. 检查应用实例对象的证书;

    // 创建一个应用实例对象,用于检查证书
    var application = new ApplicationInstance(config);
    
    // 检查应用实例对象的证书
    bool check = await application.CheckApplicationInstanceCertificate(false, 2048);
  3. 创建一个会话对象,用于连接到 OPC UA 服务器;

    // 创建一个会话对象,用于连接到 OPC UA 服务器
    EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint("opc.tcp://192.168.0.100:4840", true);
    EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(config);
    ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);
    Session session = await Session.Create(config, endpoint, false, false, "DataCollector", 60000, new UserIdentity(), null);

获取节点的值

  1. 单次读取节点的值

    DataValue value = session.ReadValue(nodeId: "ns=6;s=::MyNode");
    Console.WriteLine("{0}, {1}, {2}", value.Value, value.SourceTimestamp, value.StatusCode);
  2. 订阅读取节点的值

    // 创建一个订阅对象,用于订阅节点的值
    var subscription = new Subscription(session.DefaultSubscription) { PublishingInterval = 1000 };
    session.AddSubscription(subscription);
    subscription.Create();
    
    // 创建一个监视项对象,用于指定要订阅的节点
    MonitoredItem monitoredItem = new MonitoredItem()
    {
        DisplayName = "MyNode",
        StartNodeId = "ns=6;s=::MyNode"
    };
    
    // 添加一个通知事件,用于处理节点值的变化
    monitoredItem.Notification += (item, e) =>
    {
        foreach (var value in item.DequeueValues())
        {
            Console.WriteLine("{0}: {1}, {2}, {3}", item.DisplayName, value.Value, value.SourceTimestamp, value.StatusCode);
        }
    };
    
    // 将监视项对象添加到订阅对象中
    subscription.AddItem(monitoredItem);
    
    // 应用订阅的变化
    subscription.ApplyChanges();

1c1907651b4f24f249b7d2e29918b0f6.png

写入节点的值

// 写入数据到节点
WriteValue value = new WriteValue()
{
    NodeId = "ns=6;s=::MyNode",
    Value = new DataValue(new Variant(123))
};

ResponseHeader response = session.Write(null, new WriteValueCollection { value }, out StatusCodeCollection statuses, out DiagnosticInfoCollection diagnostics);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OPC UA Server是一个开放式通讯协议,是现在工业物联网应用最重要的通讯协议之一。通过OPC UA Server可以让不同供应商、不同平台、不同语言的设备之间进行无缝的通讯。OPC UA Server .NET 开发是在.NET平台上基于OPC UA技术实现设备间通信的一种方式。 在开发OPC UA Server .NET应用时,需要使用OPC UA库和工具包来快速开发功能丰富、可靠性高的应用程序。使用.NET工具包可以轻松构建完整的服务器,包括数据模型、事件、历史、安全和用户管理。与其他通信协议相比,OPC UA服务在数据安全、设备变化管理、日志记录等方面都有很好的支持和保障。 OPC UA Server .NET开发可应用于各类工业设备,如PLC、传感器、计量仪、阀门等。利用OPC UA通讯协议,不同设备间能够安全可靠地传输数据,数据的格式和内容也能很好地被解释和处理。这带来了很多实际应用场景,如大型工厂现场的远程监控、数据采集和智能控制等。 总而言之,OPC UA Server .NET开发是一项非常有前景的技术,能为工业物联网的发展和应用带来更多益处。 ### 回答2: OPC UA(Object Linking and Embedding for Process Control Unified Architecture)是一种开放的工业自动化通信协议OPC UA Server是为了实现OPC的通信功能而开发出来的软件,负责监控与控制工业设备和系统的状态并将数据在网络上实现传输。.NET是一个由微软公司推出的软件平台,提供了一个运行环境和框架,开发人员可以在其上构建各种不同类型软件系统。 OPC UA Server .NET开发是基于.NET平台的OPC UA服务器开发。需要一个OPC UA客户端来连接到服务器,传输数据或控制设备。在OPC UA Server .NET开发过程,需要使用.NET技术和OPC UA标准来开发软件。主要的开发工具包括Visual Studio等.NET开发环境和UA .NET Standard Library等OPC UA库。 在开发过程,开发人员需要了解OPC UA标准的相关知识,了解UA数据和UA服务,了解UA节点和节点模型,以及数据模型和访问模型。还需要了解UA传输协议和群组协议,应该如何处理数据丢失和故障恢复。通过开发,可以实现OPC UA服务端的创建、节点管理、间件开发、UA对象模型、数据编解码等功能。 总的来说,OPC UA Server .NET开发是为了受控环境提供可靠和安全的通信和控制服务。通过应用.NET技术和OPC UA标准实现OPC UA服务端的开发,可以满足不同行业的生产和工艺流程的监测、调度和管理需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值