SysVsnprintf, variable print to string

List

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

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));
Information Circle

Funzione

CODESYS: Non disponibile

LogicLab: eLLabXUnified12Lib

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 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, ST_SysVsnprintf)
PROGRAM ST_SysVsnprintf
VAR
    Pulse : BOOL; (* Pulse flag *)
    VisitorNr : USINT; (* Visitor number *)
    NrOfChars : ARRAY[0..1] OF INT; (* Number of printed chars *)
    StringOut : ARRAY[0..127] OF USINT; (* String output *)
    Fp : eFILEP; (* File pointer array *)
    TCPServer : SysTCPServer; (* TCP server *)
    CInfos : SysGetPeerInfos; (* Client infos *)
    i : INT; (* Auxiliary variable *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysVsnprintf"
// *****************************************************************************
// 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:=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 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]:=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 string to client.

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

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