C#调用OPC UA 解决方案

1、Opc 基金会git地址:OPC Foundation · GitHub

其中:UA-.NETStandard  、UA-.NETStandard-Samples比价有参考价值

2、参数传递方式:ns=2;s=参数名(ns表示命名空间索引,一般为2)

特殊情况可以查看所有命名空间:ns=0;i=2255,也可以用(OpcUaHelper.Tool)工具查看

下载地址:C#opc学习资源代码-其它文档类资源-优快云下载

3、根据opc基金会提供方法整理出调用代码:OPCUAC#控制类库-制造文档类资源-优快云下载

using Opc.Ua;
using Opc.Ua.Client;
using Opc.Ua.Configuration;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace OPCUALink
{
    /// <summary>
    /// OPC UA Client with examples of basic functionality.
    /// </summary>
    public class UAClient
    {
        #region Constructors
        public UAClient(bool isdebug = false)
        {
            if (isdebug)
            {
                return;
            }
            ApplicationInstance application = new ApplicationInstance();
            application.ApplicationName = SessionName;
            application.ApplicationType = ApplicationType.Client;
            //加载配置文件
            application.LoadApplicationConfiguration(ConfigPath, silent: false).Wait();
            // check the application certificate.
            //application.CheckApplicationInstanceCertificate(silent: false, minimumKeySize: 0).Wait();
            m_validateResponse = ClientBase.ValidateResponse;
            m_configuration = application.ApplicationConfiguration;
            m_configuration.CertificateValidator.CertificateValidation += CertificateValidation;
            ReceiveMsg += Msg;
        }
        #endregion

        #region Public Properties
        /// <summary>
        /// session.
        /// </summary>
        public Session Session => m_session;
        public static string conStr = "ns=3;s=";
        /// <summary>
        /// session名称
        /// </summary>
        public string SessionName { get; set; } = "DefaultSession";
        /// <summary>
        /// opcua服务地址
        /// </summary>
        public string ServerUrl { get; set; } = "opc.tcp://192.168.0.1/";
        /// <summary>
        /// 配置文件
        /// </summary>
        public string ConfigPath { get; set; } = "ConsoleReferenceClient.Config.xml";
        /// <summary>
        /// 日志委托
        /// </summary>
        public Action<string> LogAction { get; set; } = t => { Console.Write(t); };
        /// <summary>
        /// 订阅委托
        /// </summary>
        /// <param name="DisplayName"></param>
        /// <param name="Value"></param>
        public delegate void ShowMonitoredItemNotification(string DisplayName, string Value);
        public ShowMonitoredItemNotification ReceiveMsg;
        #endregion

        #region Public Methods
        /// <summary>
        /// 连接服务器
        /// </summary>
        public async Task<bool> ConnectAsync()
        {

            try
            {
                //if (m_session != null && m_session.Connected && m_session.SessionId.ToString() == null)
                //{
                //    LogAction?.Invoke("Session already connected!");
                //}
                //else
                //{
                //    LogAction?.Invoke("Connecting...");
                //    EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(ServerUrl, false);
                //    EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(m_configuration);
                //    Session session = await Session.Create(endpoint: new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration), configuration: m_configuration, updateBeforeConnect: false, checkDomain: false, sessionName: m_configuration.ApplicationName, sessionTimeout: 1800000u, identity: new UserIdentity(), preferredLocales: null);
                //    if (session?.Connected ?? false)
                // 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值