private void BtnConnectClick(object sender, EventArgs e) { try { switch (CommunicationMode) { case CommunicationMode.RTU: _uart = new SerialPort(PortName, Baud, Parity, DataBits, StopBits); _uart.Open(); _portClient = _uart.GetClient(); _driver = new ModbusClient(new ModbusRtuCodec()) { Address = SlaveId }; _driver.OutgoingData += DriverOutgoingData; _driver.IncommingData += DriverIncommingData; AppendLog(String.Format("Connected using RTU to {0}", PortName)); break; case CommunicationMode.UDP: _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _socket.Connect(new IPEndPoint(IPAddress, TCPPort)); _portClient = _socket.GetClient(); _driver = new ModbusClient(new ModbusTcpCodec()) { Address = SlaveId }; _driver.OutgoingData += DriverOutgoingData; _driver.IncommingData += DriverIncommingData; AppendLog(String.Format("Connected using UDP to {0}", _socket.RemoteEndPoint)); break; case CommunicationMode.TCP: _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); _socket.SendTimeout = 2000; _socket.ReceiveTimeout = 2000; _socket.Connect(new IPEndPoint(IPAddress, TCPPort)); _portClient = _socket.GetClient(); _driver = new ModbusClient(new ModbusTcpCodec()) { Address = SlaveId }; _driver.OutgoingData += DriverOutgoingData; _driver.IncommingData += DriverIncommingData; AppendLog(String.Format("Connected using TCP to {0}", _socket.RemoteEndPoint)); break; } } catch (Exception ex) { AppendLog(ex.Message); return; } btnConnect.Enabled = false; buttonDisconnect.Enabled = true; groupBoxFunctions.Enabled = true; groupBoxTCP.Enabled = false; groupBoxRTU.Enabled = false; groupBoxMode.Enabled = false; grpExchange.Enabled = false; }