SysUDPClient, se deschide la conexiunea UDP

Listă

Această pagină face parte din Manual de programare IEC 61131-3. Mergeți la index.

Acest bloc funcțional de la rulați în sarcina Înapoi, gestionează comunicarea cu protocolul UDP în modul client. Este necesar să se definească în PeerAdd adresa IP și în PeerPort portul UDP al sistemului server la care doriți să vă conectați.

Activarea comenzii Connect conexiunea cu sistemul server este deschisă, în conexiunea UDP nu este posibil să verificați dacă serverul este prezent și acceptă conexiunea, prin urmare este întotdeauna activată Connected iar la ieșire File fluxul care va fi utilizat pentru schimbul de date cu sistemul server este returnat.

In LocalAdd e LocalPort puteți defini adresa IP și portul interfeței de rețea de la care să vă conectați. Dacă conexiunea nu este posibilă, se generează Fault.

Cercul de informații

Blocarea funcției

CODESYS: Indisponibil

LogicLab: eLLabXUnified12Lib

Descriere

Connect (BOOL) Comanda de activare a conexiunii.
PeerAdd (@STRING) Adresa IP a sistemului server la care se va conecta.
PeerPort (UINT) Numărul portului UDP la care să vă conectați.
LocalAdd (@STRING) Adresa IP a interfeței de rețea de la care să vă conectați. Implicit „0.0.0.0”: interfața este aleasă automat pe baza IP-ului la care se conectează.
LocalPort UINT) Numărul portului UDP de la care începe conexiunea (0 ales automat).
FlushTm (UINT)) Timp de spălare a datelor (mS). Dacă nu sunt încărcate date în flux după timpul definit, datele prezente sunt trimise automat.
LifeTm (UINT) Durata de viață a soclului (S), dacă nu sunt primite sau trimise date după timpul definit, soclul se închide automat. Dacă timpul este definit „0”, priza nu este niciodată închisă.
RxSize (UINT) Dimensiunea tamponului de recepție a datelor.
TxSize (UINT) Dimensiunea tamponului de transmisie a datelor.
Connected (BOOL) Activ dacă s-a stabilit conexiunea cu serverul.
Fault (BOOL) Activ dacă eroare de management.
File (FILEP) Fluxul I/O evaluat la conexiunea stabilită cu sistemul server. Dacă conexiunea nu este activă, este returnat NULL

Imagine SysUDPClient FB

Exemple

Cum se utilizează exemplele.
FBD_SysUDPClient, ST_SysUDPClient: În exemplu este activată o conexiune la un server UCP care ascultă pe portul 1000. Odată realizată conexiunea, caracterele primite de la server sunt trimise înapoi în ecou. Portul local este ales automat de sistem.

SyslogClient: Implementează un client Syslog cu trimiterea de mesaje către servere.

LogicLab (Ptp116, FBD_SysUDPClient)
PROGRAM FBD_SysUDPClient
VAR
    Fp : eFILEP; (* File pointer *)
    UDPClient : SysUDPClient; (* UDP client *)
END_VAR
Imagine FBD SysUDPClient
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]
A fost util acest articol?