# TCP-Verbindung mit TCON usw (FB65,64,63)



## Zizou (12 Januar 2009)

Hallo,
ich benötige wieder mal die Hilfe dieses Forums.
Es gibt hier zwar schon Beiträge zum TCON usw., aber die haben mir leider auch nicht weiter geholfen.

Ich verwende eine CPU 319-3 PN/DP (Ver. 2.6) die über den PN-Anschluss mit einem Steuergerät eines Roboters verbunden ist.
Zur Hilfe habe ich mir das Beispiel "Sample_open_TCP" von Siemens angeschaut und an meine Anforderungen angepasst.
Hier der Link zum Bsp. und der Beschreibung:
http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW

D.h. ich verwende den Baustein "SET_TCP_ENDPOINTx", den ich mit folgenden Werten belege:

```
CALL  "SET_TCP_ENDPOINTx"
       ID      :=1
       DEV_ID  :=B#16#3
       ACTIV   :="TRUE"
       LOC_PORT:=2000
       REM_PORT:=2003
       IP_ADDR1:=192
       IP_ADDR2:=168
       IP_ADDR3:=0
       IP_ADDR4:=1
       CON_DB  :=#T_PARAM
```
T_PARAM ist wiederum am Eingang CONNECT des TCON.

Wenn ich jetzt den FB65 T_CONN aufrufe, geht BUSY=TRUE und DONE bleibt immer FALSE. 

- FB65 T_CONN: Status = 7002 = "Zwischenaufruf (REQ irrelevant), Verbindung wird aufgebaut.
Ist kein Fehler, bedeutet nur das das Signal am Eingang REQ noch TRUE ist.

- FB64 T_RECV: Status = 7000 = "Baustein nicht empfangsbereit"
- FB63 T_SEND: Status = 7000 = Keine Auftragsbearbeitung aktiv"
Ist verständlich, wenn die Verb. noch nicht steht

Ich habe hier auch schon gelesen, dass die Siemens-Doku "System- und Standardfunktionen für S7-300/400 Band 1/2" Kapitel 23 fehlerhaft ist.
Aber ich denke meine Einstellungen von oben sind korrekt, oder?

Ach ja, mein Roboter ist (im "Data-Link-Betrieb" und) als Client parametriert.
Hier bekomme ich beim Verbindungsaufbau gesagt, dass der Server nicht betriebsbereit ist.

Hat jemand ne Idee, was ich falsch mache, bzw. was ich noch ändern/Ausprobieren könnte?
Bin über jede Hilfe dankbar, denn mir geht nach 2 Tagen solangsam die Ideen aus.

Kennt bzw. hat jemand ein Testprog für den PC mit dem ich die TCP-Verbindung testen kann?
(...und das leicht verständlich ist bzw. erklärt ist?)


----------



## Rainer Hönle (12 Januar 2009)

active bedeutet normalerweise Client. Ein Server ist passiv. Eventuell ist das ja das Problem.


----------



## Zizou (12 Januar 2009)

Ich hab den Robi-Controller jetzt als Server, was aber auch keine Besserung bewirkt hat.
Trotzdem Danke für den schnellen Tipp.

Da ich alle Bausteine aus dem Siemens Beispiel genommen habe, ist mir jetzt folgendes aufgefallen:
In meiner "Bausteinübersicht" im Simatic-Manager lauten die Bausteinbezeichnungen folgendermaßen:
FB63 TSEND
FB64 TRCV
FB65 TCON
Im FB300, in dem diese aufgerufen werden, steht aber:
CALL #T_CONN
CALL #T_RECV
CALL #T_SEND

Füge ich jetzt diese Bausteine neu ein, steht dann
CALL "TCON",
Allerdings muss ich jetzt den zugehörigen DB generieren.

Das hat mich jetzt wahrscheinlich als blutiger Anfänger entlarft, aber hauptsache ich komme mit meinem Projekt weiter.


----------



## Sarek (12 Januar 2009)

Die Bausteine sind wohl als Multiinstanz eingebunden.
Schau mal in die Deklaration des aufrufenden FBs dort sind
z.B. #T_CONN vom Typ TCON deklariert



Zizou schrieb:


> Ich hab den Robi-Controller jetzt als Server, was aber auch keine Besserung bewirkt hat.
> Trotzdem Danke für den schnellen Tipp.
> 
> Da ich alle Bausteine aus dem Siemens Beispiel genommen habe, ist mir jetzt folgendes aufgefallen:
> ...


----------



## Sarek (12 Januar 2009)

Bitte prüfe ob die IP-Adresse + Port des Ziels OK sind.
Ist die CPU ist im gleichem IP-Bereich?
Kabel sind OK?

Zum Testen/Prüfen besorg Dir einen HUB oder managbaren Switch (mit Listen-Port)
und lad dir Wireshark runter zum "mithorchen".


----------



## Zizou (12 Januar 2009)

IP-Adr und Port stimmen. Die habe ich schon mehrmals kontrolliert.
Daran liegt es nicht.
Wireshark werde ich morgen mal ausprobieren.
Danke


----------



## jabba (12 Januar 2009)

