Probleme mit Verbindungsabbruch Ethernetshield

Hallo zusammen,

ich habe mit meinen zwei Arduinos folgendes Problem und konnte im Internet leider keine Lösung hierzu finden. Ich habe zwei Arduinos, die mehrere DS18B20 (1-wire-Temperatursenesoren) auslesen und die Werte dann per Modbus TCP an eine Siemens S7 übergeben sollen. Das läuft auch soweit, doch nach mehreren Minuten, manchmal auch Stunden, kommt es zu abbrüchen. Dann kann ich weder mit PC noch SPS die Daten auslesen. Es ist allerdings so, dass nur das Ethernetshield anscheinend stehen bleibt, aber der Arduino weiterläuft. Ich habe in der Schleife für die Abfrage einen Output mit LED gesetzt, sodass ich mir sicher sein kann, dass die CPU und die Schleife noch läuft.

Hier sind die Ausfälle (in grau) zu sehen.

Bei den Arduinos handelt es sich um zwei Unos. Die Ethernetshields sind die hier angebotenen:
https://www.ebay.de/itm/W5100-Ethernet-LAN-Netzwerk-Shield-Arduino-UNO-R3-MEGA2560-WizNet-RJ45-Board/253610064057?hash=item3b0c5678b9:g:NAwAAOSwEJZb3Zdc

Die Arduinos momentan wird immer zur vollen Stunde ein Reset durchgeführt, weil sonst die Kommunikation aufgrund der Ausfälle immer wieder zum erliegen kommen würde.

Ich hoffe ihr könnt mir weiterhelfen.

Gruß Tobias

Arduino_Modbus_Strom_AC_Entf_TCP_WD_neu.ino (6.05 KB)

Arduino_Temp_Modbus_35Sensoren_WD_neu.ino (4.58 KB)

bei dem Produktlink werden verschiedene Boards angezeigt. Bitte mach ein Echtbild von deinem Ethernet-Shield das du tatsächlich bekommen hast.

Du hast zwei Sketches angehängt, um welchen geht es? Wenn beide betroffen sind, erkläre welchen wir uns ansehen sollen.

Hallo noiasca,

die zwei Ethernetshield sind auf dem unten angehängten Bild zu sehen. Ich habe zwei Sketches angehängt, weil ich zwei Arduinos mit identischem Problem am Laufen habe. Der eine verfügt neben den DS18B20 noch über einen Ultraschallentfernungsmesser, der seinen Wert dann ebenfalls in einem Modbusregister überträgt. Da die Programme sich sehr ähnlich sind gehe ich davon aus, dass es ausreichend ist wenn einer der beiden Sketches betrachtet wird.

Gruß Tobias

Zwischen dem Ethernetshield und der Hülle der USB-Buchse vom UNO (GND) kann es zu Kurzschlüssen kommen. Klebe etwas Isoliermaterial oben auf die USB-Buchse.

Gruß Tommy

Hi Tommy,
habe ich jetzt mal gemacht. Gehe aber nicht davon aus, dass das der Grund für die Ausfälle ist.
Gruß Tobias

Das muss es nicht. Es ist aber eine kritische Stelle.

Gruß Tommy

ich bin zwar kein Freund von den billigen Ethernet-Shields aber habe auch welche in meinem Fundus. Wenn sie laufen dann laufen sie auch mehrere Wochen. Ich kenne eher Startschwierigkeiten derselbigen.

Einer deiner Wiznet Chips hat einen Kühlkörper. War das schon immer so - oder wird der heiß, hast du ihn angebracht?

Wegen:

Chicken123456:
Es ist allerdings so, dass nur das Ethernetshield anscheinend stehen bleibt, aber der Arduino weiterläuft. Ich habe in der Schleife für die Abfrage einen Output mit LED gesetzt, sodass ich mir sicher sein kann, dass die CPU und die Schleife noch läuft.

Das kann ich nicht nachvollziehen, da dein Sketch das Shield vermutlich nur für die mudbus.h nutzt. Woher machst du das fest, dass das Ethernet-Shield ausfällt und nicht irgendwas in der mudbus lib?

kannst du das Shield weiterhin pingen?

Um das ein wenig einzuschränken empfehle ich dir, auf einem Test-Board mal einen normalen Webclient-Sketch zu installieren und zu kontrollieren ob die Ausfälle auch ohne Modbus auftreten.

P.S.: tut nichts zur Sache, aber dass dein "alle 30 Sekunden" Delay eher "eigenartig" ist, ist scho klar oder? Mach doch eine Zeitsteuerung mit millis so wie in "BlinkWithoutDelay".

Hallo noiasca,

den Kühlkörper hatte ich mal angebracht, weil die Chips sehr warm werden. Hatte aber leider keine Abhilfe gebracht. Was wäre denn beispielsweise ein besseres Ethernetshield? Es geht mir bei den Shields nicht darum ein paar Euro zu sparen, denn schließlich steuere ich die ganze Fußbodenheizung mit diesen Sensoren.

Das Shield wird von Openhab ein mal pro Minute mit jeweils drei versuchen angepingt. In den grauen Lücken aus meinem ersten Post ist erkennbar wie oft es nicht mehr pingbar ist. Ich ging daher davon aus, dass das Shield das Problem ist. Ich werde am Wochenende mal auf einen arduino einen Webclient Sketch ziehen und schauen was passiert.

Gruß Tobias

Hallo noiasca,

