ethernet kliens-szerver kommunikáció

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Bazs87 » 2015. november 10. kedd, 23:19

Sziasztok!

egy termosztátor szeretnék készíteni: egy mega lenne az adatgyűjtő/kiértékelő/végrehajtó/web és ethernet server, hozzá 4 nano kapcsolódna akik adott időközönként közölnék a serverrel az általuk mért hőmérsékletet(W5100-as eth modulokkal).
A server programja egy módosított standard ChatServer mintaprogram. A kliens programjának az alapja pedig a telnetClient mintaprogram módosított változata.
A problémám a kommunikáció instabilitásával van.
A kliens oldaláról próbáltam eddig orvosolni a problémát a következő módon:


Kód: Egész kijelölése

 
...
 if (!client.connected()) {
    client.stop();
    connct=false;
    Serial.println("not connected");
  }
 
  if (!connct){
    tcp_init();
  }

void tcp_init(){
  Ethernet.begin(mac, ip);
  delay(1000);
  if (client.connect(server, 502)) {
    connct=true;
  }
}



többnyire működik, de nem elég stabil. Megfigyeléseim szerint az esetek 80%-ában az segít, ha rövid időre áramtalanítom a problémás nanot, a maradék esetben viszont az sem segít és csak a mega újraindítása segít.

Gondolkodtam már szoftveres RESET-en, már ha egyáltalán van ilyen, de ez elég csúnya megoldás lenne.
Rossz mintát használok, rosszul közelítem meg a problémát?

mit javasoltok?

Köszi előre is!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Robert » 2015. november 11. szerda, 5:10

Mi akad el?
- hibás csomgot nem dolgozza fel?
- csomag timeout?
- memóriatúlcsordulás?

Etherreal a csomagokról mit mond? Rendben? Sérült?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Robert » 2015. november 11. szerda, 5:10

Az eredeti mintaprogi stabil vagy instabil?
Tápellátásod stabil?
Kondikkal szűrőzés megvan?

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Bazs87 » 2015. november 11. szerda, 9:14

egyszeruen megszakad a kommunikacio es nem tud ujracsatlakozni a kliens.
a mintaprogikat hosszutavon nem futtattam, ennek a tesztelgetese is ugy megy, hogy magukban lerendeznek mindent, majd kidobja a server sorosportra a kapott adatokat es az array aktualis allapotat, amin latom, hogy a kuldott uzenetet fel tudta dolgozni.
Tapellatas stabil (kulso tapos usb eloszto), kondikkal szures nincs meg, kerlek reszletezd mire gondolsz!
A megan egy w5100 shield van direktben, a nanokhoz pedig kicsi "shield"-eket/ modulokat vettem, amik ugyanezt tudjak (SPI-vel), ha a normal shield tartalmazza megvan, ha nem akkor nincs

a vicc, hogy van amikor egy napig gond nelkul megy es ujra is tud csatlakozni automatikusan, maskor meg alig akar eledni.

rendes hibakezelesem nincs, a mintaprogramokban sincsenek alapvetoen, a connected-et figyelem, ill ha jon adat kiolvasom es feldolgozom, a bejovo adatokbol addig epitem az uzenetet, amig a lezarokarakter megerkezik.

tudnal linkelni/mutatni egy peldat'?

Koszi!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Robert » 2015. november 11. szerda, 12:39

Etherreal : ellenőrizni a küldött/fogadott csomagokat.
Az Arduinoban a lehalás helyét azonosítani.

Jelenleg ahogy teszteled:
Van egy autó, időnként leáll. Mi az oka? :)
A műszer a soros debug és a Etherreal. E nélkül nem fog menni....
Soros debuginfo: Mi jon a csomagban? MemFree hogyan alakul?
Bejön csomag, akkor a főprogram vagy a csomagfeldolgozó akad le?

Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: csegebiga » 2015. november 11. szerda, 14:51

van még egy szereplő a rendszeredben, akit még nem említettél.
5 ethernetes eszközt ugye,egy switch-el szoktak összekötni
nem lehet, hogy ez az intervallum sok a switch-nek, és elmegy aludni?

milyen sűrűn küldesz adatokat?

mi törpénik, ha kb percenként megpingeled a szereplőket?
mondjuk a megáról a szatelliteket.
akkor is leszakad valamelyik?

Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Bazs87 » 2015. november 11. szerda, 17:36

Sziasztok!

adatokat minden nano 10 mp-enként küld, szívesen kizárogatnám ezeket lépésről lépésre.
A switch egy DLink 10/100Fast ethernet switch, ezzel fut napok óta + ugye link kábelek.

Pingelés nincs, csak az arduinok vannak ezen a zárt hálózaton, a mega nyitja a portot és vár a bejövő üzenetre, handshake-t nem használok. A terv az volt, hogy az írás kimaradását timeout-tal figyelem, így tudom, h ha mondjuk 1 percig nem küld semmit, akkor gond van, nem időkritikus az alkalmazás.

sajnos itt a wireshark nem játszik, az ethereal működésébe pedig jobban bele kell ásnom magam, ha esetleg le tudnád írni 3 mondatban megköszönöm.
http://digitalethereal.com/arduinocode.html

a csomagban gyakorlatilag mindig egy char + sorlezáró karakter jön, ezt építem fel egy stringbe
a memFree-t hogyan tudom tesztelni, milyen eredménynek kellene kijönnie?

a server nem akad le, a client dobja le magát valamiért, minden fut tovább, csak az adott résztvevő nélkül, nincs fagyás, vagy ha van (amit eddig nem sikerült észlelni) akkor ritka és random.
A client lecsatlakoztatását pedig soros debugból tudom, minden ciklusban dobálja, hogy baj van, a soros ledjén pedig látom, hogy épp "beszélget"

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ethernet kliens-szerver kommunikáció

HozzászólásSzerző: Robert » 2015. november 11. szerda, 23:08

Router/switch kidob. Teszthez HUB kell.
Ekkor minden csomag mindenhova megy.

Egy porton PC. Többin az eszközök.

Eszközeid IP címe micsoda?
Különböző legyen, de azonos alhálózati maszkos.

Etherreallal így tudod a valóban menő csomagokat monitorozni.

Memfree:
minta, nem mhet le 200 alá. Ezzel látodm, hogy a processzorben hogy alakul a szabad memória.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég