SysVsnprintf, impressão variável em sequência

Lista

Esta página faz parte do Manual de Programação IEC 61131-3. Acesse o índice.

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));
Círculo de Informação

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.

Imagem F SysVsnprintf

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]
Esse artigo foi útil?