Modbus ... Fehler abfangen

Hallo, ich nutze rege den ModBus meiner Heizungsanlage (Hoval) …klappt ausgezeichnet. Im Statusprotokoll finden sich sproradisch Fehler wie:

Frage mich wie ich das sinnvoll abfangen kann …
Ob der Socket verbunden ist kann ich ja grundsätzlich über einen ‚ping‘ feststellen, nur beim ModBus Read wüsste ich nicht wo ich eine Bedingung setzen könnte.
Die Zeitüberschreitung passiert sicher wenn die Heizungssteuerung grad gut zu tun hat, gibt es da eine Möglichkeit die Fehlermeldung abzufangen?

Gruß, Michael

Ich habe in jeder Modbus Anlage diesen Fehler. Egal welches Gerät dahinter steckt.

Naja, wenn man vor dem Read mit einem kurzen Ping die Verfügbarkeit prüfen würde wäre das abzufangen, eine boolsche Variable als Bedingung beim Read Request wäre vielleicht eine Möglichkeit …

Ein Ping bedeutet nicht das auch die TCP Verbindung funktioniert. Das sind ja verschiedene Protokolle.
Du kannst natürlich den Read Intervall in den Instanzen deaktivieren und dann in einem Script erst den Zustand vom Clientsocket abfragen und wenn der okay ist, alle ModBus_RequestRead Befehl auslösen.
Die Meldung aus deinem Screenshot zeigen ja das die
TCP Verbindung verloren geht.
Michael

Ah, Danke, das geht natürlich …ist aber lästig :wink:
Gibt es einen Ansatz wie ich dahinter komme warum die TCP Verbindung ab und zu verloren geht?
Wirklich stören tut das ja nicht, ich wollte nur das Statusprotokoll mal sauberer kriegen …
Gruß Michael

Ich würde mal eine zyklische Abfrage so alle 5 Sekunden in eine Instanz mit dem Gerät bauen.

Oder mal schauen ob Du Connection Timeout in dem Gerät erhöhen kannst.

Ich vermute folgendes:
Je höher das Abfrageinterfall, desto mehr Fehler gibt es. Ich vermute, dass hinten die letzte Abfrage noch nicht fertig ist, während IP-Symcon vorne wieder versucht, die ersten Abfragen durchzuführen, was dann zu einem Timeout führt.
Es gibt in den Properties die Möglichkeit, die Abfrageintervalle zwischen zwei Instanzen einzustellen bzw. die Pause zwischen diesen Abfragen. Mit sehr viel Herumspielen mit diesem Wert habe ich es mal geschafft, für 3 Tage keine Fehler zu haben. Die Lösung war das jedoch nicht.

Vielleicht kann uns @paresy dazu mehr sagen?

Wir machen nie Abfragen „gleichzeitig“ sondern warten immer auf die Antwort (es sei denn diese dauert mehrere Sekunden - dies wäre ein Timeout). Wie @Nall-chan schon korrekt gesehen hat, scheint der Socket Abbrüche zu haben. Das kann eigentlich nicht durch IP-Symcon passieren, sondern eher das Gerät muss die Verbindung verlieren.

Wie viele Instanzen mit was für einem Intervall fragen denn ab? Wie @DerStandart schon sagte gibt es intern noch eine Property zum Einstellen der Pause zwischen den Abfragen. Evtl. ist dein Gerät mit der Geschwindigkeit der Anfrage überlastet.

paresy

…verratet ihr mir wo ich die finde? In den Spezialschaltern? Dann würde es für das ganze System gelten?
Gruß, Michael

Die gelten pro ModBus Splitter. Du kannst du aktuell nur über IPS_SetProperty + IPS_ApplyChanges setzen. Es gibt diese 2:

DelayTimeTCP (Default ist 10ms)
DelayTimeRTU (Default ist 20ms)

Das ist die Pause zwischen den Abfragen.

paresy

Verstehe. Die Info hilft, den Sachverhalt etwas besser zu verstehen. Danke. Ich habe immer noch sehr oft die Meldung „Zeitüberschreitung“, was ja dann auf einen TimeOut hindeutet.

Ich habe hier einen Modbus Stromzähler, der aus mir unerfindlichen Gründen immer wieder TimeOuts liefert. Werde mal recherchieren und experimentieren, woran das liegen kann.

Wenn du trotz höherem Delay Wert immer noch Timeouts bekommst, kannst du ja mal ein Debug Log mitlaufen lassen. Ich vermute, dass sich dein Gerät irgendwo verschluckt und eher einen Bug in der Modbus Implementation hat. Gibt es evtl. Firmware Updates für dein Gerät?

paresy