Übersicht

Das folgende Beispiel zeigt die Implementierung einer einfachen Peer-to-Peer-Anwendung in der SPS. Es umfasst zwei SPS-Projekte (PeerA und PeerB) sowie eine .NET-Anwendung, die als separater Peer agiert. Alle Peer-Anwendungen senden einen Test-String zu einem Remote-Peer und erhalten gleichzeitig Strings von einem Remote-Peer. Die erhaltenen Strings werden auf dem Bildschirm in einer Messagebox angezeigt. Sie können das Beispiel beliebig nutzen und anpassen.

Systemvoraussetzungen

Projektdownloads

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

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

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

Projektbeschreibung

Unter den nachfolgenden Links finden Sie die Dokumentation der einzelnen Komponenten. 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 SPS-Beispielen werden einige Funktionen, Konstanten und Funktionsbausteine benutzt, die im Folgenden kurz beschrieben werden sollen:

Fifo-Funktionsbaustein

FUNCTION_BLOCK FB_Fifo
VAR_INPUT
    new : ST_FifoEntry;
END_VAR
VAR_OUTPUT
    bOk : BOOL;
    old : ST_FifoEntry;
END_VAR

Hierbei handelt es sich um einen einfachen 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 in den Empfangs-Fifo abgelegt. Die bOk-Ausgangsvariable wird auf FALSE gesetzt, wenn bei der letzten 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

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.