SysVarsnprintf, variable print to string

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Gestione stringhe
  6. SysVarsnprintf, variable print to string

Questa funzione trasferisce in String la stampa formattata di una variabile. Il valore stampato ritornato nella variabile stringa non può superare la lunghezza definita in Size, vedere anche funzione SysLWVarsnprintf.

La stringa Format specifica il formato con il quale stampare la variabile. Mentre in VarType è indicato il tipo di variabile ed in VarAdd il suo indirizzo.

La funzione ritorna il numero di caratteri trasferiti nella variabile String, EOF in caso di errore.

Function
CODESYS: Non disponibile,
LogicLab: eLLabXUnified12Lib

String (@USINT) Pointer alla variabile stringa dove deve essere trasferito il risultato.

Size (UDINT) Numero di caratteri da trasferire nella variabile String. Il numero definito è comprensivo del codice di fine stringa '\0'. Se la lunghezza della stringa in uscita supera il limite di Size byte, viene troncata al numero di byte indicato.

Format (STRING[80]) Ha due tipi di argomenti, i caratteri ordinari che vengono copiati nello stream di uscita, e le specifiche di conversione, contraddistinte dal simbolo percentuale (%) e da un carattere che specifica il formato con il quale stampare la variabile definita (Definizione).

VarType (DINT) Tipo variabile da stampare (Definizione).

VarAdd (UDINT) Indirizzo variabile.

La funzione ritorna una variabile (INT) che indica il numero di caratteri comprensivo codice fine stringa '\0' trasferiti in String. EOF se errore esecuzione.

Errori

In caso di errore si attiva l'uscita Fault, 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.
Nell'esempio è attivato un server TCP sulla porta 1000, e quando un client si connette viene inviato al client un messaggio di benvenuto con il numero di visitatori connessi e l'IP dal quale il client si connette.

LogicLab (Ptp116)
VAR
    Pulse : BOOL; (* Pulse flag *)
    i : INT; (* Auxiliary variable *)
    Fp : FILEP;  (* File pointer array *)
    VisitorNr : USINT; (* Visitor number *)
    NrOfChars : ARRAY[ 0..1 ] OF INT; (* Number of printed chars *)
    StringOut : ARRAY[ 0..127 ] OF USINT; (* String output *)
    TCPServer : SysTCPServer; (* TCP server *)
    CInfos : SysGetPeerInfos; (* Client infos *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysVarsnprintf"
// *****************************************************************************
// Opens a TCP server on port 1000 and send to the client a welcome message.
// -----------------------------------------------------------------------------

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

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

    // -------------------------------------------------------------------------
    // WELCOME MESSAGE
    // -------------------------------------------------------------------------
    // Check if a client is been connected.

    IF NOT(SysFIsOpen(Fp)) THEN Pulse:=FALSE; RETURN; END_IF;
    IF (Pulse) THEN RETURN; END_IF;
    Pulse:=TRUE; //Pulse flag

    // Visitor count and IP check.

    VisitorNr:=VisitorNr+1; //Visitor number
    CInfos(File:=Fp); //Client infos
    
    // Create welcome string.

    NrOfChars[0]:=SysVarsnprintf(ADR(StringOut), SIZEOF(StringOut), 'Welcome, You are visitor Nr:%d$r$n', USINT_TYPE, ADR(VisitorNr));
    NrOfChars[1]:=SysLWVarsnprintf(ADR(StringOut), SIZEOF(StringOut), 'Your IP:%s$r$n', STRING_TYPE, CInfos.PeerIP);

    // Send string to client.

    i:=Sysfwrite(ADR(StringOut), TO_INT(Sysstrlen(ADR(StringOut))), 1, Fp);    

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 7 Luglio 2020