La funzione esegue la lettura di un numero definito di stringhe di lunghezza definita dal terminale di I/O (Stream) indicato dal parametro File, precedentemente aperto dalla relativa funzione di apertura risorsa.

La funzione ritorna il numero di stringhe dati lette, se nello stream non ci sono abbastanza stringhe da soddisfare i parametri, viene ritornato un numero minore di stringhe lette rispetto al valore definito. Per essere certi che vi siano sufficienti caratteri  nello stream è possibile utilizzare la funzione SysGetIChars che ne ritorna il numero.

Function
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Buf (@STRING) Indirizzo del buffer dove trasferire le stringhe lette.

Size (INT) Lunghezza in caratteri delle stringhe da leggere.

Count (INT)) Numero di stringhe da leggere.

File (FILEP) Terminale di I/O (Stream) ritornato dalla funzione di apertura risorsa.

La funzione ritorna un (INT) con il numero di stringhe lette, se il valore ritornato è minore di Count, significa che non vi erano abbastanza dati nello stream.

Errori

In caso di errore la funzione torna 0, 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.
Al primo loop di esecuzione viene istanziato un server TCP in ascolto sulla porta 3000. Collegandosi al server con un client Telnet ed inviando dati ad ogni 5 caratteri ricevuti ne verrà eseguito l'echo.

LogicLab (Ptp116)
PROGRAM ST_Sysfread
VAR
    i : UDINT; (* Auxiliary variable *)
    Fp : FILEP; (* Port COM0 file pointer *)
    RxChars : DINT; (* Received characters *)
    TxChars : DINT; (* Transmitted characters *)
    RxString : STRING[ 10 ]; (* Received string *)
    TCPServer : SysTCPServer;    (* TCP server *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysfread"
// *****************************************************************************
// Opens a TCP server on port 3000 and echoes the received characters.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // TCPServer initialization.

    IF (SysFirstLoop) THEN
        TCPServer.FilesArr:=ADR(Fp); //Files array
        TCPServer.LocalAdd:=ADR('0.0.0.0'); //Local address
        TCPServer.LocalPort:=3000; //Local port 
        TCPServer.MaxConn:=1; //Accepted connections
        TCPServer.FlushTm:=50; //Flush time (mS)
        TCPServer.LifeTm:=0; //Life time (S)
        TCPServer.RxSize:=128; //Rx buffer size
        TCPServer.TxSize:=128; //Tx buffer size
    END_IF;

    // Manage the TCP server.

    TCPServer(Enable:=TRUE); //TCPServer management

    // -------------------------------------------------------------------------
    // ECHO CHARACTERS
    // -------------------------------------------------------------------------
    // Check if a client is been connected.

    IF NOT(SysFIsOpen(Fp)) THEN RETURN; END_IF;

    // Wait until at least 5 chars are received and echoes them.

    IF ((SysGetOSpace(Fp) >= 5) AND (SysGetIChars(Fp) >= 5)) THEN
        RxChars:=Sysfread(ADR(RxString), 5, 1, Fp); //Received characters
        TxChars:=Sysfwrite(ADR(RxString), 1, 5, Fp); //Transmitted characters
        i:=SysFOBfFlush(Fp); //Flush output characters
    END_IF;

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 22 Agosto 2019