Versuche doch erst einmal das alle mit Hyperterminal zu prüfen.
Dort kannst Du eine TCP/IP Verbindung aufbauen , einmal zum Roboter und einmal zur SPS. Ich sitze zur Zeit auch an der Inbetriebnahme einiger TCP/IP Geräte wie z.B Kamera bevor ich den Fehler am meinem SPS Programm suche, teste ich erst einmal ob es auch mit Hyperterminal geht.

Hab dann heute direkt feststellen können der der Port an der kamera falsch angegeben war.


----------



## Sarek (12 Januar 2009)

oder einfach nur mal anpingen


----------



## Grubba (12 Januar 2009)

1.
Ein kleines Tool zum entgegennehmen einer Verbindung:

http://www.sps-forum.de/showthread.php?t=20474

2. 
Wie sieht Dein Aufruf von TCon aus?

Hast Du schon mal versucht, die Verbindungsdaten über den "Open Communication Wizard" von Siemens zu projektieren, bzw. wie sieht Deine Struktur T_Param aus?


----------



## Zizou (13 Januar 2009)

Hallo,
erstmal Danke für die zahlreiche Hilfe.

Ich habe jetzt mein Fehler gefunden. Es lag an einer Parametereinstellung des Roboter-Steuergeräts.

D.h. Verbindung ist aufgebaut 

Danke


----------



## Zizou (13 Januar 2009)

Noch eine kurze Frage zum T_RECV.
Ich möchte den T_RECV und T_SEND gegeneinander verrigeln.
D.h., wenn gesendet wird, wird T_RECV übersprungen und wenn empfangen wird, wird T_SEND übersprungen.

Wie erkenne ich jetzt, dass Daten empfangen werden?
Nur mit dem Ausgang BUSY funktioniert das nicht, da der gleich auf TRUE ist, wenn der Baustein aufgerufen wird.

Was bedeutet der Status 7001?
7001 = "Baustein ist empfangsbereit, Empfangsauftrag wurde aktiviert"
Ist damit die Erkennung von Daten am Empfang gemeint?


----------



## Zizou (14 Januar 2009)

Die Datenübertragung funktioniert, aber ich habe jetzt noch folgendes Problem mit dem FB64 T_RECV:
Die Daten werden zwar  richtig empfangen, aber der STATUS steht ständig auf W#16#7002 und dadurch auch BUSY auf TRUE.
An was kann das liegen?
Der Status 7002 bedeutet: Zwischenaufruf, Empfangsauftrag ist in Bearbeitung

Was wird mit Zwischenaufruf gemeint?
Der Empfang über den T_RECV läuft ja asynchron ab, also über mehrere Zyklen. Dadurch muss der T_RECV doch mehrmals aufgerufen werden, oder?


----------



## Zizou (14 Januar 2009)

Kann es an der Empfangs-Datenlänge liegen? Ich lese eine ungerade Anzahl an Bytes ein, und zwar 33 Bytes?

```
CALL  #T_RECV
       ...
       LEN     :=0
       ...
       RCVD_LEN:=#Receive.LEN
       DATA    :=P#DB300.DBX192.0 BYTE 33
```

RCVD_LEN benutze ich nicht.


----------



## Zizou (14 Januar 2009)

Muss ich vom T_RECV den Eingang EN_R auf FALSE setzen, wenn der Auftrag mit NDR=TRUE fertig ist?
... oder kann der EN_R ständig auf TRUE bleiben?


----------



## Grubba (14 Januar 2009)

Lass den Eingang auf True. 

Ansonsten würdest Du ja ein von Deinem Kommunkationspartner gesendetes Telegramm verpassen. (Ob das Telegramm vom CP gepuffert wird und Dir dann auch noch bei einem späteren Enable=True noch zur Verfügung steht, weiss ich jetzt auch nicht gerade)

Aber Du willst ja das Telegramm sicherlich sofort haben und nicht erst später, oder? 

Das ein Telegramm bei Dir angekommen ist, zeigt Dir dann ja der Ausgang NDR.


----------



## Zizou (14 Januar 2009)

Hallo,
mir ist es eigentlich egal, ob ich das Telegram sofort bekomme, oder es erst ein paar msek am Empfang liegt.

Ja, der Telegramempfang wird mit NDR=TRUE angezeigt, aber BUSY bleibt auf TRUE und der STATUS wechselt von 7001 auf 7002.


----------



## Zizou (15 Januar 2009)

Hallo,
ich habe mir wohl ganz umsonst sorgen gemacht.
Laut Simiens-Support ist es normal, dass der STATUS ständig auf 7002 steht.
(natürlich ist er während dem Datenempfang auf 7001)


----------



## kureck384 (15 Juni 2010)

Hallo Leute,

ich wollte keinen neuen Thread anfangen darum reihe ich mich gleich hier an. Habe über die SuFu leider nichts Passendes gefunden.

Ich verwende ebenfalls für meine Kommunikation diese Offene TCP Kommunikation entsprechend dem Siemens-Beispiel "Sample_open_TCP" (siehe: http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW ). Verwendet werden FB300, FC97, DB300 und UDT64. Leider ist das Sample von Siemens auf Englisch und ich bräuchte aber eine deutsche Version davon. Also Kommentare, Netzwerktitel, DB-Variablen, ...
Habe im Inet auch keine übersetzten Bausteine gefunden, darum frage ich ob hier im Forum jemand vielleicht eine übersetzte Version hat und mir zusenden könnte.

thx, kureck384


----------

