INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme mit Webconnect
19.08.2014, 20:06
Beitrag #1
Probleme mit Webconnect
Hallo,

ich habe ein mir unerklärliches Phänomen, welches gelegentlich auftritt.

Ich habe ein Skript auf dem Arduino, welches regelmäßig einen Webconnect vornimmt und dabei sowohl Daten übergibt, als auch Daten entgegennimmt.
Schlägt der Webconnect fehl, wird dieser bis zu 2 mal wiederholt (also insg. 3 Versuche).

Manchmal gab es nun Probleme, dass Daten nicht richtig geschrieben werden, sodass ich ein Testskript auf den Webserver gesetzt habe. Das Testskript auf dem Server läd zu Anfang Daten aus einer Datei, schreibt diese ohne Zeilenumbruch in eine Datei, bearbeitet die Daten und schreibt diese am Ende der Seite mit Zeilenumbruch in die gleiche Datei. Das ganze sieht dann so aus:

18.08.2014 21:54:09 1: 10100 2: 10100
19.08.2014 20:19:31 1: 11111 2: 11111
19.08.2014 20:19:41 1: 11111 2: 11111
19.08.2014 20:19:50 1: 11111 2: 11111
19.08.2014 20:19:59 1: 11111 2: 11111
19.08.2014 20:20:10 1: 11111 2: 11111

Jetzt zu dem Phänomen, welches ich mir nicht erklären kann:

18.08.2014 21:53:10 1: 10100 2: 10100
18.08.2014 21:53:29 1: 10100 18.08.2014 21:53:29 1: 10100 18.08.2014 21:53:29 1: 10100 2: 10100
2: 10100
2: 10100
18.08.2014 21:53:42 1: 10100 2: 10100

Kann mir jemand das erklären? Es scheint so, als wenn das Ende der Seite vorhergehender Aufrufe noch mit Verzögerung ausgeführt wird. Im Arduinoscript arbeite ich aber mit client.stop und client.flush.

Wie kann ich das verhindern?

Falls benötigt poste ich auch gerne das Skript.

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.08.2014, 22:03
Beitrag #2
RE: Probleme mit Webconnect
Hi,
mir fällt nur auf, dass bei dem "seltsamen" Ergebnis jedesmal die selbe Zeit steht. Kann es sein, dass das ein fehlerhafter Wiederholungsversuch ist?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.08.2014, 07:40
Beitrag #3
RE: Probleme mit Webconnect
Moin itsy,
Zitat:Wie kann ich das verhindern?
Ich sag mal: Code einstellen.
Ich sehe zwei mögliche Problemfelder:
1. das was Thorsten gesagt hat
2. vielleicht ein Timing-Problem, in dem Sinne, dass das Ethernet-Shield (wenn du es benutzt) nur max. 4 Sockets / Verbindungen gleichzeitig bedienen kann.
Wie gesagt, der Code würde die Suche erleichtern.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.08.2014, 17:46 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2014 17:49 von itsy.)
Beitrag #4
RE: Probleme mit Webconnect
Hallo zusammen,

das "Socketproblem" versuche ich mit client.stop() und client.flush() zu lösen.

Jep, es gibt bis zu 5 Wiederholungen, wenn keine Daten empfangen werden. Hier liegt auch irgendwo das Problem. Im Log kann ich manchmal auch sehen, dass nicht 5x, sondern nur 2 mal wiederholt wird.

Anbei nun mein Codeschnipsel:

