PLC to Arduino Yun problem- Modbus communication drops after 30 minutes

I'm using Momentum M1 PLC as Master to communicate Arduino Yun through the Modbus TCP/IP.
The code I am using is Yun-ModbusTK-Example, by ductsoup, that uses the Modbus-tk library.
I did some minor corrections to the sketch and Python codes to match the Modbus-tk current library version 0.5.0.
Everything run smoothly and the communication is very stable and fast but for 30 minutes after the sketch starts or mcu reset.
I thought maybe the problem is on the PLC side, then I tried the third party software Modscan32 and I got the same result, 30 minutes no less no more.
I changed the scan rate of the polling software and the loop delay in the sketch, I was able to make the communication faster or slower but only for 30 minutes every time.
Every time the communication drops I do reset-mcu through the SHH and it runs for another 30 minutes.
I did ping tests, continuously, to test the ethernet at the point the Modbus communication drops and the ping was very stable with 1ms response.

Here below are the sketch and Python codes

Any advice and suggestions will be greatly appreciated.

.ino

#include <Bridge.h>
long cnt = 0;
Process p;
#define BUF_SIZE 32
char buf[BUF_SIZE];

void setup() {
Serial.begin(115200);
// Start the bridge
Bridge.begin();
// Start the modbus server
p.begin("python");
p.addParameter("/mnt/sd/modbus_tcp_slave.py"); // modbus float holding registers
p.addParameter("1"); // read only start address
p.addParameter("6"); // read only number of holding registers
p.addParameter("101"); // read/write start address (optional)
p.addParameter("16"); // read/write number of holding registers (optional)
p.runAsynchronously();
}
void loop() {
// AVR -> WRT (modbus read only), write some values to the modbus server
Bridge.put("1", String(PI));
Bridge.put("3", String(loops));
Bridge.put("5", String(5));
Bridge.put("7", String(7));

// AVR <- WRT (modbus read/write), read some values from the modbus server
/*
Bridge.get("101", buf, BUF_SIZE);
Serial.println(atof(buf));
*/
cnt = cnt + 1;
Serial.println(cnt);

delay(500);
}

.py

#!/usr/bin/env python
# -*- coding: utf_8 -*-
"""
 Usage:
 server.py roStart roLength [rwStart rwLength]
"""

import sys
import time

# add logging capability
import logging
import threading

# add modbus
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_tcp
import struct

# add bridge
sys.path.insert(0, '/usr/lib/python2.7/bridge/')
from bridgeclient import BridgeClient as bridgeclient
avr = bridgeclient()

logger = modbus_tk.utils.create_logger(name="console", record_format="%(message)s")

if __name__ == "__main__":

  try:
    #Create the server
    server = modbus_tcp.TcpServer()
    logger.info("running...")

    server.start()
    slave_1 = server.add_slave(1)

    # todo: add checking for overlaping ranges
    argc = len(sys.argv)
    if argc == 3 or argc == 5:
      logger.info("Initializing %s RO float registers beginning at %s" % (str(sys.argv[2]), str(sys.argv[1])))
      slave_1.add_block('ro', cst.HOLDING_REGISTERS, int(sys.argv[1]), int(sys.argv[2]))
      ro = range(int(sys.argv[1]), int(sys.argv[1]) + int(sys.argv[2]))
    if argc == 5:
      logger.info("Initializing %s RW float registers beginning at %s" % (str(sys.argv[4]), str(sys.argv[3])))
      slave_1.add_block('rw', cst.HOLDING_REGISTERS, int(sys.argv[3]), int(sys.argv[4]))
      rw = range(int(sys.argv[3]), int(sys.argv[3]) + int(sys.argv[4]))

    while True:
      # get values from the bridge
      for i in ro[0::2]:
        i1,i2 = struct.unpack('>HH',struct.pack('f',float(avr.get(str(i)))))
        slave_1.set_values('ro', i, i2)
        slave_1.set_values('ro', i+1, i1)

      # put values to the bridge
      for i in rw[0::2]:
        i2, i1 = slave_1.get_values('rw', i, 2)
        val = struct.unpack('f',struct.pack('>HH',i1,i2))[0]
        avr.put(str(i),'%s' % val)

      time.sleep(0.5)

  finally:
    server.stop()

to communicate Arduino Yun

So, what are you doing here? There is a Yun sub-forum specifically for that Arduino.