FB_SocketReceive

FB_SocketReceive 1:

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.

FB_SocketReceive 2:

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.

FB_SocketReceive 3: 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.

FB_SocketReceive 4: 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)