UDP Beispiel
Das folgende Beispiel zeigt die Implementierung einer einfachen Peer-To-Peer-Applikation in der SPS. Die vorgestellte SPS-Applikation kann einen Test-String zu einem Remote-PC senden und gleichzeitig Test-Strings von einem Remote-PC empfangen. Die Test-Strings werden auf dem Bildschirm des Zielrechners in einer Messagebox ausgegeben. Außerdem wird eine einfache Implementierung des passenden Kommunikationspartners in .NET vorgestellt. Das Beispiel kann als Ansatz für eigene, komplexere Implementierungen benutzt werden.
Systemvoraussetzungen
- TwinCAT v2.8 oder höher. Level: Mindestens TwinCAT PLC.
- Installierter TwinCAT TCP/IP Connection Server (v1,0,0,31 oder höher). Wenn Sie für den Test zwei PC's benutzen, dann sollte der TwinCAT TCP/IP Connection Server auf beiden PC's installiert werden.
- TwinCAT SPS-Bibliothek TcpIp.Lib (v1,0,4 oder höher ).
Projektsourcen
Die Sourcen der beiden SPS-Teilnehmer unterscheiden sich nur durch unterschiedliche IP-Addressen der Remote-Kommunikationspartner.
- SPS-Projekt: Peer-To-Peer-Teilnehmer A
- SPS-Projekt: Peer-To-Peer-Teilnehmer B
- .NET: Peer-To-Peer-Kommunikationspartner für den SPS-Teilnehmer A oder B
Projektbeschreibung
Hilfsfunktionen im Beispielprojekt
Im Beispiel werden einige Funktionen, Konstanten und Funktionsbausteine benutzt, die im Folgenden kurz beschrieben werden müssen:
FUNCTION_BLOCK FB_Fifo
VAR_INPUT
new : ST_FifoEntry;
END_VAR
VAR_OUTPUT
bOk : BOOL;
old : ST_FifoEntry;
END_VAR
Ein einfacher Fifo-Funktionsbaustein. Eine Instanz von diesem Baustein wird als Sende-Fifo und eine als Empfangs-Fifo benutzt. Die zu sendenden Nachrichten werden in den Sende-Fifo, und die empfangenen Nachrichten in den Empfangs-Fifo abgelegt. Die bOk-Ausgangsvariable wird auf FALSE gesetzt, wenn bei der letzen Aktion (AddTail oder RemoveHead) Fehler aufgetreten sind (Fifo leer oder überfüllt).
Ein Fifo-Eintrag besteht aus folgenden Komponenten:
TYPE ST_FifoEntry :
STRUCT
sRemoteHost : STRING(15); (* Remote address. String containing an (Ipv4) Internet Protocol dotted address. *)
nRemotePort : UDINT; (* Remote Internet Protocol (IP) port. *)
msg : STRING; (* Udp packet data *)
END_STRUCT
END_TYPE
FUNCTION LogError : DINT
Die Funktion schreibt eine Meldung mit dem Fehlercode in das Logbuch des Betriebssystems (Event Viewer). Die globale Variable bLogDebugMessages muss vorher auf TRUE gesetzt werden.
FUNCTION LogMessage : DINT
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 vorher auf TRUE gesetzt werden.
FUNCTION SCODE_CODE : DWORD
Die Funktion maskiert die niederwertigsten 16Bits eines Win32 Fehlercodes aus und liefert diese zurück.
Globale Konstanten/Variablen
Name | Default value | Description |
---|---|---|
g_sTcIpConnSvrAddr | '' | Die Netzwerkadresse des TwinCAT TCP/IP Connection Servers. Default: Leerstring (der Server befindet sich auf dem lokalen PC); |
bLogDebugMessages | TRUE | Aktiviert/Deaktiviert das Schreiben der Meldungen in das Logbuch des Betriebssystems; |
PLCPRJ_ERROR_SENDFIFO_OVERFLOW | 16#8103 | Interner Beispielprojekt-Fehlercode: Der Sende-Fifo ist voll. |
PLCPRJ_ERROR_RECFIFO_OVERFLOW | 16#8104 | Interner Beispielprojekt-Fehlercode: Der Empfangs-Fifo ist voll. |