SysUDPClient öffnet eine UDP-Verbindung

Liste

Diese Seite ist Teil der IEC 61131-3 Programmierhandbuch. Gehen Sie zum Index.

Dieser Funktionsbaustein aus Ausführen in Aufgabe Zurück, verwaltet die Kommunikation mit dem UDP-Protokoll im Client-Modus. Es ist notwendig, in zu definieren PeerAdd die IP-Adresse und in PeerPort den UDP-Port des Serversystems, zu dem Sie eine Verbindung herstellen möchten.

Befehl aktivieren Connect Die Verbindung mit dem Serversystem wird geöffnet. Bei der UDP-Verbindung kann nicht überprüft werden, ob der Server vorhanden ist und die Verbindung akzeptiert. Daher ist sie immer aktiviert Connected und am Ausgang File Es wird der Stream zurückgegeben, der für den Datenaustausch mit dem Serversystem verwendet werden soll.

In LocalAdd e LocalPort Sie können die IP-Adresse und den Port der Netzwerkschnittstelle definieren, von der aus eine Verbindung hergestellt werden soll. Wenn die Verbindung nicht möglich ist, wird sie generiert Fault.

Informationskreis

Funktionssperre

CODESYS: nicht verfügbar

LogikLab: eLLabXUnified12Lib

Beschreibung

Connect (BOOL) Verbindungsaktivierungsbefehl.
PeerAdd (@STRING) IP-Adresse des Serversystems, zu dem eine Verbindung hergestellt werden soll.
PeerPort (UINT) UDP-Portnummer, zu der eine Verbindung hergestellt werden soll.
LocalAdd (@STRING) IP-Adresse der Netzwerkschnittstelle, von der aus eine Verbindung hergestellt werden soll. Standard '0.0.0.0': Die Schnittstelle wird automatisch basierend auf der IP ausgewählt, zu der eine Verbindung hergestellt werden soll.
LocalPort UINT) UDP-Portnummer, von der aus die Verbindung gestartet wird (0 wird automatisch ausgewählt).
FlushTm (UINT)) Datenspülzeit (ms). Wenn nach der definierten Zeit keine Daten auf den Stream geladen werden, werden die vorhandenen Daten automatisch gesendet.
LifeTm (UINT) Socket-Lebensdauer (S), wenn nach der definierten Zeit keine Daten empfangen oder gesendet werden, wird der Socket automatisch geschlossen. Bei definierter Zeit "0" wird der Socket nie geschlossen.
RxSize (UINT) Größe des Datenempfangspuffers.
TxSize (UINT) Größe des Datenübertragungspuffers.
Connected (BOOL) Aktiv, wenn Verbindung zum Server hergestellt.
Fault (BOOL) Aktiv bei Verwaltungsfehler.
File (FILEP) E/A-Stream, bewertet nach Verbindung, die mit dem Serversystem hergestellt wurde. Wenn die Verbindung nicht aktiv ist, wird NULL zurückgegeben

SysUDPClient-FB-Image

Beispiele

Verwendung der Beispiele.
FBD_SysUDPClient, ST_SysUDPClient: Im Beispiel wird eine Verbindung zu einem UCP-Server aktiviert, der Port 1000 überwacht. Sobald die Verbindung hergestellt ist, werden die vom Server empfangenen Zeichen als Echo zurückgesendet. Der lokale Port wird automatisch vom System ausgewählt.

SyslogClient: Implementieren Sie einen Syslog-Client mit dem Senden von Nachrichten an Server.

LogicLab (Ptp116, FBD_SysUDPClient)
PROGRAM FBD_SysUDPClient
VAR
    Fp : eFILEP; (* File pointer *)
    UDPClient : SysUDPClient; (* UDP client *)
END_VAR
SysUDPClient FBD-Image
LogicLab (Ptp116, ST_SysUDPClient)
PROGRAM ST_SysUDPClient
VAR
    i : UDINT; (* Auxiliary variable *)
    Fp : eFILEP; (* File pointer *)
    UDPClient : SysUDPClient; (* UDP client *)
END_VAR

