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));
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.
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]