MitsubishiMcPLC.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using OpcUaHelper;
  2. using System;
  3. using System.Threading.Tasks;
  4. using TeamAAS_VP.Enums;
  5. using TeamAAS_VP.Interfaces;
  6. using TeamAAS_VP.Models;
  7. namespace TeamAAS_VP.Core.PLCs
  8. {
  9. /// <summary>
  10. /// 三菱 MC 协议 PLC,封装 <see cref="MitsubishiPLC"/> 并实现 <see cref="IPlc"/> 供 PlcService 统一管理。
  11. /// </summary>
  12. public class MitsubishiMcPLC : IPlc
  13. {
  14. public MitsubishiPLC Client { get; private set; }
  15. public Guid Id { get; private set; }
  16. public CommunicationType CommunicationType { get; private set; }
  17. public string EndpointUrl { get; private set; }
  18. public string Name { get; private set; }
  19. public OpcUaClient OpcUaClient => null;
  20. public bool IsConnected => Client != null && Client.IsConnected;
  21. public event Action<object, bool> ConnectChangedEvent;
  22. public MitsubishiMcPLC(PlcInfo plcInfo)
  23. {
  24. if (plcInfo == null)
  25. throw new ArgumentNullException(nameof(plcInfo));
  26. Id = plcInfo.Id;
  27. Name = plcInfo.Name;
  28. CommunicationType = plcInfo.CommunicationType;
  29. EndpointUrl = plcInfo.PlcIp + ":" + plcInfo.PlcPort;
  30. Client = new MitsubishiPLC(plcInfo.PlcIp, plcInfo.PlcPort);
  31. Client.ConnectionLost += () => ConnectChangedEvent?.Invoke(this, false);
  32. }
  33. public void Connect()
  34. {
  35. bool connected = Client.Connect();
  36. ConnectChangedEvent?.Invoke(this, connected);
  37. }
  38. public Task ConnectAsync()
  39. {
  40. return Task.Run(Connect);
  41. }
  42. public void Disconnect()
  43. {
  44. Client.Disconnect();
  45. ConnectChangedEvent?.Invoke(this, false);
  46. }
  47. public void Dispose()
  48. {
  49. Client.Dispose();
  50. }
  51. }
  52. }