Questo blocco funzione da eseguire in task Back, gestisce lo scambio dati su rete TCP agendo come client connettendosi al sistema su cui è in esecuzione il FB TCPDataExchServer. Su attivazione l’FB si connette al server definito in SAddress alla porta definita in Sport. In DEDefs occorre definire l’indirizzo della struttura TCPDEXCHNODEDEFS che identifica il nodo slave nella connessione con il server.
La gestione della comunicazione andrà gestita tramite le variabili nella struttura dati. Se la connessione al server viene stabilita (Il NodeID corrisponde con uno di quelli accettati dal server) i due sistemi si “legano” per lo scambio dati ed il bit Active della struttura dati verrà attivato.
Per inviare i dati al sistema server occorre attivare il bit TxData, il bit è automaticamente resettato a fine trasmissione. Se è attivo il bit AutoTxD su variazione dei dati nel buffer Tx, i dati sono automaticamente inviati al server. Su ricezione dati da un server avremo il bit RxOk attivo per un loop.
Approfondimenti
- In questo topic informazioni su scambio dati tra sistemi via connessione LTE.
Descrizione
Enable (BOOL) Comando attivazione server.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
SAddress (@STRING) Indirizzo IP o URL del server a cui connettersi.
SPort (UINT) Porta TCP a cui connettersi sul server.
DEDefs (@TCPDEXCHNODEDEFS) Indirizzo allocazione array struttura TCPDEXCHNODEDEFS di definizione nodo.
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop se errore gestione

Trigger di spy
Se SpyOn attivo è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
---|---|
16#00000001 | Rx: Sequenze ricezione frame. |
16#00000002 | Tx: Sequenze trasmissione frame. |
16#40000000 | Er: Errori di esecuzione. |
Esempi
Come utilizzare gli esempi.
Viene eseguito il FB client che si connette al FB server (Vedi esempio in questo articolo) in esecuzione sullo stesso sistema (127.0.0.1 o localhost). I due sistemi si scambiano tra di loro i dati definiti nei rispettivi buffers.
LogicLab (Ptp171, ST_TCPDataExchClient)
PROGRAM ST_TCPDataExchClient
VAR
TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer address *)
RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer address *)
TCPClient : TCPDataExchClient; (* TCP data exchange client *)
DEDefs : TCPDEXCHNODEDEFS; (* Data exchange node definitions *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_TCPDataExchClient"
// *****************************************************************************
// The program instantiates a "TCPDataExchClient" FB. It connects to a system
// on wich the FB server is active. To test the program execute the server and
// client on the same system.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
// Set the client definitions.
DEDefs.NodeID:=1; //Node ID
DEDefs.AutoTxD:=TRUE; //Automatic Tx data send
DEDefs.RxBuffer:=ADR(RxBuffer); //Rx buffer address
DEDefs.RxLength:=SIZEOF(RxBuffer); //Rx buffer length
DEDefs.TxBuffer:=ADR(TxBuffer); //Tx buffer address
DEDefs.TxLength:=SIZEOF(TxBuffer); //Tx buffer length
DEDefs.TxHeartbeat:=1; //Tx heartbeat time (S)
// Client configuration.
TCPClient.SpyOn:=TRUE; //Spy command
TCPClient.SAddress:=ADR('127.0.0.1'); //Server address
TCPClient.SPort:=10000; //Server port
TCPClient.DEDefs:=ADR(DEDefs); //Client definitions
END_IF;
// -------------------------------------------------------------------------
// DATA EXCHANGE CLIENT
// -------------------------------------------------------------------------
// Manage data exchange client.
TCPClient(Enable:=TRUE); //Manage the client
// [End of file]