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