Einführung
TCP
Bei dem TCP-Protokoll handelt es sich um ein verbindungsorientiertes Protokoll, analog wie bei einer Telefonverbindung, wo die Gesprächsteilnehmer die Verbindung zuerst aufbauen müssen. Das TCP-Protokoll wird dort eingesetzt, wo eine Bestätigung für die vom Client oder Server gesendeten Daten benötigt wird. Die Integrität der Daten wird vom Protokoll verwaltet, was mehr Ressourcen erfordert. Das TCP-Protokoll ist gut geeignet um größere Datenmengen zu verschicken.
TCP ist ein streamorientiertes Transportprotokoll, d.h. es transportiert einen Datenstrom ohne definierten Anfang und Ende. Es werden dabei weder Informationen zur Länge, noch Informationen über Anfang und Ende einer Nachricht übertragen. Für den Sender ist dies unproblematisch da er weiß, wie viele Datenbytes er verschickt. Der Empfänger kann jedoch nicht erkennen, wo eine Nachricht im Datenstrom aufhört und wo die nächste im Datenstrom beginnt. Ein Leseaufruf auf der Empfängerseite liefert immer nur die gerade im Empfangspuffer vorhandenen Daten (u.U. können es weniger oder mehr sein als der Datenblock, der vom anderen Teilnehmer gesendet wurde).
Der Sender muss eine Nachrichtenstruktur festlegen, die beim Empfänger bekannt ist und interpretiert werden kann. Die Nachrichtenstruktur kann sich im einfachen Fall aus den Daten und einem abschließenden Steuerzeichen (z.B. carriage return) zusammensetzen. Das abschließende Steuerzeichen signalisiert das Ende einer Nachricht.
Die Nachrichtenstruktur für die Übertragung von Binärdaten mit einer variablen Länge wird oft auf folgende Weise festgelegt: In den ersten Datenbytes wird ein spezielles Steuerzeichen (start delimiter) und die Datenlänge der darauffolgenden Daten eingetragen. Der Empfänger kann dadurch den Nachrichtenanfang und das Ende erkennen.
Für eine minimale TCP/IP-Clientimplementierung in der SPS werden folgende Funktionsbausteine benötigt:
- Fürs Aufbauen und Abbauen der Verbindung zum Remote-Server eine Instanz des FB_SocketConnect und FB_SocketClose Funktionsbausteins (Tipp: FB_ClientServerConnection kapselt die Funktionalität beider Funktionsbausteine in einem Baustein);
- Für den Datenaustausch mit dem Remote-Server eine Instanz des FB_SocketSend und/oder FB_SocketReceive Funktionsbausteins;
Für eine minimale TCP/IP-Serverimplementierung in der SPS werden
folgende Funktionsbausteine benötigt:
- Fürs Öffnen des Listener-Sockets eine Instanz des FB_SocketListen Funktionsbausteins. Fürs Aufbauen und Abbauen der Verbindung/-en zu den Remote-Clients eine Instanz des FB_SocketAccept und FB_SocketClose Funktionsbausteins (Tipp: FB_ServerClientConnection kapselt die Funktionalität aller drei Funktionsbausteine in einem Baustein).
- Für den Datenaustausch mit den Remote-Clients eine Instanz des FB_SocketSend und/oder FB_SocketReceive Funktionsbausteins;
In jedem SPS-Laufzeitsystem, in dem Sie ein Socket öffnen, benötigen Sie eine Instanz des FB_SocketCloseAll Funktionsbausteins;
Die Instanzen der FB_SocketAccept und FB_SocketReceive Funktionsbausteine werden zyklisch (pollend) aufgerufen, alle anderen nach Bedarf.
UDP
Bei dem UDP-Protokoll handelt es sich um ein verbindungsloses Protokoll. Die Daten werden von einem Teilnehmer zum anderen gesendet, ohne das eine explizite Verbindung existiert. Das UDP-Protokoll ist gut geeignet um kleine Datenmengen zu verschicken. Eine UDP-Applikation kann beides sein: ein Client oder ein Server. Das UDP-Protokoll garantiert nicht, dass die gesendeten Daten tatsächlich am Ziel ankommen (es wird keine Bestätigung für die empfangenen Pakete gesendet). Die einzelnen Datenpakete können auch am Ziel in einer anderen Reihenfolge ankommen oder verlorengehen.
UDP ist ein paketorientiertes/nachrichtenorientiertes Transportprotokoll, d.h. der gesendete Datenblock wird auf der Empfängerseite auch als kompletter Datenblock empfangen.
Für eine minimale UDP-Server/Client-Implementierung werden folgende Funktionsbausteine benötigt:
- Fürs Öffnen und Schließen eines UDP-Sockets eine Instanz des FB_SocketUdpCreate und eine Instanz des FB_SocketClose Funktionsbausteins;
- Für den Datenaustausch mit anderen Teilnehmern eine Instanz des FB_SocketUdpSendTo und/oder FB_SocketUdpReceiveFrom Funktionsbausteins;
- In jedem SPS-Laufzeitsystem, in dem Sie ein UDP-Socket öffnen, eine Instanz des FB_SocketCloseAll Funktionsbausteins;
Die Instanzen des FB_SocketUdpReceiveFrom Funktionsbausteins werden zyklisch (pollend) aufgerufen, alle anderen nach Bedarf.
Weitere Informationen finden Sie auf den folgenden Dokumentationsseiten.
Glossar
Begriff | Beschreibung |
---|---|
TwinCAT TCP/IP Connection Server | Ein TwinCAT Server. Der Server ermöglicht das Öffnen, Schließen, Versenden und Empfangen der Daten über die Windows Sockets. |
Remote-Client | Ein Client auf einem entfernten Rechner (aus der Serversicht: mit dem der Server kommunizieren will). |
Remote-Server | Ein Server auf einem entfernten Rechner (aus der Clientsicht: mit dem der Client kommunizieren will). |
Local-Client | Ein Client auf dem lokalen Rechner. |
Local-Server | Ein Server auf dem lokalen Rechner. |
Verbindungshandle (Socket-Handle) | Eine SPS-Variable vom Typ T_HSOCKET |