# CP 343-1 lässt nach Verbindungsabbruch keine neue Verbindung mehr zu



## tomi_wunder (19 September 2006)

Hi!
Ich hab gerade folgendes Problem:
Zwischen einem Rechner und einem CP343-1 (1EX10-0XE0) soll eine TCP-Verbindung (vom Rechner aus) aufgebaut werden. Das klappt nach einem Neustart des CP (durch manuellen STOP/RUN oder MRES oder Spannungsausfall) ganz toll! Bricht der Rechner allerdings die Verbindung ab und will sie dann wieder aufbauen, so lässt dies der CP nicht mehr zu.

Um Fehlerquellen auszuschließen lasse ich die SPS ausschließlich mit den Projektierdaten und ohne ein Programm laufen.
Zum Testen der Verbindung verwende ich HyperTerminal.
(Im Fehlerfall kriege ich die Meldung "Es kann keine Verbindung zu IP (Anschluß PORT) hergestellt werden.")

Ich habe irgendwie den Verdacht, daß der CP die Verbindung seinerseits nicht beendet und dann beim erzeuten Verbindungsversuch eine Art "Resume" probiert. Kann das sein? Was könnte man dagegen machen?

Es sei noch angemerkt, daß der Verbindungsaufbau zwingend vom Rechner aus erfolgen muß.

Vielleicht kann mir ja einer von euch da weiterhelfen.
Vorab schonmal vielen Dank
MfG
   tomi


----------



## argv_user (19 September 2006)

*Langsam*

Der CP braucht etwas Zeit (etwa eine Minute), bis er eine
neue Verbindung akzeptiert. Weiß der Geier warum.

Das bremst natürlich Programme brutal aus, die
Verbindung öffnen, ein Byte übertragen, Verbindung schließen.

Dein PC sollte den Verbindungsaufbau in einer Schleife mit
Timeout abarbeiten, solange bis es klappt. Und nur wieder
schließen, wenn es absolut notwendig ist.


----------



## tomi_wunder (19 September 2006)

Hi!
Danke für deine Antwort, aber mein drecks CP meint mal wieder er sei was Besseres! Der läßt mich auch nach 'ner halben Stunde noch nicht wieder drauf.
Ich hab noch was nettes gefunden (da hab ich vorher garnicht dran gedacht...)!
Im NCM sehe ich folgendes (unter Verbindungen/TCP/TCP-Verbindung1, lange nachdem der Client seine Verbindung wieder abgebrochen hat):
Verb-Nr: 1
Partner Adresse: 192.168.10.74
Verbindungszustand: aufgebaut
Empfangszustand: Datenübergabe an Anwenderprogramm
Sendezustand: Warten auf Sendedaten
Lokaler Port: 2000

Mal ganz salopp ausgedrückt, glaube ich, daß der immer noch nicht gemerkt hat, daß gar keiner mehr mit ihm redet! Und weil die eine Verbindung, die projektiert ist, noch als "aktiv" angesehen wird, lehnt der kathegorisch jedes Verbindungsgesuch ab. Der 1EX10 is nu wirklich ein uralter Kasten und wie ich die Sache mal wieder einschätze, is er noch nicht so schlau, sowas wie einen Timeout zu realisieren.

Gibt's irgendeine Möglichkeit, am CP den Verbindungsstatus abzufragen und eine Verbindung Programmgesteuert zu beenden?


----------



## argv_user (19 September 2006)

Kann sein, dass es bei Siemens ein Firmware-Update für den CP gibt.
Probier das mal lieber zuerst.


----------



## tomi_wunder (19 September 2006)

Hab ich schon gemacht (v2.1.5 = neueste)


----------



## Question_mark (19 September 2006)

*Lauter Fragezeichen*

Hallo,



			
				tomi_wunder schrieb:
			
		

> Bricht der Rechner allerdings die Verbindung ab und will sie dann wieder aufbauen,


Welches Programm auf dem Rechner baut die Verbindung auf ???
Selbstgeschrieben oder von welchem Hersteller ??
Wie bricht denn der Rechner die Verbindung ab ??
Wird vom Programm auf dem Rechner wirklich ein "Disconnect Request" an den CP 343 zum Schliessen und Freigeben der Verbindung gesendet ???
Was für eine Verbindung wird aufgebaut, ISO, ISO over TCP oder was sonst ???
Projektierte Verbindung oder nicht projektierte Verbindung ???

Ich könnte jetzt noch einige Dutzend Fragen stellen, Dein Problem ist ohne weitere Infos nicht so einfach zu beantworten.

