Esta função é transferida para Str impressão formatada de uma variável. O valor impresso retornado na variável string não pode exceder o comprimento definido em Size, veja também a função SysCVsnprintf.
A corda Format especifica o formato com o qual imprimir a variável. Enquanto em VarType o tipo de variável é indicado em e VarAdd seu endereço.
Substitui "SysVarsnprintf"
Substitui a função SysVarsnprintf alterando o tipo de parâmetros de entrada de string para ponteiro para string. A declaração anterior:
i:=SysVarsnprintf(ADR(StringOut), SIZEOF(StringOut), 'Welcome, You are visitor Nr:%d$r$n', USINT_TYPE, ADR(VisitorNr));
Torna-se:
i:=SysVsnprintf(ADR(StringOut), SIZEOF(StringOut), ADR('Visitor Nr:%d$r$n'), USINT_TYPE, ADR(VisitorNr));
Função
CoDeSys: Indisponível
Laboratório de lógica: eLLabXUnified12Lib
descrição
Str (@STRING) Ponteiro para a variável string onde o resultado deve ser transferido.
Size (UDINT) Número de caracteres a serem transferidos para a variável Str. O número definido inclui o código no final da string ". Se o comprimento da string de saída exceder o limite de Size byte, é truncado para o número especificado de bytes.
Format (@STRING) Possui dois tipos de argumentos, os caracteres comuns que são copiados para o fluxo de saída e as especificações de conversão, distinguidos pelo símbolo de porcentagem (%) e por um caractere que especifica o formato no qual imprimir a variável definida (Definição).
VarType (VR_TYPE) Tipo de variável a imprimir (Definição).
VarAdd (PVOID) Endereço variável.
A função retorna uma variável (INT) que indica o número de caracteres transferidos em Str excluindo o terminador, é equivalente ao resultado obtido por Sysstrlen(Str). Se a impressão formatada exceder o tamanho definido em Size, é truncado e o tamanho transferido é retornado. eEOF se erro de definição de parâmetro.
Exemplos
Como usar os exemplos.
No exemplo, um servidor TCP é ativado na porta 1000 e, quando um cliente se conecta, uma mensagem de boas-vindas é enviada ao cliente com o número de visitantes conectados e o IP do qual o cliente se conecta.
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]