FB_SocketReceive

Mit dem Funktionsbaustein FB_SocketReceive können über den TwinCAT TCP/IP Connection Server Daten eines Remote-Clients oder Remote-Servers empfangen werden. Eine Remote-Clientverbindung muss vorher mit dem Funktionsbaustein FB_SocketAccept und eine Remote-Serververbindung mit dem Funktionsbaustein FB_SocketConnect aufgebaut werden. Die Daten können in einem TCP/IP-Netzwerk fragmentiert (in mehreren Paketen) empfangen oder verschickt werden. Es ist also möglich, dass nicht alle Daten auf einmal mit einem Aufruf der Instanz von FB_SocketReceive empfangen werden können. Aus diesem Grund muss die Instanz zyklisch (pollend) in der SPS-Task aufgerufen werden, so lange bis alle benötigten Daten empfangen wurden. Dabei wird eine steigende Flanke z. B. alle 100 ms an dem bExecute-Eingang erzeugt. Beim Erfolg werden die zuletzt empfangenen Daten in den Empfangspuffer hineinkopiert. Der nRecBytes-Ausgang liefert die Anzahl der zuletzt erfolgreich empfangenen Datenbytes zurück. Wenn beim letzten Aufruf keine neuen Daten gelesen werden konnten, liefert der Funktionsbaustein keinen Fehler und nRecBytes == Null.
Bei einem einfachen Protokoll, in dem z. B. ein Nullterminierter String von einem Remote-Server empfangen werden soll, muss der Funktionsbaustein FB_SocketReceive z. B. so oft aufgerufen werden, bis in den empfangenen Daten die Nullterminierung erkannt wurde.
![]() | Timeout-Wert einstellen Wenn der Remote-Teilnehmer vom TCP/IP-Netzwerk getrennt wurde (nur auf der Remote-Seite) und der lokale Teilnehmer noch mit dem TCP/IP-Neztwerk verbunden ist, dann liefert der FB_SocketReceive-Funktionsbaustein keinen Fehler und keine Daten. Der geöffnete Socket existiert immer noch, es werden nur keine Daten empfangen. Die Anwendung wartet in diesem Fall möglicherweise ewig auf Daten. Es wird empfohlen, in die SPS Anwendung eine Timeout-Überwachung zu implementieren. Wenn nach einer bestimmter Zeit z. B. 10 Sekunden immer noch nicht alle Daten empfangen wurde, muss die Verbindung geschlossen und neu initialisiert werden. |
Eingänge
VAR_INPUT
sSrvNetId : T_AmsNetId := '';
hSocket : T_HSOCKET;
cbLen : UDINT;
pDest : POINTER TO BYTE;
bExecute : BOOL;
tTimeout : TIME := T#5s;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
sSrvNetId | T_AmsNetId | String mit der Netzwerkadresse des TwinCAT TCP/IP Connection Servers. Für den lokalen Rechner (default) kann auch ein Leerstring angegeben werden. |
hSocket | T_HSOCKET | Verbindungshandle des Kommunikationspartners, dessen Daten empfangen werden sollen. |
cbLen | UDINT | Maximal verfügbare Puffergröße für die zu lesenden Daten in Bytes. |
pDest | POINTER TO BYTE | Adresse (Pointer) des Empfangspuffers. |
bExecute | BOOL | Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert. |
tTimeout | TIME | Maximale Zeit, die bei der Ausführung des Funktionsbausteins nicht überschritten werden darf. |
Ausgänge
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
nErrId : UDINT;
nRecBytes : UDINT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bBusy | BOOL | Bei aktiviertem Funktionsbaustein ist diese Ausgabe aktiv. Sie bleibt bis zur Quittierung aktiv. |
bError | BOOL | Sollte ein Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde. |
nErrId | UDINT | Dieser Parameter liefert bei einem gesetzten bError-Ausgang die TwinCAT TCP/IP Connec-tion Server Fehlernummer. |
nRecBytes | UDINT | Die Anzahl der zuletzt erfolgreich empfangenen Datenbytes. |
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1.0 | PC oder CX (x86, x64, Arm®) | Tc2_TcpIp (Communication) |