SysVsnprintf, impression variable sur chaîne

Liste

Cette page fait partie de la Manuel de programmation CEI 61131-3. Aller à l'index.

Cette fonction transfère à Str impression formatée d'une variable. La valeur imprimée renvoyée dans la variable chaîne ne peut pas dépasser la longueur définie dans Size, voir aussi fonction SysCVsnprintf.

La ficelle Format spécifie le format avec lequel imprimer la variable. En VarType le type de variable est indiqué dans et VarAdd son adresse.

Remplace "SysVarsnprintf"

Remplace la fonction SysVarsnprintf changer le type de paramètres d'entrée de chaîne à pointeur à chaîne. La déclaration précédente:

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

Devient:

i:=SysVsnprintf(ADR(StringOut), SIZEOF(StringOut), ADR('Visitor Nr:%d$r$n'), USINT_TYPE, ADR(VisitorNr));
Cercle d'informations

Fonction

CODESYS : indisponible

LogicLab : eLLabXUnified12Lib

Description

Str (@STRING) Pointeur vers la variable chaîne où le résultat doit être transféré.
Size (UDINT) Nombre de caractères à transférer dans la variable Str. Le nombre défini inclut le code à la fin de la chaîne ". Si la longueur de la chaîne sortante dépasse la limite de Size octet, est tronqué au nombre d'octets spécifié.
Format (@STRING) Il a deux types d'arguments, les caractères ordinaires qui sont copiés dans le flux de sortie et les spécifications de conversion, distinguées par le symbole de pourcentage (%) et par un caractère qui spécifie le format dans lequel imprimer la variable définie (définition).
VarType (VR_TYPE) Type de variable à imprimer (définition).
VarAdd (PVOID) Adresse variable.

La fonction retourne une variable (INT) qui indique le nombre de caractères transférés dans Str en excluant le terminateur, il équivaut au résultat obtenu par Sysstrlen(Str). Si l'impression formatée dépasse la taille définie dans Size, est tronqué et la taille transférée est renvoyée. eEOF si erreur de définition des paramètres.

Image F SysVsnprintf

Exemples

Comment utiliser les exemples.
Dans l'exemple un serveur TCP est activé sur le port 1000, et lorsqu'un client se connecte, un message de bienvenue est envoyé au client avec le nombre de visiteurs connectés et l'IP depuis laquelle le client se connecte.

Laboratoire logique (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]
Cet article a-t-il été utile?