SysTCPClient, opens a TCP/IP connection
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 eNULL.
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
- Per gestire lo stream di I/O eFILEP in uscita dal FB puoi utilizzare gli oggetti di gestione dei terminali (Streams) di I/O.
- 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.
- In questo topic discussione sull'utilizzo del FB nella comunicazione Modbus master.
Descrizione
| Parametro | Tipo | 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 | eFILEP | Stream di I/O valorizzato su connessione stabilita con il sistema server. Se connessione non attiva viene ritornato eNULL. |
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. Per testare l'esempio si può utilizzare l'utility Terminal->TCP Server di Toolly.
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
Fp : eFILEP; (* File pointer *)
TCPClient : SysTCPClient; (* TCP client management *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SysTCPClient"
// *****************************************************************************
// A TCP client is instantiated and connects to the defined TCP server IP and
// port. Data received is echoed.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.
IF (SysFirstLoop) THEN
TCPClient.PeerAdd:=ADR('192.168.1.251'); //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:=30; //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
eTO_JUNK(Sysfputc(Sysfgetc(Fp), Fp)); //Character echo
END_IF;
END_IF;
// [End of file]