Connect GPRS failed error and server disconnection after few hours

I am using Arduino UNO with SIM800 module to read DC voltage and send the data to blynk cloud server in a timely interval set from the blynk application.
The code when run initially works fine but after sometime the GPRS connection fails.
I have put the timer also to check and connect to gprs connection every 60 seconds, but once the code loses gprs connection, it fails and goes into infinite mode showing error as “Connect GPRS failed”. If I restart, the code will work again fine but after some time same problem occurs.
Can somebody help how to proceed further.
My code and output is as below:

#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
char apn[] = "airtelgprs.com"; 
char user[] = "";
char pass[] = "";
#include <SoftwareSerial.h>
SoftwareSerial SerialAT(7, 8); // SIM RX - ARD 8, SIM TX - ARD 7
TinyGsm modem(SerialAT);
BlynkTimer timer;
int timerID;
void readpsp(){
float y =analogRead(A2) * (5.0/1023.0);
lcd.setCursor(0,0);
lcd.print("PSP:-");
lcd.print(y);
lcd.print(" V     ");
Serial.print("Voltage: ");
Serial.println(y);
Blynk.virtualWrite(V1, y);
}
void checkGPRS()
{
  Serial.println("GPRS check");
  if (!modem.isGprsConnected()) {
    Serial.println("Reconnecting..");
    lcd.setCursor(0,1);
    lcd.print("Reconnecting..");
    modem.restart();
    Blynk.config(modem, auth, "blynk-cloud.com", 8080);
    Serial.println("Server configured");
    if (Blynk.connectNetwork(apn, user, pass)) {
      Blynk.connect();
    }
  }
  else{Serial.println("GPRS Connected");}
}

BLYNK_WRITE(V10) 
{
   int seconds = param.asInt();
   timer.deleteTimer(timerID);
   timerID = timer.setInterval(seconds * 1000L, readpsp);
   lcd.setCursor(0,1);
lcd.print("Interval-");
lcd.print(seconds);
lcd.print("s");
} 

void setup() {
pinMode(A2, INPUT);
Serial.begin(9600);
SerialAT.begin(9600);
lcd.begin();
lcd.backlight();
lcd.clear();
 
delay(3000);
modem.gprsDisconnect();
delay(1000);
checkGPRS();
timer.setInterval(60000L,checkGPRS);
timerID=timer.setInterval(60000L,readpsp);
}
void loop() {
  Blynk.run();
   timer.run();
}

And my output is as below:

18:23:07.170 -> GPRS check
18:23:07.217 -> Reconnecting..
18:23:14.003 -> [13097] 
18:23:14.050 ->     ___  __          __
18:23:14.050 ->    / _ )/ /_ _____  / /__
18:23:14.096 ->   / _  / / // / _ \/  '_/
18:23:14.096 ->  /____/_/\_, /_//_/_/\_\
18:23:14.143 ->         /___/ v0.6.1 on Arduino Uno
18:23:14.190 -> 
18:23:14.190 -> Server configured
18:23:14.190 -> [13210] Modem init...
18:23:14.377 -> [13437] Connecting to network...
18:23:20.555 -> [19628] Network: AirTel
18:23:20.602 -> [19629] Connecting to airtelgprs.com ...
18:23:26.986 -> [26072] Connected to GPRS
18:23:27.080 -> [26142] Connecting to blynk-cloud.com:8080
18:23:29.139 -> [28208] Ready (ping: 858ms).
18:23:31.292 -> Cconnected
18:23:36.361 -> [35394] Connecting to airtelgprs.com
18:24:01.231 -> [60264] Connect GPRS failed