DataStreamExch, exchanges data between two I/O streams

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questo blocco funzione esegue lo scambio dati tra due streams di comunicazione. Definendo uno stream come socket TCP e l’altro come seriale è possibile realizzare un convertitore Ethernet/Seriale.

In FpA ed FpB occorre indicare i file pointer degli streams di comunicazione. Il FB riceve i dati da uno stream e li invia sull’altro. Per il trasferimento dei dati viene allocato dinamicamente un buffer di memoria che può raggiungere al massimo la dimensione definita in DBMax (Si consiglia 2048 bytes).

Se non c’è comunicazione tra gli streams dopo il tempo definito in DBLife (Si consiglia 5 secondi) il buffer di memoria viene disallocato liberando risorse di sistema. Se valore impostato è 0 il buffer non viene mai disallocato.

Information Circle

Blocco funzione

CODESYS: Non disponibile

LogicLab: eLLabUtyLib

Descrizione

Enable (BOOL) Abilitazione blocco funzione.
FpA (eFILEP) Flusso dati stream di comunicazione.
FpB (eFILEP) Flusso dati stream di comunicazione.
DBMax (UDINT) Dimensione massima allocazione buffer dati (Bytes). Valore massimo 4096.
DBLife (REAL) Tempo di vita buffer dati (S).
Enabled (BOOL) Blocco funzione abilitato.
Fault (BOOL) Attivo per un loop se errore esecuzione.

Immagine FB DataStreamExch_v1

Esempi

Come utilizzare gli esempi.
Semplice convertitore Ethernet/Seriale, accetta una connessione TCP su porta 2000, i dati ricevuti dalla connessione TCP sono inviati in uscita sulla porta seriale COM0 e viceversa.

LogicLab (Ptp114, FBD_DataStreamExch)
PROGRAM FBD_DataStreamExch
VAR
    FP : eFILEP; (* File pointer *)
    Sp : SysSerialPort; (* Serial port management *)
    Sk : SysTCPServer; (* Socket server *)
    DExch : DataStreamExch_v1; (* Data exchange *)
END_VAR
Programma esempio FBD_PIDMng_v1
LogicLab (Ptp114, ST_DataStreamExch)
PROGRAM ST_DataStreamExch
VAR
    Fp : eFILEP; (* File pointer *)
    Sp : SysSerialPort; (* Serial port management *)
    Sk : SysTCPServer; (* Socket server *)
    DExch : DataStreamExch_v1; (* Data exchange *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_DataStreamExch"
// *****************************************************************************
// This program acts as a Ethernet to serial converter, the data received from
// the ethernet connection are forwarded to serial and vice versa.
// -----------------------------------------------------------------------------

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

    IF (SysFirstLoop) THEN

        // Initialize serial port.

        Sp.COM:=ADR('COM0'); //Serial port
        Sp.Baudrate:=115200; //Baud rate
        Sp.Parity:='E'; //Parity
        Sp.DataBits:=8; //Data bits
        Sp.StopBits:=1; //Stop bits
        Sp.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management

        // Initialize socket server.

        Sk.FilesArr:=ADR(Fp); //File array
        Sk.MaxConn:=1; //Number of connections accepted
        Sk.LocalAdd:=ADR('0.0.0.0'); //Local address
        Sk.LocalPort:=2000; //Local port
        Sk.LifeTm:=60; //TSocket life time (S)
        Sk.FlushTm:=10; //Socket flush time (mS)
        Sk.RxSize:=1024; //Rx size buffer
        Sk.TxSize:=1024; //Tx size buffer

        // Initialize data stream exchange.

        DExch.DBMax:=2048; //Data buffer maximum size
        DExch.DBLife:=5.0; //Data buffer life (S)
    END_IF;

    // -------------------------------------------------------------------------
    // DATA STREAM EXCHANGE
    // -------------------------------------------------------------------------
    // Execute the data stream exchange.

    Sp(Open:=TRUE); //Serial port management
    Sk(Enable:=TRUE); //TCP server management
    DExch.FpA:=Fp; //File pointer
    DExch.FpB:=Sp.File; //File pointer        
    DExch(Enable:=(Sk.ConnPeers <> 0)); //Data exchange

// [End of file]
Was this article helpful?