Netzwerkshield W5100 überlastet ?

Ich habe gerade das Problem, dass sich das Netzwerk immer irgendwann verabschiedet.

Aufbau:

  1. MEGA mit Shield W5100, arbeitet als Server und Client.

  2. UNO mit 2,4 TFT zum Messwerte visualisieren

Der Mega schreibt alle 15 Min. Werte per SQL auf einen Server. Der UNO fragt den Mega per Netz regelmässig an und bekommt Messwerte. Auch vom Browser aus bekmme ich die Messwerte und auch die Seite für die Steuerung. Soweit läuft alles korrekt. Nach einiger Zeit jedoch antwortet der Mega nicht mehr auf Webanfragen und schickt auch keine daten mehr an die SQL datenbank. Auch der Browser bekommt keine Antwort mehr.
Die serielle Ausgabe des MEGA liefert jedoch noch alle Daten, allerdings zeigt sie die Webzugriffe nicht an. Das heisst, soweit ich es verstehe:

// listen for incoming clients
EthernetClient client = server.available();

wird nicht mehr TRUE und somit wird die dahinterliegende Schleife, die die Antwort ausgibt, nicht mehr durchlaufen. Wie gesagt, der sonstige Programmcode wird normal ausgeführt.

Ein Softwarereset mit dem seriellen Monitor reicht, und alles ist wieder für Stunden normal, also Kontakt- und Kabelprobleme sind auszuschliessen, der serielle Monitor läuft über das gleiche Netzwerkkabel. An anderem Switch auch schon getestet.

Ich lasse das gerade im Stresstest laufen und der UNO fragt alle Sekunde ab

Getestet mit 2 verschiedenen Boards und 2 Shields.

Irgendjemand eine Idee zur Fehlersuche?

Warum fragst du denn mit dem Uno beim Mega nach Messwerte? Kannst du dass nicht besser direkt aus der Datenbank abrfagen.

Wie sieht der Sketch aus? Lass mit den Messwerten, die der Uno holt, auch den Status vom EthernetClient ausgeben. Also ob er verfügbar ist.

Die Messwerte in der Datenbank sind alle 15 Minuten, der UNO soll sich später alle Minute aktualisieren.

Den Status vom EthernetClient kann ich mir vom UNO nicht ausgeben lassen, da er ja dann keine Daten mehr empfängt.

Ich habe vorher eine Serial Ausgabe eingebaut, die alle 3 sec. ausgegeben wird:

......
 // listen for incoming clients
  EthernetClient client = server.available();
  if (millis()-lastmessage >3000)
  {
    lastmessage=millis();
    Serial << "Serverroutine wird durchlaufen  Ethernetclient=" << client << endl << endl;  // Diese Zeile meine ich
  }
  
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
        if (millis()-timeout > 3000) {
          Serial.println(millis()-timeout );
          client.stop();
          Serial.println(F("client disonnected wg. timeout"));
          }
.........

Seither läuft er aber. Fehlerhafte Anfrage, die vorher alles abstürzen liesen, fange ich mit dem 3 sec. timeout ab. Ich weiss allerdings nicht, ob das state of the art ist.

Heute morgen gab der Webserver keine Antwort mehr und schrieb auch keine Werte mehr in die SQL Datenbank.

Der Ethernetclient war auf 0, obwohl ich den MEGA mit Anfragen geflutet habe. Im Normalbetrieb sieht man da dann öfter eine 1 (da ja nur alle 3 sec. eine Meldung kommt).

Die Meldung "new client" wurde nicht ausgegeben.

Ergo -> irgendwas mit dem Shield muss faul sein. Nur was?