Sysfread, read data from file

List

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

Questa funzione da eseguire in task Back, 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 caratteri letti, se nello stream non ci sono abbastanza caratteri da soddisfare i parametri, viene ritornato un numero rispetto al valore definito in (Size*Count). Per essere certi che vi siano sufficienti caratteri  nello stream è possibile utilizzare la funzione SysFGetIChars che ne ritorna il numero.

Information Circle

Funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib

Descrizione

Buf (PVOID) 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 (eFILEP) Terminale di I/O (Stream) ritornato dalla funzione di apertura risorsa.
La funzione ritorna un (INT) con il numero di caratteri letti, se il valore ritornato è minore di Size*Count, significa che non vi erano abbastanza dati nello stream.

Immagine funzione Sysfread

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, ST_Sysfread)
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:=30; //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 ((SysFGetOSpace(Fp) >= 5) AND (SysFGetIChars(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]
Was this article helpful?