/// <summary> /// starts a modbus server to comunicate with the PLC on PLC_port and local_ip /// then sets up a modbus client to comunicate with the MCU located at MCU_ip, MCU_port (192.168.0.50 , 502) for actual hardware /// </summary> /// <param name="local_ip"></param> /// <param name="MCU_ip"></param> /// <param name="MCU_port"></param> /// <param name="PLC_port"></param> public ProductionPLCDriver(string local_ip, string MCU_ip, int MCU_port, int PLC_port) : base(local_ip, MCU_ip, MCU_port, PLC_port) { limitSwitchData = new Simulators.Hardware.LimitSwitchData(); homeSensorData = new Simulators.Hardware.HomeSensorData(); pLCEvents = new PLCEvents(); MCU = new MCUManager(MCU_ip, MCU_port); try { PLCTCPListener = new TcpListener(new IPEndPoint(IPAddress.Parse(local_ip), PLC_port)); ClientManagmentThread = new Thread(new ThreadStart(HandleClientManagementThread)) { Name = "PLC server Thread" }; } catch (Exception e) { if ((e is ArgumentNullException) || (e is ArgumentOutOfRangeException)) { logger.Info(Utilities.GetTimeStamp() + ": [AbstractPLCDriver] ERROR: failure creating PLC TCP server or management thread: " + e.ToString()); return; } else { throw e; } // Unexpected exception } try { PLCTCPListener.Start(1); } catch (Exception e) { if ((e is SocketException) || (e is ArgumentOutOfRangeException) || (e is InvalidOperationException)) { logger.Info(Utilities.GetTimeStamp() + ": [AbstractPLCDriver] ERROR: failure starting PLC TCP server: " + e.ToString()); return; } } }