S04: TCP Server Demo (PLC)

Dieses Beispiel beschreibt einen TCP Server, der in einem PLC Projekt implementiert ist.

Es nimmt eine TCP Verbindung entgegen, empfängt TCP Pakete und sendet sie zurück zum Absender („Echo-Server“).

Download

Download des Beispiels: https://github.com/Beckhoff/TF6311_Samples/tree/main/S04-TCPServerPlc

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

Analog zu den Quick Starts wird in diesem Beispiel das Interface ITcIoTcpProtocolRecv implementiert und ein Pointer auf ein ITcIoTcpProtocol 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. Die Quick Starts zeigen insbesondere, wie dieses OnlineChange sicher realisiert werden kann. Das allgemeine Vorgehen ist ausführlicher im Sample 11 der C++ Dokumentation beschrieben.

Der implementierende Funktionsbaustein (im Sample TCPServer) ruft die Methode „CheckReceived“ auf. Dem IP Stack wird so die Möglichkeit gegeben, ankommende Pakete zu bearbeiten und Callbacks auf die Methoden „ReceiveData“ und „ReceiveEvent“ des Funktionsbausteins zu übermitteln.

Um auf eingehende Verbindungen zu achten, wird per „AllocSocket“ und „Listen“ in der FB_init ein Port geöffnet. In der „ReceiveEvent“ wird „Accept“ aufgerufen, falls ein Event zum Verbindungsaufbau aufgetreten ist.

Die „ReceiveData“ Methode nutzt in diesem Beispiel 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 TCP 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.
Die Methode TcQueryInterface muss folgendermaßen implementiert werden, damit TwinCAT erkennt, dass das entsprechende Interface implementiert wurde:

VAR
ipTcpRecv : ITcIoTcpProtocolRecv;
ipUnknown : ITcUnknown;
END_VAR


IF GuidsEqual(ADR(iid), ADR(TC_GLOBAL_IID_LIST.IID_ITcIoTcpProtocolRecv)) THEN
ipTcpRecv := 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.

S04: TCP Server Demo (PLC) 1:

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.

S04: TCP Server Demo (PLC) 2: