27.07.2009, 22:50
Beitrag #1
|
MichaDu
Unregistered
|
TCP-Server-Socket Timeout
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!
|
|
|
27.07.2009, 22:58
Beitrag #2
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
TCP-Server-Socket Timeout
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?
|
|
|
28.07.2009, 07:18
Beitrag #3
|
|
|
28.07.2009, 14:04
Beitrag #4
|
MichaDu
Unregistered
|
TCP-Server-Socket Timeout
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?
|
|
|
28.07.2009, 14:25
Beitrag #5
|
|
|
28.07.2009, 14:48
Beitrag #6
|
MichaDu
Unregistered
|
TCP-Server-Socket Timeout
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?
|
|
|
28.07.2009, 15:29
Beitrag #7
|
MichaDu
Unregistered
|
TCP-Server-Socket Timeout
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!
|
|
|
28.07.2009, 18:28
Beitrag #8
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
TCP-Server-Socket Timeout
' 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
|
|
|
| |