SysTCPClient, opens a TCP/IP connection

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questa function block da eseguire in task Back, gestisce la comunicazione con protocollo TCP/IP in modalità client. Occorre definire in PeerAdd l’indirizzo IP ed in PeerPort la porta TCP del sistema server a cui ci si vuole connettere.

Attivando il comando Connect viene aperta la connessione con il sistema server. Se la connessione và a buon fine viene attivato Connected e sull’uscita File viene ritornato lo stream da utilizzarsi per lo scambio dati con il sistema server. Se il server chiude la connessione si resetta Connected e in File viene ritornato NULL.

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.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib (Può essere eseguita solo in task Back)

Descrizione

Connect (BOOL) Comando abilitazione connessione.
PeerAdd (@STRING) Indirizzo IP del sistema server a cui connettersi.
PeerPort (UINT) Numero porta TCP 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 TCP 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.

Immagine FB SysTCPClient

Esempi

Come utilizzare gli esempi.
Nell’esempio è attivata una connessione verso un server TCP 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, FBD_SysTCPClient)
PROGRAM FBD_SysTCPClient
VAR
    Fp : eFILEP; (* File pointer *)
    TCPClient : SysTCPClient; (* TCP client management *)
END_VAR
Immagine programma FBD_SysTCPClient
LogicLab (Ptp116, ST_SysTCPClient)
PROGRAM ST_SysTCPClient
VAR
    i : UDINT; (* Auxiliary variable *)
    Fp : eFILEP; (* File pointer *)
    TCPClient : SysTCPClient; (* TCP client management *)
END_VAR

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

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

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

    // Manage the TCP client.

    TCPClient(Connect:=TRUE); //TCPClient management
    Fp:=TCPClient.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]
Was this article helpful?