Gruss

Question_mark


----------



## tomi_wunder (20 September 2006)

Hallo Question_mark!
Ich will hier sicherlich niemanden verärgern, aber viele der Fragen, die du mir hier stellst habe ich bereits beantwortet. Ich weiß, daß meine Texte erfahrungsgemäß sehr laaaaaang sind, aber ich kann's halt net besser. Weil ich aber will, daß mir irgendjemand in dieser Angelegenheit weiterhilft, hier nochmal:
* Programm: HyperTerminal (is von Microsoft, hab's aber auch schon mit Putty und Telnet(linux) probiert und es passiert immer dasselbe - kann ja auch nicht anders)
* Ich hab natürlich auch vor, mal ein PC-Programm selbst zu schreiben, daß dann die Verbindung auf- (und auch sauber wieder ab-)baut, will aber jetzt erstmal alle "Kinderkrankheiten" herausfinden und beheben lernen.
* Daß ein "Disconnect-Request" rausgeht, nehme ich mal ganz schwer an.
* Verbindungstyp ist TCP (und weiter nix)
* (korrekt) Projektierte Verbindung (das mit der Programmierten hab ich auch schon angefangen, will euch hier aber noch nicht mit den Problemchen belasten, die mir dabei zu schaffen machen).


**** Mir fällt grad auf, daß alle genannten Fragen schon beantwortet sind. Stell mal dein Dutzend andere Fragen, vielleicht is mal eine neue dabei.

Außerdem hab ich mittlerweile auch wieder ein paar neue Forschungsergebnisse:
Ich lass jetzt in meinem (SPS-)Programm im OB1 (ich weis, ich weis...) per ag_send laufend Daten rausschicken. (Also auch, wenn keine Verbindung da ist - dann schlägt das Senden halt fehl, macht aber nix) Das Tolle dabei ist nu, daß der dumme CP dann exakt bei jedem zweiten Verbindungsversuch ganz brav die "Tote" Verbindung beendet und die neue zulässt.
Is doch toll, oder? Hat der dann vielleicht Angst vor irgendwas?

MfG
   tomi


----------



## Question_mark (20 September 2006)

*Na dann eben nicht ....*

Hallo,



			
				tomi_wunder schrieb:
			
		

> Mir fällt grad auf, daß alle genannten Fragen schon beantwortet sind. Stell mal dein Dutzend andere Fragen, vielleicht is mal eine neue dabei



Wo sind denn die Fragen schon beantwortet worden ?? Nein, keine Angst, ich stelle keine weiteren Fragen.



			
				tomi_wunder schrieb:
			
		

> * Programm: HyperTerminal (is von Microsoft, hab's aber auch schon mit Putty und Telnet(linux) probiert



Doch eine Frage habe ich danach doch noch :
Darf ich das so verstehen, dass Du mit Hyperterminal oder ähnlichem eine Verbindung mit einer S7 aufbauen und Daten austauschen möchtest ???



			
				tomi_wunder schrieb:
			
		

> probiert und es passiert immer dasselbe - kann ja auch nicht anders)



Wenn es nicht anders kann, und immer dasselbe passiert, warum versuchst Du es dann doch immer wieder ????



			
				tomi_wunder schrieb:
			
		

> Ich lass jetzt in meinem (SPS-)Programm im OB1 (ich weis, ich weis...) per ag_send laufend Daten rausschicken. (Also auch, wenn keine Verbindung da ist - dann schlägt das Senden halt fehl, macht aber nix) Das Tolle dabei ist nu, daß der dumme CP dann exakt bei jedem zweiten Verbindungsversuch ganz brav die "Tote" Verbindung beendet und die neue zulässt.



Bist Du sicher, dass "der dumme CP" wirklich der Dumme bei Deinem Problem ist ??? Viel Spass beim Suchen  

Gruss

Question_mark


----------



## stma77 (21 September 2006)

dein erster Fehler ist bereits das du kein Programm zum abholen der Daten aus dem CP hastmach mal den AG_recv rein und hole die Daten auch ab, dann wird dein CP die Verbindungsresource auch wieder freigeben wenn mal ein verbindungsabbruch passiert


----------



## tomi_wunder (26 September 2006)

würd' mich freuen, wenn das tatsächlich so wäre! Is aber leider nicht...


----------



## Question_mark (26 September 2006)

*Mannomann, dat kann doch net wahr sein*

Hallo,



			
				tomi_wunder schrieb:
			
		

> würd' mich freuen, wenn das tatsächlich so wäre! Is aber leider nicht...



Du hast leider folgendes nicht aufmerksam gelesen :



			
				stma77 schrieb:
			
		

> dein erster Fehler ist bereits das du kein Programm zum abholen der Daten aus dem CP hast



stma77 hat nur geschrieben, dass es Dein erster Fehler ist. 
Es ist aber eben nicht Dein einzigster Fehler....



			
				tomi_wunder schrieb:
			
		

> Daß ein "Disconnect-Request" rausgeht, nehme ich mal ganz schwer an.



Das nimmst Du also an ???  

Und was bringt Dich zu dieser schweren Annahme ? Wirklich fundiertes Wissen oder mehr "wie stellt sich Klein-Fritzchen ein S7-Kommunikationsprotokoll über M$ Hyperterminal vor" ... 

Gruss

Question_mark


----------



## tomi_wunder (7 Oktober 2006)

*Problem gelöst*

Hallo an alle, die sich mit diesem oder einem ähnlichen Problem befassen müssen!

Zuerst mal vielen Dank für alle Antworten und die Unterstützung (ausnehmlich der Anzüglichkeiten) durch die Mitnutzer dieses Forums!

Um dieses Problem lösen zu können muß man folgendes Verhalten des CP 343 kennen:
Bei der Verwendung von AG_LRECV (egal ob von SCL, AWL oder Anderem aus verwendet) sollte einem bekannt sein, daß AG_RECV zuerst den gesamten Datenbereich, den man ihm mitgiebt vollschreibt, ehe NDR auf true geht!
Beispielhaft bedeutet dies, daß bei Übergabe eines "array[0..255] of byte" an RECV_BUF (vom AG_RECV-Aufruf) der Kommunikationspartner erstmal Daten mit einer Länge - die in diesem Fall ganzzahlig teilbar durch 256 sein muß - gesendet haben sollte. Ansonsten ist der Empfangspuffer nicht leer (weil AG_RECV tatsächlich nur dann auch empfangene Daten herausgibt, wenn er den Empfangspuffer vollständig damit füllen kann) und die Verbindung wird nicht abgebaut. *Dies ist nur bei einer TCP-Verbindung der Fall!*

Eine zweite ebensowichtige Angelegenheit ist die, daß man, sofern man sich mit älteren CP's beschäftigt, auch die älteren Funktionsbausteine AG_LSEND und AG_LRECV (zumidest letzeres Version 3.0) verwenden muß. Die neueren FB's sind offenbar nicht in der Lage, die Konfigurationsdaten zu interpretieren und geben daher ERROR=true und STATUS=8184hex zurück. Ich habe in meinen Versuchen den 343-1EX10-0XE0 verwendet. Diese Angaben sollten aber auch für andere CP's zutreffen, die ungefähr im gleichen Zeitraum hergestellt wurden.

Außerdem sei darauf hingewiesen daß telnet, wie auch HyperTerminal ordnungsgemäß das TCP-Protokoll verwenden (über eine Socket-Verbindung), weshalb auch ein ordnungsgemäßer Verbindungsabbau dergestalt stattfinden sollte, daß derjenige Verbindungspartner, der die Verbindung abschließen möchte, ein sogenanntes FIN-Packet an sein Gegenüber schickt und damit einen drei-Wege-Handshake auslöst. Zur Überwachung dieses Umstandes kann man ein freies Netzwerk-Analyse-Tool namens Ethereal verwenden.


Abschließend sei noch gesagt, daß infame Unterstellungen niemanden weiterbringen und auch das, wie ich meine, größtenteils sehr partnerschaftliche Klima dieses Boards gefährden. Bevor man jemanden der Oberflächlichkeit bezichtigt, sollte man lieber das Thema nochmal sorgfältigst durchlesen.

Mit freundlichem Gruß
   Thomas Wunder


----------



## Question_mark (7 Oktober 2006)

Hallo,



			
				tomi_wunder schrieb:
			
		

> (ausnehmlich der Anzüglichkeiten) durch die Mitnutzer dieses Forums!



Die Anspielung auf meine Beiträge kannst Du Dir eigentlich sparen...



			
				tomi_wunder" schrieb:
			
		

> Stell mal dein Dutzend andere Fragen, vielleicht is mal eine neue dabei



Wenn ich auf Rückfragen zu Einzelheiten Deines Problems eine so rotzige Antwort bekomme, glaubst Du doch wohl nicht im Ernst dass Du dann noch eine hilfreiche Antwort bekommst (jedenfalls solltest Du das jetzt bemerkt haben !). Alles klar jetzt ???

Gruss

Question_mark


----------

