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.
Approfondimenti
- In questo topic viene illustrato come utilizzare il FB per connettersi ad un dispositivo Modbus slave.
- In questo topic suggerimenti su comunicazione con più dispositivi Modbus TCP.
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.

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

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]