Menu

Client Connection time out

2017-06-14
2018-09-04
  • Samuel Augustine

    I tried to read registers continously in an infinite loop, but it terminates after a while , is there a way to avoid this??

     
    • Rossmann Engineering

      Hi,

      could you attach some sourcecode?

       
  • Samuel Augustine

    Hello,

    Thank you for your response, This is what I tried:

    public static void Main(string[] args)
    {
    for (int i = 1; i > 0; i++)
    {
    ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502);
    modbusClient.Connect();
    int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10);
    Console.WriteLine("Value of A " + " " + readHoldingRegisters[0].ToString());
    Console.WriteLine("Value of B " + " " + readHoldingRegisters[1].ToString());
    Console.WriteLine("Value of C " + " " + readHoldingRegisters[2].ToString());
    Thread.Sleep(1000);
    }

    After few minutes it goes:
    An IOException was unhandled
    Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

    Please help me with this.

     
    • Rossmann Engineering

      Hi Samuel,

      what you could try is either to call the "connect()" method outside the loop, or after reading the values to disconnect.

      somthing like:
      public static void Main(string[] args)
      {
      ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502);
      for (int i = 1; i > 0; i++)
      {
      modbusClient.Connect();
      int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10);
      Console.WriteLine("Value of A " + " " + readHoldingRegisters[0].ToString());
      Console.WriteLine("Value of B " + " " + readHoldingRegisters[1].ToString());
      Console.WriteLine("Value of C " + " " + readHoldingRegisters[2].ToString());
      modbusClient.Disconnect();
      Thread.Sleep(1000);
      }

      or

      public static void Main(string[] args)
      {
      ModbusClient modbusClient = new ModbusClient("127.0.0.1", 502);
      modbusClient.Connect();
      for (int i = 1; i > 0; i++)
      {
      int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10);
      Console.WriteLine("Value of A " + " " + readHoldingRegisters[0].ToString());
      Console.WriteLine("Value of B " + " " + readHoldingRegisters[1].ToString());
      Console.WriteLine("Value of C " + " " + readHoldingRegisters[2].ToString());
      Thread.Sleep(1000);
      }

       
  • Anonymous

    Anonymous - 2017-06-15

    Hi,

    It worked, Thank you so much.

     
  • Tai Nguyen

    Tai Nguyen - 2018-09-04

    I got same error. Everything work fine but suddenly it disconnect and then i can't reconnect and get error Connection time out
    my code:
    private void timer3_Tick(object sender, EventArgs e)
    {
    timer3.Enabled = false;
    int num = 34;
    ModbusClient mb3 = new ModbusClient();
    try
    {
    if (!mb3.Connected)
    {
    //mb3.Port = 1024;
    mb3 = new ModbusClient(dtOmron.Rows[2]["IP"].ToString(), 502);
    mb3.ConnectionTimeout = 1000;
    mb3.Connect();
    lblStatus3.Text = dtOmron.Rows[2]["IP"].ToString() + " Connected";
    }

                if (!mb3.Connected)
                {
                    lblStatus3.Text = dtOmron.Rows[2]["IP"].ToString() + " Disconnected";
                    dtTam.Rows[0][dtOmron.Rows[2]["IP"].ToString() + "/502"] = dtOmron.Rows[2]["IP"].ToString() + " Disconnected";
                }
                else
                {
                    int startingAddress = Convert.ToInt32(dtOmron.Rows[2]["StartIndex"]);
                    int quantity = Convert.ToInt32(dtOmron.Rows[2]["Length"]);
                    if (quantity > 0)
                    {
                        int[] numArray = mb3.ReadHoldingRegisters(startingAddress, quantity + 1);
    
                        //ma22 1-3
                        for (int i = 50; i < 80; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                dtTam.Rows[0][num] = ChuyenDoi(i, numArray[i], numArray[i + 1]);
                                num++;
                            }
                        }
                        num = 115;
                        //ma22 10
                        for (int i = 20; i < 30; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                dtTam.Rows[0][num] = ChuyenDoi(i, numArray[i], numArray[i + 1]);
                                num++;
                            }
                        }
                        //ma22 11
                        for (int i = 10; i < 20; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                dtTam.Rows[0][num] = ChuyenDoi(i, numArray[i], numArray[i + 1]);
                                num++;
                            }
                        }
                        //ma22 12
                        for (int i = 0; i < 10; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                dtTam.Rows[0][num] = ChuyenDoi(i, numArray[i], numArray[i + 1]);
                                num++;
                            }
                        }
                        num = 196;
                        //ma22 19,20
                        for (int i = 30; i < 50; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                dtTam.Rows[0][num] = ChuyenDoi(i, numArray[i], numArray[i + 1]);
                                num++;
                            }
                        }
                        //Anneal voltage+ current cua la19 01,02
                        //la19 01
                        num = 8;
                        for (int i = 80; i < 82; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                if (i == 80)
                                {
                                    float tg = numArray[i];
                                    dtTam.Rows[0][num] = tg / 10;
                                }
                                else
                                    dtTam.Rows[0][num] = numArray[i];
    
    
                                num++;
                            }
                        }
                        //la19 02
                        num = 21;
                        for (int i = 82; i < 84; i++)
                        {
                            if (i.ToString()[i.ToString().Length - 1] != '7')
                            {
                                if (i == 82)
                                {
                                    float tg = numArray[i];
                                    dtTam.Rows[0][num] = tg / 10;
                                }
                                else
                                    dtTam.Rows[0][num] = numArray[i];
    
    
                                num++;
                            }
                        }
                    }
                    mb3.Disconnect();
    
                }
    
                //  lblStatus3.Text = dtOmron.Rows[2]["IP"].ToString() +" Disconnected";
            }
            catch (Exception exception)
            {
                lblStatus3.Text = dtOmron.Rows[2]["IP"].ToString() + " Error: " + exception.Message;
                dtTam.Rows[0][dtOmron.Rows[2]["IP"].ToString() + "/502"] = "Error: " + exception.Message;
                mb3.Disconnect();
            }
            timer3.Enabled = true;
    

    }

     

Anonymous
Anonymous

Add attachments
Cancel





MongoDB Logo MongoDB