Diese Funktion wechselt zu Str formatierter Ausdruck einer Variablen. Der in der Zeichenfolgenvariablen zurückgegebene Druckwert darf die in definierte Länge nicht überschreiten Sizesiehe auch Funktion SysCVsnprintf.
Die Zeichenfolge Format Gibt das Format an, mit dem die Variable gedruckt werden soll. Während in VarType Der Variablentyp wird in und angegeben VarAdd seine Adresse.
Ersetzt "SysVarsnprintf"
Ersetzt die Funktion SysVarsnprintf Ändern des Typs der Eingabeparameter von Zeichenfolge zu Zeiger zu Zeichenfolge. Die vorherige Aussage:
i:=SysVarsnprintf(ADR(StringOut), SIZEOF(StringOut), 'Welcome, You are visitor Nr:%d$r$n', USINT_TYPE, ADR(VisitorNr));
Wird:
i:=SysVsnprintf(ADR(StringOut), SIZEOF(StringOut), ADR('Visitor Nr:%d$r$n'), USINT_TYPE, ADR(VisitorNr));
Funktion
CODESYS: nicht verfügbar
LogikLab: eLLabXUnified12Lib
Beschreibung
Str (@STRING) Zeiger auf die String-Variable, an die das Ergebnis übergeben werden soll.
Size (UDINT) Anzahl der an die Variable zu übertragenden Zeichen Str. Die definierte Nummer enthält den Code am Ende der Zeichenfolge ". Wenn die Länge der ausgehenden Zeichenfolge das Limit von überschreitet Size Byte wird auf die angegebene Anzahl von Bytes gekürzt.
Format (@STRING) Es hat zwei Arten von Argumenten, die normalen Zeichen, die in den Ausgabestrom kopiert werden, und die Konvertierungsspezifikationen, die durch das Prozentzeichen (%) und durch ein Zeichen unterschieden werden, das das Format angibt, in dem die definierte Variable gedruckt werden soll (Definition).
VarType (VR_TYPE) Zu druckender Variablentyp (Definition).
VarAdd (PVOID) Variable Adresse.
Die Funktion gibt eine Variable zurück (INT), der die Anzahl der übertragenen Zeichen angibt Str Ohne den Terminator entspricht es dem Ergebnis von Sysstrlen(Str). Wenn der formatierte Ausdruck die in definierte Größe überschreitet Size, wird abgeschnitten und die übertragene Größe zurückgegeben. eEOF wenn Parameterdefinitionsfehler.
Beispiele
Verwendung der Beispiele.
Im Beispiel wird ein TCP-Server auf Port 1000 aktiviert, und wenn sich ein Client verbindet, wird eine Willkommensnachricht an den Client mit der Anzahl der verbundenen Besucher und der IP gesendet, von der aus sich der Client verbindet.
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]