FB_IpReceive

Der Baustein FB_IpReceice ermöglicht das Empfangen von UDP- oder TCP-Telegrammen. Welche der beiden Verbindungen verwendet wird, wurde im FB_IpStartSession festgelegt.

Daten die Empfangen werden, müssen in einer SPS-Variabel abgelegt werden. Dafür müssen Sie einen Pointer auf pBuffAddr legen und die Größe der Variable in cbBuffLen eintragen. Mit einer positiven Flanke von bValid wird angezeigt, dass Daten im Speicher liegen bzw. die Daten ihrer Variabel jetzt gültig sind. Mit einer positiven Flanke von bClear ist der Baustein wieder bereit Daten zu empfangen, bzw. liegen noch Daten im Puffer werden diese als nächstes in die Variabel kopiert.

Achten Sie besonders bei TCP darauf, wie viele Daten empfangen wurden bzw. wie viele Daten noch im Puffer liegen. Bei TCP/IP werden die Daten als "Stream" abgelegt, d.h. es gibt hier kein Anfang und kein Ende. Im Gegensatz dazu wird bei UDP immer der Inhalt eines UDP Frames in einen eigenen Puffer abgelegt.

Es können 4 UDP-Telegramme gepuffert werden, weitere UDP Telegramme gehen verloren. cbReceive zeigt Ihnen die Anzahl der Daten in Bytes an, die in Ihre Variabel kopiert wurden. Sind mehr Daten in Puffer als ausgelesen wurden, steht die Anzahl, der noch verbleibenden Daten in cbBytesInStream.

sReceiveIPAddr gibt Ihnen die IP-Adresse des Teilnehmers an, der Daten zur Beckhoff-Steuerung gesendet hat und die entsprechende Port Nummer iReceivePortNo. Beide Variablen werden mit bClear wieder gelöscht. Sie können sReceiveIPAddr und iReceivePortNo dafür nutzen um Daten an den Teilnehmer wieder zurück zu senden mit dem Baustein FB_IpSend.

Funktionsbaustein FB_IPRECEIVE

INPUT

VAR_INPUT
   bClear           : BOOL;
   iSession     : WORD;
   sRemoteIPAddr    : STRING(15);
   iPortNo      : WORD;
   pBuffAddr    : DWORD;
   cbBuffLen    : WORD;
END_VAR

bClear: Eine steigende Flanke löscht den Speicher und der Baustein ist wieder bereit Daten zu empfangen.

iSession: wird mit iSession aus dem Baustein FB_StartSession verbunden.

sRemoteIPAddr: kann als Filter verwendet werden um nur eine spezielle IP Adresse zuzulassen.

iPortNo: kann als Filter verwendet werden um nur einen speziellen Port zuzulassen.

pBuffAddr: Mit ADR wird hier der Pointer auf die Variable übergeben, wohin die Daten kopiert werden sollen, die Empfangen wurden.

cbBuffLen: Größe der Variabel, kann mit SIZEOF ermittelt werden.

OUTPUT

VAR_OUTPUT
   bValid           : BOOL; 
   bError           : BOOL;
   iErrorId     : WORD;
   cbReceive    : WORD;
   cbBytesInStream      : WORD;
   sReceiveIPAddr       : STRING(15)
   iReceivePortNo       : WORD;
END_VAR

bValid: Ein positiver Flankenwechsel zeigt an das neue Daten Empfangen wurden. Diese Daten stehen nun in der Variable zur Verfügung, die über den Pointer pBuffAddr verbunden wurde.

bError: Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in iErrorId enthalten.

iErrorId: Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls (siehe Tabelle).

cbReceive: Gibt die Anzahl an Bytes an die kopiert worden sind.

cbBytesInStream: Gibt die noch im Speicher befindlichen Daten an. Dies sollte immer Null sein. Ist der Wert >0, haben Sie die Variable die mit pBuffAddr verbunden wurde zu klein gewählt. Es muss dann noch einmal ausgelesen werden und den Rest der Daten zu erhalten.

sReceiveIPAddr: Zeigt Ihnen die IP-Adresse an von dem Teilnehmer, der die Daten geschickt hat. Wird mit positiver Flanke von bClear gelöscht.

iReceivePortNo: Zeigt Ihnen die Port-Nummer an von dem Teilnehmer, der die Daten geschickt hat. Wird mit positiver Flanke von bClear gelöscht.