private EasyModbus.ModbusClient TryGetConnectedClient(string ip, int port) { lock (_clientLock) { var modbusDescriptor = ModbusServerDescriptor.Create(ip, port); var client = _modbusClientCache.GetValueOrDefault(modbusDescriptor); if (client == null) { client = new EasyModbus.ModbusClient(ip, port); _modbusClientCache.Add(modbusDescriptor, client); } try { if (!client.Connected) { client.Connect(); } } catch (Exception exception) { Logger.Error("ModbusTcp connection error", exception); client.Disconnect(); _modbusClientCache.Remove(modbusDescriptor); throw exception; } return(client); } }
private void RemoveDeadClient(string ip, int port) { lock (_clientLock) { var modbusDescriptor = ModbusServerDescriptor.Create(ip, port); if (_modbusClientCache.ContainsKey(modbusDescriptor)) { _modbusClientCache[modbusDescriptor].Disconnect(); _modbusClientCache.Remove(modbusDescriptor); } } }