Beschreibung | Der Funktionsbaustein öffnet und schließt einen IP-Socket, der für die IP-Kommunikation zwischen einem Server und einem Client über das Transmission Control Protocol (TCP) verwendet wird.Der IP-Socket wird durch den Ausgangsparameter HANDLE repräsentiert. Dieses Handle muss an die Funktionsbausteine TCP_SEND und TCP_RECEIVE übergeben werden. Die FBs benötigen das Sockethandle, um Daten mit einem Kommunikationspartner auszutauschen.Mit einer steigenden Flanke am Eingang ACTIVATE wird begonnen, einen Socket zu öffnen. Bei erfolgreichem Öffnen des Sockets und Verbindungsaufbau wird der Ausgang ACTIVE auf TRUE gesetzt. Solange ACTIVE = TRUE ist, kann das Sockethandle am Ausgang HANDLE für den Aufruf der Funktionsbausteine TCP_SEND/TCP_RECEIVE verwendet werden.Eine fallende Flanke an ACTIVATE schließt den Socket. Die Verbindung wird mittels eines Drei-Wege-Handshake beendet, d.h. es werden drei Telegramme zwischen Client und Server ausgetauscht. Während des Beendungsprozesses führt eine erneute steigende Flanke zu einem Bausteinfehler.Das Aufrufen der TCP_SEND/TCP_RECEIVE-Funktionsbausteine mit dem Sockethandle während ACTIVE auf FALSE gesetzt ist, führt zu einem Fehler an den Funktionsbausteinen. Solange der ACTIVATE-Eingang gesetzt ist, bleibt der Socket geöffnet. Der Ausgang BUSY wird auf TRUE gesetzt, während ACTIVATE = TRUE und der Socket noch nicht geöffnet ist. Bei einer fallenden Flanke des ACTIVATE-Eingangs wird der Socket geschlossen und der Ausgang ACTIVE auf FALSE gesetzt (siehe hierzu auch die nachfolgenden Hinweise). Sollte eine erfolgreich aufgebaute Verbindung geschlossen werden, versucht der Funktionsbaustein diese Verbindung erneut aufzubauen (sofern ACTIVATE = TRUE bleibt).Der Eingang IS_SRV legt fest, ob der Funktionsbaustein eine Verbindung als TCP-Server oder TCP-Client aufbaut.
- Mit IS_SRV = TRUE erzeugt der Funktionsbaustein einen "horchenden" (listening) Socket (Server-Socket). Der Socket kann an einen lokalen Ethernet-Adapter (Angabe der IP-Adresse am Eingang BIND_IP) und einen Port (Eingang BIND_PORT) gebunden werden. Unter dieser IP-Adresse und Portnummer wartet anschließend der Server auf Anfragen der Clients- Falls erforderlich können die akzeptierten Clients über die Eingänge DEST_IP/DEST_PORTS limitiert werden. Bei geöffnetem (Server-) Socket sind nur 1:1 Verbindungen möglich. Das bedeutet, der Listening-Socket akzeptiert nur eine eingehende TCP-Verbindung.
- Mit IS_SRV = FALSE wird ein Client-Socket erzeugt. In diesem Fall legen DEST_IP/DEST_PORT die IP-Adresse und den Port des Partner-Servers fest, mit dem kommuniziert werden soll.
Unbeabsichtigter Betriebszustand des Geräts Stellen Sie sicher, dass das Ändern der Ausgangsdaten nicht zu einem ungewollten oder gefährlichen Verhalten des Gesamtsystems führen kann.1 |
1 | Wenn Sie die Anwendungslogik auf der Simulation ausführen, werden durch die Funktionsbausteine echte Verbindungen zu anderen Geräten/Servern aufgebaut. Dadurch können gegebenenfalls Ausgänge und Variablen, die mit echter Hardware verbunden sind, gesetzt werden und somit zu echten Beschädigungen der Maschine führen. |
|
Hinweise |
- Die Funktionsbausteine für die TCP-Kommunikation werden asynchron verarbeitet. Das bedeutet, die Funktionsbausteine erteilen Befehle und warten auf deren Verarbeitung.
- Bei einem Warm- oder Kaltstart oder einem Reset der Steuerung, schließt die Firmware alle Sockets, die mit der entsprechenden TCP_SOCKET-Instanz geöffnet wurden.
- Stellen Sie bei Steuerungen mit integrierter Firewall sicher, dass die Firewall nicht die für die Kommunikation benötigten Ports blockiert. Andernfalls kann keine Verbindung hergestellt werden.
- Alle verwendeten IP-Adressen sind IPv4-Adressen. IPv4-Adressen bestehen aus 4 Zahlen (Werte von 0 bis 255), die durch Punkte voneinander getrennt sind.
- Die Anzahl der gerade geöffneten IP-Sockets wird in der Systemvariablen IP_ACTIVE_SOCKETS gespeichert (enthalten in der Datenliste des Steuerungsknotens und des 'IEC 61131-3'-Knotens der ANLAGE).
- Funktionsbausteine müssen instanziiert werden.
Der FB-Instanzname muss in der 'Variablen'-Tabelle der POE deklariert werden, in welcher der FB verwendet werden soll. Der Instanzname muss innerhalb der POE eindeutig sein.
|
Parameter | Eingänge
ACTIVATE
Datentyp: | BOOL |
Beschreibung: | Bei einer steigenden Flanke am Eingang wird begonnen, den Socket zu öffnen. Solange der ACTIVATE-Eingang gesetzt ist, bleibt der Socket geöffnet. Bei einer fallenden Flanke wird der Socket geschlossen.Da das Schließen des Sockets einige Zeit in Anspruch nimmt (Drei-Wege-Handshake zwischen Client und Server), darf die nächste steigende Flanke erst an ACTIVATE anliegen, wenn die Ausgänge ACTIVE und BUSY beide FALSE sind. Andernfalls (d.h. falls eine neue Verbindung angefordert wird, obwohl der vorherige Socket noch nicht vollständig geschlossen ist) führt dies zu einem Fehler und es wird der Fehlercode 16#C205 am STATUS-Ausgang ausgegeben. |
IS_SRV
Datentyp: | BOOL |
Beschreibung: | Legt fest, ob der Funktionsbaustein eine Server- oder Client-Funktion realisiert.TRUE: Der Funktionsbaustein erzeugt einen "horchenden" Socket (Server-Socket).FALSE: Der Funktionsbaustein erzeugt einen Client-Socket.Der Funktionsbaustein wertet diesen Parameter nur in dem Taskzyklus aus, in dem am ACTIVATE-Eingang eine steigende Flanke erkannt wird. |
BIND_IP
Datentyp: | STRING |
Beschreibung: |
- Für IS_SRV = TRUE gilt: Dieser Parameter gibt die IP-Adresse an, auf welcher der Server auf eingehende Verbindungen hört. Für Clients, die eine Verbindung zum Server herstellen möchten, muss am DEST_IP-Eingang dieselbe IP-Adresse angegeben werden. Wird ein leerer String (Anfangswert des Parameters) oder '0.0.0.0' angegeben, hört der Server über jeden Ethernet-Adapter der Steuerung.
- Für IS_SRV = FALSE gilt: In diesem Fall ist der Parameter optional. Falls spezifiziert, identifiziert er den Ethernet-Adapter der Steuerung, über den die Kommunikation erfolgen soll. Andernfalls (leerer String oder Wert '0.0.0.0'), wählt die Steuerung gemäß dem Parameter DEST_IP den passenden Ethernet-Adapter aus.
Der Funktionsbaustein wertet diesen Parameter nur in dem Taskzyklus aus, in dem am ACTIVATE-Eingang eine steigende Flanke erkannt wird. |
BIND_PORT
Datentyp: | UINT |
Beschreibung: | Gibt die lokale Portnummer an, an welchen der erzeugte Socket gebunden ist (notwendig zur Realisierung eines TCP-Servers). Die ausgewählte Portnummer wird vom TCP-Server für eingehende Daten verwendet. Für Clients, die eine Verbindung zum Server herstellen möchten, muss am DEST_PORT-Eingang dieselbe Portnummer angegeben werden. Ist der Wert 0 (Anfangswert des Parameters), wählt der Stack einen temporären Port aus.Der Funktionsbaustein wertet diesen Parameter nur in dem Taskzyklus aus, in dem am ACTIVATE-Eingang eine steigende Flanke erkannt wird. |
DEST_IP
Datentyp: | STRING |
Beschreibung: | Abhängig von der realisierten Funktion des FBs (Verwendung als Server oder Client; eingestellt über den Eingang IS_SRV), gilt folgendes:
- Mit IS_SRV = TRUE (der FB erzeugt einen horchenden Socket) werden nur Anfragen des Clients mit dieser IP-Adresse akzeptiert.
Wird ein leerer String (Anfangswert des Parameters) angegeben, wird jede Client-IP-Adresse akzeptiert.
- Mit IS_SRV = FALSE (FB erzeugt einen Client-Socket) definiert der Parameter die IP-Adresse des Partner-Servers, mit dem kommuniziert werden soll.
Der Funktionsbaustein wertet diesen Parameter nur in dem Taskzyklus aus, in dem am ACTIVATE-Eingang eine steigende Flanke erkannt wird. |
DEST_PORT
Datentyp: | UINT |
Beschreibung: | Abhängig von der realisierten Funktion des FBs (Verwendung als Server oder Client; eingestellt über den Eingang IS_SRV), gilt folgendes:
- Mit IS_SRV = TRUE (der FB erzeugt einen horchenden Socket) werden nur Anfragen des Clients mit diesem IP-Port akzeptiert.
Wird der Wert 0 (Anfangswert des Parameters) angegeben, wird jeder Client-IP-Port akzeptiert.
- Mit IS_SRV = FALSE (FB erzeugt ein Client-Socket) definiert der Parameter den IP-Port des Partner-Servers, mit dem kommuniziert werden soll.
Der Funktionsbaustein wertet diesen Parameter nur in dem Taskzyklus aus, in dem am ACTIVATE-Eingang eine steigende Flanke erkannt wird. |
Ausgänge
HANDLE
Datentyp: | DWORD |
Beschreibung: | Das erzeugte Handle des IP-Sockets. Das Sockethandle wird als Input für die Funktionsbausteine TCP_RECEIVE und TCP_SEND benötigt, um bspw. Daten an einen TCP-Server zu senden bzw. von diesem zu empfangen.Das Sockethandle kann nur für einen Aufruf der Funktionsbausteine TCP_SEND/TCP_RECEIVE verwendet werden, solange ACTIVE = TRUE ist. Das Aufrufen eines TCP_*-Funktionsbausteins während ACTIVE = FALSE ist, führt zu einem Fehler (eine entsprechende Fehlermeldung wird am STATUS-Ausgang der TCP_*-Funktionsbausteine ausgegeben). |
ACTIVE
Datentyp: | BOOL |
Beschreibung: | Zeigt an, ob ein Socket geöffnet ist.TRUE: Die Verbindung wurde erfolgreich aufgebaut und der Socket ist geöffnet. Solange ACTIVE = TRUE ist, kann das erzeugte Sockethandle (HANDLE-Eingang) von den Funktionsbausteinen TCP_SEND/TCP_RECEIVE verwendet werden, um Daten zu senden bzw. zu empfangen.FALSE: Der Socket ist geschlossen. Während ACTIVE = FALSE ist, führt der Aufruf der Funktionsbausteine TCP_SEND/TCP_RECEIVE mit dem Sockethandle zu einem Fehler an den Funktionsbausteinen. |
BUSY
Datentyp: | BOOL |
Beschreibung: | Wird auf TRUE gesetzt, wenn der Eingang ACTIVATE = TRUE ist und der Socket noch nicht geöffnet ist. Nach erfolgreichem Öffnen des Sockets wird BUSY auf FALSE gesetzt und bleibt FALSE, solange ACTIVE = TRUE ist. |
ERROR
Datentyp: | BOOL |
Beschreibung: | Bei einem Fehler wird der Ausgang ERROR auf TRUE gesetzt. Der zugehörige Fehlercode kann am Ausgang STATUS ausgelesen werden, solange ERROR = TRUE ist.Siehe Fehlercodes / Statuscodes für Ethernet-FBs. |
STATUS
Datentyp: | WORD |
Beschreibung: | Liefert den Fehlercode im Fehlerfall (ERROR = TRUE) oder den aktuellen Status des Funktionsbausteins (ERROR = FALSE). Fehlercodes beginnen mit 16#Cxxx und Statuscodes mit 16#8xxx.Siehe Fehlercodes / Statuscodes für Ethernet-FBs. |
USED_PORT
Datentyp: | UINT |
Beschreibung: | Zeigt den Port an, der für die Erzeugung des Sockets verwendet wird (entweder automatisch vergeben oder die am Eingang BIND_PORT angegebene Portnummer). Der Ausgang kann bei Bedarf für Diagnosezwecke verwendet werden. |
|