OpcUaExtension.cs 2.03 KB
using HHECS.BllModel;
using HHECS.Communication;
using HHECS.Model.Entities;
using Opc.Ua;
using Opc.Ua.Client;
using OpcUaHelper;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace HHECS.Executor
{
    /// <summary>
    /// PLC读写扩展类
    /// </summary>
    public static class OpcUaExtension
    {
        private static Session m_session;
        /// <summary>
        /// read several value nodes from server
        /// </summary>
        /// <param name="tags">所以的节点数组信息</param>
        /// <returns>all values</returns>
        public static List<T> ReadNodes<T>(params BusCollectionCommand[] collectionCommands)
        {
            var nodesToRead = collectionCommands.Select(t => new ReadValueId()
            {
                NodeId = new NodeId(t.CommandCode),
                AttributeId = Attributes.Value

            }).ToList();
            List<T> result = new List<T>();

            // 读取当前的值
            var ss = m_session.Read(
                null,
                0,
                TimestampsToReturn.Neither,
                (ReadValueIdCollection)nodesToRead,
                out DataValueCollection results,
                out DiagnosticInfoCollection diagnosticInfos);
            ClientBase.ValidateResponse(results, nodesToRead);
            for (int i = 0; i < results.Count; i++)
            {
                collectionCommands[i].Value = (string)results[i].Value;
            }

            ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToRead);

            foreach (var item in results)
            {
                result.Add((T)item.Value);
            }
            return result;
        }


        /// <summary>
        /// connect to server
        /// </summary>
        /// <param name="serverUrl">remote url</param>
        public static  bool ConnectServer(string serverUrl ,OpcUaClient opcUaClient)
        {
            opcUaClient.ConnectServer(serverUrl);
            return opcUaClient.Connected;
        }
    }
}