//PLC参数管理类 using MvvmScaffoldFrame48.DLL.AlarmTools; using MvvmScaffoldFrame48.DLL.LogTools; using MvvmScaffoldFrame48.Model.StorageModel.PlcParameter; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MvvmScaffoldFrame48.DLL.CommunicationTools { public class PlcCommunManager { private static readonly Dictionary BitMasks = new Dictionary { // 寄存器位掩码 {0, (ushort)(1 << 0)}, {1, (ushort)(1 << 1)}, {2, (ushort)(1 << 2)}, {3, (ushort)(1 << 3)}, {4, (ushort)(1 << 4)}, {5, (ushort)(1 << 5)}, {6, (ushort)(1 << 6)}, {7, (ushort)(1 << 7)}, {8, (ushort)(1 << 8)}, {9, (ushort)(1 << 9)}, {10, (ushort)(1 << 10)}, {11, (ushort)(1 << 11)}, {12, (ushort)(1 << 12)}, {13, (ushort)(1 << 13)}, {14, (ushort)(1 << 14)}, {15, (ushort)(1 << 15)}, }; private static readonly Dictionary RegisterMap = new Dictionary { {"test1",new PlcValueBitParameterModel(0,0) } }; private bool isConnect = false; public bool IsConnect { get { return isConnect ? modbusTcpClient.IsTcpClientConnected() : isConnect; } } public ModbusTcpClient modbusTcpClient = new ModbusTcpClient(); public PlcCommunManager(string IpAddress) { ConnectModbus(IpAddress); } public void ConnectModbus(string ipAddress) { int i = 10; while (!modbusTcpClient.Connect(ipAddress) && i > 0) { isConnect = false; //SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, $"Modbus通讯连接失败,目标IP:{ipAddress}", "DLL:MainThreadClass-ConnectModbus"); SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, $"PLC communication connection failed, target IP:{ipAddress}", $"PLC通讯连接失败, IP地址:{ipAddress}", "DLL:MainThreadClass-ConnectModbus"); i--; Task.Delay(1000); } if (modbusTcpClient.Connect(ipAddress)) { SystemAlarm.AlarmCancel(AlarmMessageList.PLC通讯连接失败); TxtLog.log("PLC通讯成功", 6); //FaultLog.RecordLogMessage($"Modbus通讯连接成功,目标IP:{ipAddress}", 6); isConnect = true; } } } }