/// <summary> /// Attempts to set the PLC network configuration /// </summary> /// <param name="newConfig"></param> /// <param name="attempts"></param> /// <returns></returns> private plcNetworkConfig setPLCNetworkRecursively(plcNetworkConfig newConfig, int attempts = 0) { int maxAttempts = 10; if (attempts >= maxAttempts) { throw new Exception("Could not set new plc network config. Exceeded Max Write Attempts"); } string newIP = $"{newConfig.newIP1}.{newConfig.newIP2}.{newConfig.newIP3}.{newConfig.newIP4}"; Console.WriteLine($"Attempt number {attempts} at setting the PLC to {newIP}"); // create a new service with a connection to the PLC var service = new SmartDASService(); service.Connect(); plcNetworkConfig oldConfig = service.getPLCNetwork(); // Attempt to set the PLC network configuration service.setPLCNetwork(newConfig); // Disconnect the currently active connection with the PLC service.Disconnect(); // Check that the current configuration is in the same network group as // the old configuration. e.g. if the old config is 192.168.1.5 and the new config is 192.168.122.7 // then do not recursively check if it can access the plc, because the user has to enter the new // ip address in their network configuration. if the old config is 192.168.1.5 and the new config // is 192.168.1.124, then recursively validate the ip adddress on the plc is correct. if ( oldConfig.newIP1 != newConfig.newIP1 || oldConfig.newIP2 != newConfig.newIP2 || oldConfig.newIP3 != newConfig.newIP3 ) { return(newConfig); } // Set the service ip address to the new PLC ip address service.IP = newIP; // Check the configuration read back from the controller matches the new configuration attempting to be stored // Attempt to reconnect to the PLC int connectResult = service.Connect(); // Disconnect the currently active connection with the PLC service.Disconnect(); // Check that the connection returned a non-zero error code if (connectResult == 0) { return(newConfig); } else { // Try to set the PLC network again return(this.setPLCNetworkRecursively(newConfig, attempts += 1)); } }