ich habe jetzt mal einen dritten Arduino (gleiches Ethernet-Shield) mit einem NTP-Sketch geladen. Dieser Arduino zeigte früher in der Anwendung mit Modbus genau die gleichen Probleme wie die anderen zwei Arduinos. Ich habe den Arduino jetzt einfach im Netzwerk hängen und er wird jede Minute angepingt und aufgezeichnet ob er sich noch meldet. Ich gebe morgen mal eine Rückmeldung wie die Aufzeichnungen aussehen.

Gruß Tobias

imho ist das eine der wenigen Möglichkeiten, wie du das ganze einschränken kannst. Ich hätte eher einen repeating webclient genommen damit auch etwas Nutzlast übertragen wird. Aber egal, schau mal wie lange es funktioniert.

Da du weiter oben nach Shields gefragt hast. Ich kaufe nur mehr Boards auf denen ich die Pins für ein POE Modul erkennen kann. Die laufen bei mir ziemlich stabil (auch über 42 Tage) - aber wichtiger, bei denen hatte ich bisher keine Startprobleme.

Die letzten Boards habe ich von diesem FC: http://s.click.aliexpress.com/e/wYJlAcC

Es gab doch eine Zeit lang Clone mit einem falschen Widerstandsnetzwerk drauf direkt an der Ethernet Buchse, das führte zu Unterbrechungen in der Verbindung. Vielleicht hast du so eins erwischt...

https://forum.arduino.cc/index.php?topic=351477.30

Gruß

Hallo zusammen,

ich habe den NTP-Client jetzt mal ca. 24h laufen lassen ohne das es einen Ausfall gab. Die anderen zwei sind zwischenzeitlich wieder neun bzw. zehn mal ausgefallen.

Ich habe tatsächlich drei Ethernetshields mit dem 510 Ohm Widerstandsnetzwerk. Dann muss ich wohl mal anfangen zu löten.

Gruß Tobias

Hallo noiasca,

ich habe es an einem Shield mal ausprobiert, aber das Problem besteht wie vermutet weiterhin.

Was meinst du mit Ethernet + DS18? Meinst du ich soll einfach mal einen einzelnen DS18B20 an einen Arduino hängen und diesen dann beispielsweise einfach mal ohne SPS laufen lassen? Ich könnte dann per Ping prüfen ob er noch läuft und ab und zu per Modbus Poll vom PC den Wert abfragen.

Modbus RS485 kann ich nicht auslesen. Dazu habe ich keine Hardware, aber das läuft ja auch nicht über RJ45 sondern meistens über einen 9-poligen Sub-D-Stecker in Zweidrahttechnik.

Gruß Tobias

Die Ausfälle können auch mit der Höhe des Datenverkehrs zusammen hängen, bei einer NTP Abfrage alle X Sekunden passiert ja auch nicht viel.

Chicken123456:
Was meinst du mit Ethernet + DS18? Meinst du ich soll einfach mal einen einzelnen DS18B20 an einen Arduino hängen und diesen dann beispielsweise einfach mal ohne SPS laufen lassen?

genauso hätte ich mir das vorgstellt, eine einfache Weboberfläche zum Anzeigen der Werte, oder einen Weblient, der alle 5 Minuten die Werte wohin sendet

Hallo noiasca,

nachdem es bei dem NTP-Sketch zu keinen Ausfällen kam, habe ich jetzt einen DS18B20 genommen und mein Sketch völlig auf ihn und ein Modbusregister gekürzt. Das läuft jetzt seit fast 24h ohne einen einzigen Ausfall. Das lässt doch dann vermuten, dass es auch nicht an der Modbus Lib hängt oder? Kommt es ggf. zu temporären Seicherüberlastungen oder sowas? Gibt es einen Befehl für den Speicher im Programmablauf zu bereinigen?

Gruß Tobias

jetzt kannst mühsam Register für Register wieder aktivieren.

Aber was anderes, eine Reihe von Kontrollfragen für dich: schau dir bitte mal alle deine int an. Müssen das wirklich alles int sein? kannst da ein paar auf int8_t oder uint8_t umrüsten? Dein int Hoehe = 155; z.B. wird ja wohl kaum negativ werden.

Dann noch: welche dieser Werte ändern sich nie? Dann setz' ein const davor.

warum brauchst du überhaupt diese Zwischenvariablen, warum kannst die Berechnung nicht direkt bei der Registerzuordnung machen?

Kannst mal testweise das ganze auf einem Mega laufen lassen?

Hallo noiasca,

ich habe mir einen Arduino Mega gegönnt und hatte dort dann zuerst einen Teil der Temperatursensoren im Sketch drin und nachher alle 35 eingefügt inkl. der Füllstandsmessung. Von der Anzahl der Ausfälle machte dies keinen Unterschied. Es waren weiterhin ca. 12 Stück pro Tag. Ich habe mich dann dazu entschlossen mir noch das Ethernet Shield 2 zu kaufen von dem du mal am Anfang gesprochen hattest. Seit ich dann von Ethernet.h auf Ethernet2.h umgestiegen bin läuft der Arduino nun seit ca. 48h ohne einen einzigen Ausfall. Wo die Ausfälle bei der steigenden Anzahl von Registern herkommen weiß ich zwar nach wie vor nicht, aber das Problem ist anscheinen mit dem Ethernet Shield 2 und der andereren Library gelöst. Was mir noch aufgefallen war ist die Sache mit dem Ping. Das Ethernet Shield 1 gab nur ca. 2 Antworten zurück, bei den anderen gab es meistens eine Zeitüberschreitung oder manchmal 2XXms. Mit dem neuen Shield sind die Antworten immer <1ms.

Danke für eure Unterstützung!

Danke für deine Rückmeldung!

Gruß