PHP-Code:
for (byte webzaehler 0webzaehler 5webzaehler++) { 
  
  
BeginnWebconnect(Schalter);
  
  
delay(50);
  
  
DisplayLed ("blau","switch","lan");
  
  
delay(100);
  
  if (
client.connect(serverName80)) {
    
memset( &inString032 ); 
    
    
client.print("GET /");
    
client.print(pfad);
    
client.print("/schalter.php?client=");
    
client.print (Schalter);
    
client.print ("&istwert=");
    
client.print (digitalRead(SchalterRelaisPin[0]));
    
client.print (digitalRead(SchalterRelaisPin[1]));
    
client.print (digitalRead(SchalterRelaisPin[2]));
    
client.print (digitalRead(SchalterRelaisPin[3]));
    
client.print (digitalRead(SchalterRelaisPin[4]));
    
client.println (" HTTP/1.1");
    
client.print("Host:");
    
client.println(serverName);
    
client.println("Connection: close");
    
client.println();
    
    
delay(50);
    
char c
    
int stoplauf 0
    
    while ((
!= '<' ) and (stoplauf 2000)) { 
      
stoplauf++;      
      
client.read();    
    };
    
    if (
c=='<') { 
      
Serial.print(F("Empfange Daten: "));
    
      for (
byte zaehler 0zaehler 5zaehler++) {
        
client.read();
        
Serial.print (c);    
        if (
== '1'digitalWrite(SchalterRelaisPin[zaehler], HIGH); 
        if (
== '0'digitalWrite(SchalterRelaisPin[zaehler], LOW);
      }
    
      
Serial.println ();
      
      
client.stop();  
      
client.flush();        
      
      
Serial.print (F("Schalte Ausgaenge: "));
      
      for (
byte zaehler 0zaehler 5zaehler++) 
        
Serial.print (digitalRead(SchalterRelaisPin[zaehler]));
          
      
Serial.println (); 
      
DisplayLed ("gruen","switch","lan"); 
      
webzaehler=20;
      
TimerAutoReset 0;
    }
    else {
      
Serial.print (F("Keine Daten fuer Schalter empfangen")); 
      
Serial.println();
      
DisplayLed ("rot","switch","lan");
      
SetAutoReset();
    }  
  }    
  else {
    
Serial.println(F("Webconnect Schalter fehlgeschlagen")); 
    
Serial.println();
    
DisplayLed ("rot","switch","lan");
    
SetAutoReset();
  }    
  
  if (!
client.connected()) {
    
Serial.println(F("Webconnect Schalter beendet"));
    
Serial.println();
    
client.stop();  
    
client.flush();         
  }
 } 
 
TimerWebSchalter millis() + (IntervallWebSchalter 1000);
}; 
// Ende Schalter Webconnect
//--------------------------------------------

void BeginnWebconnect(int clientbezeichnung) { 
  
client.stop();  
  
client.flush();  
  
delay(100);
  
Serial.print(F("Webconnect fuer Client: "));
  
Serial.println(clientbezeichnung);
  
Serial.println(); 
}; 

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.08.2014, 19:32 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2014 19:33 von rkuehle.)
Beitrag #5
RE: Probleme mit Webconnect
Hallo itsy,
ich habe mir mal etliche Codes wie diesen hier angesehen: http://arduino.cc/en/Tutorial/WebClientRepeating
Zwei Dinge sind dabei immer wieder zu beobachten:
1. in den loops die eine Verbindung immer wieder aufbauen wird nie delay() benutzt.
2. die Intervalle für die Wiederholungen liegen immer im Bereich von mehreren Sekunden.
Pass mal den Code entsprechend an und mache dabei die Intervalle immer kleiner. Dann wirst du herausfinden wo die Grenze liegt.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.08.2014, 20:11 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2014 20:17 von itsy.)
Beitrag #6
RE: Probleme mit Webconnect
Hallo Ricardo,

hab vielen Dank :-)

Ich habe jetzt nicht genau verstanden, welche delays ich weglassen soll.

Also ich würde dann jetzt direkt oben in den Loop noch folgendes reinsetzen:
if (webzaehler > 0) delay 1000;

richtig?

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2014, 06:59
Beitrag #7
RE: Probleme mit Webconnect
Moin itsy,
Zitat:Ich habe jetzt nicht genau verstanden, welche delays ich weglassen soll.
Es geht ja nicht darum die delay()-Aufrufe wegzulassen, sondern darum diese zu ersetzen.
Könnte man zB so machen:
Code:
/* previousMillis -> Startzeitpunkt der Pause
   currentMillis -> aktuelle Zeit
   interval -> Zeitdauer der Pause */
unsigned long currentMillis = millis();
while (currentMillis - previousMillis  < interval) ; // solange wie interval nicht erreicht tue nix
Da es eine reine Warteschleife ist,ohne Entscheidung was bei Erreichen oder Nichterreichen der Pausenzeit getan werden soll, könnte man alle delay() in deinem Code so ersetzen
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2014, 18:36 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2014 18:37 von itsy.)
Beitrag #8
RE: Probleme mit Webconnect
Moin Ricardo,

was ich machen soll habe ich nun verstanden. Ich verstehe nur nicht warum. Wo liegt denn der Unterschied zwischen

while (currentMillis - previousMillis < interval) ;
und
delay(intervall) ?

Bei beiden Befehlen bleibt der Code im Loop an dieser Stelle stehen, bis die Zeit verstrichen ist.

Mit if (currentMillis - previousMillis < interval) arbeite ich, um den Codeschnipsel überhaut erst einmal aufzurufen z.B. jede Minute soll er einen Webconnect machen und ist die Zeit noch nicht abgelaufen, dann mache was anderes z.B. schaue, ob Du einen Sensor abfragen musst. Innerhalb des Codeschnipsels sind die delays eigentlich nur für Anzeige- oder Funktionsoptimierungen gedacht. Eine Warteschleife bei Fehlgeschlagenem Webconnect für einen Reconnect gab es ja bisher noch nicht.

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ArduinoDroid Probleme Brother Tak 1 206 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Roboter-Bau Probleme blebbens 8 382 12.07.2016 07:35
Letzter Beitrag: Binatone
  Probleme mit sprintf() und dtostrf() GMBU 11 819 22.06.2016 10:52
Letzter Beitrag: GMBU
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 989 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.179 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 577 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 334 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 843 21.02.2016 18:00
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.153 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  Probleme mit SPI - Ethernet und nRF24L01 itsy 35 2.993 21.11.2015 19:59
Letzter Beitrag: ardu_arne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste