Hallo,
ich habe eine Apllikation mit einem TCP-Server-Socket. Immer wenn sich der Remote-Client-Partner abmeldet oder abstürzt und danach wieder neu startet, dauert es fast genau 90 Sekunden, bis die Verbindung wieder steht. Bis auf die üblichen Timeouts der TCP-VIs habe ich sonst keine Parameter, an denen ich drehen kann.
Weiß vielleicht jemand, woher diese "magischen" 90 Sekunden kommen und wie ich diese Zeit reduzieren kann? Bei einer kurzen Verbindungsunterbrechung dauert es sonst zu lange, bis die Verbindung wieder steht.
Vielen Dank!
Ich weiss leider nicht woher die 90 Sekunden kommen. Aber wie erkennst du überhaupt, dass ein Client nun wech ist? Hast du versucht einfach das Ethernet-Kabel zu trennen? Hast du irgendein "Ping" eingebaut?
Etwas mehr Umfeld und Information ist schon nötig um Dir helfen zu können. Das ist ganz sicher etwas dass Du in Deinem Code falsch machst aber ohne den zu sehen ist es ohne Kristallkugel und parapsychischen Fähigkeiten unsererseits nicht wirklich möglich Dir sehr viel weiter zu helfen.
Rolf Kalbermatter
Das stimmt natürlich ;-)
Ich habe auf meinem PC eine LV-Server-Applikation, die über eine TCP/IP-Verbindung mit einer S7-300/CP343-1/aktiv kommuniziert. Sobald die Applikation auf dem PC gestoppt und neu gestartet wird, vergehen 90 Sekunden, bis der Datenaustausch wieder angestoßen wird.
Nach einigen Störsimulationsversuchen vermute ich, dass es wohl an der S7 liegt. Im Setup für die S7-CPU bzw. den S7-CP habe ich nichts gefunden, was dem nahe kommt. Ich bin aber auch kein S7-Experte. Hier habe ich mal die Zeiten aus den Versuchen:
Störungen und Zeiten bis zum Wiederaufbau der Verbindung (PC=Server, S7=Client/aktiv)
Kabelunterbrechung: 5 Sekunden
S7-Client Neustart: 10 Sekunden
PC-Server-Applikation Neustart: 90 Sekunden !!
90 Sekunden finde ich jedenfalls zu lang, wenn man überlegt, dass u.U. kritische Mess- oder Steuersignale in dieser Zeit nicht übertragen werden können. Hat vielleicht jemand einen Tipp hierzu oder ähnliche Erfahrung gemacht?
Ein ganz grober Verdacht, aber mit der Info die Du bis jetzt gegeben hast ist mehr kaum möglich.
Die S7 bemerkt erst nach 90 Sekunden dass die PC Application nicht mehr lebt und schliesst erst dann den internen Socket ab. Schliesst Du die TCP/IP Verbindung in der LabVIEW Applikation ordentlich ab? Also zuerst ein Quit oder was auch immer Kommando zur SPS schicken und dann die TCP/IP Refnum ganz ordentlich mit TCP Close abschliessen?
Rolf Kalbermatter
Die Sockets schließe ich ordentlich mit Close ab, d.h. zuerst den Connection-Socket, der mit dem Client verbunden ist und danach, sofern die Applikation beendet wird, den Listener-Socket.
Aber es stimmt, was du vermutest: ich habe zwischendurch die Applikation zum Testen "unsauber" über den Debug-Stop-Button beendet, d.h. sozusagen einen Absturz simuliert. Werden dann eventuell irgendwelche Netzwerkresourcen nicht oder nur mit dieser großen Verzögerungen freigegeben?
Nachtrag:
Die Frage wäre dann, auf welcher Seite diese Wartezeit auftritt, PC oder S7? Ok, das könnte ich eventuell mit anpingen ausprobieren. Ich vermute dann auch mal, dass das aus irgendwelchen Systemgründen so gewollt ist und man diese Zeit nicht verändern kann. Es tritt jedenfalls nur auf, wenn der PC=Server ist.
Wenn ich mit der Verbindung PC=Client und S7=Server/passiv arbeite, habe ich diese lange Verzögerung nicht.
- Kabelunterbrechung = 5sec,
- PC-Applikationsabsturz = 3sec,
- S7-Neustart = 10sec
Schonmal vorab vielen Dank!
' schrieb:Nachtrag:
Die Frage wäre dann, auf welcher Seite diese Wartezeit auftritt, PC oder S7? Ok, das könnte ich eventuell mit anpingen ausprobieren. Ich vermute dann auch mal, dass das aus irgendwelchen Systemgründen so gewollt ist und man diese Zeit nicht verändern kann. Es tritt jedenfalls nur auf, wenn der PC=Server ist.
Wenn ich mit der Verbindung PC=Client und S7=Server/passiv arbeite, habe ich diese lange Verzögerung nicht.
- Kabelunterbrechung = 5sec,
- PC-Applikationsabsturz = 3sec,
- S7-Neustart = 10sec
Schonmal vorab vielen Dank!
Jetzt wirds interessant! Das ist nicht so verwunderlich. Was Du beschreibst ist nämlich so: Mit dem S7 als Server kann der mehrere Client Connections akzeptieren. Die vorige bleibt dann zwar vielleicht noch 90 Sekunden hängen aber wenn die neue Applikation vorbei kommt und eine neue Verbindung anfordert wird einfach eine zweite Connection geöffnet. Umgekehrt mit der S7 als Client ist das anders. Ausser wenn ein Client ganz spezifisch dazu gemacht wurde mehrere Connection nebeneinander zu öffnen wird das normalerweise nur einmal getan. Die Verbindung bleibt hängen bis der Client nach 90s beschliesst dass da wohl etwas falsche ist und die Verbindung abschliesst und wieder eine neue aufbaut. Das ist einfach so.
Eventuel kannst Du das Timeout bei nicht aktiver Verbindung kürzer dann 90 Sekunden einstellen, aber die richtige Lösung ist eigentlich die S7 als Server zu betreiben.
Rolf Kalbermatter