UDP_SOCKET_2
Der Funktionsbaustein UDP_SOCKET_2 ist eine neuere Implementierung des UDP_SOCKET-FB, der in diesem Hilfethema als "ältere Implementierungen" bezeichnet wird. Der Unterschied zwischen der neuen und der älteren Implementierung ist, dass UDP_SOCKET_2 Broadcast unterstützt.
Sockethandles, die mit UDP_SOCKET_2 erzeugt wurden, können nur mit den Funktionsbausteinen UDP_SEND_2 und UDP_RECEIVE_2 verwendet werden.
Hinweis
Dieser Funktionsbaustein erfordert die Firmware-Version 2021.3 oder neuer. |
Hinweis
Um in einem bestehenden Projekt Instanzen der früheren FB-Implementierung durch neuere FBs zu aktualisieren, ersetzen Sie diese wie folgt: Editieren Sie die Deklaration der Instanzvariablen und (nur in FBD) aktualisieren Sie den Instanzaufruf im Code. Formalparameter mit gleichem Namen bleiben verbunden, neu hinzugefügte Formalparameter müssen verbunden werden (falls deren Funktion benötigt wird). |
Typ | Funktionsbaustein |
Beschreibung | Der Funktionsbaustein öffnet und schließt einen IP-Socket, der für die IP-Kommunikation über das User Datagram Protocol (UDP) verwendet wird.Der IP-Socket wird durch den Ausgangsparameter HANDLE repräsentiert. Dieses Handle muss an die Funktionsbausteine UDP_SEND_2 und UDP_RECEIVE_2 ü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 UDP_SEND_2/UDP_RECEIVE_2 verwendet werden. Während ACTIVE = FALSE, führt das Aufrufen von UDP_SEND_2/UDP_RECEIVE_2 mit dem Sockethandle 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. Nach erfolgreichem Öffnen des Sockets wird BUSY auf FALSE gesetzt und bleibt FALSE, solange ACTIVE = TRUE ist.Die IP-Adresse und der Port des Ethernet-Adapters, der für den Datenaustausch verwendet werden soll, können mit den Eingängen BIND_IP und BIND_PORT vorgegeben werden.Der Eingang BROADCAST steuert, ob ein bestimmter Kommunikationspartner adressiert wird, oder (falls TRUE anliegt) alle möglichen Adressen im Netzwerk.Bei einer fallenden Flanke des ACTIVATE-Eingangs wird der Socket geschlossen und der Ausgang ACTIVE auf FALSE gesetzt (siehe hierzu auch die nachfolgenden Hinweise).
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 UDP-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 UDP_SOCKET_2-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 'PLC'-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.
- Gleichzeitig können bis zu 64 Sockets aktiviert werden. Diese 64 Sockets werden von den FBs UDP_SOCKET_2 und den "veralteten" FBs UDP_SOCKET und TCP_SOCKET gemeinsam genutzt (siehe auch Statuscode 0xC201).
- Die Ausführung des Funktionsbausteins dauert eine bestimmte Zeit (mehrere Millisekunden), wenn am Eingang ACTIVATE eine steigende Flanke erkannt wird. Berücksichtigen Sie diese Zeit, wenn Sie den Watchdog eines ESM-Tasks, in welchem der FB ausgeführt wird, konfigurieren. Dies gilt auch, wenn der FB indirekt, z.B. in der Modbus_TCP-Bibliothek verwendet wird.
|
Parameter | Eingänge
ACTIVATE
Datentyp: | BOOL |
Beschreibung: | Bei einer steigenden Flanke am Eingang wird begonnen, den Socket zu öffnen. Bei einer fallenden Flanke wird der Socket geschlossen. Solange der ACTIVATE-Eingang gesetzt ist, bleibt der Socket geöffnet. |
BIND_IP
Datentyp: | STRING |
Beschreibung: | Legt die lokale IP-Adresse (IPv4-Adresse) des Ethernet-Adapters fest, an den der erzeugte Socket gebunden ist. Der ausgewählte Ethernet-Adapter wird für den Datenaustausch zwischen den Netzwerkgeräten verwendet (z.B. sinnvoll für UDP-Server bei Steuerungen mit mehreren Ethernet-Adaptern). Zusammen mit der Portnummer, die mit dem erzeugten Socket verknüpft ist (BIND_PORT-Eingang), identifiziert die IP-Adresse den Ethernet-Adapter.Wird ein leerer String oder 0.0.0.0 angegeben, wird ein geeigneter Ethernet-Adapter ausgewählt.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, die mit dem an die IP-Adresse des Ethernet-Adapters gebundenen Socket (Eingang BIND_IP) verknüpft ist. Die ausgewählte Portnummer wird vom UDP-Socket für eingehende Daten verwendet. 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. |
BROADCAST
Datentyp: | BOOL |
Beschreibung: | Falls BROADCAST = TRUE, kann der erzeugte Socket UDP-Datagramme an die Broadcast-Adresse senden.
Hinweis
Stellen Sie sicher, dass das Gateway in Ihrer IP-Konfiguration auf einen gültigen Wert ungleich 0.0.0.0 gesetzt ist (die Adresse 0.0.0.0 wird wie ein fehlendes Gateway behandelt). (Das Netzwerk muss kein Gerät mit der konfigurierten Gateway-Adresse enthalten.) Wenn keine gültige Gateway-Adresse angegeben ist, wird kein Broadcast gesendet und beim Aufruf des Bausteins UDP_SEND_2 wird der Fehler 0xC212 ausgegeben. |
Hinweis
Falls Sie als DEST_IP am UDP_SEND_2-FB die begrenzte Broadcast-Adresse verwenden (d.h., 255.255.255), dann sollte der Eingang BIND_IP von UDP_SOCKET_2 ebenfalls auf die IP-Adresse des Ethernet-Adapters Ihrer Steuerung eingestellt werden, der mit dem Netzwerk verbunden ist, in das der Broadcast gesendet werden soll. Da die meisten PLCnext-Steuerungen mehr als einen Ethernet-Adapter besitzen (multi-homed), benötigt der IP-Stack diese Information, um Nachrichten über den richtigen Ethernet-Adapter senden zu können. Alternativ zu der begrenzten Broadcast-Adresse können Sie auch eine Subnetz-gerichtete Broadcast-Adresse verwenden. Diese Subnetz-gerichtete Broadcast-Adresse wird gebildet aus der Ethernet-Adresse des Adapters und VerODERung dieser Adresse mit der bitweise negierten Subnetzmaske. Beispiel: Für einen Adapter mit der IP-Adresse 192.168.1.10 und der Subnetzmaske 255.255.255.0 ist die entsprechende Subnetz-gerichtete Broadcast-Adresse 192.168.1.255. |
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 Eingangswert für die Funktionsbausteine UDP_RECEIVE_2 und UDP_SEND_2 benötigt, um bspw. Daten an einen UDP-Server zu senden bzw. von diesem zu empfangen.
Hinweis
Ein Handle, das mit einer Instanz der älteren Implementierung des Funktionsbausteins UDP_SOCKET erzeugt wurde, darf nicht mit den neuen Funktionsbausteinen UDP_SEND_2/UDP_RECEIVE_2 verwendet werden und umgekehrt. Verwenden Sie Handles nur innerhalb derselben "FB-Generation". |
Das Sockethandle kann nur für einen Aufruf der Funktionsbausteine UDP_SEND_2 und UDP_RECEIVE_2 verwendet werden, solange ACTIVE = TRUE ist. Das Aufrufen eines UDP_*-Funktionsbausteins während ACTIVE = FALSE ist, führt zu einem Fehler (eine entsprechende Fehlermeldung wird am STATUS-Ausgang der UDP_*-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 UDP_SEND_2 und UDP_RECEIVE_2 verwendet werden, um Daten zu senden bzw. zu empfangen.FALSE: Der Socket ist geschlossen. Während ACTIVE = FALSE ist, führt das Aufrufen von UDP_SEND_2/UDP_RECEIVE_2 mit dem Sockethandle zu einem Fehler an den Funktionsbausteinen. |
BUSY
Datentyp: | BOOL |
Beschreibung: | Wird auf TRUE gesetzt, wenn der Eingang ACTIVE = 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. |
|