KukaAvarProxyCommunication.cs 3.09 KB
using DataAcquisitionServer.Common.Utils;
using DataAcquisitionServer.Models;
using HslCommunication;
using HslCommunication.Robot.KUKA;
using System.Text;

namespace DataAcquisitionServer.Common.Communications
{
    /// <summary>
    /// Kuka机器人通信
    /// </summary>
    public class KukaAvarProxyCommunication : ICommunication
    {
        public readonly KukaAvarProxyNet KukaAvar = null!;
        private readonly SystemLog systemLog = SystemLog.Instance;

        public string IpAddress => KukaAvar.IpAddress;

        public int CommunicationId { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

        private KukaAvarProxyCommunication() { }

        public KukaAvarProxyCommunication(int communicationId, string ipAddress, int port = 7000)
        {
            CommunicationId = communicationId;
            KukaAvar = new KukaAvarProxyNet(ipAddress, port);
            KukaAvar.SetPersistentConnection();
        }

        public OperateResult ConnectServer() => KukaAvar.ConnectServer();

        public OperateResult ConnectClose() => KukaAvar.ConnectClose();

        public void Read(IEnumerable<EquipmentProperty> equipmentProperties)
        {
            try
            {
                foreach (var item in equipmentProperties)
                {
                    var result = KukaAvar.Read(item.DataAddress);
                    if (!result.IsSuccess)
                    {
                        item.Value = string.Empty;
                        item.UpdateTime = DateTime.Now;
                        systemLog.LogError($"读取Kuka机器人[{KukaAvar.IpAddress}]地址{item.DataAddress}数据失败:{result.Message}");
                        return;
                    }
                    item.Value = Encoding.Default.GetString(result.Content);
                    item.UpdateTime = DateTime.Now;
                }
            }
            catch (Exception ex)
            {
                systemLog.LogError($"读取Kuka机器人[{KukaAvar.IpAddress}]数据失败:{ex.Message}");
            }
        }

        public void Read(EquipmentProperty equipmentProperty)
        {
            Read(new List<EquipmentProperty> { equipmentProperty });
        }

        public void Write(IEnumerable<EquipmentProperty> equipmentProperties)
        {
            try
            {
                foreach (var item in equipmentProperties)
                {
                    var result = KukaAvar.Write(item.DataAddress, item.Value);
                    if (!result.IsSuccess)
                    {
                        systemLog.LogError($"写入Kuka机器人[{KukaAvar.IpAddress}]_变量地址{item.DataAddress}失败:{result.Message}");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                systemLog.LogError($"写入Kuka机器人[{KukaAvar.IpAddress}]数据失败:{ex.Message}");
            }
        }

        public void Write(EquipmentProperty equipmentProperty)
        {
            Write(new List<EquipmentProperty> { equipmentProperty });
        }
    }
}