using OpcUaHelper; using System; using System.Threading.Tasks; using TeamAAS_VP.Enums; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; namespace TeamAAS_VP.Core.PLCs { /// /// 三菱 MC 协议 PLC,封装 并实现 供 PlcService 统一管理。 /// public class MitsubishiMcPLC : IPlc { public MitsubishiPLC Client { get; private set; } public Guid Id { get; private set; } public CommunicationType CommunicationType { get; private set; } public string EndpointUrl { get; private set; } public string Name { get; private set; } public OpcUaClient OpcUaClient => null; public bool IsConnected => Client != null && Client.IsConnected; public event Action ConnectChangedEvent; public MitsubishiMcPLC(PlcInfo plcInfo) { if (plcInfo == null) throw new ArgumentNullException(nameof(plcInfo)); Id = plcInfo.Id; Name = plcInfo.Name; CommunicationType = plcInfo.CommunicationType; EndpointUrl = plcInfo.PlcIp + ":" + plcInfo.PlcPort; Client = new MitsubishiPLC(plcInfo.PlcIp, plcInfo.PlcPort); Client.ConnectionLost += () => ConnectChangedEvent?.Invoke(this, false); } public void Connect() { bool connected = Client.Connect(); ConnectChangedEvent?.Invoke(this, connected); } public Task ConnectAsync() { return Task.Run(Connect); } public void Disconnect() { Client.Disconnect(); ConnectChangedEvent?.Invoke(this, false); } public void Dispose() { Client.Dispose(); } } }