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: 28.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: 28.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 (97 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: 28.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 (91 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 |
Folgen Sie uns auf