在 .NET 中使用 OPC UA 协议

这篇具有很好参考价值的文章主要介绍了在 .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 上使用。该协议提供了一个更为先进、安全和灵活的解决方案,适用于现代工业自动化和物联网环境中的设备间通信。

在 .NET 中使用 OPC UA 协议

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

在 .NET 中使用 OPC UA 协议

UaExpert 的使用

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

下载 UaExpert

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

在 .NET 中使用 OPC UA 协议

首次启动

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

在 .NET 中使用 OPC UA 协议

启动后的界面如下。

在 .NET 中使用 OPC UA 协议

添加 OPC UA 服务器

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

在 .NET 中使用 OPC UA 协议

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

在 .NET 中使用 OPC UA 协议

连接 OPC UA 服务器

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

在 .NET 中使用 OPC UA 协议

查看 PLC 数据

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

在 .NET 中使用 OPC UA 协议

使用 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();
    

在 .NET 中使用 OPC UA 协议文章来源地址https://www.toymoban.com/news/detail-843281.html

写入节点的值

// 写入数据到节点
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);

到了这里,关于在 .NET 中使用 OPC UA 协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PLC物联网网关BL104实现PLC协议转MQTT、OPC UA、Modbus TCP

    随着物联网技术的迅猛发展,人们深刻认识到在智能化生产和生活中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的物联网数据传输解决方案——协议转换网关应运而生,广泛应用于工业自动化和数字化工厂应用环境中。 无缝衔接工业4.0时代 尽享数字工厂

    2024年01月21日
    浏览(64)
  • 使用opc-ua-sim模拟server

    一直想找一种将模拟server放到docker容器中运行的方式,这样就不需要在每个电脑上都安装软件,仅仅只需要将镜像保存起来,使用时加载就行。于是乎就跑到了HUB里搜寻,你说巧不巧,就刚好找到了. 在HUB里找到这个作者(iotechsys)发布的镜像。里面有一个opc-ua-sim的镜像,这个

    2024年04月08日
    浏览(39)
  • Java使用Milo实现OPC UA客户端,封装spring boot starter

    最新版本更新日志查看:https://github.com/kangaroo1122/milo-spring-boot-starter/blob/main/UPDATE.md、https://gitee.com/vampire001/milo-spring-boot-starter/blob/master/UPDATE.md,此处不再更新 由eclipse开源,地址:https://github.com/eclipse/milo,可以基于此开发OPC UA客户端或者服务端。 本文介绍基于milo 封装的sp

    2024年02月09日
    浏览(45)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月20日
    浏览(38)
  • OPC UA 云端模型库

            UA 云库(opc ua cloud library)是互联网上可用的中央库,可以在其中上传配套规范 (CS) 并将其提供给其他人。许多CS是由OPC基金会的联合工作组开发和发布的。来自不同行业和应用领域的几位专家共同努力,为许多机器和系统提供了标准化的数据结构。此外,还可

    2024年02月07日
    浏览(43)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月16日
    浏览(54)
  • 通过Milo实现的OPC UA客户端连接并订阅Prosys OPC UA Simulation Server模拟服务器

    前面我们搭建了一个本地的 PLC 仿真环境,并通过 KEPServerEX6 读取 PLC 上的数据,最后还使用 UAExpert 作为 OPC 客户端完成从 KEPServerEX6 这个OPC服务器的数据读取与订阅功能:SpringBoot集成Milo库实现OPC UA客户端:连接、遍历节点、读取、写入、订阅与批量订阅。 注意,如果实际工

    2024年02月16日
    浏览(50)
  • OPC UA:工业领域的“HTML”

            OPC   UA 是工业自动化领域的一项重要的通信协议。它的特点是包括了信息模型构建方法。能够建立工业领域各种事物的信息模型。在工业自动化行业,OPCUA 类似互联网行业的HTTP协议和“HTML”语言。能够准确,可靠地描述复杂系统中各个元素,并且实现系统组件

    2024年02月08日
    浏览(42)
  • 【Python】OPC UA模拟服务器实现

     在工业自动化和物联网(IoT)领域,OPC UA(开放平台通信统一架构)已经成为一种广泛采用的数据交换标准。它提供了一种安全、可靠且独立于平台的方式来访问实时数据。在本文中,我们将探讨如何使用Python和OPC UA库来创建一个高效的数据服务器,该服务器能够从CSV文件

    2024年04月29日
    浏览(65)
  • OPC UA 服务器的Web访问

         基于Web 的应用非常普及,例如基于web 的SCADA ,物联网 Dashboard 等等,那么基于Web 的应用如何访问OPC UA 服务器呢?本博文讨论这方面的问题。         Web 是我们通常讲的网站,它由浏览器,HTTP 服务器和网页组成的。HTTP服务器通常称为后端,HTTP 网页在浏览器中解析

    2024年04月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包