S02: UDP Demo (PLC)
Dieses Beispiel beschreibt einen UDP Server, der in einem PLC Projekt implementiert ist.
Es empfängt UDP Pakete und sendet sie zurück zum Absender („Echo-Server“).
Download
Download des Beispiels: https://github.com/Beckhoff/TF6311_Samples/tree/main/S02-UdpDemoPlc
- 1. Beispiel von GitHub beziehen, die heruntergeladene ZIP-Datei ggf. entpacken
- 2. Projekt mit TwinCAT XAE öffnen
- 3. Ihr Zielsystem auswählen
- 4. Konfiguration der Netzwerkkarte (siehe unten) für das Zielsystem vornehmen
- 5. Das Beispiel auf Ihrer lokalen Maschine bauen (z.B. Build->Build Solution)
- 6. Die Konfiguration aktivieren
Beschreibung
Das Sample ist auch ausführlich als Quick Start verfügbar.
Analog zum Quick Start wird in diesem Beispiel das Interface ITcIoUdpProtocolRecv implementiert und ein Pointer auf ein ITcIoUdpProtocol verwendet.
Dafür wird ein PLC Baustein angelegt, der das Interface ITcIoUdpProtocolRecv implementiert („Add POU“ mit „Implements“). Dabei ist es wichtig in den Methoden „FB_init“ und „FB_exit“ die Verbindung zum TCP/UDP RT Objekt zu realisieren. Dieses Vorgehen ist ausführlicher im Sample 11 der C++ Dokumentation beschrieben.
Der implementierende Funktionsbaustein (im Sample UdpReceiver) ruft die Methode „CheckReceived“ auf. Dem IP Stack wird so die Möglichkeit gegeben, ankommende Pakete zu bearbeiten und Callbacks auf die Methode „ReceiveData“ des Funktionsbausteins zu übermitteln.
Die „ReceiveData“ Methode nutzt die „SendData“ Methode um die Daten zum Absender zurückzusenden („Echo-Server“).
Verständnis
Damit die Kommunikation zwischen Funktionsbaustein und TcCOM Objekt „TCP/UDP RT“ aufgebaut wird, werden zwei Methoden verwendet:
- „FB_init“: Diese wird automatisch ausgeführt, wenn die PLC gestartet wird
- „FB_exit“: Diese wird automatisch ausgeführt, wenn die PLC angehalten wird
Diese Initialisierungsphase kann größtenteils aus dem Beispiel-Code übernommen werden.
Für die eigentliche UDP Funktionalität sind im PLC Code zwei Methoden zuständig:
- Die „ReceiveData“ Methode am implementierten Funktionsbaustein empfängt die Daten.
- Die “SendData” Methode am ITcIoUdpProtocol Interface sendet Daten.
In dem Beispiel wird in der „ReceiveData“ Methode die „SendData“ Methode verwendet um die empfangenen Daten zurückzusenden:

Die Methode TcQueryInterface muss folgendermaßen implementiert werden, damit TwinCAT erkennt, dass das entsprechende Interface implementiert wurde:
VAR
ipUdpRecv : ITcIoUdpProtocolRecv;
ipUnknown : ITcUnknown;
END_VAR
IF GuidsEqual(ADR(iid), ADR(TC_GLOBAL_IID_LIST.IID_ITcIoUdpProtocolRecv)) THEN
ipUdpRecv := THIS^; // cast to interface pointer
pipItf^ := ITCUNKNOWN_TO_PVOID(ipUdpRecv);
TcAddRef();
TcQueryInterface := S_OK;
ELSIF GuidsEqual(ADR(iid), ADR(TC_GLOBAL_IID_LIST.IID_ITcUnknown)) THEN
ipUnknown := THIS^; // cast to interface pointer
pipItf^ := ITCUNKNOWN_TO_PVOID(ipUnknown);
TcAddRef();
TcQueryInterface := S_OK;
ELSE
TcQueryInterface := E_HRESULTAdsErr.NOINTERFACE ; //Call super if this fb extends some other
END_IF
Die zusätzlich angelegten Methoden
- TcAddRef / TcRelease
werden von dem Interface ITcUnknown geerbt und sind hier nicht relevant. Als Hintergrund kann das Kapitel über das TcCOM-Modul-Konzept im C++ Bereich betrachtet werden.
Vorbereitung Netzwerkkarte
Stellen Sie für das TCP/UDP RT Modul sicher, dass der RT-Ethernet-Adapter in der TwinCAT Solution auf die richtige Netzwerkkarte (mit TwinCAT Treiber) verbunden ist.
![]() | Nur Lokale Konfiguration Die Installation des Treibers auf kompatiblen Netzwerkkarten über den Button „Compatible Devices“ erfolgt immer lokal. Auf einer Steuerung mit TwinCAT XAR kann das mitinstallierte Programm TcRteInstall.exe (normalerweise unter C:\TwinCAT\3.1\System) genutzt werden. |
