server.available() lento a processare

Buongiorno

Intanto ringrazio tutti per la miriade di informazioni che ho trovato sul forum con cui sono riuscito ad elaborare il mio piccolo progettino. sono un novizio del settore arduino e immancabilmente mi sono trovato davanti ad un problema che non riesco a risolvere.

Ho un server con cui non faccio altro che inviare ad un plc lo stato degli io a bordo arduino ed alzare le uscite che il plc mi comanda. tutto tramite wifi e collegamento tcp.

Fin qui tutto bene la cosa funziona a dovere se non che per processare il comando server.available() ci metto 2 secondi.
il refresh di io su scheda arduino da parte del plc è di 2.2s e anche quando invio un comando da plc ci mette 2.2 secondi ad eseguirlo.

se lo salto con un while client.connected per evitare di processarlo finchè il client è connesso non va più nulla però il tempo di refresh dei comandi scende a 0.2s.

ringrazio tutti in anticipo per l'aiuto

Aggiornamento: realmente guardando le statistiche che mi sono generato sul plc noto che il problema deriva dal fatto che dopo un comando di send tcp da parte del mio plc mi arriva la risposta di send ok dopo circa 1.8 secondi. ho controllato che non fosse un errore nel sw del plc ma con un altro apparecchio non lo fa.

vi posto il codice:

#include <ESP8266WiFi.h>

//////////////////    DEFINIZIONE VARIABILI /////////////////////////////

//wifi
const char* ssid = "SISSI";
const char* password = "K35235514";


    int stato = 0;
    String stringa_invio;
    String stringa_ricezione = " ";
    const String stringa_vuota = " ";
    char ricezione[10];
    int ok_ricezione = 0;
    int out = 0;
    int ok_rx = 0;
    int errore = 0;
    char car;
    int com_stato = 0;

/////////////////////////////////////////////////////////////





/////// DIFINIZIONE PROTOCOLLO DI COMUNICAZIONE///////////////77
WiFiServer server(2000); //PORTA

///////////////////////////////////////////////////////7




//////////////////////////////7SETUP////////////////////////////////////
void setup() {


  /////////////// CONFIGURAZIONE PIN ///////
    pinMode(D0,OUTPUT);  //RESET SCHEDA
    pinMode(D1,INPUT);
    pinMode(D2,INPUT);
    pinMode(D3,INPUT);
    pinMode(D4,INPUT);
    pinMode(D5,OUTPUT);
    pinMode(D6,OUTPUT);
    pinMode(D7,OUTPUT);
    pinMode(D8,OUTPUT);
 //   pinMode(D9,OUTPUT);  ////occupati da monitor seriale
 //   pinMode(D10,OUTPUT); //////occupati da monitor seriale
    pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output

    digitalWrite(LED_BUILTIN, HIGH);

//////////////////////////////

////////// CONFIGURAZIONE SERIALE ////////////////////77
  Serial.begin(115200);
  delay(10);
///////////////////////////////////////////////////////  

  
////////indirizzo ip statico /////////////////////77
  IPAddress myIP(192, 168, 1, 244);
  IPAddress dnsIP(8,8,8,8);
  IPAddress routerIP(192, 168, 1, 1);
  IPAddress netMask(255, 255, 255, 0);
/////////////////////////////////////////////7
  
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.config(myIP, dnsIP, routerIP, netMask);WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();



  
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}



///////////////////////////////LOOP//////////////////////////////////////////////////////
void loop() {
  com_stato = 0;
    digitalWrite(LED_BUILTIN, HIGH); //METTO LED SCHEDA SU OFF PER SEGNALARE CHE NON E CONNESSA
  // Check if a client has connected
  WiFiClient client = server.available();

  if (!client) {
    return;
  }

////// attesa ricezione
    Serial.println("CONNESSO");
    digitalWrite(LED_BUILTIN, LOW); //METTO LED SCHEDA SU ON PER SEGNALARE CHE è CONNESSA


    
    
  while(!client.available()){
    delay(1);
 }



//////// leggi stringa
  
  String stringa_ricezione = client.readStringUntil('Q');

  Serial.println(stringa_ricezione);
 
 
  client.flush();

////////////////////// comando uscite ////////////////////////////////////

 if (stringa_ricezione.charAt(0) == 'A') {  //controllo se il comando è dato al nodo giusto


 if (stringa_ricezione.charAt(1) == '1') {
   digitalWrite(D5, HIGH);
 }
 else {
   digitalWrite(D5, LOW);
 }

 if (stringa_ricezione.charAt(2) == '1') {
   digitalWrite(D6, HIGH);
 }
 else {
   digitalWrite(D6, LOW);
 }

  if (stringa_ricezione.charAt(3) == '1') {
   digitalWrite(D7, HIGH);
 }
 else {
   digitalWrite(D7, LOW);
 }

  if (stringa_ricezione.charAt(4) == '1') {
   digitalWrite(D8, HIGH);
 }
 else {
   digitalWrite(D8, LOW);
 }

 
 }  
  
///////////////  IMPOSTO STRINGA DI INVIO A PLC CON STATO I/O
     String nodo = "A";

     stato= errore;
     String in_0 = String(stato, DEC); 

     stato= digitalRead(D1);
     String in_1 = String(stato, DEC); 
       
     stato= digitalRead(D2);
     String in_2 = String(stato, DEC); 

     stato= digitalRead(D3);
     String in_3 = String(stato, DEC); 

     stato= digitalRead(D4);
     String in_4 = String(stato, DEC); 

      stato= digitalRead(D5);
     String out_1 = String(stato, DEC); 

      stato= digitalRead(D6);
     String out_2 = String(stato, DEC); 

      stato= digitalRead(D7);
     String out_3 = String(stato, DEC); 

      stato= digitalRead(D8);
     String out_4 = String(stato, DEC); 


/////////////////////////////////////////////////////////////////////  


 //////////////////////STRINGA INVIO////////////////////////////77 
  stringa_invio =  String (nodo + in_0 + in_1 + in_2 + in_3 + in_4 + out_1 + out_2 + out_3 + out_4);
     client.print(stringa_invio);
     Serial.println(stringa_invio);
     client.flush();
 ///////////////////////////////////////////////////////////////////////////////////////////////////7
  delay(1);


 
 // Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:

Ciao nid69ita

Mi sono presentato nella sezione corretta.

Grazie della dritta

Sono un novizio di arduino e di forum in generale bisogna portar pazienza :slight_smile: