SysTCPClient, opens a TCP/IP connection

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Streams di comunicazione
  6. SysTCPClient, opens a TCP/IP connection

Questa function block 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.

Function block
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Enable (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.

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 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)
PROGRAM ST_SysTCPClient
VAR
    i : INT; (* Auxiliary variable *)
    Fp : FILEP; (* 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(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: 26 Ottobre 2019