Pages: 1 2 [3] 4 5 ... 8   Go Down
Author Topic: Ethernet Shield mi blocca tutto !  (Read 8637 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, io seguo gli issue, quindi magari son pull-request che non sono state ancora accettate/respinte.
occhio che molte modifiche non sono fatte sul branch principale ma su rami secondari (esempio: ide-1.5.x-pull115) che poi vengono mergiati.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Switzerland
Offline Offline
Faraday Member
**
Karma: 115
Posts: 5996
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

urca, riesci a wiresharcare il traffico e vedere cosa succede? magari tenendo anche d'occchio la RAM disponibile?

Posso provarci ...
... però attenzione, come per la ethernet, anche per la WiFi, credo che l'HW continui a funzionare regolarmente, solo che da SW, non si ricevono più le connessioni (... problema della libreria). Il codice però continua a girare e il memoryFree riporta ancora alcune centinaia di byte di RAM libera (sull'UNO).

Ora sto facendo una prova inserendo nel loop, ogni N secondi, uno statement che, di per se è messo nel punto sbagliato e con la logica sbagliata (... è una server.write('0') senza alcuna connessione attiva), ma che mi ha dato l'idea eviti il blocco (... data la casualità del problema, non sei mai sicuro se l'hai risolto o meno).

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, io seguo gli issue, quindi magari son pull-request che non sono state ancora accettate/respinte.
occhio che molte modifiche non sono fatte sul branch principale ma su rami secondari (esempio: ide-1.5.x-pull115) che poi vengono mergiati.

Però allora è inutile scaricare, almeno per il momento, la 1.0.5 da git...  smiley-wink
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7213
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ci sono molte modifiche
--> https://github.com/arduino/Arduino/blob/master/build/shared/revisions.txt
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non guardare i revision .txt che sono solo il sunto del riassunto, e fatto a mano, cioè fallibile... molto meglio guardare l'elnco di tutte le modifiche effettuate smiley

https://github.com/arduino/Arduino/commits/master

notare il 28 un "Merge branch 'wifishield-bugfix'"

Quote
... però attenzione, come per la ethernet, anche per la WiFi, credo che l'HW continui a funzionare regolarmente, solo che da SW, non si ricevono più le connessioni

come l'ethernet? allora basta vedere se l'ip risponde ai ping. Se si il problema è solo lato libreria
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi qua.
Appena tornato a casa ;-)

Per ora Arduino sta ancora funzionando...

Ho fatto una piccolissima modifica allo sketch originale WebServer della IDE 1.0.4:
Dopo if (client) ho aggiunto digitalWrite(3, HIGH); //appena un client http si connette, accende il LED sul PIN 3

Dopo client.println("</html>"); ho aggiunto digitalWrite(3, LOW); //quando ha finito di mandare la pagina html, spegne il LED sul PIN 3


Oltre a questo, alla fine dello sketch dentro loop() ho aggiunto:
Code:
if (dir == 0) {
    loops ++;
    if (loops > 10000) { dir = 1; loops = 1; digitalWrite(6, HIGH);}
  }
  if (dir == 1) {
    loops --;
    if (loops < 1) { dir = 0; digitalWrite(6, LOW);}
  }
Che mi conta quante volte e' stato eseguito loop() ed ogni 10.000 esecuzioni, mi fa un breve blink al LED collegato al PIN 6.

In questa maniera, se il LED al PIN 3 smette di lampeggiare, so che la EthernetShield ha smesso di dialogare con la UNO.
Se il LED al PIN 6 smette di lampeggiare, so che la loop() ha smesso di loopare  smiley-grin

« Last Edit: April 02, 2013, 05:21:07 pm by acik » Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Guarda sono diventato pazzo come te con sta scheda ......... l'unico modo che fino ad ora non ha mai fallito è questo
Code:
Ethernet.begin(mac,ip);
prova così però non fare come altri che poi spariscono e non sappiamo mai se ha migliorato la condizione o meno ci interessa sapere come è andata smiley

Tranquillo, non sparisco !

Io in realta' pensavo di eseguire ethernet begin, ad ogni richiesta http, dopo che ho finito di mandare i dati al client.... Convinto che si trattasse di un blocco dovuto a troppe connessioni (quando quell' Arduino era raggiungibile via WEB)

Mettere un ethernet begin ogni tot minuti, non mi piace, in quanto potrebbe resettarmi la scheda proprio nel momento in cui sto trasferendo dati... non mi piace.

Torna l' idea di far fare a quell' Arduino una richiesta ad un server http esterno, in caso di mancata risposta, faccio un ethernet begin.



to be continued ...
« Last Edit: April 02, 2013, 04:15:29 pm by acik » Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, ho riesaumato una eth shield v1.1, vediamo cosa succede. Mettiamoci d'accordo sullo sketch: prima di tutto dobbiamo rendere il problema riproducubile.

prima di tutto che IDE usiamo? io dire la 1.0.4 finchè non esce la 1.0.5 ufficialmente nella pagina download
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La butto li, ma se fosse semplicemente che, con la librerie standard, non si riesce a gestire più connessioni simultaneamente?
Mi spiego meglio: continuando quanto scritto qui http://arduino.cc/forum/index.php/topic,154157.0.html potrebbe essere che facendo così
Code:
EthernetClient client = server.available()
Si vada a prendere sempre la stessa connessione, quindi in caso di connessioni simultanee se ne gestirebbe una sola.

