TCP bzw. Modbus Verbindung sicher Schließen bei CPU Stopp

Zuviel Werbung?
-> Hier kostenlos registrieren
Im Grunde bleibt nur zu prüfen ob bei deinem Modbus-TCP Server das Keepalive herabgesetzt werden kann, oder die möglichen Verbindungen heraufgesetzt werden können.
Dazu habe ich keine Einstellungsmöglichkeit gefunden.
Auch scheint der WR nur eine Verbindung zuzulassen.

Mein Sohn hat zwischenzeitlich iOBroker zum Laufen bekommen.
Wenn ich jetzt die Sps Anschalte und die Abfrage gestartet wird, kommen im iOBroker
keine Daten mehr an.
Meine Lösung ist, dass ich ioBroker auf einem Raspi als Gateway verwende.
Macht weniger Ärger als die direkte Kommunikation über SPS.
Das werde ich dann wohl auch so machen müssen.
Welchen Weg gehst du da? Welchen Bus ?
Hast du Googlefutter oder einen Link wie die Daten in iOBroker bereit zu stellen sind,
das die SPS sie holen kann.
 
Es lässt sich im übrigen nicht sagen, dass das Verhalten des Geräts grundsätzlich falsch ist. Wenn auf Anwendungsebene keine Keepalives ausgetauscht werden, dann schlägt hier spätestens der TCP Keepalive an. Und diese Keepalive-Telegramme werden unter Linux wie unter Windows in Voreinstellung nach 2 Stunden gesendet. Wenn hier jemand einen Modbus-TCP Server startet, dieser grundsätzlich nur eine einzige Verbindung zulässt, dann kann es unglücklicherweise eben sein, dass eine Verbindung bis zu 2 Stunden hängen bleibt.
Ich denke, bei ModbusTCP ist ein Keep Alive Mechanismus gar nicht nötig. Ich habe sowas im Zusammenhang mit Modbus auch noch nicht gehört. Serverseitig reicht eigentlich die Implementation eines Session-Idle-Timeout, oder es kann auch gar nichts implementiert werden. Bei ModbusTCP wird empfohlen, die älteste unbenutzte Verbindung zu schließen und die neue Verbindung zu akzeptieren.

https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
Kapitel 4.2 TCP CONNECTION MANAGEMENT
a mechanism must be implemented in case of exceeding the number of authorized connection. In such a case we recommend to close the oldest unused connection.
Das macht der Modbus Server hier im WR aber offensichtlich nicht. Anscheinend beherrscht er auch kein Media Sense bzw. reagiert nicht drauf?


Dann muss ich wohl:

alle 5s Verbindung aufbauen
Daten holen
Verbindung abbauen
Nach 5s das gleich e wieder …
Empfehlung für ModbusTCP Clients:
It is recommended to keep the TCP connection opened with a remote device and not to open and close it for each MODBUS/TCP transaction

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke, bei ModbusTCP ist ein Keep Alive Mechanismus gar nicht nötig. Ich habe sowas im Zusammenhang mit Modbus auch noch nicht gehört. Serverseitig reicht eigentlich die Implementation eines Session-Idle-Timeout, oder es kann auch gar nichts implementiert werden. Bei ModbusTCP wird empfohlen, die älteste unbenutzte Verbindung zu schließen und die neue Verbindung zu akzeptieren.

https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
Kapitel 4.2 TCP CONNECTION MANAGEMENT

Das macht der Modbus Server hier im WR aber offensichtlich nicht. Anscheinend beherrscht er auch kein Media Sense bzw. reagiert nicht drauf?
Steht doch genau so unter 4.2.2, dass dafür der TCP Keepalive zuständig ist um die dort "half open" genannten Verbindungen als nicht mehr funktionstüchtig zu erkennen. Wenn ein Switch zwischen den Partnern hängt, und du schaltest nur die SPS ab, denn bleibt beim Server der Link auch bestehen. Darum glaube ich hier auch nicht, dass es das Problem grundsätzlich löst von der SPS auf irgendeinen anderen Client zu wechseln. Wenn der Server nur eine einzige Verbindung annimmt, dann gibt es auch kein Pool um ältere Verbindungen zu kappen (was ich generell unglücklich finde). Ich meine z.B. diese Janitza Geräte nehmen auch nur 2 oder 3 Modbus-TCP Clients an, ich hatte zumindest mal Geräte da war das genau so wackelig wenn man viel getestet hat. Kann natürlich bei diesem Gerät auch sein, dass dort ein eigener TCP Stack eingesetzt wird der keine TCP Keepalives kennt, denn die sind auch nicht zwingend vorgeschrieben. Sonst müsste das Gerät die Verbindungen spätestens nach üblich 2 Stunden als nicht mehr funktionierend erkennen und diese eine Serververbindung wieder freigeben.
 
Wenn der Server nur eine einzige Verbindung annimmt, dann gibt es auch kein Pool um ältere Verbindungen zu kappen
Der "Pool" besteht dann aus nur 1 Verbindung, und der Server könnte generell bei Verbindungsversuchen die evtl. bestehende Verbindung kappen.
Das halte ich für wesentlich besser für den/die Clients als "ewig lange" Timeouts.

Kann man eigentlich bei dem TIA MB_CLIENT den eigenen (ausgehenden) Port festlegen? Vielleicht anerkennt der Server dann eingehende Pakete vom auch vorher verwendeten Port für die bereits bestehende "halb offene" Verbindung? Oder kommt der MB_CLIENT dann nicht über den versuchten neuen Verbindungsaufbau hinaus? Oder könnte der MB_CLIENT dann einen "ordnungsgemäßen" Verbindungsabbau noch nachschieben?

Harald
 
Zurück
Oben