| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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
- {
- /// <summary>
- /// 三菱 MC 协议 PLC,封装 <see cref="MitsubishiPLC"/> 并实现 <see cref="IPlc"/> 供 PlcService 统一管理。
- /// </summary>
- 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<object, bool> 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();
- }
- }
- }
|