Vai al contenuto

SysVsnprintf, variable print to string

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

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

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.

Sostituisce “SysVarsnprintf”

Sostituisce la funzione SysVarsnprintf modificando il tipo di parametri in ingresso da stringa a puntatore a stringa. La precedente dichiarazione:

i:=SysVarsnprintf(ADR(StringOut), SIZEOF(StringOut), 'Welcome, You are visitor Nr:%d$r$n', USINT_TYPE, ADR(VisitorNr));

Diventa:

i:=SysVsnprintf(ADR(StringOut), SIZEOF(StringOut), ADR('Visitor Nr:%d$r$n'), USINT_TYPE, ADR(VisitorNr));

Descrizione

Str (@STRING) Pointer alla variabile stringa dove deve essere trasferito il risultato.
Size (UDINT) Numero di caratteri da trasferire nella variabile Str. Il numero definito è comprensivo del codice di fine stringa ”. Se la lunghezza della stringa in uscita supera il limite di Size byte, viene troncata al numero di byte indicato.
Format (@STRING) 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 (VR_TYPE) Tipo variabile da stampare (Definizione).
VarAdd (PVOID) Indirizzo variabile.

La funzione ritorna una variabile (INT) che indica il numero di caratteri trasferiti in Str escluso il terminatore, equivale al risultato ottenuto da Sysstrlen(Str). Se la stampa formattata supera la dimensione definita in Size, viene troncata ed è ritornata la dimensione trasferita. eEOF se errore definizione parametri.

Immagine F SysVsnprintf

Esempi

Come utilizzare gli esempi.
Nell’esempio è attivato un server TCP sulla porta definita, 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, ST_SysVsnprintf)
PROGRAM ST_SysVsnprintf
VAR
    Pulse : BOOL; (* Pulse flag *)
    VisitorNr : USINT; (* Visitor number *)
    Fp : eFILEP; (* File pointer array *)
    StringOut : STRING[ 128 ]; (* String output *)
    NrOfChars : ARRAY[0..1] OF INT; (* Number of printed chars *)
    TCPServer : SysTCPServer; (* TCP server *)
    CInfos : SysGetPeerInfos; (* Client infos *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysVsnprintf"
// *****************************************************************************
// The program opens a TCP server on defined port, and when a client connects,
// it sends a welcome message to the client.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // First loop initializations.

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

    // -------------------------------------------------------------------------
    // WELCOME MESSAGE
    // -------------------------------------------------------------------------
    // Check if a client has 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 message.

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

    // Send welcome message to client.

    eTO_JUNK(Sysfwrite(ADR(StringOut), TO_INT(Sysstrlen(ADR(StringOut))), 1, Fp));    

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