TCPDataExchServer, TCP data exchange (Server)

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Libreria scambio dati tra sistemi
  6. TCPDataExchServer, TCP data exchange (Server)

Questo blocco funzione gestisce lo scambio dati su rete TCP agendo come server accettando le connessioni dai nodi client gestiti dal FB TCPDataExchClient. Attivando l'FB si pone in ascolto il server sulla sulla porta definita in Port, il server accetta il numero contemporaneo di connessioni dai client definite in Connections. In DEDefs occorre definire l'indirizzo dell'array di strutture TCPDEXCHNODEDEFS che identificano i nodi slave che possono connettersi al server.

La gestione della comunicazione andrà gestita tramite le variabili nella struttura dati. Alla connessione di un client viene cercato nell'array indicato da DEDefs il NodeID del messaggio ricevuto ed i due sistemi si “legano” per lo scambio dati, il bit Active verrà attivato.

Per inviare i dati al sistema client 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 client. Su ricezione dati da un client avremo il bit RxOk attivo per un loop.

Function block
CODESYS: Non disponibile
LogicLab: eLLabDataExchLib

Enable (BOOL) Comando attivazione server.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.

Port (UINT) Porta TCP su cui porre in ascolto il server.

Connections (USINT) Numero di connessioni da FB TCPDataExchClient contemporanee gestite.

DEDefs (@TCPDEXCHNODEDEFS) Indirizzo allocazione array struttura TCPDEXCHNODEDEFS di definizione nodi client.

Enabled (BOOL) Blocco funzione abilitato.

Fault (BOOL) Attivo per un loop se errore gestione.

Trigger di spy

Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore 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.
Il programma gestisce lo scambio dati agendo come server ponendosi in ascolto sulla porta 10000, è possibile connettere fino a 2 dispositivi client (Vedi programma di esempio in questo articolo) e scambiare dati tra di loro. I sistemi client dovranno inviare dati identificandosi con i numeri di nodo 1 e 2. Per eseguire l'esempio occorre importare la libreria eLLabDataExchLib nel progetto (Articolo).

LogicLab (Ptp171)
PROGRAM ST_TCPDataExchServer
VAR
    C1RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer (Client 1) *)
    C1TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer (Client 1) *)
    C2RxBuffer : ARRAY[0..7] OF UINT; (* Rx buffer (Client 2) *)
    C2TxBuffer : ARRAY[0..7] OF UINT; (* Tx buffer (Client 2) *)
    TCPServer : TCPDataExchServer; (* TCP data exchange server *)
    DEDefs : ARRAY[0..1] OF TCPDEXCHNODEDEFS; (* Data exchange node definitions *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_TCPDataExchServer"
// *****************************************************************************
// The program instantiates a "TCPDataExchServer" FB. Up to 2 connections are
// accepted.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN

        // Set the client 1 definitions.

        DEDefs[0].NodeID:=1; //Node ID
        DEDefs[0].AutoTxD:=TRUE; //Automatic Tx data send
        DEDefs[0].RxBuffer:=ADR(C1RxBuffer); //Rx buffer address
        DEDefs[0].RxLength:=SIZEOF(C1RxBuffer); //Rx buffer length
        DEDefs[0].TxBuffer:=ADR(C1TxBuffer); //Tx buffer address
        DEDefs[0].TxLength:=SIZEOF(C1TxBuffer); //Tx buffer length
        DEDefs[0].TxHeartbeat:=10; //Tx heartbeat time (S)

        // Set the client 2 definitions.

        DEDefs[1].NodeID:=2; //Node ID
        DEDefs[1].AutoTxD:=TRUE; //Automatic Tx data send
        DEDefs[1].RxBuffer:=ADR(C2RxBuffer); //Rx buffer address
        DEDefs[1].RxLength:=SIZEOF(C2RxBuffer); //Rx buffer length
        DEDefs[1].TxBuffer:=ADR(C2TxBuffer); //Tx buffer address
        DEDefs[1].TxLength:=SIZEOF(C2TxBuffer); //Tx buffer length
        DEDefs[1].TxHeartbeat:=10; //Tx heartbeat time (S)

        // Server configuration.

        TCPServer.SpyOn:=TRUE; //Spy command
        TCPServer.Port:=10000; //Peer port
        TCPServer.Connections:=2; //Accepted connections
        TCPServer.DEDefs:=ADR(DEDefs); //Data exchange definitions
    END_IF;

    // -------------------------------------------------------------------------
    // DATA EXCHANGE SERVER
    // -------------------------------------------------------------------------
    // Manage data exchange server.

    TCPServer(Enable:=TRUE); //Manage the server

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 1 Aprile 2020