21.04.2008 14:12 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo J_Bell, ich habealle Meldungen die aufgelaufen sind noch mal über wireshark in eine Datei exportiert. (Datei anbei) Als Testclient habe ich die freeware "Herkules" verwendet. Irgendwann kommt die Meldung: "Connecton refused by remote host" Und die TCP-Verbindung zum Gerät wird vom Testclient dann eigenständig abgebaut. Wenn ich Dich also richtig verstehe, findet ein watchdog statt (Keep alive) Aber warum wird die TCP-Verbindung dann vom Testclientabgebrochen ? Gruß Eleu Dateianhangipc.pdf (79 Downloads) |
29.04.2008 11:31 | |
Beiträge: 5822 Bewertung: (411)
|
Hallo Eleu, um ehrlich zu sein würde ich persönlich nie einen well known Port für die TCP Kommunikation nutzen, dass führt zu oft zu massiven Problemen. Der Port 102, als open Port, ist im SIMATIC Umfeld sehr oft gebraucht, aber im "normalen" PC-Betrieb eher selten angewendet. Wegen des Keep Alive gibt es im Internet einige Angebote, schau Dir vielleicht mal den Foliensatz der UNI in Berlin an: http://www2.informatik.hu-berlin.de/~schrape/downloads/srk/TCP-Folien-Druck.pdf Vielleicht wird es da etwas klarer. Viele Grüße J_Bell |
29.04.2008 13:11 | |
Beigetreten: 06.03.2006 Letzter Bes: 16.04.2024 Beiträge: 369 Bewertung: (101) |
So, ich hab jetzt mal was ausprobiert. Bei mir kommunizieren ein Field-PG als PC und TCP-Client (140.140.140.60) und eine CPU 315-2 PN/DP mit T-Bausteinen als TCP-Server (140.140.140.64)miteinander. Auf dem PC habe ich den TCP-Client aus dem FAQ http://support.automation.siemens.com/WW/view/de/19553230 Auf S7-Seite musste ich ein bisschen umbauen, um sie dazu zu bringen, nicht ständig Daten zu senden. Ich habe da meine eigenen SCL-Quellen, die ich mir mal entwickelt habe. Die S7 ist der aktive Partner der Verbindung. Das bedeutet, dass der PC zwar seinen Client startet, danach aber nicht mehr weiter aktiv ist. Erst wenn ich auf der S7-Seite Connect aufrufe, erwacht die Kommunikation zum Leben Frame 1 S7-PC SYN 2 PC-S7 SYN ACK 3 S7-PC ACK --- Ende des Verbindungsaufbaus 6S7-PC TCP Keep-Alive nach ungefähr 60s 7PC-S7 TCP Keep-Alive ACK 8S7-PC TCP Keep-Alive nach ungefähr 60s 9PC-S7 TCP Keep-Alive ACK .. das geht dann so weiter. Ich habe die Verbindung auch wieder ab- und wieder aufgebaut und auch mal Daten übertragen. Sobald ich die offene Verbindung wieder stehen lassen habe, ging die S7 dazu über, Keep-Alive zu senden und der PC hat jedes mit Keep-Alive ACK quittiert. Im Anhang mein Ethereal-Protokoll des Versuchs. Der entscheidende Unterschied zwischen meinem und Deinem Trace sind die fehlenden TCP Keep-Alive ACK, die der PC an den Scanner senden müsste. Ich habe keine Ahnung, warum er das nicht tut :-( Wer ist denn in Deiner Applikation der aktive Part? Viele Grüße Thomas DateianhangAuswertung_1.pdf (81 Downloads) |
29.04.2008 16:56 | |
Beigetreten: 06.03.2006 Letzter Bes: 16.04.2024 Beiträge: 369 Bewertung: (101) |
Ich habe noch mal die Windows-Entwicklerhilfe bemüht. DateianhangWin32_DevelopersReferences_Errorcodes.pdf (80 Downloads) |
30.04.2008 09:34 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo Thomas, hallo J_Bell, beim aller ersten Mal bin ich nicht dabei stehengeblieben, sondern hab 6 Sdt. später nachgesehen ob das Herkules Programm die Verbindung abgebaut hat. Dann erst habe ich die Daten über "wireshark" exportiert. Mittlerweile habe ich jetztam IPC die Fehlermeldung "connecton refused..." bekommen. Herkules hat die Verbindung abgebaut. Jetzt sind auch jede Menge "keep alive" vom Scannerdabei (Datei anbei). Es kommt mir so vor,als obdie keep alive - Telegramme vom Scanner erst danngesendet werden, wenn die Fehlermeldung "connecton refused..." erfolgt. Bin mir aber nicht sicher, weil ich es auch diesmal beim IPCnicht live miterlebt habe. Die Verbindung vom Field - PG zum Scanner steht noch. Merkwürdigerweisesind kein keep alive beim Field -PG angekommen ("wireshark") ? Gruß Eleu Dateianhangdata_ipc_-_Editor.pdf (74 Downloads) |
30.04.2008 09:59 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo, jetzt hat auch das Field - PG die Verbindung abgebrochen. Dateianbei. Gruß Eleu Dateianhangdata_field_pG_-_Editor.pdf (96 Downloads) |
30.04.2008 11:39 | |
Beiträge: 5822 Bewertung: (411)
|
Hallo Eleu, Ich würde dass mal versuchen. Es ist zwar ein Beispiel für ISO Transport, aber für TCP ändert sich ja nur die Adressierung und anstelle des TSAP der Port. Die Netzwerkkarte muß auch nicht eine CP 1613 sein, sondern kann auch IE Allgemein sein, da mußt Du dann nur darauf achten das die IP Adresse die Du eingesellt hast unter Windows auch Deine IP Adresse in der Projektierung ist. Die S5 Seite kannst Du ganz weg lassen... Du hast ja eine fertige Station. Die Beschreibung ist aus der Version 6.4. Viele Grüße J_Bell DateianhangOPC Send-Receive.pdf (69 Downloads) |
30.04.2008 14:51 | |
Beigetreten: 06.03.2006 Letzter Bes: 16.04.2024 Beiträge: 369 Bewertung: (101) |
Ich habe meinen TCP-Client noch so programmiert, dass man die IP-Adresse und Port für den Server angeben kann. Die INI-Datei enthält diese Informationen. Sie sollte im selben Verzeichnis wie das Programm selbst liegen. Mein Field-PG kommuniziert damit mit der Simatic und eben hat die Simatic das erste Keep-Alive-Telegramm gesendet, welches der PC bestätigt hat. Telegramme vom Format STX Buchstaben CR LF werden dann im Anzeigefeld ausgegeben. Vielleicht hilft das erst mal weiter? Viele Grüße Thomas DateianhangDelphi_TCP_Client.zip (71 Downloads) |
05.05.2008 11:41 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo Thomas, leider hat Dein Testclient auch den Fehler verursacht. (Siehe Anhang zip) Ich habe es auf dem IPC laufen lassen. Wireshark habe ich auch mitlaufen lassen (Siehe Anhang zip) Die keep alives vom Scanner, werden so wie ich es beobachtet habe, in wirshark erst mit dem Abbau der Verbindung angezeigt? Hallo J_Bell, ich habe es auf dem Field - PG so eingerichtet. Anscheinendsteht die Verbindung. Es ist mir jedoch noch nicht gelungen gesendete Daten vom Scannerin einem Item anzuzeigen. Wahrscheinlich habe ich den Item nicht richtig konfiguriert (Siehe Anhang zip) ? Kannst Du mirein paar Tipps geben ? Gruß Eleu DateianhangTest.zip (90 Downloads) |
05.05.2008 15:26 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo Thomas, hallo J_Bell, ich weis nicht wieso, aber die Lösung von J_Bell scheint stabiler zu laufen. Nach längerer Standzeit konnte ich den Scanner triggern, der dann auch Pakete gesendet hat, dievom PC dann auch quittiert wurden (Siehe Dateianhang) Auch wurde einmal eingegenseitiges keep alive durchgeführt ? In dem von mirangelegten Item (Siemens -OPC-Scout) bekomme ichaber noch nichts angezeigt. Gruß Eleu DateianhangField_PG_wireshark.zip (132 Downloads) |
07.05.2008 13:32 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo Thomas, hallo J_Bell, ich habe festgestellt, dass der Siemens Treiber nach 7200 Sek. von sich aus ein "keep alive" sendet. (Kann man in NetPro einstellen) Der Scanner quittiert es dann. Thomas, könntest Du den Testclient dahingehend umprogrammieren, dass er selber ein "keep alive" absetzt (So wie der Siemens Treiber)? Ich habe im Internet dazu folgendes gefunden: Es gibt hierfür eine Funktion der Windowssocket (SO_KEEPALIVE) Die Option ist SO_KEEPALIVE unter den SOL_SOCKET-Optionen. Code: bool keepalive = true;
setsockopt( mysocket, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(bool) ); Siehe auch: http://msdn.microsoft.com/de-de/library/1s9cycf8.aspx Danach ist der Socket so umgestellt, daß er automatisch keepalives sendet und die Verbindung offenhält. Kannst Du das mal programmieren und mir dann den Testclient zurücksenden damit ich es ausprobieren kann ? Gruß Eleu |
07.05.2008 16:05 | |
Beigetreten: 06.03.2006 Letzter Bes: 16.04.2024 Beiträge: 369 Bewertung: (101) |
Bitteschön ... Wenn ich SO_KEEPALIVE setze und danach nach dem Zustand frage, dann ist es jetzt true. In meiner Anwendung mit S7 habe ich trotzdem noch keines gesehen. Vielleicht ist es dem PC auch recht, wenn er welche empfängt? Ich habe auch auf die Schnelle keinen Trick gefunden, wie ich die Zeit einstellen kann. Vielleicht hast Du ja noch was gefunden? Grüße Thomas DateianhangTCP_Test.zip (97 Downloads) |
08.05.2008 10:01 | |
Beigetreten: 01.08.2007 Letzter Bes: 29.01.2024 Beiträge: 1698 Bewertung: (84) |
Hallo Thomas, also ich glaube jetzt haben wir es. Dein Client sendet nach genau 2 Std. ein keepalive und der Scanner quittiert es auch Sieh Dir die Aufzeichnung an (Anhang). Die TCP-Verbindung bleibt jetzt hoffentlich erhalten (Werde das noch länger beobachten). Zu Deiner Frage: Ich glaube hiefür gibt es keine API Funktion die Microsoft bereitstellt. Man kann aberüberdie Registrieeinen Registrierungsschlüssel hinzufügen der die KeepAliveTimeändert. Siehe hierzu: http://support.microsoft.com/kb/167833/de Standardmäßig sind immer 7200 Sek. die im Systemablaufen. Der Scanner bringt sein erstes keepalive nach 7238 Sek. Es gibt keine Möglichkeit dasam Scanner zu ändern (Muss ich ja jetzt auch nicht mehr). Herzlichen Dank auch an J_Bell fürseine umfangreiche Hilfestellung. Der Siemens Treiber funktioniert, zumindest was die TCP-Verbindung angeht, tadellos. DasAuslesen der Prozesswerte aus dem OPC-Serverfunktioniert aber noch nicht richtig. Wenn der Scanner kontinuierlich Datensendet, verändert sichdie Qualität des Item von schlecht auf gut und umgekehrt ? Versuche zur Zeit eine VB-Appl. zu programmieren, um zu sehen ob es damit besser geht ? Gruß Eleu DateianhangTest wireshark.zip (98 Downloads) |
Folgen Sie uns auf