Modbus TCP stürzt ab, wenn ein Gerät über Modbus RTU keine Spannung hat

Habe auf meinem Spielrechner ein Pokeys57E über Modbus TCP laufen.

Was mir gerade auffällt: immer wenn der Enegiezähler, den ich Testweise laufen habe, keine Spannung hat, also über die ser. Schnittstelle keine Daten über Modbus RTU kommen können, stürzt die TCP Verbindung periodisch ab.

Was könnte Das sein (V3.4) ?

Gruß Helmut

Habe jetzt 6 Pokeys im Einsatz.
Liefen bisher alle sehr konstant.
Seit dem Wochenende habe ich das Problem das alle sich immer wieder
zeitweise verabschiedet haben.
Kamen aber nach ca. 10 - 20 Sekunden wieder.
Habe das Gefühl das nach dem letzten Update von Pokey das Problem aufgetreten ist.

Allerdings haben sich auch die Client Verbindungen zum IPS Rechner unter andere ebenfalls verabschiedet und kommen wieder.

Bei Deinem PoBlock Programm Test ist mir diese TCP-Geschichte aufgefallen.

Ist die Modbus RTU Geschichte ohne Spannung (RS485 Wandler hat Spannung) kommen auch keine Daten aus den Shared Data Quellen.

Wenn der E-Zähler läuft, kommen sie sofort.

Gruß Helmut

ja, so komische Sachen hatte ich auch.
Nach viel Fehlersuche im Ausschlussverfahren habe ich dann das China-Schaltnetzteil gegen ein ATX-Netzteil getauscht, seit dem ist alles stabil.
Evtl. brauchen die Pokeys mehr Strom seit dem Update? (nur ne Vermutung)

Schei… nicht getestet, könnte eventuell eine Ursache sein.
Allerdings hat mein 5 Volt NT 5A/25Watt
Soviel ziehen die Dinger ja nicht.

Mit dem Firmwareupdate hat es nix zu tun, das Netzteil ist bei mir auch ok

Die Frage ist: warum sollte die TCP-Verbindung abbrechen, wenn ich über ser.RS485 keine Daten bekomme weil die Quelle keinen Spannung hat.

Ich kann nicht verstehen, warum das Pokeymodul jetzt daran beteiligt sein soll…wie soll Das gehen…

Das mit dem Firmwareupdate kann man ja auch rückgängig machen, testet das doch mal bei eurem Problem.

Mit meinem Problem hat es jedenfalls nichts zu tun, bei mir lief 3152b mit dem gleichen Fehler…

Noch was ist mir aufgefallen, hat nichts mit dem Thema hier zu tun:

wenn ich den IPS Dienst beende, die Console auf lasse und nach einiger Zeit wieder starte muß ich die Console beenden und wieder öffnen, war Das immer so…

Gruß Helmut

solch Verhalten hab ich ab und zu mal beim Update von IPS… sogar soweit das ich einige Male den Server neustarten musste, weil der Dienst sich nicht beendet hat.
Mittlerweile mache ich die Console und das Programm im Tray zu, kurz nachdem ich das Update gestartet habe.

Ja ich hab so ein Kombonetzteil 5V / 12V (Bauform wie ein Notebooknetzteil), schafft je Spannung 2A, theoretisch locker ausreichend aber irgend so ein China Bauteil dort drin schwächelt wohl…
Aber ich lese grad, dass du ja 6 Pokeys hast, also kann es ja eigentlich nicht am NT liegen.

Nochmal zum Pokeys bei mir hat es auch nur den mit Version >4 getroffen, die anderen haben von mir kein Update bekommen und funktionieren.

Helmut, zu deinem Problem kann ich irgendwie nichts sagen, weil es schwer nachvollziehbar ist…
bzw. hast du mal die Kabelverbindung getrennt (RS485) wenn das Energieteil keinen Strom hat… ? (RS485-Adapter im PC lassen)

Helfen kann es ja nun nicht, dass wenn die Spannung mal für den Zähler nicht mehr da ist, dass ich mir 'n Relais zum abschalten der RS485-Verbindung einbauen muß…

Gruß Helmut, der jetzt @work muß

nein helfen sicher nicht aber wenn es das Problem behebt, dann weiß du, dass dein Energiezähler ein Problem hat oder nicht?

Hab’s versucht, Draht abklemmen bringt’s auch nicht.

Nur RIESEN FRUST weil bei diesen Versuchen immer wieder mal IPSymcon abschmiert, sich sogar nur mit Neustart wieder zur Arbeit bewegen läßt.

Der Comport ist abgezogen, wird aber nicht gemeldet, Die Schnittstelle wird als geöffnet gemeldet , trotzdem steht „Aktueller Wert Com4“ ist nicht verfügbar.

Wähle ich Com2 an, weil ich dann mal mit einem anderen RS485 benutzen will, da schmiert die Console ab „Socket Fehler #10054“, ein Peer mischt sich ein und setzt die Schnittstelle zurück, steht dann da.

