Menu

Capture Exceptions.

Jeremy
2017-04-16
2017-04-16
  • Jeremy

    Jeremy - 2017-04-16

    Hi there

    Was wondering a good way to capture exceptions. what i mean is.
    i get error
    "No connection could be made because the target machine actively refused it"
    or
    "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host."

    Want a way to capture it/prvent the exception.

    this is my current code

    try
                    {
                        if (!_modBus.Connected)
                        {
                            _modBus.Connect();
                        }
                        //add 1 to the value
                        int[] numArray = _modBus.ReadHoldingRegisters(4372, 1);
                        int[] numArray2 = _modBus.ReadHoldingRegisters(4275, 1); //Battery Volts (4276)
                        int[] numArray3 = _modBus.ReadHoldingRegisters(4108, 1); //Net AMps (4109)
                        int[] numArray4 = _modBus.ReadHoldingRegisters(4376, 1); //PV Volts (4377)
                        int[] numArray6 = _modBus.ReadHoldingRegisters(4370, 1); //Whizbang Amps (4370)
                        int[] numArray7 = _modBus.ReadHoldingRegisters(4116, 1); //Charging Amps (4116)
                        int[] numArray8 = _modBus.ReadHoldingRegisters(4120, 1); //PV Amps (4121)
                        int[] numArray9 = _modBus.ReadHoldingRegisters(4118, 1); //Battery Watts (4119)
                        int[] numArray10 = _modBus.ReadHoldingRegisters(4115, 1); //PV Volts (4116)
                        int[] numArray11 = _modBus.ReadHoldingRegisters(4132, 1); //FET Temp (4133)
                        int[] numArray12 = _modBus.ReadHoldingRegisters(4133, 1); //PCB Temp (4133)
                        int[] numArray13 = _modBus.ReadHoldingRegisters(4101, 1); //Firmware Date (4102)
                        int[] numArray14 = _modBus.ReadHoldingRegisters(4102, 1); //Firmware Version (4103)
                        int[] numArray15 = _modBus.ReadHoldingRegisters(4119, 1); //Charge State (4120)
                        int[] numArray16 = _modBus.ReadHoldingRegisters(4100, 1); //Charge State (4101)
                        _modBus.ReadHoldingRegisters(4132, 1);
                        _modBus.ReadHoldingRegisters(4133, 1);
                        int[] numArray5 = _modBus.ReadHoldingRegisters(4131, 1); //Battery Temp (4132)
    
                        _modBus.Disconnect();
    
                        if (numArray[0] > 0)
                        {
                            _modBus.ReadHoldingRegisters(4372, 1);
    
                            GlobalVar.Midnite_Classic_soc = Convert.ToString(numArray[0]);
                            GlobalVar.Midnite_Classic_neta = Convert.ToString(numArray3[0]);
                            GlobalVar.Midnite_Classic_rea = Convert.ToString(numArray4[0]);
                            GlobalVar.Midnite_Classic_battemp = Convert.ToString(Convert.ToDecimal(numArray5[0]) / 10M);
                            GlobalVar.Midnite_Classic_v = Convert.ToString(Convert.ToDecimal(numArray2[0]) / 10M);
                            GlobalVar.Midnite_Classic_amps_Whizbang = Convert.ToString(Convert.ToDecimal(numArray6[0]) / 10M);
                            GlobalVar.Midnite_Classic_amps = Convert.ToString(Convert.ToDecimal(numArray7[0]) / 10M);
                            GlobalVar.Midnite_Classic_pa = Convert.ToDecimal(numArray8[0]) / 10M;
                            GlobalVar.Midnite_Classic_watts = Convert.ToDecimal(numArray9[0]);
                            GlobalVar.Midnite_Classic_pv = Convert.ToDecimal(Convert.ToString(numArray10[0])) / 10M;
                            GlobalVar.Midnite_Classic_FETtemp = Convert.ToString(Convert.ToDecimal(Convert.ToString(numArray11[0])) / 10M);
                            GlobalVar.Midnite_Classic_temp = Convert.ToString(Convert.ToDecimal(Convert.ToString(numArray12[0])) / 10M);
                            GlobalVar.Midnite_Classic_fw = Convert.ToString(numArray13[0]) + Convert.ToString(numArray14[0]);
    
                            ushort value = Convert.ToUInt16(numArray15[0]);
                            byte lsb = (byte)(value & 0xFFu);
                            byte msb = (byte)((value >> 8) & 0xFFu);
    
                            GlobalVar.Midnite_Classic_ChargeStatus = msb.ToString();
    
                            value = Convert.ToUInt16(numArray16[0]);
                            lsb = (byte)(value & 0xFFu);
                            GlobalVar.Midnite_Classic_type = lsb.ToString();
    
                            loadclassic();
                        }
                    }
                    catch ( IOException exception1)
                    {
                        oErrorLog.WriteErrorLog("Classic", "Error", "ClassicConnect1: Line: " + exception1.LineNumber() + " - " + exception1.Message);
                    }
                }
    
     
    • Rossmann Engineering

      Hi,
      i am not sure if I understood what you mean. There is no way to avoid that an exception will be thrown in case of an unreachable server.
      What you could do is disconnecting in a finally block, and trying to reconnect and read the data again in a loop until the server is back on.
      Stefan

       

Anonymous
Anonymous

Add attachments
Cancel





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.