public bool connect(IPAddress ip, ushort port, bool reconnect = false) { try { omronPlc.Close(); } catch { } this.ip = ip; this.port = port; if (reconnect) { ConnectionStatus = ConnectionStatusEnum.RECONNECTING; AutoReconnectAfterConnectionLostCounter++; } else { ConnectionStatus = ConnectionStatusEnum.CONNECTING; } tcpCommand.SetTCPParams(ip, port); if (!tryAndConnect()) { if (ConnectionStatus != ConnectionStatusEnum.DISCONNECTED && ConnectionStatus != ConnectionStatusEnum.RECONNECTING) { ConnectionStatus = ConnectionStatusEnum.CONNECTION_FAILED; connectionMonitor.Enabled = false; } return(false); } ConnectionStatus = ConnectionStatusEnum.CONNECTED; AutoReconnectAfterConnectionLostCounter = 0; connectionMonitor.Enabled = true; return(true); }
private bool tryAndConnect() { Func <bool> testDataRead = (() => { try { if (omronPlc.finsConnectionDataRead(0)) { return(true); } } catch (Exception e) { return(false); } return(false); }); Func <bool> testNewConnect = (() => { try { omronPlc = new OmronPLC(mcOMRON.TransportType.Tcp); tcpCommand = ((mcOMRON.tcpFINSCommand)omronPlc.FinsCommand); tcpCommand.SetTCPParams(ip, port); if (omronPlc.Connect()) //why exception //omronPlc.Close(); { return(true); } } catch (Exception e) { return(false); } return(false); }); if (testDataRead()) { return(true); } else if (testNewConnect()) { return(true); } return(false); }