Console to IPS Dienst beenden steht im Schirm geht nur weg, wenn ich ihn runterklick.

IPS reagiert nicht mehr, Neustart.

Naja, hab’ ja selber Schuld, warum halte ich den Zähler nicht unter Spannung. Oder was sagt man als Integrator zu seinem Kunden?

Gruß Helmut

hmm, dein Frust ist verständlich…
Die ClientSocket Probleme nerven wirklich, hatte auch grad aktuell eine Anfrage um die UpTime der Fritzbox auszulesen.
Gleiches Problem, Fritzbox startet neu, ClientSocket zeigt keinen Fehler aber wenn ich anrufe geht trotzdem kein Tor auf :wink: — ClientSocket neustarten und alles ist wieder gut, das könnten die IPSler mal beheben.

Windows Neuinstallation oder neuer PC :cool:

Ja,

wenn Das aber nicht geholfen hat, und keine Rückendeckung kommt.

Dann biste den Kunden los und hast negativ-Werbung, wer kann sich Das leisten ?

Gruß Helmut

Hallo Helmut. Kannst du mal probieren, ob das Problem auch auftritt, wenn du den seriellen Port deaktivierst, bevor du das Gerät stromlos machst?

Hintergrund: Wenn das Gerät nicht erreichbar sind, gibt es für die Modbus-Abfragen ein Timeout auf das gewartet wird. Dies wird wahrscheinlich deine ModBus TCP abfragen aber genauso blockieren.

Dass IPS aber abschmiert, sollte wahrlich nicht passieren - Wenn du magst, ruf mal an und wir schauen uns das gemeinsam an!

paresy

Ich war auch nicht untätig bei der Sucherei… ich antworte mal mit Quote

paresy
Hallo Helmut. Kannst du mal probieren, ob das Problem auch auftritt, wenn du den seriellen Port deaktivierst, bevor du das Gerät stromlos machst?

Dann passiert es nicht.

Hintergrund: Wenn das Gerät nicht erreichbar sind, gibt es für die Modbus-Abfragen ein Timeout auf das gewartet wird. Dies wird wahrscheinlich deine ModBus TCP abfragen aber genauso blockieren.

Dieser Verdacht liegt nahe, könnte auch möglich sein, mit einer neuen IPS-Spiel Installation passiert diese Client-Abmelderei nicht.

Dass IPS aber abschmiert, sollte wahrlich nicht passieren - Wenn du magst, ruf mal an und wir schauen uns das gemeinsam an!

Deine Zeit möchte ich nicht vergeuden, ich habe hier nur ein „Spielsystem“, das ist gar nicht wichtig.

Ein Hinweis von einem der IPS-Macher/Kenner, zeitnah nach Thread Erstellung genügt ja, nur nach was man schauen kann.

Ich habe Dir hier mal die Logfiles von der neuen IPS-Spiel Installation gezippt.

Das Abmeldefenster bleibt stehen, wenn die Modbus Abfrage nicht möglich ist, weil das Gerät keine Spannung hat, oder aus einem anderen Grund nicht mehr liefern kann.

Manchmal nur per Taskmanager killbar, manchmal ist sogar Neustart nötig.

Die Schnittstelle ist aktiv, nur gefüttert wird sie nicht.

Und wenn andere Instancen nicht abfragbar sind, einige User berichten ja, dass es bei Denen auch manchmal vorkommt, wäre es ein" look at this", wert.

Gruß Helmut der mal kurz @work geht

PS bei der Temperaturwerte Erstellung ist mir noch aufgefallen, bei absolut gleichem Erstellungsverfahren, setzt die Konsole manchmal den Haken auf Standartaktion, was in der Webfront merkwürdig aussieht.

logs.zip (21.5 KB)

Nochmal gefragt: Warum wird mir der Verlust der ser. Schnittstelle im IO-Baum nicht gemeldet?

Ich habe nur einen Com5, keine anderen Adapter, wenn ich Den abstecke… keine Meldung

Wenn ich die FHZ abstecke, das merkt IPS, warum nicht auch den Comport…

Auch mein Überwachungsscript meldet alle Ausfälle der IO-Instancen, nur die ser. Schnittstelle kommt nicht.

Wenn ich die Schnittstelle auf mache, kommt das angehängte Bild.

Gruß Helmut

Edit: @Paresy
Wenn ich das Meldungsfenster so anschaue, Du wirst Recht haben, wenn vom RS485 was kommt ist auch der Datenfluß von den Modbus TCP flüssig, fehlen die Daten vom Modbus RTU, dann stockt auch Modbus TCP, sogar bis zum Abmelden.

 <?
