Vai al contenuto
Vai all indice del manuale di programmazione
Tipo: Funzione
Libreria LogicLab: eLLabXUnified12Lib
Libreria Codesys: Non disponibile

Questa funzione da eseguire in task Back, ritorna un carattere dal terminale di I/O (Stream) indicato dal parametro File, precedentemente aperto dalla relativa funzione di apertura risorsa.

La funzione ritorna il carattere letto, in caso di errore o se nessun dato dallo stream, la funzione ritorna EOF. Per essere certi che vi siano caratteri dallo stream è possibile utilizzare la funzione SysGetIChars che ne ritorna il numero.

Descrizione

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

La funzione ritorna un (INT) con il carattere letto, EOF In caso di errore o se nessun dato dallo stream

Immagine F_Sysfgetc

Esempi

Come utilizzare gli esempi.
Nell’esempio è attivato un server TCP sulla porta definita, e quando un client si connette viene eseguyito l’echo dei caratteri ricevuti.

LogicLab (Ptp116, ST_Sysfgetc)
PROGRAM ST_Sysfgetc
VAR
    Ch : INT; (* Received character *)
    Fp : eFILEP; (* File pointer array *)
    TCPServer : SysTCPServer; (* TCP server *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysfgetc"
// *****************************************************************************
// The program opens a TCP server on defined port, and when a client connects,
// it echoes the received characters.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATIONS
    // -------------------------------------------------------------------------
    // First loop initializations.

    IF (SysFirstLoop) THEN
        TCPServer.FilesArr:=ADR(Fp); //Files array
        TCPServer.LocalAdd:=ADR('0.0.0.0'); //Local address
        TCPServer.LocalPort:=1080; //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 has been connected.

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

    // If a character is received and there is space in the output buffer,
    // it is echoed.

    IF ((SysFGetOSpace(Fp) > 0) AND (SysFGetIChars(Fp) > 0)) THEN
        Ch:=Sysfgetc(Fp); //Received character
        Ch:=Sysfputc(Ch, Fp); //Echo charcter
    END_IF;

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