// *****************************************************************************
// PROGRAM "FBD_SysUDPClient"
// *****************************************************************************
// A UDP client is instantiated, it connects to the UDP server IP and port
// defined. Data received are echoed.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First program execution loop initializations.

    IF (SysFirstLoop) THEN
        UDPClient.PeerAdd:=ADR('192.168.0.77'); //Peer address
        UDPClient.PeerPort:=1000; //Peer port
        UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        UDPClient.LocalPort:=0; //Local port
        UDPClient.FlushTm:=50; //Flush time (mS)
        UDPClient.LifeTm:=30; //Life time (S)
        UDPClient.RxSize:=128; //Rx buffer size
        UDPClient.TxSize:=128; //Tx buffer size
    END_IF;

    // Manage the UDP client.

    UDPClient(Connect:=TRUE); //TCPClient management
    Fp:=UDPClient.File; //File pointer

    // -------------------------------------------------------------------------
    // ECHO LOOP
    // -------------------------------------------------------------------------
    // Execute the echo loop.

    IF (SysFIsOpen(Fp)) THEN
        IF (TO_BOOL(SysFGetIChars(Fp)) AND TO_BOOL(SysFGetOSpace(Fp))) THEN
            i:=Sysfputc(Sysfgetc(Fp), Fp); //Character echo
        END_IF;
    END_IF;

// [End of file]
LogicLab (SyslogClient)
PROGRAM SyslogClient
VAR
    Cmd : BOOL; (* Send command *)
    i : UDINT; (* Auxiliary variable *)
    Facility : USINT; (* Facility number *)
    Severity : USINT; (* Severity number *)
    CaseNr : USINT; (* Program case *)
    Months : @STRING; (* Month definitions *)
    UDPClient : SysUDPClient; (* UDP client *)
    DateTime : SysETimeToDate; (* Date time conversion *)
END_VAR

// *****************************************************************************
// PROGRAM "SyslogClient"
// *****************************************************************************
// This program forward information as syslog messages to a syslog server.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First program execution loop initializations.

    IF (SysFirstLoop) THEN
        UDPClient.PeerAdd:=ADR('192.168.0.184'); //Peer address
        UDPClient.PeerPort:=514; //Peer port
        UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        UDPClient.LocalPort:=0; //Local port
        UDPClient.FlushTm:=50; //Flush time (mS)
        UDPClient.LifeTm:=30; //Life time (S)
        UDPClient.RxSize:=128; //Rx buffer size
        UDPClient.TxSize:=512; //Tx buffer size
    END_IF;

    // -------------------------------------------------------------------------
    // SENDING SEQUENCES
    // -------------------------------------------------------------------------
    // Manages the UDP Client and sending sequences.

    UDPClient(); //UDPClient management
   CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // Wait command.

        0:
        UDPClient.Connect:=FALSE; //TCPClient management
        IF NOT(Cmd) THEN RETURN; END_IF;
        Cmd:=FALSE; //Send command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Connect to Syslog server.

        1:
        UDPClient.Connect:=TRUE; //TCPClient management
        IF NOT(SysFIsOpen(UDPClient.File)) THEN RETURN; END_IF;

        // ---------------------------------------------------------------------
        // SEND THE MESSAGE TO SERVER
        // ---------------------------------------------------------------------
        // Send the message to server, here an message example.
        // <19>Feb 26 17:36:42 SlimLine Prova messaggio

        // ---------------------------------------------------------[PRI Part]--
        // The Priority value is calculated by first multiplying the Facility
        // number by 8 and then adding the numerical value of the Severity.

        i:=(Facility*8)+Severity; //Priority value
        i:=SysVfprintf(UDPClient.File, ADR('<%u>'), UDINT_TYPE, ADR(i));

        // ------------------------------------------------------[HEADER Part]--
        // Contains two fields called the TIMESTAMP and HOSTNAME.

        Months:=ADR('JanFebMarAprMayJunJulAugSepOctNovDec');
        DateTime(EpochTime:=SysDateTime); //Date time conversion
        i:=SysVfprintf(UDPClient.File, ADR('%.3s '), STRING_TYPE, Months+(DateTime.Month*3));
        i:=SysVfprintf(UDPClient.File, ADR('%2u '), USINT_TYPE, ADR(DateTime.Day));
        i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Hour));
        i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Minute));
        i:=SysVfprintf(UDPClient.File, ADR('%02u '), USINT_TYPE, ADR(DateTime.Second));
    
        i:=SysVfprintf(UDPClient.File, ADR('%s '), STRING_TYPE, ADR('SlimLine'));

        // ---------------------------------------------------------[MSG Part]--
        // The CONTENT contains the details of the message.

        i:=SysVfprintf(UDPClient.File, ADR('%s'), STRING_TYPE, ADR('This is a message'));

        // Eseguo invio messaggio di Log.

        i:=SysFOBfFlush(UDPClient.File); //Flush output characters
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Waits until the message is sent.

        2:
        IF (TO_INT(SysFGetOBfSize(UDPClient.File)) <> SysFGetOSpace(UDPClient.File)) THEN RETURN; END_IF;
        CaseNr:=0; //Program case
    END_CASE;

// [End of file]
War dieser Artikel hilfreich?