SysUDPClient, opens a UDP connection

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Streams di comunicazione
  6. SysUDPClient, opens a UDP connection

Questa function block gestisce la comunicazione con protocollo UDP in modalità client. Occorre definire in PeerAdd l'indirizzo IP ed in PeerPort la porta UDP del sistema server a cui ci si vuole connettere.

Attivando il comando Connect viene aperta la connessione con il sistema server, nella connessione UDP non è possibile verificare se il server è presente ed accetta la connessione, pertanto viene sempre attivato Connected e sull'uscita File viene ritornato lo stream da utilizzarsi per lo scambio dati con il sistema server.

In LocalAdd e LocalPort è possibile definire l'indirizzo IP e la porta della interfaccia di rete da cui effettuare la connessione. Se la connessione non è possibile viene generato Fault.

Function block
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Connect (BOOL) Comando abilitazione connessione.

PeerAdd (@STRING) Indirizzo IP del sistema server a cui connettersi.

PeerPort (UINT) Numero porta UDP a cui connettersi.

LocalAdd (@STRING) Indirizzo IP della interfaccia di rete da cui effettuare la connessione. Default '0.0.0.0': l'interfaccia è scelta automaticamente in base all'IP a cui connettersi.

LocalPort UINT) Numero porta UDP da cui parte la connessione (0 scelta automaticamente).

FlushTm (UINT)) Tempo di flush dati (mS). Se non sono caricati dati sullo stream dopo il tempo definito i dati presenti vengono automaticamente inviati.

LifeTm (UINT) Tempo di vita socket (S), se non sono ricevuti o inviati dati dopo il tempo definito il socket viene automaticamente chiuso. Se definito tempo “0” il socket non viene mai chiuso.

RxSize (UINT) Dimensione buffer ricezione dati.

TxSize (UINT) Dimensione buffer trasmissione dati.

Connected (BOOL) Attivo se connessione stabilita con server

Fault (BOOL) Attivo se errore gestione.

File (FILEP) Stream di I/O valorizzato su connessione stabilita con il sistema server. Se connessione non attiva viene ritornato NULL.

Errori

In caso di errore si attiva l'uscita Fault, eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Nell'esempio è attivata una connessione verso un server UCP in ascolto sulla porta 1000. Eseguita la connessione i caratteri ricevuti dal server sono reinviati in echo. La porta locale viene sceta automaticamente dal sistema.

LogicLab (Ptp116)
PROGRAM ST_SysUDPClient
VAR
    i : INT; (* Auxiliary variable *)
    Fp : FILEP; (* 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:=20; //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(SysGetIChars(Fp)) AND TO_BOOL(SysGetOSpace(Fp))) THEN
            i:=Sysfputc(Sysfgetc(Fp), Fp); //Character echo
        END_IF;
    END_IF;

// [End of file]
LogicLab (Ptp116)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 28 Ottobre 2019