$Pokeys150 = IPS_GetInstance(31130 /*[Pokeys57E 150er Client Socket]*/);
$Pokeys151 = IPS_GetInstance(49786 /*[Pokeys57E 151er Client Socket]*/);
$FHZ1000 = IPS_GetInstance(17457 /*[FTDI]*/);
$serSchnittstelle = IPS_GetInstance(40860 /*[RS485 Modbus RTU Zähler]*/);
$IOinstanzPokeys150 = 31130 /*[Pokeys57E 150er Client Socket]*/;
$IOinstanzPokeys151 = 49786 /*[Pokeys57E 151er Client Socket]*/;
$IOinstanzFHZ1000 = 17457 /*[FTDI]*/;
$IOinstanzserSchnittstelle = 40860 /*[RS485 Modbus RTU Zähler]*/;
if($Pokeys150['InstanceStatus'] != 102) {
    SetValueBoolean(46830 /*[Überwachung\Pokey 150 Leben]*/,true);
    //echo "FEHLER - Socket nicht verbunden!";
    IPS_SetProperty($IOinstanzPokeys150, "Open", false);
    IPS_ApplyChanges($IOinstanzPokeys150); //Neue Konfiguration übernehmen
    IPS_Sleep(1000);
    IPS_SetProperty($IOinstanzPokeys150, "Open", true);
    IPS_ApplyChanges($IOinstanzPokeys150); //Neue Konfiguration übernehmen
}
if($Pokeys150['InstanceStatus'] == 102) {
    SetValueBoolean(46830 /*[Überwachung\Pokey 150 Leben]*/,false);
}
if($Pokeys151['InstanceStatus'] != 102) {
    SetValueBoolean(41402 /*[Überwachung\Pokey 151 Leben]*/,true);
    //echo "FEHLER - Socket nicht verbunden!";
    IPS_SetProperty($IOinstanzPokeys151, "Open", false);
    IPS_ApplyChanges($IOinstanzPokeys151); //Neue Konfiguration übernehmen
    IPS_Sleep(1000);
    IPS_SetProperty($IOinstanzPokeys151, "Open", true);
    IPS_ApplyChanges($IOinstanzPokeys151); //Neue Konfiguration übernehmen
}
if($Pokeys151['InstanceStatus'] == 102) {
    SetValueBoolean(41402 /*[Überwachung\Pokey 151 Leben]*/,false);
}
if($FHZ1000['InstanceStatus'] != 102) {
    SetValueBoolean(23660 /*[Überwachung\FHZ1000 Leben]*/,true);
    //echo "FEHLER - Socket nicht verbunden!";
    IPS_SetProperty($IOinstanzFHZ1000, "Open", false);
    IPS_ApplyChanges($IOinstanzFHZ1000); //Neue Konfiguration übernehmen
    IPS_Sleep(1000);
    IPS_SetProperty($IOinstanzFHZ1000, "Open", true);
    IPS_ApplyChanges($IOinstanzFHZ1000); //Neue Konfiguration übernehmen
}
if($FHZ1000['InstanceStatus'] == 102) {
    SetValueBoolean(23660 /*[Überwachung\FHZ1000 Leben]*/,false);
}
if($serSchnittstelle['InstanceStatus'] != 102) {
    SetValueBoolean(32944 /*[Überwachung\Ser Schnittstelle Leben]*/,true);
    //echo "FEHLER - Socket nicht verbunden!";
    IPS_SetProperty($IOinstanzserSchnittstelle, "Open", false);
    IPS_ApplyChanges($IOinstanzserSchnittstelle); //Neue Konfiguration übernehmen
    IPS_Sleep(1000);
    IPS_SetProperty($IOinstanzserSchnittstelle, "Open", true);
    IPS_ApplyChanges($IOinstanzserSchnittstelle); //Neue Konfiguration übernehmen
}
if($FHZ1000['InstanceStatus'] == 102) {
    SetValueBoolean(32944 /*[Überwachung\Ser Schnittstelle Leben]*/,false);
}
?>  

Das liegt daran, dass dein RS232 Port weiterhin korrekt ist. Auch wenn kein Stecker dran ist, ist rein physikalisch der Port da. Somit kann die RS232 Instanz nicht meckern. (Bei USB Wandlern sieht es anders aus… Wenn du den absteckst, dann verschwindet der COM Port unter Windows)

Somit muss der Fehler, dass kein Feedback kommt, eher im ModBus Splitter erkannt werden. Aber wie erkennt man sowas? Du kannst ja jederzeit wieder den Strom anmachen und alles läuft tutti :slight_smile:

paresy

Danke für die Antwort.
Es ist ein USB auf RS485 Wandler, Der verschwindet auch im Windows.

Was mache ich falsch, was soll ich anders machen?

Wäre auch für solche User interessant, die zB eine RS485-Bus oder RS232 Steuerung nutzen. Ich lese hier nur was aus.

Gruß Helmut

Edit:
Hinweis: es hat nichts mit der fehlenden Spannung am Modbusgerät zu tun, der nährt den Client-Abmelde-Fehler.
Hier hast Du Recht, der Adapter ist ja noch da.

@Paresy, was kann ich anders machen um die ser. Schnittstelle per Script neu zu verbinden?

Gruß Helmut

Gar nichts…

Noch nicht mal ein Satz wie " Ich weiß auch nicht"…

Ich pack diese Erfahrung mal zu der mit Gucky hier
Gruß Helmut