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

Projektsourcen

Die Sourcen der beiden SPS-Teilnehmer unterscheiden sich nur durch unterschiedliche IP-Addressen der Remote-Kommunikationspartner.

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

UDP Beispiel 1:

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

UDP Beispiel 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 vorher auf TRUE gesetzt werden.

FUNCTION SCODE_CODE : DWORD

UDP Beispiel 3:

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.