Un'altra idea potrebbe essere che il protocollo TCP, per come è fatto (se non erro, altrimenti smentitemi pure...  smiley-wink) non prevede un timeout di connessione, quindi se un client non chiude la connessione questa rimane attiva e facendo sempre la server.available() la classe tornerà sempre la connessione "morta".

Per test provate a collegarvi via HyperTerminal all'IP di Arduino sulla porta 80, magari ad inviare anche qualcosa per farvi rispondere (tipo HTTP POST, non conosco le sintassi HTML) ma senza chiudere la connessione, se ho ragione non dovrebbe più rispondervi da browser...

EDIT: Ho allegato la mia libreria EthernetServer modificata, e una libreria che mi sono fatto per gestire più agevolmente le connessioni simultanee in quanto avevo l'esigenza di assegnare determinati socket ad un server ed altri ad un altro server. Provate a dargli un'occhiata se può farvi comodo...

* EthernetServer.h (0.61 KB - downloaded 11 times.)
* EthernetServer.cpp (3.45 KB - downloaded 12 times.)
* EthernetServerSocket.cpp (1.14 KB - downloaded 12 times.)
* EthernetServerSocket.h (1.15 KB - downloaded 10 times.)
« Last Edit: April 02, 2013, 04:51:37 pm by Janos » Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10502
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come non detto, i mie shield farlocchi sono ENC28J60, non wiznet  smiley-roll-blue
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, ho riesaumato una eth shield v1.1, vediamo cosa succede. Mettiamoci d'accordo sullo sketch: prima di tutto dobbiamo rendere il problema riproducubile.

prima di tutto che IDE usiamo? io dire la 1.0.4 finchè non esce la 1.0.5 ufficialmente nella pagina download
Dopo mio primo post in questo 3D, ho iniziato subito a usare solo la IDE 1.0.4 e lo sketch di esempio "WebServer" presente nella stessa.
« Last Edit: April 03, 2013, 03:54:40 pm by acik » Logged

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato a modificare l'esempio della connessione mettendo un timeout sulla connessione, provate questo per vedere se si blocca ancora...

* WebServerMOD.ino (3.13 KB - downloaded 11 times.)
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3436
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Mettere un ethernet begin ogni tot minuti, non mi piace, in quanto potrebbe resettarmi la scheda proprio nel momento in cui sto trasferendo dati... non mi piace.

Non penso proprio possa accadere se utilizzi una funzione standard
Code:
if (client.available())
    {  
       while ((c = client.read())>0)
       {
          readString += (char)c;
         ...
         ...
       }
   }
 client.stop();

Come fa a reinizializzarsi se non esce dall' if e dall' while?
Comunque lo sto usando da mesi e a me va bene, non ho rallentamenti e ne perdite di dati (e sono tanti i byte che trafficano)
Se lasci il client aperto può succedere, ma se lo fai allora te li vai proprio a cercare i problemi smiley

Quote
Torna l' idea di far fare a quell' Arduino una richiesta ad un server http esterno, in caso di mancata risposta, faccio un ethernet begin.
ho già provato non funziona quando te ne accorgi è troppo tardi. Se riesci a trovare il punto in cui la situazione sta diventando critica allora si, ma in mesi di test su sto maledetto chip non ho trovato il punto, ogni volta sembrava aver riprodotto l'errore e poi subito smentito.

Metti un led lampeggiante tipo "Blink without Delay" e vedi come si comporta arduino quando la ethernet non risponde... se fai esperimenti le visualizzazioni ottiche sono obbligatorie.
« Last Edit: April 03, 2013, 06:42:12 am by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non penso proprio possa accadere se utilizzi una funzione standard
Code:
while ((c = client.read())>0)client.stop();
Ops !  Non ho notato quel "while"
Ero distratto !
Ho caricato lo sketch d'esempio senza nemmeno guardare come e' fatto  smiley-razz



Metti un led lampeggiante tipo "Blink without Delay" e vedi come si comporta arduino quando la ethernet non risponde... se fai esperimenti le visualizzazioni ottiche sono obbligatorie.
Ma anche tu sei distratto !  smiley-lol
L'ho fatto. L' ho scritto 6 o 7 post indietro...
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

EVVAI !   Ethernet Shield bloccata !!!

Ho fatto le seguenti prove/scoperte (nella condizione di Shield bloccata):

A) Dal PC posso pingare. (la shield risponde sempre)

B) Qualsiasi richiesta faccio via Ethernet, non arriva all' Arduino (evidentemente la Ethernet Shield non manda nulla)

C) Rifare Ethernet.begin non serve a nulla. (La Ethernet Shield non si riprende)

D) Il tasto RESET non serve a nulla. (Arduino si riavvia, esegue lo sketch, rifa' Ethernet.begin, dialoga con la seriale, accende i LED... ma la Ethernet Shield non si riprende)


Spegnendo tutto per pochi secondi, la shield ha ricominciato a funzionare perfettamente.


« Last Edit: April 07, 2013, 04:32:54 pm by acik » Logged

Pages: 1 2 [3] 4 5 ... 8   Go Up
Jump to: