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:

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:

In dem Beispiel wird in der „ReceiveData“ Methode die „SendData“ Methode verwendet um die empfangenen Daten zurückzusenden:

S02: UDP Demo (PLC) 1:

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

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.

S02: UDP Demo (PLC) 2:

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.

S02: UDP Demo (PLC) 3: