Beispiel02: "Echo" Client/Server (Einfachverbindung)
Dieses Beispiel nutzt die Funktionen der früheren TcSocketHelper.Lib, die nun in die Tc2_TcpIp‑Bibliothek integriert ist. Es zeigt eine Client/Server‑SPS‑Anwendung auf Basis der Funktionen der früheren SocketHelper‑Bibliothek.
Der Client sendet zyklisch einen Teststring (sToServer) zum Remote-Server. Der Server gibt diesen String unverändert an den Client zurück (sFromServer).

Systemvoraussetzungen
- TwinCAT 3 Build 3093 oder höher
- TwinCAT 3 Function TF6310 TCP/IP
- Wird das Beispiel auf zwei Computern ausgeführt (ein Client und ein Server), muss die Function TF6310 auf beiden installiert sein.
- Wird das Beispiel auf einem Computer ausgeführt (z. B. Client und Server laufen in zwei separaten SPS-Laufzeiten), müssen beide SPS-Laufzeiten in separaten Tasks laufen.
Projektinformation
Die Standardeinstellungen für die Kommunikation in den obigen Beispielen lauten wie folgt:
- SPS-Client-Applikation: Die Port- und IP-Adresse des Remote-Servers: 200, '127.0.0.1'
- SPS-Server-Applikation: Die Port- und IP-Adresse des Local-Servers: 200, '127.0.0.1'
Wenn Client- und Server-Anwendung auf zwei verschiedenen PCs getestet werden, müssen Port und IP Adresse entsprechend angepasst werden.
Sie können Client- und Server-Anwendung auch ohne Änderung der Einstellungen auf einem PC testen, indem Sie die Client-Anwendung in das erste SPS-Laufzeitsystem laden und die Server-Anwendung in das zweite.
Das Verhalten des SPS-Projektbeispiels wird von folgenden globalen Variablen/Konstanten bestimmt:
Konstante | Wert | Beschreibung |
---|---|---|
PLCPRJ_MAX_CONNECTIONS | 5 | Max. Anzahl der Server → Client-Verbindungen. Ein Server kann Verbindungen zu mehr als einem Client aufbauen. Ein Client kann immer nur zu einem Server Verbindung aufbauen. |
PLCPRJ_SERVER_RESPONSE_TIMEOUT | T#10s | Max. Verzögerungszeit (Timeout-Zeit), nach der ein Server eine Antwort an den Client senden soll. |
PLCPRJ_CLIENT_SEND_CYCLE_TIME | T#1s | Zykluszeit, in der ein Client Sendedaten (TX) an den Server sendet. |
PLCPRJ_RECEIVER_POLLING_CYCLE_TIME | T#200ms | Zykluszeit, in der ein Client oder Server nach Empfangsdaten (RX) pollend fragt. |
PLCPRJ_BUFFER_SIZE | 10000 | Max. interne Puffergröße für RX/TX-Daten. |
Das SPS-Beispiel definiert und nutzt folgende interne Fehlercodes:
Fehlercode | Wert | Beschreibung |
---|---|---|
PLCPRJ_ERROR_RECEIVE_BUFFER_OVERFLOW | 16#8101 | Der interne Empfangspuffer meldet einen Überlauf. |
PLCPRJ_ERROR_SEND_BUFFER_OVERFLOW | 16#8102 | Der interne Sendepuffer meldet einen Überlauf. |
PLCPRJ_ERROR_RESPONSE_TIMEOUT | 16#8103 | Der Server hat die Antwort in der angegebenen Timeoutzeit nicht gesendet. |
PLCPRJ_ERROR_INVALID_FRAME_FORMAT | 16#8104 | Das Telegramm hat eine fehlerhafte Formatierung (Größe, fehlerhaften Datenbytes usw. ). |
Die Client- bzw. Server-Applikationen (FB_ServerApplication, FB_ClientApplication) wurden als Funktionsbausteine implementiert. Die Applikation und die Verbindung können dadurch mehrfach instanziiert werden.