SysVsnprintf, impresión variable en cadena

Lista

Esta página es parte del Manual de programación IEC 61131-3. Ir al índice.

Esta función se transfiere a Str impresión formateada de una variable. El valor impreso devuelto en la variable de cadena no puede exceder la longitud definida en Size, ver también función SysCVsnprintf.

La cuerda Format especifica el formato con el que imprimir la variable. Mientras en VarType el tipo de variable se indica en y VarAdd Su dirección.

Reemplaza "SysVarsnprintf"

Reemplaza la función SysVarsnprintf cambiando el tipo de parámetros de entrada de cadena a puntero a cadena. La declaración anterior:

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

Se convierte en:

i:=SysVsnprintf(ADR(StringOut), SIZEOF(StringOut), ADR('Visitor Nr:%d$r$n'), USINT_TYPE, ADR(VisitorNr));
Círculo de información

Funzione

CÓDIGOS: indisponible

Laboratorio lógico: eLLabXUnified12Lib

Descripción

Str (@STRING) Puntero a la variable de cadena a la que se transferirá el resultado.
Size (UDINT) Número de caracteres que se transferirán a la variable Str. El número definido incluye el código al final de la cadena ". Si la longitud de la cadena saliente excede el límite de Size byte, se trunca al número especificado de bytes.
Format (@STRING) Tiene dos tipos de argumentos, los caracteres ordinarios que se copian en el flujo de salida y las especificaciones de conversión, que se distinguen por el símbolo de porcentaje (%) y por un carácter que especifica el formato en el que imprimir la variable definida (definición).
VarType (VR_TYPE) Tipo de variable a imprimir (definición).
VarAdd (PVOID) Dirección variable.

La función devuelve una variable (INT) que indica el número de caracteres transferidos en Str excluyendo el terminador, es equivalente al resultado obtenido por Sysstrlen(Str). Si la impresión formateada excede el tamaño definido en Size, se trunca y se devuelve el tamaño transferido. eEOF si hay error en la definición de parámetros.

Image F SysVsnprintf

Ejemplos

Cómo utilizar los ejemplos..
En el ejemplo, se activa un servidor TCP en el puerto 1000, y cuando un cliente se conecta, se envía un mensaje de bienvenida al cliente con la cantidad de visitantes conectados y la IP desde la que se conecta el cliente.

Laboratorio lógico (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]
¿Le resultó útil este artículo?