Übersicht

Das folgende Beispiel zeigt eine beispielhafte Implementierung eines „Echo“-Client/Server-Systems. Der Client sendet in bestimmten Abständen (z. B. jede Sekunde) einen Test-String zum Server. Der Remote-Server sendet diesen String wieder zurück an den Client.

In diesem Beispiel ist der Client sowohl in der SPS implementiert als auch in einer .NET-Anwendung, die in C# geschrieben wurde. Der SPS-Client kann verschiedene Kommunikationsinstanzen erzeugen, die mehrere TCP-Verbindungen gleichzeitig simulieren. Der unter .NET entwickelte Beispiel-Client stellt nur eine Verbindung her. Der Server in der SPS kann mit mehreren Clients kommunizieren.

Vom Server können zusätzlich mehrere Instanzen angelegt werden. Jede Server-Instanz wird dann über eine eigene Portnummer angesprochen, die der Client zum Aufbau einer Verbindung zu einer spezifischen Instanz nutzen kann. Die Server-Implementierung ist schwieriger, wenn der Server mit mehr als nur einem Client kommunizieren soll.

Sie können das Beispiel beliebig nutzen und für Ihre Zwecke anpassen.

Systemvoraussetzungen

Projektdownloads

https://github.com/Beckhoff/TF6310_Samples/tree/master/PLC/TCP/Sample01

https://github.com/Beckhoff/TF6310_Samples/tree/master/C%23/SampleClient

Projektbeschreibung

Für jede der erwähnten Komponenten ist eine Dokumentation verfügbar, welche im Folgenden verlinkt wurde. Ein separater Artikel erklärt Schritt für Schritt, wie die SPS- Beispiele eingerichtet und gestartet werden.

Zusätzliche Funktionen der SPS-Beispielprojekte

In den Beispielprojekten werden einige Funktionen, Konstanten und Funktionsbausteine benutzt, die im Folgenden kurz beschrieben werden sollen:

LogError-Funktion

FUNCTION LogError : DINT
Übersicht 1:

Die Funktion schreibt eine Meldung mit dem Fehlercode in das Logbuch des Betriebssystems (Event Viewer). Die globale Variable bLogDebugMessages muss zuerst auf TRUE gesetzt werden.

LogMessage-Funktion

FUNCTION LogMessage : DINT
Übersicht 2:

Die Funktion schreibt eine Meldung in das Logbuch des Betriebssystems (Event Viewer), wenn ein neuer Socket geöffnet oder geschlossen wurde. Die globale Variable bLogDebugMessages muss zuerst auf TRUE gesetzt werden.

SCODE_CODE-Funktion

FUNCTION SCODE_CODE : DWORD
Übersicht 3:

Die Funktion maskiert die niederwertigsten 16 Bits eines Win32-Fehlercodes aus und liefert diese zurück.

Globale Variablen

Name

Default-Wert

Beschreibung

bLogDebugMessages

TRUE

Aktiviert/deaktiviert das Schreiben von Nachrichten ins Logbuch des Betriebssystems

MAX_CLIENT_CONNECTIONS

5

Max. Anzahl der Remote-Clients, die eine Verbindung zum Server gleichzeitig aufbauen können;

MAX_PLCPRJ_RXBUFFER_SIZE

1000

Max. Länge des internen Empfangspuffers

PLCPRJ_RECONNECT_TIME

T#3s

Nach Ablauf dieser Zeit versucht der Local-Server den Listener-Socket neu zu öffnen

PLCPRJ_RECEIVE_POLLING_TIME

T#1s

In diesem Zyklus liest (pollt) der Server Daten

PLCPRJ_RECEIVE_TIMEOUT

T#50s

Nach Ablauf dieser Zeit bricht der Server den Empfang ab, wenn keine Datenbytes empfangen werden konnten

PLCPRJ_ACCEPT_POLLING_TIME

T#1s

In diesen Zeitabständen versucht der Local-Server die Verbindungsanforderungen des Remote-Clients anzunehmen (akzeptieren);

PLCPRJ_ERROR_RECEIVE_BUFFER_OVERFLOW

16#8101

Fehlercode Beispielprojekt: Zu viele Zeichen ohne Nullterminierung empfangen

PLCPRJ_ERROR_RECEIVE_TIMEOUT

16#8102

Fehlercode Beispielprojekt: Bis zum Timeout konnten keine neuen Daten empfangen werden (PLCPRJ_RECEIVE_TIMEOUT)